在 FM32FT0A片内配置有RTC计时器,将它与LCD屏的显示功能相结合即可实现电子时钟功能。
RTC的初始化函数为:
void MF_RTC_Init(void)
{
FL_RTC_InitTypeDef defaultInitStruct;
defaultInitStruct.year = 0x25;
defaultInitStruct.month = 0x1;
defaultInitStruct.day = 0x24;
defaultInitStruct.week = 0x04;
defaultInitStruct.hour = 0x08;
defaultInitStruct.minute = 0x1E;
defaultInitStruct.second = 0x00;
FL_RTC_Init(RTC, &defaultInitStruct);
FL_RTC_Enable(RTC);
FL_RTC_WriteAdjustValue(RTC, 0);
}
为进行数据显示,所配置的函数有:
u32 mypow(u8 m,u8 n)
{
u32 result=1;
while(n--)result*=m;
return result;
}
void LCD_ShowIntNum(u16 x,u16 y,u16 num,u8 len,u16 fc,u16 bc,u8 sizey)
{
u8 t,temp;
u8 enshow=0;
u8 sizex=sizey/2;
for(t=0;t<len;t++)
{
temp=(num/mypow(10,len-t-1))%10;
if(enshow==0&&t<(len-1))
{
if(temp==0)
{
LCD_ShowChar(x+t*sizex,y,' ',fc,bc,sizey,0);
continue;
}
else
enshow=1;
}
LCD_ShowChar(x+t*sizex,y,temp+48,fc,bc,sizey,0);
}
}
实现RTC电子时钟功能的主程序为:
int main(void)
{
uint8_t t;
FL_RTC_InitTypeDef InitTime;
Lcd_Init();
LCD_Fill(0,0,LCD_W,LCD_H,WHITE);
LCD_ShowString(90,33,"RTC",RED,WHITE,32,0);
LCD_ShowString(80,86," : :",RED,WHITE,24,0);
FL_DelayInit();
MF_RTC_Init();;
while(1)
{
RTC_GetRTC(&InitTime);
t=InitTime.hour;
LCD_ShowIntNum(80,86,t,2,RED,WHITE,24);
t=InitTime.minute;
LCD_ShowIntNum(116,86,t,2,RED,WHITE,24);
t=InitTime.second;
LCD_ShowIntNum(152,86,t,2,RED,WHITE,24);
}
}
经程序的编译和下载,其运行效果如图1至图3所示,说明程序正确。
图1 效果1
图2 效果2
图3 效果3
比较难以忍耐的是,该开发板有个毛病,运行很短的一点时间就复位从新运行,不知这款板子就这样,还是确实有问题!