- ;《單片機矩陣式鍵盤接口技術及編程》
- ;鍵盤掃描程序:
- ;從以上分析得到單片機鍵盤掃描程序的流程圖如圖2所示。程序如下
- SCAN: MOV P1,#0FH ;一個端口(如P1口)就能組成4*4=16個按鈕 P1.0-P1.3設置為輸入線,行線P1.4-P.17設置為輸出線
- MOV A,P1 ; 檢測當前是否有鍵被按下。檢測的辦法是P1.4-P1.7輸出全“0”,讀取P1.0-P1.3的狀態,
- ANL A,#0FH ; 若P1.0-P1.3為全“1”,則無鍵閉合,不然有鍵閉合。
- CJNE A,#0FH,NEXT1 ; 有鍵閉合,轉移去除鍵抖動延時
- SJMP NEXT3 ; 無鍵閉合,轉移
- NEXT1: ACALL D20MS ; 延時20毫秒去除鍵抖動
- MOV A,#0EFH ; 若有鍵被按下,應識別出是哪一個鍵閉合
- NEXT2: MOV R1,A
- MOV P1,A
- MOV A,P1
- ANL A,#0FH ; A里面的值和0F按位進行與運算!結果保存到A
- CJNE A,#0FH,KCODE ; 意思就是 2個數相比較 不 相等 則跳轉
- MOV A,R1
- SETB C ; 使CY=1 (進位標志置位指令) 把寄存器C置為1
- RLC A ; 即將A的內容左移一位,將進位位C中的值移到累加器A的最低位,A的最高位移到C里。 #0DFH #0BFH #07FH
- JC NEXT2 ; 如果進位C位為1 ,轉移
- NEXT3: MOV R0,#00H ; 無效標志值
- RET ; 返回
- KCODE: MOV B,#0FBH ;,然后可采用計算法將閉合鍵的行值和列值轉換成所定義的鍵值
- NEXT4: RRC A ;指令就是帶進位累加器循環右移 A的最低位移給C,并且C原來的值移給A的最高位。
- INC B
- JC NEXT4
- MOV A,R1
- SWAP A ;這條指令,將累加器A的高、低4位數據交換,也就是低4位數據進入高4位,高4位數據進入低4位。
- NEXT5: RRC A
- INC B
- INC B
- INC B
- INC B
- JC NEXT5
- NEXT6: MOV A,P1 ; 為了保證鍵每閉合一次CPU 僅作一次處理,必須卻除鍵釋放時的抖動。
- ANL A,#0FH
- CJNE A,#0FH,NEXT6
- MOV R0,#0FFH ;有效標志值
- RET ;返回
復制代碼 |