题目:数码显示定时器
本程序主要功能是用一个由八段共阴极LED显示器组成的显示装置和一个外接CLK=1.8432MHz的8254定时/计数器,组成一个用于显示9-0s的计数器,当计数结束时使LED闪烁,利用拨码开关控制计数开始和程序结束。
本程序主要设计步骤如下:
1.利用拨码开关控制计数开始和程序结束,利用8255单元进行拨码开关状态的输入,通过拨码开关的状态判断是否开始计数,计数完成再次判断拨码开关状态是否结束程序。
2.利用8255单元实现数码管的位选和段选来显示数字9-0。
3.利用8254单元产生所需要的时钟信号,使数字变化的时间接近1s。
4.计数值为0时,通过8255单元控制LED灯进行闪烁。
**
每个模块的功能利用简述
**
1拨码开关的控制功能的实现
将8255单元端口A中的PA7引脚与开关及LED显示单元中的K7相连接,初始化8255单元时, 将8255的A口设置为输入端,CPU读8255 A口即可获得当前拨码开关的状态。该位为‘1’表示拨码开关K7打开,计数开始。该位为‘0’表示拨码开关关闭,CPU继续进行对拨码开关状态的监测。
2 数码管数字显示的实现
将8255单元中的B端口和数码管显示单元的A-DP引脚进行连接,A端口中的PA0-PA5和数码管显示单元的X1-X6引脚连接。初始化8255单元。每次调用显示程序的时候通过写入0DFH到A口进行数码管的位选让最右端数码管使能,其他的数码管不使能。通过事先定义的数码管段选表,将数字转化为相应的数码管段选二进制形式,再通过对B端口的写入进行数字显示。
3 1s时延的实现
将8254单元中的CLK0接口和实验箱上1.8432MHz的时钟源进行连接,OUT0端口与MIR7端口相连,8259加载MIR7中断向量,初始化8254,设置控制字为计数器0和方式3,并设置合理的计数初值,每次8254计数完毕OUT0端口即产生一个上升沿的脉冲信号触发MIR7中断,一个计数器时延远小于1s,通过程序控制中断的次数实现时间的累加使时延达到1s。
这个实验的接线图如下
如见流程如下:
1.程序开始后,装入中断程序,初始化8254、8259、8255三个接口芯片,LED灯及开关控制单元都是关闭的,并且屏蔽了IR7中断。
2.接下来进入主程序,CPU读8255A口,提取最低位获得拨码开关状态,该位为0表示这个时候还没有按下开关,反之则按下了开关,此时就开始计数和进行数码管的数字显示功能。
3.每次8254单元计数完毕之后就会产生一次脉冲触发MIR7中断,然后程序中初始设计的计数值就减一,在这个时候判断MIR7中断的次数是否达到初始设置的上限值,如果达到了上限值,那么就进行下一秒的显示。在进行下一秒的显示的时候也判断当前是否计数值为0,若这个时候计数值为0,那么就会跳转到EEE子程序。
4.在EEE子程序中进行LED灯闪烁的控制,LED灯的状态通过FFH和00H实现LED灯状态的转换,每次状态的改变的时候都通过软件延时一段时间,让灯亮的时间或者灭的时候持续一段时间,实现LED闪烁。
5.在LED灯的显示中,通过8255单元对K7拨码开光状态的检测,此时若按下了K7拨码开关,说明用户已经知道计时结束,退出整个程序。
程序的流程图以及中断程序的流程图如图5.1和图5.2所示。
系统的源码设计如下:
IOY1 EQU 0640H ;IOY1起始地址
IOY2 EQU 0680H
;SPK EQU IOY2
;8254
A8254 EQU IOY1+00H*8
B8254 EQU IOY1+01H*8
C8254 EQU IOY1+02H*8
CON8254 EQU IOY1+03H*8
IOY0 EQU 0600H ;片选IOY0对应的端口始地址
MY8255_A EQU IOY0+00H*