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
工程文件:
|