阵列式键盘实训C语言,新人求教 阵列式键盘
該樓層疑似違規(guī)已被系統(tǒng)折疊?隱藏此樓查看此樓
ORG 0000H
LJMP START
ORG 00100H
DBUF EQU 30H
TEMP EQU 40H
DIN BIT P3.0
CLK BIT P3.1
START: MOV A,#16H
MAIN: ACALL DISP
MOV 30H, A
ACALL KEY1
AJMP MAIN
KEY1: MOV P1,#0F0H;對(duì)輸入應(yīng)鎖存寫
1
MOV A,P1
CJNE A,#0F0H, K11 有鍵按下
K10: AJMP KEY1 無鍵按下
K11: ACALL DELAY 延時(shí)去抖動(dòng)
MOV P1,#0F0H
MOV A,P1 再讀取鍵盤狀況
CJNE A,#0F0H, K12 確有鍵按下
SJMP K10 誤動(dòng)作
K12: MOV B,A 存列值
MOV P1,#0FEH 檢測(cè)第一列
MOV A,P1
CJNE A,#0FEH,K13
MOV P1,#0FDH 檢測(cè)第二列
MOV A,P1
CJNE A,#0FDH,K13
MOV P1,#0FBH 檢測(cè)第三列
MOV A,P1
CJNE A,#0FBH,K13
MOV P1,#0F7H 檢測(cè)第四列 MOV A,P1
CJNE A,#0F7H, K13
AJMP K10 多鍵同時(shí)按下
K13: ANL A,#0FH 得行值
ORL A,B 得按下的行列值
MOV B,A 暫存鍵值
MOV R1,#16 16
個(gè)鍵
MOV R2,#0 鍵碼初值
MOV DPTR,#K1TAB 鍵碼表首址
K14: MOV A,R2
MOVC A,@A+DPTR 從鍵值表取鍵值
CJNE A,B, K16 與按下鍵的鍵比較
MOV P1,#0F0H
K15: MOV A,P1
CJNE A,#0F0H, K15
ACALL DELAY 延時(shí)去抖動(dòng)
MOV A,R2 得鍵碼
RET
K16: INC R2
DJNZ R1,K14
AJMP K10
K1TAB: DB 0EEH,0EDH,0EBH,0E7H
DB 0DEH,0DDH,0DBH,0D7H
DB 0BEH,0BDH,0BBH,0B7H
DB 07EH,07DH,07BH,077H
DISP: MOV DBUF,#0CH
MOV DBUF+1,#5
MOV DBUF+2,#1
MOV DBUF+3,#16
MOV DBUF+4,A
MOV R0,#DBUF
MOV R1,#TEMP
MOV R2,#8
DP10:MOV DPTR,#SEGTAB
MOV A,@R0
MOVC A,@A+DPTR
MOV @R1,A
INC R0
INC R1
DJNZ R2,DP10
MOV R0,#TEMP
MOV R1,#5
DP12:MOV R2,#8
MOV A,@R0
DP13:RLC A
MOV DIN,C
CLR CLK
SETB CLK
DJNZ R2,DP13
INC R0
DJNZ R1,DP12
RET
SEGTAB:DB 3FH,06H,5BH,4FH,66H,6DH
DB 7DH,07H,7FH,6FH,77H,7CH
DB 58H,5EH,79H,71H,00H,40H
DELAY: MOV R4,#02H
AA1: MOV R5,#0F8H
AA: NOP
NOP
DJNZ R5,AA
DJNZ R4,AA1
RET
END
匯編找到了
總結(jié)
以上是生活随笔為你收集整理的阵列式键盘实训C语言,新人求教 阵列式键盘的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: flash和linux文件系统,面向大容
- 下一篇: adb命令检测apk启动时间、内存、CP