资源描述
Z8279 EQU 0F239H ;8279状态/命令口地址
D8279 EQU 0F238H ;8279数据口地址
LEDMOD EQU 10H ;右边输入,八位字符显示,外部译码
LEDFEQ EQU 38H ;扫描速率,24分频
LEDCLS EQU 0D1H ;清楚显示RAM
LEDWR0 EQU 80H ;设定的将要写入的显示RAM地址
ORG 0000H
AJMP START
ORG 0040H
START:
MOV SP,#60H ;设置堆栈指针
LCALL INIT8279 ;调用8279初试化子程序
MOV DPTR,#0F22BH ;调用8255初始化子程序
MOV A,#90H
MOVX @DPTR,A
MOV DPTR,#0F229H ;将0FH值送入8255的PB口
MOV A, #0FH
MOVX @DPTR,A
MOV DPTR,#0F22AH ;将0FH值送入8255的PC口
MOV A, #0FH
MOVX @DPTR,A
LP5: LCALL GETKEY ;D键的扫描
CJNE A,#0FFH, LP5
MOV A,B
CJNE A,#0DH, LP5
MAIN:
MOV R5,#0BH ;将“R”显示在7号位
MOV R4,#7
LCALL DISLED
LCALL LEDXS1
LCALL DISPLAY
MOV R5,#0AH ;将“C”显示在7号位
MOV R4,#7
LCALL DISLED
LCALL LEDXS2
LCALL DISPLAY
SJMP MAIN
DISPLAY:
LCALL GETKEY ;D键的扫描
CJNE A,#0FFH,DISPLAY1
MOV A,B
CJNE A,#0DH,DISPLAY1
JNB 00H,START
DISPLAY1: MOV R5,#0CH
MOV R4,#6
LCALL DISLED ;显示在6号位
MOV R5,#0CH
MOV R4,#5
LCALL DISLED ;显示在5号位
MOV R5,#0CH
MOV R4,#4
LCALL DISLED ;显示在4号位
MOV R5,#0CH
MOV R4,#3
LCALL DISLED ;显示在3号位
MOV R5,#0CH
MOV R4,#2
LCALL DISLED ;显示在2号位
MOV R2,#41
MOV R1,#40
NN: MOV A,R1
MOV B,#10
DIV AB
MOV 40H,A
MOV 41H,B
MOV R5,40H
MOV R4,#1
LCALL DISLED ;显示在1号位
MOV R5,41H
MOV R4,#0
LCALL DISLED ;显示在0号位
LCALL DELAY
DEC R1
DJNZ R2,NN
RET
LEDXS1: MOV DPTR,#0F228H ;PA口的地址
MOVX A,@DPTR ;读PA口
JNB ACC.0,STOP ;判断PA口的第零位
LCALL GETKEY ;读键盘
CJNE A,#0FFH,LEDXS3 ;判断是否有键输入
MOV A,B
CJNE A,#0DH,LEDXS3 ;是不是D键按下
JNB 00H, TT
LJMP LEDXS3
TT: LJMP START
LEDXS3: MOV DPTR,#0F229H ;将0FFH值送入8255的PB口
MOV A,#0FFH
MOVX @DPTR,A
MOV DPTR,#0F22AH ;将00H值送入8255的PC口
MOV A,#00H
MOVX @DPTR,A
LCALL DELAY2
RET
LEDXS2: MOV DPTR,#0F228H ;PA口的地址
MOVX A,@DPTR
JNB ACC.0,STOP ;判断PA口的第零位
LCALL GETKEY
CJNE A,#0FFH,LEDXS4 ;是不是D键按下
MOV A,B
CJNE A,#0DH,LEDXS4
JNB 00H, TT1
LJMP LEDXS4
TT1: LJMP START
LEDXS4:MOV DPTR,#0F229H ;将00H值送入8255的PB口
MOV A,#00H
MOVX @DPTR,A
MOV DPTR,#0F22AH ;将0FFH值送入8255的PC口
MOV A,#0FFH
MOVX @DPTR,A
LCALL DELAY2
RET
GETKEY: ;读键盘子程序
PUSH DPH ;保护现场
PUSH DPL
PUSH PSW
MOV DPTR,#Z8279
MOVX A,@DPTR ;读8279状态字
ANL A,#07H
JNZ GETVAL
MOV A,#0DH
SJMP NKBHIT
GETVAL:
MOV DPTR,#D8279
MOVX A,@DPTR ;读键
ANL A,#3FH ;屏蔽SHIFT和CTRL键
MOV B,A ;保存键值
MOV A,#0FFH ;置有键输入标志
NKBHIT:
POP PSW ;恢复现场
POP DPL
POP DPH
RET
STOP: ;应急状态的子程序
MOV DPTR, #0F229H ;将0FFH值送入8255的PB口
MOV A,#0FFH
MOVX @DPTR,A
MOV DPTR, #0F22AH ;将00H值送入8255的PC口
MOV A,#00H
MOVX @DPTR,A
MOV DPTR,#Z8279 ;熄屏
MOV A,#LEDCLS
MOVX @DPTR,A
MOV DPTR,#0F228H
MOVX A,@DPTR
JNB ACC.0,STOP
LJMP START
DELAY:
PUSH 0
PUSH 1
MOV 0,#0H
DELAY1:MOV R7,#10
LP3: MOV R6,#100
LP2: MOV R3,#50
LP1: NOP
NOP
MOV DPTR,#0F228H
MOVX A,@DPTR
JNB ACC.0,STOP
LCALL GETKEY
CJNE A,#0FFH,LP6
MOV A,B
CJNE A,#0DH,LP6
LJMP START
LP6: DJNZ R3,LP1
DJNZ R6,LP2
DJNZ R7,LP3
POP 1
POP 0
RET
INIT8279:
MOV DPTR,#Z8279
MOV A,#LEDMOD
MOVX @DPTR,A
MOV A,#LEDFEQ
MOVX @DPTR,A
MOV A,#LEDCLS
MOVX @DPTR,A
RET
DISLED: PUSH DPH
PUSH DPL
PUSH ACC
MOV A,#LEDWR0
ADD A,R4
MOV DPTR, #Z8279
MOVX @DPTR,A
MOV DPTR,#LEDSEG
MOV A,R5
MOVC A,@A+DPTR
MOV DPTR,#D8279
MOVX @DPTR,A
POP ACC
POP DPL
POP DPH
RET
DELAY2: MOV R2,#30
LOOP: LCALL DELAY1
DJNZ R2,LOOP
RET
LEDSEG:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;
DB 39H,0F3H,80H;
END
展开阅读全文