在线时间1469 小时
UID123826
ST金币0
蝴蝶豆239
注册时间2009-4-22
版主
- 最后登录
- 2020-12-9
|
楼主 |
发表于 2010-4-12 23:39:32
|
显示全部楼层
a0a.1 0b0c
回复:STM32LCD 显示代码网友共享专贴
下面的代码是我用来显示日期的代码,我没有使用时间戳,使用的是算法来实现日期的变换和时间显示。其中RTC是中断,为1秒1次。下图是我的日期图。
#ifndef __Timer_H
#define __Timer_H
#define Timer_1s 1000;
#define Timer_500s 500;
#define Timer_250s 250;
#define Timer_125ms 125;
extern u8 DateBuffer[8];
//#define Time_FlashAddr 0x08000100;
extern u32 TimerNum;
extern void RTC_Configuration(void);
extern void RTC_TimeSet(u8 HH,u8 MM,u8 SS);
extern void RTC_EETimeRead(void);
extern void RTC_EETimeRead(void);
extern u8 DataMonth(u16 Year,u8 M);
extern void RTC_DateSet(u16 Y,u8 M,u8 D,u8 Week,u8 HH,u8 MM,u8 SS);
extern void RTC_TimeRead(void);
extern void RTC_It(void);
#endif
#include "stm32f10x_lib.h" // STM32F10x Library Definitions
#include "LCD.h"
#include "Timer.H"
#include "IOmenu.h"
#include "I2C.H"
u8 DateBuffer[8]={20,9,1,1,7,0,0,0};
u32 TimerNum;
/*******************************************************************************
* Function Name : RTC_Configuration
* Description : RTC配置
* Input :
* Output :
* Return : None
*******************************************************************************/
void RTC_Configuration(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
PWR_BackupAccessCmd(ENABLE);
BKP_DeInit();
RCC_RTCCLKConfig(RCC_RTCCLKSource_HSE_Div128);
RCC_RTCCLKCmd(ENABLE);
RTC_WaitForSynchro();
RTC_WaitForLastTask();
RTC_ITConfig(RTC_IT_SEC, ENABLE);
RTC_WaitForLastTask();
RTC_SetPrescaler(93750); /* RTC period = RTCCLK/RTC_PR = (93.750 KHz)/(RTC+1) */
RTC_WaitForLastTask();
}
/*******************************************************************************
* Function Name : RTC_TimeSet
* Description : RTC时间设置
* Input : HH:输入小时,MM:输入分钟,SS:输入秒
* Output :
* Return : None
*******************************************************************************/
void RTC_TimeSet(u8 HH,u8 MM,u8 SS)
{
u32 TimeCount;
TimeCount=HH*3600+MM*60+SS;
RTC_WaitForLastTask();
RTC_SetCounter(TimeCount);
RTC_WaitForLastTask();
}
/*******************************************************************************
* Function Name : RTC_TimeRead
* Description : RTC时间设置
* Input : HH:输入小时,MM:输入分钟,SS:输入秒
* Output :
* Return : None
*******************************************************************************/
void RTC_EETimeRead(void)
{
EE_PageRead(0,DateBuffer,8);
RTC_TimeSet(DateBuffer[5],DateBuffer[6],DateBuffer[7]);
}
u8 DataMonth(u16 Year,u8 M)
{
if((M==1)||(M==3)||(M==5)||(M==7)||(M==8)||(M==10)||(M==12))
{return(1);}
else if((M==4)||(M==6)||(M==9)||(M==11))
{return(2);}
else if((M==2)&& (Year%4!=0))
{return(3);}
else if((M==2)&& (Year%4==0))
{return(4);}
else {return(0);}
}
void DataSet(void)
{
u16 Y;
u8 M,D,Week,Ms;
EE_PageRead(0,DateBuffer,8);
Y=DateBuffer[0]0)||((RM-DateBuffer[6])>9)) //将时间写入E2
{
RTC_SAVELED();
DateBuffer[5]=RH;
DateBuffer[6]=RM;
DateBuffer[7]=RS;
EE_BlockWrite(0,DateBuffer);
Delay_1ms(50);
RTC_SAVELED();
}
else if((RM==0)&&(RH==0)&&(RS==0))
{
RTC_SAVELED();
DateBuffer[5]=RH;
DateBuffer[6]=RM;
DateBuffer[7]=RS;
EE_BlockWrite(0,DateBuffer);
Delay_1ms(50);
RTC_SAVELED();
}
LCD_Str(255,2,Time,Black,Grey);
}
/*******************************************************************************
* Function Name : RTC_It
* Description :
* Input :
* Output :
* Return : None
*******************************************************************************/
void RTC_It(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =6;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
/****************************E N D***************************************/
|
-
-
2.12 KB, 下载次数: 101
|