单片机做的电子钟迟滞问题

用51单片机做的电子钟,无论是用液晶显示,还是LED点阵显示,都有明显的迟滞现象,就是显示的时间跟不上正常的时间,但是这也不能无限的缩短每次进入中段的时间来弥补吧,是不是程序上有什么可以改进的,请各位帮忙,谢谢了!!!!

我的编程方法:

1.设定变量H、M、S来表示时分秒,标志FLAG表示更新。

2.在定时器中断中执行内容:如果定时1s了,完成如下操作:
S++;
if(S==60){S=0;M++;}
if(M==60){M=0;H++;}
if(H==24){H=0;}
FLAG=1;

3.在主程序中用查询方式检查时间是否更新:
if(FLAG)
{
FLAG=0;
display(H,M,S);
}
这样FLAG为0的时候表示时间没有更新,单片机可以去做别的事情,只有FLAG=1的时候才去控制LCD上刷新显示的内容。这样的实时性还是比较好的。

另外,把定时器控制的准一些。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-03-09
你好,可以看一下你的程序有没有问题,例如计数方面的。不然的话如果程序没什么问题的话,误差是很小的,一天的误差也不到几秒的。自己再看看。另外,如果你是在Proteus里面仿真的话,是会出现这种问题的 ,很正常的。就算是用ds1302在Proteus里面也一样是会出现这种问题的。追问

字数太多,贴程序的话肯定不完整,上次我使用LCD液晶做的电子钟,晶振11.0592M,在学习板上做的,按理说定时器0设置TH0=(65536-50000)/256;TL0=(65536-50000)%256;a++; a要加到20才是一秒是吗,写程序是照着郭天祥的思路写的,他的程序里a==18是秒加一,这次用的是16*16点阵,用的proteus仿真,能说一下你们写这个的思路吗

追答

a要加到20才是一秒是吗?
12MHz晶振才是加到20.
如果你是在学习板上做的话,那只要你程序没什么问题,应该就是不会有那么大误差的,但误差肯定会有的,因为你的用的11.0592的。
如果你是仿真的用Proteus的话,那迟滞是正常的,因为那是仿真,不是真的。仿真的话只要效果没问题就好了。毕竟仿真和实物还是有点差距的,仿真大多都是比较理想的。
点阵的话我感觉其实和数码管的动态扫描原理是一样,,当然如果你要你的点阵里面的显示移动的话,那就好好地设计好你的算法了。

第2个回答  2011-03-09
是一直差相同时时间,还是越差越大呀,差相同时间就调快几秒,越差越大就调整计数值,最好用中断方式,比较准确,受其它程序影响小追问

我数了一下几乎每分钟差5秒,一直累积

单片机做的电子钟迟滞问题
另外,把定时器控制的准一些。

那位大哥大姐能够不用单片机设计出电子闹钟的原理图啊!!要求一小时后...
方案三:采用迟滞比较器和一个RC反馈网络能获得方波输出。如图二所示。其中,前一个运放构成迟滞比较器,后一个运放与电容构成积分器是比较器的反馈回路的一部分,信号的输出频率为 方案比较:振荡器是数字电路的核心,振荡器的稳定度及频率的精确度决定了数字钟计时的准确程度,555定时器构成的多谐振荡器...

相似回答
大家正在搜