【新提醒】HC32F030开发板所实现的电子时钟
HC32F030与HC32L136不同,它自身没有内置硬件的万年历 RTC,要想实现与RTC类似的功能只能借助于systick,利用秒信号来进行计时,并通过程序来完成时间的进制转换。
实现电子时钟功能的主程序如下:
- int32_t main(void)
- {
- stc_gpio_config_t stcGpioCfg;
- Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
- delay1ms(500);
- App_OledInit();
- OLED_VCC();
- OLED_GND();
- OLED_Init();
- OLED_Clear();
- OLED_ShowString(0,0,"HC32F030 TEST",16);
- OLED_ShowString(0,2,"OLED DISPLAY",16);
- OLED_ShowCHinese(0, 4, 0);
- OLED_ShowCHinese(16, 4, 1);
- OLED_ShowCHinese(32, 4, 2);
- OLED_ShowCHinese(48, 4, 3);
- OLED_ShowCHinese(64, 4, 4);
- OLED_ShowString(0,6," : :",16);
- stcGpioCfg.enDir = GpioDirOut;
- stcGpioCfg.enDrv = GpioDrvH;
- stcGpioCfg.enPuPd = GpioPd;
- stcGpioCfg.enOD = GpioOdDisable;
- Gpio_Init(GpioPortD, GpioPin5, &stcGpioCfg);
- SysTick_Config(SystemCoreClock);
- while (1)
- {
- OLED_ShowNum(8,6,hh,2,16);
- OLED_ShowNum(32,6,mm,2,16);
- OLED_ShowNum(56,6,ss,2,16);
- }
- }
复制代码
显示计时的处理函数为:
- void SysTick_Handler(void)
- {
- static uint8_t u8Flag = TRUE;
- Gpio_WriteOutputIO(GpioPortD, GpioPin5, u8Flag);
- ss++;
- if(ss==60)
- {
- mm++;
- ss=0;
- }
- if(mm==60)
- {
- hh++;
- mm=0;
- }
- if(hh==24)
- {
- hh=0;
- }
- u8Flag = !u8Flag;
- }
复制代码
程序下载后,其运行效果如图1和图2所示。
图1 计时效果1
图2计时效果2
工程文件:
赞 (0)