四、 设计原理
1、 LED显示
数码管是由八个条形发光二极管组成的,这些发光二极管的阴极是互相连接在一起的,所以称为共阴极数码管。通过在这八个发光二极管的阳极加+5 V或0 V的电压使不同的二极管发光,形成不同的字符和数字。电子时钟用到的是0到9十个数字,他们所对应的字符表依次是3FH、06H、5BH、4FH、66H、6DH、7DH、07H、7FH、6FH。
电子时钟主要由显示模块、对时模块和时钟、星期运算模块三大部分组成。其中对时模块和时钟。星期运算模块要对时、分、秒和星期的数值进行操作,并且秒计算到60时,要自己清零并向分进1;分计算到60时,要自己清零并向时进1;时计算到24时,要清零;星期计算到7时,要置1。这样,才能循环记时。显示时利用7段显示器显示六位十进制数据。前两个显示小时,中间两个显示分钟,后两个显示秒,后一位显示星期,时钟和星期的运算是利用中断来实现的。8253A可编程定时/计数器的输入时钟为1000KHz,设定时/计数器0的计数初值为1000,工作在方式2,即频率发生器,通过8253来产生中断请求。在中断服务程序中计算时间,并通过可编程并行接口8255并行输出到数码管显示。 2、键盘输入
对时的时候,调整秒的数字时,分单元内的数值不能变,在对分进行调整的时,时单元内的数值不变。由以上分析可见,对时、分、秒的调整用一个优先级高于NMI的中断来完成。当该按键按下时,8255扫描到有信号输入,反馈到8253并停止计时,同时选中8255的相对应的位选接口地址,这时按下另一按键,修改能存单元中的数据,通过8255对应的位选输出端口即可设定相应的时间参数。即:一个按键选择时分秒对应的位置,另一按键修改时分秒的数据。两个中断源的中断请求信号只需直接接在两个按键即可起到对时作用。
5
五、 软件流程及程序
主程序流程图:
开始 初始化8255
初始化8253
Y 全局变量time是否为零
N 显示日期
全局变量time每两秒减2 显示星期
全局变量time复位
6
中断程序流程图:
NMI中断 Time加一 中断向量初始化 Y 秒是否等于60 秒清零 N 秒加一 分加一 分是否等于60 Y 分清零 N 显示当前值 时加一 时清零 Y 时是否等于24 N 星期加一 显示当前值 星期置一 Y 星期是否大于7 N 中断返回 显示当前值
7
六、 系统调试
将编写好的源程序输入,编译后出现很多问题,经过反复修改程序终于运行通过。数码管显示的数字并不与理论计算值相符合,经过反复分析源程序发现问题出现在内存单元里时位和分位在转化为十进制时出错,经过更改内存但愿数据。一开始数字闪动,后来发现在显示子程序里,缺少延时程序。编写延时子程序,并在显示子程序调用它;编译源程序,装入生成的可执行文件,并运行。数码管显示的数字与理论值相符合,并能正常计时。
七、 仿真结果与分析
8086工作在最小模式下:
频率发生器:
U9AD[0..7]AD0AD1AD2AD3AD4AD5AD6AD7876543212223192021D0D1D2D3D4D5D6D7RDWRA0A1CS8253ACLK0GATE0OUT0CLK1GATE1OUT1CLK2GATE2OUT291110151413181617U9(CLK0)NMIRDWRA1A2IO2
8
时、分、秒、星期调整按键:
Z0Z1 ZO所在按键是选位按键,当按下该键时,选择时、分、秒、星期,Z1所在按键是调整数字按键,当按下该键时,对应位上的数字会加一,直至满足进位条件清零。
时、分、秒、星期显示电路:
9