6
} } }
18. 用汇编语言编写出定时扫描方式下矩阵键盘的处理程序。
该程序放于定时器的中断服务程序中。定时器每10ms中断一次,执行一次中断服务程序。F1和F2标志位用片内RAM的50H和51H单元。 ACALL KS1 JNZ LK1 MOV 50H,#0 ;无键按下,F1的F0标志清0结束 MOV 51H,#0 SJMP OUT
LK1: CJNE 50H,#1,OUT1 ;有键按下检查F1标志是否为1,不为1置1结束。 CJNE 51H,#01,OUT ;再检查F2标志是否为1,为1说明已处理按键则结束。 LK2: MOV R2,#0FEH ;扫描查询键码 MOV R4,#00H LK4: MOV DPTR,#7F00H MOV A,R2 MOVX @DPTR,A INC DPTR INC DPTR
MOVX A,@DPTR JB ACC.0,LONE MOV A,#00H AJMP LKP LONE: JB ACC.1,LTWO
MOV A,#08H
AJMP LKP LTWO:JB ACC.2,LTHR MOV A,#10H AJMP LKP LTHR: JB ACC.3,NEXT MOV A,#18H LKP: ADD A,R4 ;求键码放累加大器A, MOV 51H,#1 ;F2标志置1,结束 SJMP OUT
NEXT: INC R4 MOV A,R2 JNB ACC.7,KEND RL A MOV R2,A SJMP LK4
KEND:SJMP OUT ;扫描完结束 KS1: MOV DPTR,#7F00H ;检查有无按键 MOV A,#00H MOVX @DPTR,A INC DPTR INC DPTR