本帖最后由 jinglixixi 于 2020-8-3 09:44 編輯
1. RTC基本使用 在例程中,提供了RTC的實驗示例,在串口的配合下可以設置RTC的初始數值,并通過串口來輸出RTC計時值,其運行效果如圖1所示。
1.jpg (42.82 KB, 下載次數: 67)
下載附件
2020-8-3 09:39 上傳
圖1 串口設置和顯示RTC計時值
2. RTC計時器 為了能直觀地來顯示RTC計時值,可通過TFT顯示屏來實現,所用到的主要為數值顯示函數。 改造后的計時顯示函數為: - void AP_Time_Show(void)
- {
- AP_Time_Count(&CurTime);
- LCD_ShowNum(Line6,22,CurTime.year,4);
- LCD_CharDisplay(Line6,84, '-');
- LCD_ShowNum(Line6,100,CurTime.month,2);
- LCD_CharDisplay(Line6,132, '-');
- LCD_ShowNum(Line6,148,CurTime.day,2);
-
- LCD_ShowNum(Line7,52,CurTime.hour,2);
- LCD_CharDisplay(Line7,84, ':');
- LCD_ShowNum(Line7,100,CurTime.minute,2);
- LCD_CharDisplay(Line7, 132,':');
- LCD_ShowNum(Line7,148,CurTime.second,2);
- }
復制代碼
主程序的內容為: - int main(void)
- {
- CKCU_PeripClockConfig_TypeDef CKCUClock = {{0}};
- CKCUClock.Bit.BKP = 1;
- CKCU_PeripClockConfig(CKCUClock, ENABLE);
- if(PWRCU_CheckReadyAccessed() != PWRCU_OK)
- {
- while (1);
- }
- HT32F_DVB_LEDInit(HT_LED1);
- RETARGET_Configuration();
- NVIC_EnableIRQ(RTC_IRQn);
- if(PWRCU_GetFlagStatus() == PWRCU_FLAG_BAKPOR)
- {
- LCD_StringLineDisplay(Line5," Power On Reset occurred!");
- }
- LCD_Init();
- LCD_Config();
- LCD_BackColorSet(Black);
- LCD_TextColorSet(Red);
- LCD_StringLineDisplay(Line3," LCD_RTC TEST");
- LCD_TextColorSet(Yellow);
-
- if(PWRCU_ReadBackupRegister((PWRCU_BAKREG_Enum) PWRCU_BAKREG_0_RTC_KEY) !=0xAA55A5A5)
- {
- LCD_StringLineDisplay(Line5, "RTC not yet configured!");
- LCD_StringLineDisplay(Line6, " - - ");
- LCD_StringLineDisplay(Line7," : : ");
- RTC_Configuration();
-
- #if 1
- AP_Time_Init(&DateTime);
- #else
- DateTime.year = 2020;
- DateTime.month = 7;
- DateTime.day = 25;
- DateTime.hour = 22;
- DateTime.minute = 5;
- DateTime.second = 0;
- #endif
-
- if (!AP_Time_Adjust(&DateTime))
- {
- LCD_StringLineDisplay(Line5, "Adjusttime error!");
- while(1);
- }
- RTC_Cmd(ENABLE);
- PWRCU_WriteBackupRegister((PWRCU_BAKREG_Enum)PWRCU_BAKREG_0_RTC_KEY, 0xAA55A5A5);
- }
- else
- {
- LCD_StringLineDisplay(Line5,"No need to configure RTC!");
- }
- LCD_TextColorSet(Yellow);
- LCD_StringLineDisplay(Line5," ");
- while(1)
- {
- if (CK_SECOND_Flag)
- {
- CK_SECOND_Flag = 0;
- AP_Time_Show();
- }
- }
- }
復制代碼
2.jpg (20.81 KB, 下載次數: 73)
下載附件
2020-8-3 09:40 上傳
圖2 顯示RTC計時值
3. 時間設置與調整 實現圖3所示的時間設置與調整函數為: - intf=1,n=0,m=23,c=0,a1=0,a2=0,a3=0;
- while(f)
- {
- TmpStatus = GPIO_ReadInBit(HT_GPIOC, GPIO_PIN_15);
- GPIO_WriteOutBits(HT_GPIOD, GPIO_PIN_0, !TmpStatus); // !滅
- if(TmpStatus) n++; // 増值
- if(n>m)n=0;
-
- TmpStatus = GPIO_ReadInBit(HT_GPIOD, GPIO_PIN_1);
- GPIO_WriteOutBits(HT_GPIOD, GPIO_PIN_2, TmpStatus); // 亮
- if(TmpStatus==0) // 切換
- {
- c++;
- if(c>2) c=0;
- if(c==0) m=23;
- if(c==1) m=59;
- if(c==2) m=59;
- }
- TmpStatus = GPIO_ReadInBit(HT_GPIOB,GPIO_PIN_9);
- GPIO_WriteOutBits(HT_GPIOB, GPIO_PIN_6,TmpStatus); // 亮
- if(TmpStatus==0)f=0; // 退出
-
- if(c==0)a1=n;
- if(c==1) a2=n;
- if(c==2) a3=n;
- LCD_ShowNum(Line7,52,a1,2);
- LCD_CharDisplay(Line7,84, ':');
- LCD_ShowNum(Line7,100,a2,2);
- LCD_CharDisplay(Line7, 132,':');
- LCD_ShowNum(Line7,148,a3,2);
- delay(300);
- }
復制代碼
3.jpg (22.26 KB, 下載次數: 80)
下載附件
2020-8-3 09:40 上傳
圖3 數據設置與調整
在數據設置時,以Wakeup鍵來調整數值的大小,以Key1來切換設置項(確定是時、分、秒),以Key2來確認設置操作。
|