当前位置:   article > 正文

[其他]【HC32L196PCTA测评】+RTC电子时钟篇

[其他]【HC32L196PCTA测评】+RTC电子时钟篇
在HC32L196片内,配置有RTC计时器,通过例程可了解其用法。
通过函数RTC_Cfg()可进行计时值的校正,其内容为:
复制
  1. void RTC_Cfg(void)
  2. {
  3.     stc_rtc_initstruct_t RtcInitStruct;
  4.     RtcInitStruct.rtcAmpm = RtcPm;           //12小时制
  5.     RtcInitStruct.rtcClksrc = RtcClkRcl;         //内部低速时钟
  6.     RtcInitStruct.rtcPrdsel.rtcPrdsel = RtcPrds;   //周期中断类型PRDS
  7.     RtcInitStruct.rtcPrdsel.rtcPrds = Rtc1S;      //周期中断事件间隔
  8.     RtcInitStruct.rtcTime.u8Second = 0x55;
  9.     RtcInitStruct.rtcTime.u8Minute = 0x01;
  10.     RtcInitStruct.rtcTime.u8Hour   = 0x10;
  11.     RtcInitStruct.rtcTime.u8Day    = 0x17;
  12.     RtcInitStruct.rtcTime.u8DayOfWeek = 0x04;
  13.     RtcInitStruct.rtcTime.u8Month  = 0x04;
  14.     RtcInitStruct.rtcTime.u8Year   = 0x19;
  15.     RtcInitStruct.rtcCompen = RtcCompenEnable;
  16.     RtcInitStruct.rtcCompValue = 0;//补偿值根据实际情况进行补偿
  17.     Rtc_Init(&RtcInitStruct);
  18.     Rtc_AlmIeCmd(TRUE);            //使能闹钟中断
  19. }
此外,通过中断函数Rtc_IRQHandler()可实现秒计时的标志处理,其内容为:
复制
  1. void Rtc_IRQHandler(void)
  2. {
  3.     if(Rtc_GetPridItStatus() == TRUE)
  4.     {
  5.         flag = 1;
  6.         Rtc_ClearPrdfItStatus();             //清除中断标志位
  7.     }
  8. }
依托上面2个函数及LCD屏显示函数,可快速地实现电子时钟的功能,其主程序为:
复制
  1. int32_t main(void)
  2. {
  3.     int8_t i=0;
  4.     stc_rtc_time_t readtime;
  5.     Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);//GPIO外设时钟打开
  6.     Sysctrl_SetPeripheralGate(SysctrlPeripheralRtc,TRUE);//RTC模块时钟打开
  7.     Sysctrl_ClkSourceEnable(SysctrlClkRCL, TRUE);
  8.     RTC_Cfg();                                         //配置RTC
  9.     EnableNvic(RTC_IRQn, IrqLevel3, TRUE);                 //使能RTC中断向量
  10.     Rtc_Cmd(TRUE);  
  11.     //使能RTC开始计数
  12.     Sysctrl_ClkSourceEnable(SysctrlClkRCL,TRUE);            ///< 使能RCL时钟
  13.     Sysctrl_SetRCLTrim(SysctrlRclFreq32768);                ///< 配置内部低速时钟频率为32.768kHz
  14.     Sysctrl_SetPeripheralGate(SysctrlPeripheralLcd,TRUE);      ///< 开启LCD时钟
  15.     Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);     ///< 开启GPIO时钟
  16.     App_PortCfg();               ///< LCD端口配置
  17.     App_LcdCfg();                ///< LCD模块配置
  18.     Lcd_ClearDisp();              ///< 清屏
  19.     Lcd_WriteRam(0,0x00000000);  ///< 赋值寄存器LCDRAM0
  20.     Lcd_WriteRam(1,0x00000000);  ///< 赋值寄存器LCDRAM1
  21.     while (1)
  22.     {
  23.         if(flag == 1)
  24.         {
  25.             flag = 0;
  26.             Rtc_ReadDateTime(&readtime);
  27.             second = readtime.u8Second;
  28.             minute = readtime.u8Minute;
  29.             hour   = readtime.u8Hour;
  30.             day    = readtime.u8Day;
  31.             week   = readtime.u8DayOfWeek;
  32.             month  = readtime.u8Month;
  33.             year   = readtime.u8Year;
  34.             s=((d[(minute&0x0f)]+0x08)<<16)+d[minute/16];
  35.             Lcd_WriteRam(0,s);
  36.             s=(d[(second&0x0f)]<<16)+d[second/16];
  37.             Lcd_WriteRam(1,s);
  38.         }
  39.     }
  40. }
经程序的编译与下载,其显示效果如下图所示。

RTC计时效果图。
---------------------
作者:jinglixixi
链接:https://bbs.21ic.com/icview-3319370-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/579254
推荐阅读
相关标签
  

闽ICP备14008679号