基于AT89C2051单片机的六位数显多路定时电子钟
扫描二维码
随时随地手机看文章
这里介绍的电子钟,电路可称得上极简,它仅使用单片的20引脚单片机完成电子钟的全部功能,而笔者见到的其它设计方案均采用二片以上的多片IC实现。
一片20引脚的单片机STC2032(引脚排列与AT89C2051完全相同)为电子钟主体,其显示笔画数据从P1口分时输出,P3口则输出对应的六位选通信号。由于LED数码管点亮时耗电较大,故不能使用AT89C2051单片来完成,但是可以可以用STC89C2032来完成。另外,本站制作时用超高亮的发光二极管代替昂贵的大数码管,成本低,效果独特。
本电子钟设计有三个轻触式按键,这里我们分别命名为:模式设定键K1、加调整键K2、减调整键K3。由于STC89C2032内部已经集成有复位电阻,所以,复位脚只需要接一只电容即可。本电子钟采用了一只NPN型的三极管及蜂鸣器为闹时讯响电路。本图采用电池供电,电路板上有桥式整流、滤波和三端稳压器7805的安装位置,可以用交流电压供整个系统工作。此电子钟可与任何6~12V/100mA的交直流电源适配器配合工作,适应性强。
电子钟功能
1.走时:默认为走时状态,按24小时制分别显示“时时:分分:秒秒”,有四个秒点动态显示,时间会按实际时间以秒为最少单位变化。
2.走时调整:长按K1(或K2、K3)两秒钟以上,时位、分位、秒位会有其一快速闪动,按K1会循环,按K2和K3可以分别对闪动的数字进行加或者减,从而达到快速设定时间的目的。20秒以上长时间没有任何按键操作时,自动按变为正常走时状态。
3.闹时调整:再次长按K1(或K2、K3)两秒钟以上,时位、分位、秒位会有其一慢速闪动,按K1会循环,按K2和K3可以分别对闪动的数字进行加或者减,从而达到快速设定闹时的目的。20秒以上长时间没有任何按键操作时,自动按变为正常走时状态。
注意:闹时状态下时位会在01-64变化,表示64路定时时间;分位只能在00-24变化,表示24个小时,其中默认显示为24,表示不闹;秒位在00-59变化,表示60个分钟。因此,本电子钟以分钟为最小单位可以设定多路闹时。(由于64路太多,基本上没有什么用,用起来反而不方便,所以,本站出售的是16路定时的。)
4.误差修正状态:大家知道,即便是世界上最优良正统的石英晶振,频率也会有偏差,需要电容微调校正频率,不同的电容和负载会影响到频率偏移。这种情况可能会使日误差达到几十秒。当然,配备优质正品元件会使走时误差小到几秒,如果设计微调电容的话,就可以使每天的走时误差小到1秒以内。
但是,对于业余制作来说,没有更标准的测量设备来证明你的调试是刚刚好,不能测周期,不能测频率(普通的测量会改变电路工作参数带来更大的测量误差)。而我们一般都会按电视台的时间来做对比,经过了24小时,我的电子钟究竟是快了??还是慢了??
现在不用怕了,本电子钟设计了误差校正程序:如果你的电子钟走一天会快1.6秒(或者慢0.8秒),那么,通过本电子钟的误差校正设置,可以在一天中不知不觉的减慢1.6秒(或者加快0.8秒)。因此,本电子钟理论上可以做到日误差小于0.2秒,当然,具体的过程和效果还需要大家去操作和证明。
误差校正方法:在闹时调整状态下,再长按K1(或K2、K3)两秒钟以上,时位、分位会变成“一一一一”或者“三三三三”,表示变慢或者变快的意思,按K1选择;秒位会变成00,按K2、K3会在00-80中变化,数字越大,表示校正越大,00等于即不校正变快也不校正变慢,例如2+0=2-0这样的情况。20秒以上长时间没有任何按键操作时,自动按变为正常走时状态。
其它功能:
1、如果是在走时状态,正逢到在闹铃响(会长响20秒)中,按K1、K2、K3任意键停止发声。
2、在走时状态,按K3可以让电子钟每秒都发出短短的“嘀”声,这有点类似机械指针式的电子钟(或者机械手表)的声音,当然,声音要大得多。这个功能很有用,例如,我们有些特殊情况时不能去看着钟,但是可以闭上眼睛听声音在心中默默数数经过了多少秒再去操作某某。再按可以关掉秒发声。
3、整点报时功能:按K2可以开启和关闭整点报时功能。开启后每逢整点就会听到长响两秒“嘀”声。
4、闹时开关功能:按K1可以开启和关闭定时闹铃功能。关闭闹铃后,以前设置的数据不会丢失。
由于电路设计得极其简单,因此丰富的功能只能由软件完成,这里软件设计成为了关键。下面介绍软件设计中采用的一些要点。
本电子钟程序设计时只使用了一个定时数T0,其它的中断全部关断,定时器工作在两个8位自动加载初始值状态。这是保证走时精确稳定的重要方法。站长看到很多书本教材上都让大家用定时器中断来执行动态显示程序和按键扫描程序,这是一种很不好的方法,除了浪费硬件资源以外,还会增加程序复杂性,还会影响其它程序运行。
站长认为,越是中断程序,就要越写得简短,最好几条指令就立即结束,对于动态扫描显示、按键功能等等可以写在主程序中让程序不停的反复运行,如果中断多,最大的坏处就是影响到主程序运行时间不够,扫描显示会出现闪烁,或者按键反应变慢(一般觉察不出),可是,这又有另一好处,你可以随时改良程序并且立即看到结果。
LED动态扫描显示是分时点亮各个LED,利用人的视觉暂留特性,让人觉得是连续点亮。当点亮的频率高时,说明单片机有充足的时间运行主程序,