编辑: 雨林姑娘 | 2018-07-14 |
ANL A,#0FH ;
ADD A,73H ;
CLR C ;
两次值相同去再扫描一次(按键未松) SUBB A,74H ;
JZ KEY1 ;
MOV R1,#00H ;
按键已松.R1 作计数器 MOV R5,#10H ;
16 个键 SEARCH: MOV DPTR,#KTABLE ;
键值表首址 MOV A,R1 ;
17 MOVC A,@A+DPTR ;
查键表值 CLR C ;
SUBB A,74H ;
比较读入键值与键值表数据 JZ FIND ;
相同则键值有效,去处理显示缓冲区 INC R1 ;
不相同比较下一个键值表数据 DJNZ R5,SEARCH ;
AJMP KEY ;
16 个键值表数据比较完 FIND: MOV A,R1 ;
键值有效准备显示 MOV R5,A ;
R1 数值与键盘标称值(0-F)相同 MOV R7,#05H ;
MOV R0,#79H ;
显示缓冲区(7AH-75H)数据向前移位 MOV R1,#7AH ;
ROL: MOV A,@R0 ;
MOV @R1,A ;
DEC R0 ;
DEC R1 ;
DJNZ R7,ROL ;
MOV 75H,R5 ;
新读键盘标称值(0-F)送显示缓冲区 75H AJMP KEY ;
LED: MOV DPTR,#6003H ;
显示子程序 MOV A,#80h ;
8255(2)初始化 MOVX @DPTR,A ;
SHOW: MOV R0,#75h ;
显示缓冲区首地址 MOV R2,#01h ;
位码 MOV A,R2 ;
LOOP: MOV DPTR,#6001H ;
位码送 PB 口MOVX @DPTR,A ;
MOV DPTR,#6000H ;
PA 口送全黑字形码 MOV A,#7FH ;
MOVX @DPTR,A ;
MOV DPTR,#LTABLE ;
字形表首地址 MOV A,@R0 ;
取显示缓冲区值 MOVC A,@A+DPTR ;
取字形码 MOV DPTR,#6000H ;
字形码送 PA 口MOVX @DPTR,A ;
ACALL DELAY1MS ;
软件延时 INC R0 ;
指向下一显示缓冲区地址 MOV A,R2 ;
JB ACC.5,LOOP1 ;
第六位显示完? RL A ;
未完显示下一位 MOV R2,A ;
18 AJMP LOOP ;
LOOP1: RET ;
第六位显示完返回 DELAY12MS: MOV R3,#0FFH ;
DLAY0: MOV R4,#0FFH DLAY1: DJNZ R4,DLAY1 DJNZ R3,DLAY0 RET DELAY1MS: MOV R3,#02H ;
DELAY0: MOV R4,#0FFH DELAY1: DJNZ R4,DELAY1 DJNZ R3,DELAY0 RET LTABLE: DB 40H,79H,24H,30H,19H ;
字形表 DB 12H,02H,78H,00H,10H DB 08H,03H,46H,21H,06H DB 0EH KTABLE: DB 7EH,0BEH,0BDH,0BBH ;
键值表 DB 0DEH,0DDH,0DBH,0EEH DB 0EDH,0EBH,0E7H,0D7H DB 0B7H,77H,........