[应用方案] 【NuMaker-M471测评】RTC电子时钟

[复制链接]
2809|5
 楼主| jinglixixi 发表于 2021-8-15 09:16 | 显示全部楼层 |阅读模式
在开发板的例程中,配有RTC计时的程序,将它与前面介绍的OLED屏相配合可轻松实现一个RTC电子时钟。
RTC例程的功能是先读取RTC开始计时,在5秒后再按重新设置的时间来计时,其运行效果如图1和图2所示。
                              
1.jpg
图1 读取RTC时间
2.jpg
图2 设置新时间并计时
3.jpg
  
图3  OLED屏显示RTC
实现图3所示计时效果的主程序为:
  1. int main(void)
  2. {
  3. S_RTC_TIME_DATA_T sInitTime, sReadRTC;
  4. uint32_t u32Sec;
  5. uint8_t u8IsNewDateTime = 0;
  6. /* Init System, peripheral clock and multi-function I/O */
  7. SYS_Init();
  8. /* Init UART for printf */
  9. UART_Init();
  10. GPIO_SetMode(PB, BIT14, GPIO_MODE_OUTPUT);
  11. GPIO_SetMode(PC, BIT1, GPIO_MODE_OUTPUT);
  12. GPIO_SetMode(PC, BIT0, GPIO_MODE_OUTPUT);
  13. GPIO_SetMode(PH, BIT4, GPIO_MODE_INPUT);
  14. PB14 = 1;
  15. OLED_Init();
  16. OLED_Clear();
  17. OLED_ShowString(0,0,"M471 RTC",16);
  18. OLED_ShowString(0,2,"OLED DISPLAY",16);
  19. TIMER_Delay(TIMER0, 2000000);
  20. OLED_Clear();
  21. /* Enable RTC NVIC */
  22. NVIC_EnableIRQ(RTC_IRQn);
  23. /* Open RTC and start counting */
  24. sInitTime.u32Year       = 2021;
  25. sInitTime.u32Month      =8;
  26. sInitTime.u32Day        = 13;
  27. sInitTime.u32Hour       = 12;
  28. sInitTime.u32Minute     = 30;
  29. sInitTime.u32Second     = 0;
  30. sInitTime.u32DayOfWeek  = 5;
  31. sInitTime.u32TimeScale  = RTC_CLOCK_24;
  32. RTC_Open(&sInitTime);
  33. /* Enable RTC tick interrupt, one RTC tick is 1 second */
  34. RTC_EnableInt(RTC_INTEN_TICKIEN_Msk);
  35. RTC_SetTickPeriod(RTC_TICK_1_SEC);
  36. /* Use PA.2 to check tick period time */
  37. PA->MODE = (PA->MODE & ~GPIO_MODE_MODE2_Msk) | (GPIO_MODE_OUTPUT << GPIO_MODE_MODE2_Pos);
  38. PA2 = 1;
  39. u32Sec = 0;
  40. g_u32RTCTInt = 0;
  41. OLED_ShowString(0,0,"00:00:00",16);
  42. while(1)
  43. {
  44. if(g_u32RTCTInt == 1)
  45. {
  46. g_u32RTCTInt = 0;
  47. /* Read current RTC date/time */
  48. RTC_GetDateAndTime(&sReadRTC);
  49. OLED_ShowNum(0,0,sReadRTC.u32Hour,2,16);
  50. OLED_ShowNum(24,0,sReadRTC.u32Minute,2,16);
  51. OLED_ShowNum(48,0,sReadRTC.u32Second,2,16);
  52. if(u32Sec == sReadRTC.u32Second)
  53. {
  54. while(1) {}
  55. }
  56. u32Sec = sReadRTC.u32Second;
  57. if(u8IsNewDateTime == 0)
  58. {
  59. if(u32Sec == (sInitTime.u32Second + 5))
  60. {
  61. u8IsNewDateTime = 1;
  62. RTC_SetDate(2021, 7, 30, RTC_FRIDAY);
  63. RTC_SetTime(11, 12, 13, RTC_CLOCK_24, RTC_AM);
  64. }
  65. }
  66. }
  67. }
  68. }



天意无罪 发表于 2021-8-15 11:06 | 显示全部楼层
不得不说,新唐开发板的这个颜色真靓,真辣眼睛,哈哈哈。
 楼主| jinglixixi 发表于 2021-8-15 11:59 | 显示全部楼层
天意无罪 发表于 2021-8-15 11:06
不得不说,新唐开发板的这个颜色真靓,真辣眼睛,哈哈哈。

没错!!!
littlelida 发表于 2021-8-16 09:26 | 显示全部楼层
不错,你这一期一期的评测,很nice
 楼主| jinglixixi 发表于 2021-8-16 09:27 | 显示全部楼层
huahuagg 发表于 2023-9-27 20:06 | 显示全部楼层
用的什么串口助手啊,看着功能可以啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

521

主题

2949

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部