?? 4x4電機控制鍵盤.asm
字號:
KEYBUF EQU 40H ;鍵號存放單元
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN: MOV KEYBUF,#0 ;初始鍵號設位0,也可以為任意值
;===============================================
;鍵盤掃描子程序
WAIT: MOV P1,#0FFH ;P1口送高電平
CLR P1.0 ;第一行清零
MOV A,P1 ;讀P1口
ANL A,#0F0H ;低位屏蔽
XRL A,#0F0H ;判斷低位是否有低電平 ,即判斷是否有按鍵按下
JZ NOKEY1 ;地位有低電平繼續掃描,否者跳到第而行去掃描
LCALL DELY10ms ;延時10ms去抖在進行判斷是否有按鍵按下
MOV A,P1 ;繼續讀P1口
ANL A,#0F0H ;判斷低位是否有低電平
CJNE A,#0E0H,NK1 ;如果掃描數據不為0E0H就轉到NK1
MOV KEYBUF,#0 ;否者判斷為0號鍵
AJMP DK ;轉DK1查表程序
NK1: CJNE A,#0D0H,NK2 ;如果掃描數據不為0D0H就轉到NK2
MOV KEYBUF,#1 ;否者判斷為1號鍵
AJMP DK ;轉DK2查表程序
NK2: CJNE A,#0B0H,NK3 ;如果掃描數據不為0B0H就轉到NK3
MOV KEYBUF,#2 ;否者判斷為2號鍵
AJMP DK ;轉DK3查表程序
NK3: CJNE A,#70H,NK4 ;如果掃描數據不為70H就轉到NK4
AJMP QI_OR_TING
NK4: NOP
NOKEY1: MOV P1,#0FFH ;和上面相同
CLR P1.1
MOV A,P1
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY2
LCALL DELY10MS
MOV A,p1
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY2
MOV A,P1
ANL A,#0F0H
CJNE A,#0E0H,NK5
MOV KEYBUF,#3
AJMP DK
NK5: CJNE A,#0D0H,NK6
MOV KEYBUF,#4
AJMP DK
NK6: CJNE A,#0B0H,NK7
MOV KEYBUF,#5
AJMP DK
NK7: CJNE A,#70H,NK8
MOV KEYBUF,#10 ;否者判斷為3號鍵
AJMP DK ;轉DK4查表程序
NK8: NOP
NOKEY2: MOV P1,#0FFH
CLR P1.2
MOV A,P1
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY3
LCALL DELY10MS
MOV A,P1
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY3
MOV A,P1
ANL A,#0F0H
CJNE A,#0E0H,NK9
MOV KEYBUF,#6
AJMP DK
NK9: CJNE A,#0D0H,NK10
MOV KEYBUF,#7
AJMP DK
NK10: CJNE A,#0B0H,NK11
MOV KEYBUF,#8
AJMP DK
NK11: CJNE A,#70H,NK12
AJMP SHE_DING
NK12: NOP
NOKEY3: MOV P1,#0FFH
CLR P1.3
MOV A,P1
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY4
LCALL DELY10MS
MOV A,P1
ANL A,#0F0H
XRL A,#0F0H
JZ NOKEY4
MOV A,P1
ANL A,#0F0H
CJNE A,#0E0H,NK13
AJMP JIA_SU
NK13: CJNE A,#0D0H,NK14
AJMP JIAN_SU
NK14: CJNE A,#0B0H,NK15
AJMP ZHENG_OR_FAN
NK15: CJNE A,#70H,NK16
AJMP QING_CHU
NK16: NOP
;=======================================================
;查表求鍵值程序
DK: MOV B,#00H
MOV A,KEYBUF ;查表程序 查對應的鍵號數據
MOV DPTR,#TABLE ;把表頭地址放入DPTR
MOVC A,@A+DPTR ;A里面存放的為鍵號,利用A和表頭地址找到對應的鍵號數據
MOV B,A ;把查到的數據送往顯示單元
INC R1 ;取下一個顯示單元
MOV A,R1
CJNE A,#36H,DKA1 ;判斷顯示單元是否已滿
MOV R1,#35H ;35H,36H單元用于更好的控制五位顯示
AJMP DKA
DKA1: MOV 34H,33H ;按鍵代碼按左移顯示,先按先顯示
MOV 33H,32H
MOV 32H,31H
MOV 31H,30H
MOV 30H,B
DKA: MOV A,P1 ;讀P1口
ANL A,#0F0H ;屏蔽高四位
XRL A,#0F0H ;地位是有低電平
JNZ DKA ;如果有低電平繼續讀P1口,否者向下執行,查找第二行
NOKEY4: LJMP DIS1
;===================================
;功能按鍵功能設定
QI_OR_TING:?????
SHE_DING:?????
JIA_SU:?????
JIAN_SU:?????
ZHENG_OR_FAN:?????
QING_CHU:?????
;=============================================
;延時程序和查表表格
DELY10ms:MOV R6,#20 ;延時10毫秒
D2: MOV R7,#1248
DJNZ R7,$
DJNZ R6,D2
RET
TABLE: DB 07H, 04H, 01H ;啟/停 本表格是以鍵盤為參考 7 8 9 加速
DB 08H, 05H, 02H,00H ; 4 5 6 減速
DB 09H, 06H, 03H ;設定 1 2 3 正反轉
DB;加速 減速 正反轉 清除 啟/停 0 設定 清除
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -