在HC32L136開發(fā)板上配有一個筆段式的液晶屏,但無奈的是廠家卻沒提供一個能直接調(diào)用的顯示函數(shù)。 在沒解決該顯示屏的顯示函數(shù)前,先以輕車熟路的OLED屏來實(shí)現(xiàn)顯示的問題。 由于手頭的OLED屏是一款I2C接口的單色顯示屏,故另其與MCU的連接關(guān)系為: PA11:SCL PA12:SDA 使這2個引腳輸出高低電平的語句定義為: #define OLED_SCLK_Set() Gpio_SetIO(GpioPortA, GpioPin11) #define OLED_SCLK_Clr() Gpio_ClrIO(GpioPortA, GpioPin11); #define OLED_SDIN_Set() Gpio_SetIO(GpioPortA, GpioPin12) #define OLED_SDIN_Clr() Gpio_ClrIO(GpioPortA, GpioPin12); 分配2個引腳為輸出功能的函數(shù)為: - void App_OledInit(void)
- {
- stc_gpio_cfg_t stcGpioCfg;
- ///< 打開GPIO外設(shè)時(shí)鐘門控
- Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
- ///< 端口方向配置->輸出(其它參數(shù)與以上(輸入)配置參數(shù)一致)
- stcGpioCfg.enDir = GpioDirOut;
- ///< 端口上下拉配置->下拉
- stcGpioCfg.enPu = GpioPuDisable;
- stcGpioCfg.enPd = GpioPdEnable;
- ///< GPIO IO OLED端口初始化
- Gpio_Init(GpioPortA, GpioPin11, &stcGpioCfg);
- Gpio_Init(GpioPortA, GpioPin12, &stcGpioCfg);
- }
復(fù)制代碼
實(shí)現(xiàn)圖1 顯示效果的主程序?yàn)椋?/font>- int32_t main(void)
- {
- stc_rtc_time_t readtime;
- Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE); //GPIO外設(shè)時(shí)鐘打開
- Sysctrl_SetPeripheralGate(SysctrlPeripheralRtc,TRUE); //RTC模塊時(shí)鐘打開
- Sysctrl_ClkSourceEnable(SysctrlClkRCL, TRUE);
- RTC_Cfg(); //配置RTC
- EnableNvic(RTC_IRQn, IrqLevel3, TRUE); //使能RTC中斷向量
- Rtc_Cmd(TRUE); //使能RTC開始計(jì)數(shù)
- App_OledInit();
- OLED_Init();
- OLED_Clear();
- OLED_ShowString(0,0,"HC32L136 TEST",16);
- OLED_ShowString(0,2,"OLED DISPLAY",16);
- while (1);
- }
復(fù)制代碼
1.jpg (19.35 KB, 下載次數(shù): 67)
下載附件
2020-10-6 12:33 上傳
圖1 OLED屏顯示效果 實(shí)現(xiàn)RTC時(shí)間設(shè)置的函數(shù)為: - void RTC_Cfg(void)
- {
- stc_rtc_initstruct_t RtcInitStruct;
- RtcInitStruct.rtcAmpm = RtcPm; //12小時(shí)制
- RtcInitStruct.rtcClksrc = RtcClkRcl; //內(nèi)部低速時(shí)鐘
- RtcInitStruct.rtcPrdsel.rtcPrdsel = RtcPrds; //周期中斷類型PRDS
- RtcInitStruct.rtcPrdsel.rtcPrds = Rtc1S; //周期中斷事件間隔
- RtcInitStruct.rtcTime.u8Second = 0x55;
- RtcInitStruct.rtcTime.u8Minute = 0x55;
- RtcInitStruct.rtcTime.u8Hour = 0x10;
- RtcInitStruct.rtcTime.u8Day = 0x06;
- RtcInitStruct.rtcTime.u8DayOfWeek = 0x04;
- RtcInitStruct.rtcTime.u8Month = 0x10;
- RtcInitStruct.rtcTime.u8Year = 0x20;
- RtcInitStruct.rtcCompen = RtcCompenEnable;
- RtcInitStruct.rtcCompValue = 0;//補(bǔ)償值根據(jù)實(shí)際情況進(jìn)行補(bǔ)償
- Rtc_Init(&RtcInitStruct);
- Rtc_AlmIeCmd(TRUE); //使能鬧鐘中斷
- }
復(fù)制代碼
實(shí)現(xiàn)圖3 RTC 計(jì)時(shí)效果的主程序?yàn)椋?/font>- int32_t main(void)
- {
- stc_rtc_time_t readtime;
- Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE); //GPIO外設(shè)時(shí)鐘打開
- Sysctrl_SetPeripheralGate(SysctrlPeripheralRtc,TRUE); //RTC模塊時(shí)鐘打開
- Sysctrl_ClkSourceEnable(SysctrlClkRCL, TRUE);
- RTC_Cfg(); //配置RTC
- EnableNvic(RTC_IRQn, IrqLevel3, TRUE); //使能RTC中斷向量
- Rtc_Cmd(TRUE); //使能RTC開始計(jì)數(shù)
- App_OledInit();
- OLED_Init();
- OLED_Clear();
- OLED_ShowString(0,0,"HC32L136 TEST",16);
- OLED_ShowString(0,2,"OLED & RTC",16);
- delay1ms(2000);
- OLED_Clear();
- OLED_ShowString(0,0,"20 - -",16);
- OLED_ShowString(0,2," : :",16);
- while (1)
- {
- if(flag == 1)
- {
- flag = 0;
- Rtc_ReadDateTime(&readtime);
- second = readtime.u8Second;
- minute = readtime.u8Minute;
- hour = readtime.u8Hour;
- day = readtime.u8Day;
- week = readtime.u8DayOfWeek;
- month = readtime.u8Month;
- year = readtime.u8Year;
- OLED_ShowNum(16,0,year/16*10+year%16,2,16);
- OLED_ShowNum(40,0,month/16*10+month%16,2,16);
- OLED_ShowNum(64,0,day/16*10+day%16,2,16);
- OLED_ShowNum(16,2,hour/16*10+hour%16,2,16);
- OLED_ShowNum(40,2,minute/16*10+minute%16,2,16);
- OLED_ShowNum(64,2,second/16*10+second%16,2,16);
- }
- }
- }
復(fù)制代碼
2.jpg (16.7 KB, 下載次數(shù): 62)
下載附件
2020-10-6 12:33 上傳
圖2 RTC起始界面
3.jpg (16.26 KB, 下載次數(shù): 55)
下載附件
2020-10-6 12:33 上傳
圖3 RTC計(jì)時(shí)效果
|