首页 > 技术 > 8086汇编写的七段数码管程序

8086汇编写的七段数码管程序

2008年6月16日

考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 技术

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.

*

Anti-spam image