51單片機驅動4×4鍵盤按鍵顯示對應鍵值程序
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載):
4x4.png (17.6 KB, 下載次數: 70)
下載附件
2017-5-15 21:53 上傳
0.png (65.22 KB, 下載次數: 68)
下載附件
2017-5-15 22:39 上傳
單片機源程序如下:
- 偽定義
- KEYBUF EQU 30H ;鍵值暫存單元,查表時用
- ;*************************************
- ;* *
- ;* 主程序和中斷程序入口 *
- ;* *
- ;*************************************
- ORG 0000H ;程序執行開始地址
- AJMP MAIN ;跳至MAIN執行
- ;*************************************
- ;* *
- ;* 主 程 序 *
- ;* *
- ;*************************************
- ORG 0040H
- MAIN: MOV P1,#0FFH
- CLR P2.0
- LCALL KEYSCAN ;主體程序。調用查鍵子程序
- LJMP MAIN ;轉MAIN循環
- NOP ;軟件陷阱
- NOP
- NOP
- LJMP MAIN
- ;*************************************
- ;* *
- ;* 鍵盤工作子程序(4 * 4 陣列) *
- ;* 出口為各鍵工作程序入口 P1口 *
- ;*************************************
- KEYSCAN:
- MOV P1,#0FFH;清P1口,初始化鍵低電平有效
- CLR P1.4;清P1.4口
- MOV A,P1;讀P1口狀態
- ANL A,#0FH;清高4位,保留低四位低電平有效
- XRL A,#0FH;異或相同則為0不同結果為1,為0則表示無鍵被按下(這一行)
- JZ NOKEY1;為0則轉下一行鍵值處理
- LCALL DL10MS;有鍵按下則延時10ms再測一次抗干擾
- MOV A,P1
- ANL A,#0FH
- XRL A,#0FH
- JZ NOKEY1;是干擾則轉下一行鍵值處理程序
- MOV A,P1
- ANL A,#0FH;保留低四?
- KB1:
- CJNE A,#0EH,KB2;如果值為#0E則為P1.4與P1.0組合的鍵
- MOV KEYBUF,#0;賦鍵值
- LJMP KEYWORK;轉鍵處理
- KB2: CJNE A,#0DH,KB3;如果值為#0D則為P1.4與P1.1組合的鍵
- MOV KEYBUF,#1
- LJMP KEYWORK
- KB3: CJNE A,#0BH,KB4;如果值為#0B則為P1.4與P1.2組合的
- MOV KEYBUF,#2
- LJMP KEYWORK
- KB4: CJNE A,#07H,KB5;如果值為#07則為P1.4與P1.3組合的
- MOV KEYBUF,#3
- LJMP KEYWORK
- KB5: NOP
- NOKEY1:
- MOV P1,#0FFH
- CLR P1.5
- MOV A,P1
- ANL A,#0FH
- XRL A,#0FH
- JZ NOKEY2
- LCALL DL10MS
- MOV A,P1
- ANL A,#0FH
- XRL A,#0FH
- JZ NOKEY2
- MOV A,P1
- ANL A,#0FH
- CJNE A,#0EH,KB6
- MOV KEYBUF,#4
- LJMP KEYWORK
- KB6: CJNE A,#0DH,KB7
- MOV KEYBUF,#5
- LJMP KEYWORK
- KB7: CJNE A,#0BH,KB8
- MOV KEYBUF,#6
- LJMP KEYWORK
- KB8: CJNE A,#07H,KB9
- MOV KEYBUF,#7
- LJMP KEYWORK
- KB9: NOP
- NOKEY2:
- MOV P1,#0FFH
- CLR P1.6
- MOV A,P1
- ANL A,#0FH
- XRL A,#0FH
- JZ NOKEY3
- LCALL DL10MS
- MOV A,P1
- ANL A,#0FH
- XRL A,#0FH
- JZ NOKEY3
- MOV A,P1
- ANL A,#0FH
- CJNE A,#0EH,KB10
- MOV KEYBUF,#8
- LJMP KEYWORK
- KB10: CJNE A,#0DH,KB11
- MOV KEYBUF,#9
- LJMP KEYWORK
- KB11: CJNE A,#0BH,KB12
- MOV KEYBUF,#10
- LJMP KEYWORK
- KB12: CJNE A,#07H,KB13
- MOV KEYBUF,#11
- LJMP KEYWORK
- KB13: NOP
- NOKEY3:
- MOV P1,#0FFH
- CLR P1.7
- MOV A,P1
- ANL A,#0FH
- XRL A,#0FH
- JZ NOKEY4
- LCALL DL10MS
- MOV A,P1
- ANL A,#0FH
- XRL A,#0FH
- JZ NOKEY4
- MOV A,P1
- ANL A,#0FH
- CJNE A,#0EH,KB14
- MOV KEYBUF,#12
- LJMP KEYWORK
- KB14: CJNE A,#0DH,KB15
- MOV KEYBUF,#13
- LJMP KEYWORK
- KB15: CJNE A,#0BH,KB16
- MOV KEYBUF,#14
- LJMP KEYWORK
- KB16: CJNE A,#07H,KB17
- MOV KEYBUF,#15
- LJMP KEYWORK
- KB17: NOP
- NOKEY4:
- LJMP MAIN
- KEYWORK:
- MOV A,KEYBUF;得到鍵值
- MOV DPTR,#TABLE
- MOVC A,@A+DPTR;查行鍵值送ACC
- MOV P0,A;
-
- WAITFREE:
- MOV A,P1;以下程序等待鍵釋放
- MOV KEYBUF,#00H
- ANL A,#0FH
- XRL A,#0FH
- JNZ WAITFREE
- RET
- ;
- ;*************************************
- ;* *
- ;* 延時513 us *
- ;* *
- ;*************************************
- ;
- ;513微秒延時程序
- DELAY: MOV R2,#0FEH
- DELAY1: DJNZ R2,DELAY1
- RET
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
4X4鍵盤顯示.zip
(30.35 KB, 下載次數: 26)
2017-5-15 21:53 上傳
點擊文件名下載附件
|