前面曾介绍过RTC及其计时,但再好的时钟也难保永远准时,因此时间校正就必不可少。
这里就利用触摸键和ISP键实现了对RTC时间校正及计时显示。
其中,触摸键用于设置的选取,ISP键用于确认。
void szsz()
{
uint8_t i=0;
uint8_t sf,st;
LCD_Clear(WHITE);
show_tbh(100,220,5);
BACK_COLOR=WHITE;
POINT_COLOR=RED;
LCD_ShowStringh(100,200,"Set RTC");
LCD_ShowStringh(130,200,"08:09:00");
sf=200;
i=8;
st=3;
showhanzi16h(150,200,27,1);
while(st>0)
{
BACK_COLOR=WHITE;
POINT_COLOR=RED;
while((GPIO_PinRead(GPIO0, 6U))==1)
{
if(f==1)
{
if(i<60)
{
i++;
LCD_ShowCharh(130,sf,i/10+'0',0);
LCD_ShowCharh(130,sf-8,i%10+'0',0);
}
f=0;
}
delay();
}
if(st==3)
{
sy = (i/10)*0x10+(i%10);
showhanzi16h(150,200,28,1);
showhanzi16h(150,176,27,1);
i=9;
sf=176;
}
if(st==2)
{
sm = (i/10)*0x10+(i%10);
showhanzi16h(150,176,28,1);
showhanzi16h(150,152,27,1);
i=30;
sf=152;
}
if(st==1)
{
sd = (i/10)*0x10+(i%10);
showhanzi16h(150,152,28,1);
}
delay();
st--;
}
rtc_setup();
}
使用该函数进行RTC调整的界面如图1所示,在设置数值时,每完成一个设置其指示标记就向前移动一次。
图1 调整RTC
实现RTC计时显示效果的函数为:
void dzsz()
{
LCD_Clear(WHITE);
show_tbh(100,220,2);
BACK_COLOR=WHITE;
POINT_COLOR=RED;
LCD_ShowStringh(100,180,"RTC");
while((GPIO_PinRead(GPIO0, 6U))==1)
{
IRTC_GetDatetime(RTC, &datetimeGet);
LCD_ShowCharh(120,180,datetimeGet.hour/10+'0',0);
LCD_ShowCharh(120,170,datetimeGet.hour%10+'0',0);
LCD_ShowCharh(120,160,':',1);
LCD_ShowCharh(120,150,datetimeGet.minute/10+'0',0);
LCD_ShowCharh(120,140,smdatetimeGet.minute%10+'0',0);
LCD_ShowCharh(120,130,':',1);
LCD_ShowCharh(120,120,datetimeGet.second/10+'0',0);
LCD_ShowCharh(120,110,datetimeGet.second%10+'0',0);
delay();
}
}
该函数的计时效果如图2所示,这样就使RTC调整与计时合成到了一起。
图2 RTC计时