考G的前几天,我妹妹找我写8086程序,说是课程设计,一直拖到现在才写,没有调试环境也不知道结果对不对。
题目是这样的:
系统实验平台上的七段数码管显示是采用共阴极。参考资料如下:
图1-1共阴共阳极数码管
相应的驱动显示数据如表1-1所示
表1-1共阴共阳极数码管段码
现要求:利用8255A的A口接开关量,利用两个数码管分别显示A口的开关量的数值。如A口的开关量为0101 0011,则这两个数码管的显示数值为:53;如果如A口的开关量为1111 1010,则这两个数码管的显示数值为:FA;依次类推。(本题只要求显示0-F共16个)。
(1)、请设计线路图,并画出连接线路图。
(2)、完成完整的程序。
(3)、验证设计的结果。
注:
实验平台上的8255A端口地址是:A口是60H;B口是61H;C口是62H;控制口是63H
这是我写的程序:
;课程设计一:七段数码管
;题目要求:利用8255A的A口接开关量,利用两个数码管分别显示A口的开关量的数值。如A口的开关量为0101 0011,
; 则这两个数码管的显示数值为:53;如果如A口的开关量为1111 1010,则这两个数码管的显示数值为:
; FA;依次类推。(本题只要求显示0-F共16个)。
;程序说明:本程序为8086汇编程序,使用两个共阴数码管显示8255A口所接的开关量,硬件连接如下:
; 8255的A口接开关量,B口接两个共阴数码管的a-g,dp,C口低二位分别接两个数码管的公共
; 端作为片选信号。(电路图略)
OUTPORT1 EQU 63H ;8255控制寄存器端口地址
OUTPORTA EQU 60H ;A口地址
OUTPORTB EQU 61H ;B口地址
OUTPORTC EQU 62H ;C口地址
DATA SEGMENT ;LED为共阴七段数码管码表
LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H
DATA ENDS
CODE SEGMENT ;定义代码段
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AL,10010000B ;控制字,方式0,A口输入,B口、C口输出
MOV DX,OUTPORT1 ;控制寄存器端口送DX
OUT DX,AL ;控制字送8255
MOV DX,OUTPORTA ;读取端口A
IN AL,DX ;
MOV BL,AL ;保留读取值
MOV CL,04 ;取低四位
SHL AL,CL
SHR AL,CL
LEA BX,LED ;DATA送BX
XLAT ;查表
MOV DX,OUTPORTB ;B口地址送DX
OUT DX,AL ;数据送B口显示
MOV AL,02H ;送位码02H至C口
MOV DX,OUTPORTC ;C口地址送DX
OUT DX,AL ;C口输出
CALL DELAY ;小延时
MOV AL,BL ;恢复已读取的数据
MOV CL,04 ;取高四位
SHR AL,CL
LEA BX,LED ;DATA送BX
XLAT ;查表
MOV DX,OUTPORTB ;B口地址送DX
OUT DX,AL ;数据送B口显示
MOV AL,01H ;送位码01H至C口
MOV DX,OUTPORTC ;C口地址送DX
OUT DX,AL ;C口输出
CALL DELAY ;小延时
JMP START ;循环
DELAY PROC ;小延时子程序
PUSH CX
PUSH AX
MOV AX,6
X1: MOV CX,0ffFH
X2: DEC CX
JNE X2
DEC AX
JNE X1
POP AX
POP CX
RET
DELAY ENDP
CODE ENDS ;代码段结束
END START ;源程序结束
Jacob 技术 Electrical