我正在写一篇基于AT89C52单片机的数字时钟设计。下面是我的论文后面的程序图。

2024-12-17 14:33:06
推荐回答(2个)
回答1:

思路有点问题,以上所列的这些功能不需要使用中断来处理。
中断不是不能用,但如果没有必要,能不能还是不要用,中断属于非线性的处理方式,不可控的因素太多,比如,中断嵌套,重入。如果处理不好,会极大的降低系统的可靠性。
你所列的这些功能,并不需要精确的延时。举个例子,你秒讯闪烁时,应该是亮0.5秒,灭0.5秒,要如果你亮0.45秒,灭0.55秒,再亮0.52秒,灭0.47秒,有什么关系吗?正常使用时根本不会感觉到任何差别。
比较合理的做法是 以判断定时闹钟为例,在主程序中控制主循环的总时间,比如,确保每500ms主程序循环一次。这个循环的时间不需要很准确,500ms循环一次,或者400ms循环一次,甚至再短一些也没关系,只要控制最大不超过500ms就可以。每0.5秒检查一下闹钟,然后给出提示,用户不会感到有什么不舒服的。
具体是多少时间需要综合考虑,比如你要处理定时闹钟,每1秒钟处理一次即可,如果要处理按键,这个时间可以提高到100ms,这样按键时不会有明显的迟顿。综合考虑会一般取最短的一个延时,控制主循环的延时就可以。

以我的经验,你的系统只需要开一个比较短的定时中断进行显示扫描,并在定时中断处理过程中顺便维护一个计时器用于主程序同步就足够。像这样,
static unsigned iCounter;
_isr_t0 ( void )
{
// 每5ms中断一次
iCounter+=5;
// 显示扫描
}

main( void )
{
while( 1 )
{
如果iCounter 增加了500ms,则: 读1302, 检查闹钟

}
}

回答2:

空间离开
zxc 奥斯卡; 看,吗这些摩擦

是的看了,吗吗政策性、