提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 基本要求
- 设计思路
- 代码
- 最终效果
基本要求
使用定时器/计数器实现电子钟,用LED数码管显示时、分、秒,24小时制,数码管上电初始显示为“12.00.00”,到24小时清零,然后反复,晶振11.0592MHz。理论误差小于0.1秒/天。
扩展要求:简单的可调电子钟。增加“时增加”、“分增加”2个按键,按下“时增加”按键,时显示加1,加满24归零,按下“分增加”按键时,分显示加1,加满60归零。
设计思路
开启定时器中断,在定时器中断函数中设置时间变量,用于在main函数中计算小时, 分钟,秒。这里我采用的是定时器0的工作方式一,因为从定时,计数器产生中断请求到响应中断,需要3~8个机器周期。定时中断子程序中的数据人栈和重装定时,计数器的初值还需要占用数个机器周期。此外,从中断入口转到中断子程序也要占用一定的 机器周期。所以要在定时器中断中进行误差补偿,我开发板中用的是11.0592M的晶振, 那么一个机器周期为(1/11.0592M)*12,定时50ms为(50*10^-3)/机器周期=46080。可以 将TH0和TL0从产生溢出到被重新赋值的已有的计数值读出,并补偿到计数值初值中去,可以消除定时/计数器的定时误差。
先在定时器中断中禁止所有中断