END
八位数码管显示:8155控制
参考程序2:对8155初始化,使I/O口控制LED的显示情况。 ORG 0000H
MOV DPTR,#4400H ;指向8155命令寄存器 MOV A,#03H
MOVX @DPTR,A ;写入控制字。A口、B口为输出,C口为输入 INC DPTR ;指向8155A口 MOV A,#00H
MOVX @DPTR,A ;向A口写入00H,
;输出选中所有8个LED
INC DPTR ;指向8155B口 MOV A,#0FFH MOVX @DPTR,A ;向B口写入某个字型
码,输出点亮8个LED
SJMP $
8155控制8位数码管和键盘电路图
2) 多位动态显示接口应用采用8051与8155接口,再采用8155的I/O口控制数码管的段码和位码,同时,采用动态扫描方式依次循环点亮各位数码管,即可构成多位动态数码管显示电路。
整体设计思路如下:
由8155的A口控制段码输出,C口控制位码输出。采用定时器中断方式实现动态扫描,每隔20ms扫描一次,每位数码管点亮的时间为1ms。在单片机内部RAM设置待显示数据缓冲区,由查表程序完成显示译码。
将缓冲区内待显示数据转换成相应的段码,再将段码通过8051的P0口送至8155的A口;位码数据由累加器循环左移指令产生,再通过P0口送至8155的C口。 硬件电路设计如下:
上图为数码管动态显示电路。其中,8路驱动采用74LS244总线驱动器,6路驱动采用74LS07 OC门驱动器。74LS244输出经300 上拉(或限流)电阻后接至电源,同时,接至数码管的各段,控制数码管的显示字符。74LS07输出经1 k 上拉电阻接至电源,同时接至各位数码管的公共端,控制每位数码管的显示时间,实现动态扫描。模拟生产线计数的按键信号接至P3.3口。六位实现6位显示的秒表:从左到右每2位LED分别显示小时、分和秒,并正常计数进位;上电后小时00 00 00,当显示到23 59 59后,6位显示清零,从头开始显示。
软件设计如下:
以单片机内部RAM的30H~35H单元作为显示数据缓冲区,六位数码管段码的获取及每位数码管的显示时间均由显示子程序完成。采用定时器中断方式实现动态扫描,每隔50 ms扫描一次,每位数码管点亮的时间为1 ms。单片机每接收一次按键信号(即模拟交通灯改变计数信号),显示缓冲区的待显示数据被刷新一次,数码管相应的显示数值也就随之发生变化。如连续按键进行测试,即可产生计数数据从左至右循环移动的效果。根据图中IO/、与单片机的连接可知,可以确定命令/状态字A口、B口、C口、计数值低8位寄存器及高6位和方式寄存器地址分别为:0100H、0101H、0102H、0103H、0104H、0105H 。
软件流程图如下页图所示: 主程序:
MSEC EQU 20H ;50MS计数单元 SECOND EQU 21H ;秒单元 MIN EQU 22H ;分单元 HOUR EQU 23H ;小时单元 ORG 0000H LJMP MAIN ORG 000BH LJMP CONT
MAIN: MOV SP, #3FH MOV TMOD #01H MOV TH0,#3CH MOV TL0,#0B0H MOV IE, #82H MOV SECOND, #00H MOV MIN, #00H MOV HOUR, #00H MOV MSEC, #14H MOV 35H, #00H MOV 34H, #00H