工业控制 | 能源技术 | 汽车电子 | 通信网络 | 安防监控 | 智能电网 | 移动手持 | 无线技术 | 家用电器 | 数字广播 | 消费电子 | 应用软件 | 其他方案

电路设计->光电电路图->其他光电实用电路图->用Proteus仿真软件虚拟设计6位电子钟

用Proteus仿真软件虚拟设计6位电子钟

作者:dolphin时间:2016-09-27

  本文介绍用Proteus仿真软件,虚拟设计一款用单片机制作的6位电子钟,其实践操作简单,实现容易,以期对单片机初学者有所帮助。

  控制6位电子钟的单片机选用功能较为简单、易学的AT89C2051,这样,在实际制作时不仅能节约成本,还可减小线路板面积。本电子钟采用6位LED显示,时钟调整设有+、-按钮,方便操作。本电子钟通电立即从12:00:00开始运行,运行中按住设置按钮1.5s以上进入调整,在调整状态下采用通用的LED闪烁显示,以达到外围线路的最简化。

  一、完成Proteus内的电路设计启动Proteus,建立如图1所示的电路,单片机选择AT89C2051。由于AT89C2051I/O口比较少,故采用数码管的片选信号作为键盘扫描信号,这样,在不增加外围元件的情况下,即可设置6个按钮,这里使用了4个。图1中的“后备”按钮,留作定时功能的定时设置用。

  二、在Keil程序编辑软件中编程启动Keil程序编辑软件,新建工程:2051CLOCK,选择单片机为AT89C2051,在OptionsfoTarget的Output项选择CreateHEXFile(生成HEX文件),新建一个空白TXT文本,改名为2051CLOCK.ASM,并在Keil工程里面添加这个文件。

  在Keil的2051CLOCK.ASM编辑窗口输入汇编代码(编注:因版面所限,对汇编代码感兴趣的读者可与本报联系)。

  电子钟的程序比较简单,下面简要概述一下:

  1.时分秒的个位、十位分别单独存于对应的缓存,显示通过各位的显示缓存实现CTC定时为50ms,对中断计数到10次后,对1/2秒位进行计数,1/2秒位同时作为调整状态下的LED闪烁标志,CTC中断程序不改变ACC和PSW的值,使现场保护最简化,提高时钟精度。中断程序同时判断是否进入调整状态,在调整状态,停止对秒各位的累加。

  2.时间调整的加减用了一个入口,通过给A赋不同的值来实现加减,赋1的为加,赋FF的为减,这样可以统一用ADD方法进行时间调整,并分别判断,结果是10则进位,是FF则借位,以简化代码。

  3.由于键盘是通过片选信号动态扫描的,所以采用在显示程序中嵌入读键盘程序的方法,而不专门另编键扫描程序,以提高代码效率。

  相对而言,这里的“时钟设置按键动作处理子程序”比较难,下面用流程图说明,见图2。

  按键处理程序中,为了操作更灵敏,分别进行了点动调整和连续按钮调整处理。在点动调整状态,各按键均进行了释放和接通判断,在确定按键接通后,立即进行调整,使调整反应迅速,其后再进行消抖处理。如果用连续接通调整,则每0.5s加或者减一个数。这里设置钮没有连续调整许可,必须是点动调整。

  汇编调试结束后,产生目标文件2051CLOCK.HEX。

  在Proteus里面,双击2051,这里选择KeilC51生成的2051CLOCK.HEX文件,见图3。

  说明:本来KeilC51通过设置,可以把Proteus当作设备,进行在线仿真。不过,网上下载的Proteus版本,对AT89C2051缺少个DLL文件,无法实现KeilC51+Proteus的实时仿真,只能用这样的方法。好在也不麻烦,在KeilC51里面代码修改后,再次编译,在Proteus只要重新启动仿真,就可以更新代码了。

启动仿真运行,可立即看见电子钟运行起来。试按各按钮动作情况,功能正确、反应良好。

  实际仿真运行中,发现时钟走得慢,分析后估计是仿真运行代码运行过程造成系统延误。将设计的MCU工作频率由12MHz,改为15MHz后再运行,时钟就不再慢走(见图4所示)。



评论

技术专区