STM32mini RTC時鐘單片機源程序如下:
- /**
- ******************************************************************************
- * @file main.c
- * @author fire
- * @version V1.0
- * @date 2013-xx-xx
- * @brief rtc 測試,顯示時間格式為: xx:xx:xx
- */
-
- #include "stm32f10x.h"
- #include "./usart/bsp_usart.h"
- #include "./rtc/bsp_rtc.h"
- #include "./key/bsp_key.h"
- #include "./beep/bsp_beep.h"
- // N = 2^32/365/24/60/60 = 136 年
- /*時間結構體,默認時間2000-01-01 00:00:00*/
- struct rtc_time systmtime=
- {
- 0,0,0,1,1,2000,0
- };
- /*時間結構體,鬧鐘時間2000-01-01 00:00:08*/
- struct rtc_time clocktime=
- {
- 8,0,0,1,1,2000,0
- };
- extern __IO uint32_t TimeDisplay ;
- extern __IO uint32_t TimeAlarm ;
- //【*】注意事項:
- //在bsp_rtc.h文件中:
- //1.可設置宏USE_LCD_DISPLAY控制是否使用LCD顯示
- //2.可設置宏RTC_CLOCK_SOURCE_LSI和RTC_CLOCK_SOURCE_LSE控制使用LSE晶振還是LSI晶振
- //3.STM32的LSE晶振要求非常嚴格,同樣的電路、板子批量產品時總有些會出現問題。
- // 本實驗中默認使用LSI晶振。
- //
- //4.!!!若希望RTC在主電源掉電后仍然運行,需要給開發板的電池槽安裝鈕扣電池,
- // !!!且改成使用外部晶振模式RTC_CLOCK_SOURCE_LSE
- // 鈕扣電池型號:CR1220
- /**
- * @brief 主函數
- * @param 無
- * @retval 無
- */
- int main()
- {
-
- uint32_t clock_timestamp;
- uint32_t current_timestamp;
-
- //可使用該宏設置是否使用液晶顯示
- #ifdef USE_LCD_DISPLAY
-
- ILI9341_Init (); //LCD 初始化
- LCD_SetFont(&Font8x16);
- LCD_SetColors(RED,BLACK);
- ILI9341_Clear(0,0,LCD_X_LENGTH,LCD_Y_LENGTH); /* 清屏,顯示全黑 */
- ILI9341_DispStringLine_EN(LINE(0)," BH RTC demo");
- #endif
-
- USART_Config();
-
- Key_GPIO_Config();
-
- BEEP_GPIO_Config();
-
- /* 配置RTC秒中斷優先級 */
- RTC_NVIC_Config();
- RTC_CheckAndConfig(&systmtime);
-
- /*設置鬧鐘寄存器*/
- clock_timestamp = mktimev(&clocktime)-TIME_ZOOM;
- RTC_SetAlarm(clock_timestamp);
-
- while (1)
- {
- /* 每過1s 更新一次時間*/
- if (TimeDisplay == 1)
- {
- /* 當前時間 */
- current_timestamp = RTC_GetCounter();
- Time_Display( current_timestamp,&systmtime);
-
- TimeDisplay = 0;
- }
-
- //按下按鍵,通過串口修改時間
- if( Key_Scan(KEY1_GPIO_PORT,KEY1_GPIO_PIN) == KEY_ON )
- {
- struct rtc_time set_time;
- /*使用串口接收設置的時間,輸入數字時注意末尾要加回車*/
- Time_Regulate_Get(&set_time);
- /*用接收到的時間設置RTC*/
- Time_Adjust(&set_time);
-
- //向備份寄存器寫入標志
- BKP_WriteBackupRegister(RTC_BKP_DRX, RTC_BKP_DATA);
- }
-
- //響鈴
- if( TimeAlarm == 1)
- {
- BEEP(ON);
- }
- //按下按鍵,關閉蜂鳴器
- if( Key_Scan(KEY2_GPIO_PORT,KEY2_GPIO_PIN) == KEY_ON )
- {
- BEEP(OFF);
- TimeAlarm = 0;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
2.RTC—鬧鐘實驗.zip
(341.5 KB, 下載次數: 49)
2018-5-11 21:22 上傳
點擊文件名下載附件
1
|