找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3427|回復(fù): 1
收起左側(cè)

基于HC32L136開發(fā)板的RTC電子時鐘

[復(fù)制鏈接]
ID:776997 發(fā)表于 2020-10-31 17:11 | 顯示全部樓層 |閱讀模式
HC32L136的例程中,只有筆段式液晶屏的測試程序,卻沒有提供一個可供用戶直接調(diào)用的數(shù)值顯示函數(shù)。
為此在了解液晶屏的工作原理后,在原例程的基礎(chǔ)上完成了它的數(shù)值顯示函數(shù)。
1. 液晶屏工作原理及顯示編碼
HC32L136開發(fā)板上,所配置的液晶屏為4位數(shù)字式顯示屏并配有小數(shù)點和時間分隔符,其布局如圖1所示。
                                 
1.jpg
1 液晶屏筆段布局顯示
盡管筆段式液晶屏在顯示顯示上與數(shù)碼管十分相近,但在工作原理和機制上卻差別很大。
以數(shù)碼管為例,它是通過段碼和位碼來控制顯示的,編寫好段碼表后,只需把段碼送到位碼控制的位置即可顯示出相應(yīng)的內(nèi)容。
例如“1”的顯示碼為0x06,即0000 0110對應(yīng)CB被點亮。
而對于液晶屏就不同了,它是按節(jié)拍來完成代碼的輸出,按顯示位置的不同,是將顯示筆段分成4組,每組占2位,共8位。而每組內(nèi),相同位置所控制的筆段名稱相同,故只需定義一組編碼即可,然后按顯示的位置進行移位處理即可(例如第一組需移動6位,第二組需移動4位第三組需移動2位)。
若每組顯示碼占2個字節(jié),則可到如下的顯示碼表:
z.jpg             

2.顯示程序
1)定義顯示數(shù)組
#define     LCD_POINT      0X0008
const uint16_t  lcd_tab[16] =
{
  0x0F05, 0x0600, 0x0B06, 0x0F02,0x0603, 0x0D03, 0x0D07, 0x0700, 0x0F07, 0x0F03,
  0x0707, 0x0C07, 0x0905, 0x0E05,0x0907, 0x0107,
};
2)清屏函數(shù)
  1. void Lcd_ClearDisp(void)
  2. {
  3. uint8_t tmp;
  4. volatile uint32_t *ram = NULL;
  5. ram = &M0P_LCD->RAM0;
  6. for(tmp=0;tmp<16;tmp++)
  7. {
  8. *ram = 0;
  9. ram++;
  10. }
  11. }
復(fù)制代碼
3)顯示函數(shù)
  1. void LCD_Display(uint16_t * str)
  2. {
  3. uint32_t   n;
  4. n   = str[1];
  5. n <<= 16;
  6. n  += str[0];
  7. M0P_LCD->RAM0 = n;
  8. n   = str[3];
  9. n <<= 16;
  10. n  += str[2];
  11. M0P_LCD->RAM1 = n;   
  12. }
復(fù)制代碼
3. RTC電子時鐘
HC32L136內(nèi)部配置了RTC計時器,將它與SLCD液晶屏配合即可實現(xiàn)一個RTC電子時鐘。
實現(xiàn)電子時鐘的主程序為:
  1. int32_t main(void)
  2. {
  3. uint32_t       i;
  4. uint16_t       str[4];
  5. Sysctrl_ClkSourceEnable(SysctrlClkRCL,TRUE);
  6. Sysctrl_SetRCLTrim(SysctrlRclFreq32768);
  7. Sysctrl_SetPeripheralGate(SysctrlPeripheralLcd,TRUE);
  8. Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);
  9. App_PortCfg();
  10. App_LcdCfg();
  11. Lcd_ClearDisp();
  12. stc_rtc_time_t readtime;
  13. Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);
  14. Sysctrl_SetPeripheralGate(SysctrlPeripheralRtc,TRUE);
  15. Sysctrl_ClkSourceEnable(SysctrlClkRCL, TRUE);
  16. RTC_Cfg();
  17. EnableNvic(RTC_IRQn, IrqLevel3, TRUE);
  18. Rtc_Cmd(TRUE);
  19. while (1)
  20. {
  21. M0P_GPIO->PDOUT ^= (1U << 5);
  22. if(flag == 1)
  23. {
  24. flag = 0;
  25. Rtc_ReadDateTime(&readtime);
  26. second = readtime.u8Second;
  27. minute = readtime.u8Minute;
  28. hour   = readtime.u8Hour;
  29. str[0] = lcd_tab[minute>>4];
  30. str[1] = lcd_tab[minute&0x0f]|LCD_POINT;
  31. str[2] = lcd_tab[second>>4];
  32. str[3] = lcd_tab[second&0x0f];
  33. LCD_Display(str);
  34. }
  35. delay1ms(500);
  36. }
  37. }
復(fù)制代碼
有了顯示程序固然可喜,但下載工具的作用也是必不可少的,本人使用的第三方的下載工具,并通過虛擬串口來完成下載,見圖2和圖3所示。
2.jpg
2 下載工具

3.jpg
3 下載過程
在下載程序后,其顯示效果如圖4所示。
4.jpg

4運行效果

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:833128 發(fā)表于 2020-12-11 08:58 | 顯示全部樓層
小時位好像沒設(shè)置判斷和限制
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表