hello(8086控制数码管滚动显示)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DATA SEGMENT ;数据段
COUNTDOWN DW ? ;时延计数器
SPDCOUNT DW 00H ;控速计数器
LEDCOUNT DB 00H ;LED COUNT
CATCOUNT DB 00H ;CAT COUNT
TMP DB 00H
LED DB ?
CAT DB 01H ;数码管选通信号
SPEED DW 0000H
DATA ENDS
STACK SEGMENT STACK 'STACK'
DB 100 DUP(?)
STACK ENDS
CODE SEGMENT ;代码段
ASSUME CS:CODE, DS:DATA, SS:STACK
;延时子程序
DELAY1 PROC
MOV COUNTDOWN,03FFH
LOOPD: DEC COUNTDOWN
JNZ LOOPD
RET
DELAY1 ENDP
;给变量LED赋值的子程序
ENCODE PROC
;根据LEDCOUNT的当前值,给变量LED赋值
;使其显示相应的字符
CMP LEDCOUNT,00H
JA EN1
MOV LED,00H ;BLANK "_"
JMP NEXT
EN1: CMP LEDCOUNT,01H
JA EN2
MOV LED,00H ;BLANK "_"
JMP NEXT
EN2:CMP LEDCOUNT,02H
JA EN3
MOV LED,00H ;BLANK "_"
JMP NEXT
EN3:CMP LEDCOUNT,03H
JA EN4
MOV LED,00H ;BLANK "_"
JMP NEXT
EN4:CMP LEDCOUNT,04H
JA EN5
MOV LED,00H ;BLANK "_"
JMP NEXT
EN5: CMP LEDCOUNT,05H
JA EN6
MOV LED,00H ;BLANK "_"
JMP NEXT
EN6: CMP LEDCOUNT,06H
JA EN7
MOV LED,3DH ;”H”
JMP NEXT
EN7: CMP LEDCOUNT,07H
JA EN8
MOV LED,0DCH ;”E”
JMP NEXT
EN8: CMP LEDCOUNT,08H
JA EN9
MOV LED,8CH ;”L”
JMP NEXT
EN9:CMP LEDCOUNT,09H
JA ENA
MOV LED,8CH ;”L”
JMP NEXT
ENA:CMP LEDCOUNT,0AH
JA ENB
MOV LED,0EDH ;”O”
JMP NEXTB
ENB:MOV LED,00H ;BLANK "_"
NEXTB: RET
;这里请注意:若要改变LED点亮的模式,改变ENCODE子程序中
;变量LED的赋值模式即可
ENCODE ENDP
;循环点亮控制子程序
;CAT是8段数码管的选通信号,这个子程序将
;根据当前CATCOUNT的值给CAT赋值
CATENCO PROC
CMP CATCOUNT,00H
JA EB1
MOV CAT, 01H
JMP NEXT
EB1: CMP CATCOUNT,01H
JA EB2
MOV CAT, 02H
JMP NEXT
EB2: CMP CATCOUNT,02H
JA EB3
MOV CAT, 04H
JMP NEXT
EB3: CMP CATCOUNT,03H
JA EB4
MOV CAT, 08H
JMP NEXT
EB4:CMP CATCOUNT,04H
JA EB5
MOV CAT, 10H
JMP NEXT
EB5: MOV CAT, 20H
NEXT: RET
CATENCO ENDP
;主程序
START:MOV AX, DATA
MOV DS, AX
MOV ES, AX
MOV AL, 80H ;8255初始化
MOV DX, 0EE03H
OUT DX, AL
;A口方式0输出,B口方式0输出,C口无关
S1S:MOV DX,0EEE0H ;检测拨码开关状态
IN AL, DX ;若拨码开关最低位置位
MOV SPEED,0FFFH ;则选择快速模式
AND AL, 01H ;未被置位则选择慢速模式
JZ FL3
MOV SPEED, 07FFH ;快速模式
FL3:INC CATCOUNT
CMP CATCOUNT,06H ;一轮是否显示完毕?
JB FL1
MOV CATCOUNT,
00H ;CATCOUNT值回零
INC SPDCOUNT
MOV DX,SPEED
CMP SPDCOUNT,DX ;根据速度选择,
JB FL1 ;控制改变CAT的频率
MOV SPDCOUNT,00H
INC TMP
CMP TMP,06H
JB FL1
MOV TMP,00H
FL1: MOV DL,CATCOUNT
ADD DL,TMP
MOV LEDCOUNT,DL
CMP LEDCOUNT,0CH
JB FL2
SUB LEDCOUNT,0CH
FL2: CALL CATENCO ;依次点亮数码管
MOV DX, 0EE01H
MOV AL, CAT
OUT DX, AL
CALL ENCODE ;选择此数码管显示的字符
MOV DX, 0EE00H
MOV AL, LED
OUT DX, AL
CALL DELAY1 ;调用延时子程序
MOV AH, 0BH ;检测键盘缓冲区
INT 21H
OR AL, AL
JZ S1S
MOV AX, 4C00H
INT 21H
CODE ENDS
END START