8086cpu计算机,根据4个开关控制1个七段数码管和8个发关二极管。要求:
(1)开关k3k2k1k0=0001,8个发光管从左向右依次点亮(每次1个灯亮);
(2)开关k3k2k1k0=0010,8个发光管从右向左依次点亮(每次1个灯亮);
(2)开关k3k2k1k0=0100,8个发光管全亮;
(2)开关k3k2k1k0=1000,8个发光管全灭;
(2)开关k3k2k1k0=0000,程序结束;
(2)开关k3k2k1k0其它值组合,8个发光管闪烁显示亮;
(2)开关任何状态下,七段数码管显示4开关对应0~F值。
.MODEL show
COM_ADD EQU 0273H ;控制寄存器的端口地址
PA_ADD EQU 0270H ;7段数码管端口地址,对应8255A端口输出
PB_ADD EQU 0271H ;开关k3k2k1k0端口地址,对应8255B端口输入
PC_ADD EQU 0272H ;8个led灯端口地址,对应8255C端口输出
.STACK 100H ;栈段
.DATA
;7段数码管表,对应数码管显示从0到F
Seg7 DB 3FH,06H,5BH,4FH
DB 66H,6DH,7DH,07H
DB 7FH,67H,77H,7CH
DB 39H,5EH,79H,71H
.CODE
START: MOV AX,@DATA ;数据段
MOV DS,AX
NOP
MOV DX,COM_ADD ;取控制寄存器的地址
;将8255a的方式控制字传入AX寄存器A、B、C为方式0,A输出,B输入,C输出
MOV AL,10000010B
OUT DX,AL
MAIN:
CALL DELAY
CALL DELAY
MOV DX,PB_ADD ;取开关地址
IN AL,DX ;读入开关状态
AND AL,0FH ;取低四位
CMP AL,01H ;低四位为0001
JE LEDLtoR ;从左向右依次点亮
CMP AL,02H ;低四位为0010
JE LEDRtoL ;从右向左依次点亮
CMP AL,04H ;低四位为0100
JE LEDon ;全亮
CMP AL,08H ;低四位为1000
JE LEDoff ;全灭
JMP LEDbuling ;其他情况,闪烁显示亮
LEDLtoR: ;开关1启动时,低四位为0001,led灯从左到右依次亮
MOV DX,PA_ADD ;取7段数码管地址
LEA BX, Seg7 ;取7段码表基地址
MOV AH, 0
MOV SI, AX ;作为7段码表的表内位移量
MOV AL, [BX+SI] ;取7段码
OUT DX,AL ;输出7段码
CALL DELAY
MOV DX,PC_ADD ;取8个led灯地址
MOV AL,07FH
MOV CX,8
LtoR: OUT DX,AL
ROR AL,1
CALL DELAY
LOOP LtoR
JMP MAIN
LEDRtoL: ;开关2启动时,低四位为0010,led灯从右到左依次亮
MOV DX,PA_ADD ;取7段数码管地址
LEA BX, Seg7 ;取7段码表基地址
MOV AH, 0
MOV SI, AX ;作为7段码表的表内位移量
MOV AL, [BX+SI] ;取7段码
OUT DX,AL ;输出7段码
CALL DELAY
MOV DX,PC_ADD ;取8个led灯地址
MOV AL,0FEH
MOV CX,8
RtoL: OUT DX,AL
ROL AL,1
CALL DELAY
LOOP RtoL
JMP MAIN
LEDon: ;当开关3启动时,;低四位为0100,全亮
MOV DX,PA_ADD ;取7段数码管地址
LEA BX, Seg7 ;取7段码表基地址
MOV AH, 0
MOV SI, AX ;作为7段码表的表内位移量
MOV AL, [BX+SI] ;取7段码
OUT DX,AL ;输出7段码
CALL DELAY
MOV DX,PC_ADD ;取8个led灯地址
MOV AL,00H
OUT DX,AL
JMP MAIN
LEDoff: ;开关4启动时,低四位为1000,全灭
MOV DX,PA_ADD ;取7段数码管地址
LEA BX, Seg7 ;取7段码表基地址
MOV AH, 0
MOV SI, AX ;作为7段码表的表内位移量
MOV AL, [BX+SI] ;取7段码
OUT DX,AL ;输出7段码
CALL DELAY
MOV DX,PC_ADD ;取8个led灯地址
MOV AL,0FFH
OUT DX,AL
JMP MAIN
LEDbuling: ;其他状态,闪烁
MOV DX,PA_ADD ;取7段数码管地址
LEA BX, Seg7 ;取7段码表基地址
MOV AH, 0
MOV SI, AX ;作为7段码表的表内位移量
MOV AL, [BX+SI] ;取7段码
OUT DX,AL ;输出7段码
CALL DELAY
MOV DX,PC_ADD ;取8个led灯地址
MOV CX,8 ;闪烁8次
MOV AL,0FFH
LOOP2: OUT DX,AL
CALL DELAY
MOV AL,00H
LOOP LOOP2
JMP MAIN
;延时程序,重复计时60000次
DELAY PROC NEAR
PUSH CX
MOV CX,60000
DELAY1: LOOP DELAY1
POP CX
RET
DELAY ENDP
END START