本帖最后由 jinglixixi 于 2020-8-3 09:44 編輯
1. RTC基本使用 在例程中,提供了RTC的實(shí)驗(yàn)示例,在串口的配合下可以設(shè)置RTC的初始數(shù)值,并通過串口來輸出RTC計(jì)時(shí)值,其運(yùn)行效果如圖1所示。
1.jpg (42.82 KB, 下載次數(shù): 67)
下載附件
2020-8-3 09:39 上傳
圖1 串口設(shè)置和顯示RTC計(jì)時(shí)值
2. RTC計(jì)時(shí)器 為了能直觀地來顯示RTC計(jì)時(shí)值,可通過TFT顯示屏來實(shí)現(xiàn),所用到的主要為數(shù)值顯示函數(shù)。 改造后的計(jì)時(shí)顯示函數(shù)為: - 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);
- }
復(fù)制代碼
主程序的內(nèi)容為: - 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();
- }
- }
- }
復(fù)制代碼
2.jpg (20.81 KB, 下載次數(shù): 73)
下載附件
2020-8-3 09:40 上傳
圖2 顯示RTC計(jì)時(shí)值
3. 時(shí)間設(shè)置與調(diào)整 實(shí)現(xiàn)圖3所示的時(shí)間設(shè)置與調(diào)整函數(shù)為: - 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);
- }
復(fù)制代碼
3.jpg (22.26 KB, 下載次數(shù): 80)
下載附件
2020-8-3 09:40 上傳
圖3 數(shù)據(jù)設(shè)置與調(diào)整
在數(shù)據(jù)設(shè)置時(shí),以Wakeup鍵來調(diào)整數(shù)值的大小,以Key1來切換設(shè)置項(xiàng)(確定是時(shí)、分、秒),以Key2來確認(rèn)設(shè)置操作。
|