微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > ARM技术讨论 > RTC定时控制

RTC定时控制

时间:10-02 整理:3721RD 点击:

在NUC472内部配有RTC计时器,通过与LCD5110的配合即可将RTC的计时值及控制状态显示出来。由于前面我们已经实现了LCD5110屏的显示,所以只需在适当的位置添加显示语句即可达到目的。

在计时控制中涉及的RTC函数有:RTC定时标识函数 RTC_AlarmHandle()和RTC中断函数RTC_IRQHandler(),其内容如下:

  1. void RTC_AlarmHandle(void)
  2. {
  3.     /* Alarm 标识 */   
  4.     g_bAlarm = TRUE;
  5. }

复制代码

  1. void RTC_IRQHandler(void)
  2. {
  3.     if ( (RTC->INTEN & RTC_INTEN_ALMIEN_Msk) && (RTC->INTSTS & RTC_INTSTS_ALMIF_Msk) )
  4.    {      
  5.         RTC->INTSTS = 0x1;
  6.         RTC_AlarmHandle();
  7.     }
  8. }

复制代码


主函数的作用为:设置RTC计时值、设置定时值、启动RTC、使能定时中断、显示秒计时值、显示RTC定时器状态等,主函数的内容如下:

  1. int32_t main(void)
  2. {
  3.     S_RTC_TIME_DATA_T sInitTime;
  4.     S_RTC_TIME_DATA_T sCurTime;

  5.     SYS_Init();
  6.     GPIO_Configuration();        
  7.     SetLCD_CS_Low();
  8.     PD7 = 1;
  9.     LCD_Init();
  10.     LCD_Clear();
  11.     LCD_write_english_string(0,0,"Nokia5110 v1.0");
  12.         
  13.     /* 起始时间设置 */
  14.     sInitTime.u32Year       = 2017;
  15.     sInitTime.u32Month      = 6;
  16.     sInitTime.u32Day        = 10;
  17.     sInitTime.u32Hour       = 12;
  18.     sInitTime.u32Minute     = 30;
  19.     sInitTime.u32Second     = 10;
  20.     sInitTime.u32Dayelecfans  = RTC_TUESDAY;
  21.     sInitTime.u32TimeScale  = RTC_CLOCK_24;

  22.     RTC_Open(&sInitTime);
  23.     /* 显示定时长度 */
  24.     LCD_write_english_string(0,0,"RTC Alarm Test - 40s");
  25.     g_bAlarm = FALSE;

  26.     /* 获取当前时间 */
  27.     RTC_GetDateAndTime(&sCurTime);
  28.     /* 显示秒计时值 */
  29.     LCD_set_XY(0,2);
  30.         LCD_write_char(sCurTime.u32Second/10 + '0');
  31.         LCD_write_char(sCurTime.u32Second%10 + '0');
  32.                
  33.     /* 设置闹钟时间 */
  34.     sCurTime.u32Second = sCurTime.u32Second + 31;
  35.     RTC_SetAlarmDateAndTime(&sCurTime);

  36.     /* 使能RTC Alarm 中断 */
  37.     RTC_EnableInt(RTC_INTEN_ALMIEN_Msk);
  38.     NVIC_EnableIRQ(RTC_IRQn);
  39.     /* 显示秒计数值 */
  40.     while(!g_bAlarm)
  41.     {
  42.                 RTC_GetDateAndTime(&sCurTime);        
  43.                 LCD_set_XY(0,2);
  44.                 LCD_write_char(sCurTime.u32Second/10 + '0');
  45.                 LCD_write_char(sCurTime.u32Second%10 + '0');
  46.     }
  47.                
  48.     /* 关闭 RTC Alarm I中断 */
  49.     RTC_DisableInt(RTC_INTEN_ALMIEN_Msk);
  50.     NVIC_DisableIRQ(RTC_IRQn);

  51.     /* 提示RTC Alarm 测试完成 */
  52.     LCD_write_english_string(0,0,"RTC Alarm Test End !");
  53.     while(1);

  54. }

复制代码

经编译和下载,其执行效果如图1和图2所示。如添加一个继电器则可使用该程序实现对电器的定时控制。

      

    图1 定时测试进行中


   

    图2 完成定时测试


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top