ANL A,#OFOH;MOV 74H,A:键值高四位送74HCJNEA,#OFOH,READ;键值高四位非全“1”有键按下;键值高四位全“1”无键按下AJMP KEYREAD:MOVDPTR,#6003H:有键按下。8255(2)初始化(行列输入输出MOV A,#81H:交换),PA口PB口输出(LED显示器),MOVX @DPTR,A:PC口高四位输出低四位输入(行列式键盘);PC口高四位输出零MOVDPTR,#6002HMOV A,#OOH;MOVX @DPTR,A.MOVX A,@DPTR:PC口低四位输入ANL A.#OFH:ADD A,74H:键值低四位送74HMOV 74H,A;ACALL DELAY12MS软件延时KEY1:ACALLLEDMOVDPTR,#6003H:再扫描一次MOVA,#88H.MOVX @DPTR,A.-MOVDPTR,#6002H;MOV A,#OOH:MOVX @DPTR,A:MOVX A,@DPTR;ANL A,#OFOH;MOV 73H,A..MOVDPTR,#6003H.MOVA,#81H..MOVX@DPTR,A.*MOVDPTR,#6002H:MOVA.#OOH..MOVX @DPTR,A.-MOVX A,@DPTR..ANL A, #OFH;ADD A, 73H;CLR C:两次值相同去再扫描一次(按键未松)SUBB A, 74H..-JZKEY1;MOVR1,#0OH:按键已松。R1作计数器;16个键MOVR5,#10HSEARCH:MOVDPTR,#KTABLE:键值表首址MOV A,R1..16
16 ANL A,#0F0H ; MOV 74H,A ;键值高四位送 74H CJNE A,#0F0H,READ ;键值高四位非全“1”有键按下 AJMP KEY ;键值高四位全“1”无键按下 READ: MOV DPTR,#6003H ;有键按下。8255(2)初始化(行列输入输出 MOV A,#81H ; 交换),PA 口 PB 口输出(LED 显示器), MOVX @DPTR,A ;PC 口高四位输出低四位输入(行列式键盘) MOV DPTR,#6002H ;PC 口高四位输出零 MOV A,#00H ; MOVX @DPTR,A ; MOVX A,@DPTR ;PC 口低四位输入 ANL A,#0FH ; ADD A,74H ;键值低四位送 74H MOV 74H,A ; ACALL DELAY12MS ;软件延时 KEY1: ACALL LED MOV DPTR,#6003H ;再扫描一次 MOV A,#88H ; MOVX @DPTR,A ; MOV DPTR,#6002H ; MOV A,#00H ; MOVX @DPTR,A ; MOVX A,@DPTR ; ANL A,#0F0H ; MOV 73H,A ; MOV DPTR,#6003H ; MOV A,#81H ; MOVX @DPTR,A ; MOV DPTR,#6002H ; MOV A,#00H ; MOVX @DPTR,A ; MOVX A,@DPTR ; 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 ;
MOVC A, @A+DPTR:查键表值CLR C:SUBB A,74H:比较读入键值与键值表数据JZ FIND;相同则键值有效,去处理显示缓冲区INC R1:不相同比较下一个键值表数据DJNZ R5,SEARCHAJMP KEY:16个键值表数据比较完FIND:MOV A,R1:键值有效准备显示MOV R5,A;R1数值与键盘标称值(0-F)相同MOVR7,#05H..MOVRO,#79H;显示缓冲区(7AH-75H)数据向前移位MOVR1,#7AH;ROL:MOV A, @RO;MOV @R1,A;DEC RO;DEC R1:DJNZ R7,ROL;MOV 75H,R5:新读键盘标称值(0-F)送显示缓冲区75HAJMP KEY;LED:;显示子程序MOVDPTR,#6003HMOVA,#80h:8255(2)初始化MOVX @DPTR,A:SHOW:MOVRO,#75h;显示缓冲区首地址:位码MOVR2,#01hMOV A,R2:LOOP:MOVDPTR,#6001H:位码送PB口MOVX @DPTR,A.MOVDPTR,#6000H:PA口送全黑字形码MOVA,#7FH:MOVX @DPTR,A.-MOVDPTR,#LTABLE:字形表首地址MOV A, @RO;取显示缓冲区值:取字形码MOVC A,@A+DPTR;字形码送PA口MOVDPTR.#6000HMOVX@DPTR,A-;软件延时ACALL DELAY1MSINC RO:指向下一显示缓冲区地址MOV A,R2;;第六位显示完?JB ACC.5,L0OP1RL A;未完显示下一位MOV R2,A;17
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 ;