利用51單片機實現4*4矩陣鍵盤掃描,并摁下相應鍵時在LED上顯示相應鍵值,通過兩位動態顯示。通過中斷方式實現。采用匯編語言。
單片機源程序如下:
- ORG 0000H
- LJMP MAIN
- ORG 0003H
- LJMP INT
- ORG 0040H
- MAIN:MOV SP,#70H
- MOV 30h,#00h
- SETB EX0
- SETB IT0
- SETB EA
- MOV DPTR,#TAB
- MOV P2,#0F0H;p2口高四位置1低四位置0
- INT:PUSH ACC
- MOV P2,#0F0H
- MOV A,P2;a為11110000
- JNB ACC.4,E1;鍵盤查詢,不為1跳轉,為1順序 查詢p4口 下同
- JNB ACC.5,E2
- JNB ACC.6,E3
- JNB ACC.7,E4
- SETB EX0
- RETI
- E1: MOV 20h,#0 ;按鍵在哪一行,第一行加0
- LJMP KEYH
- E2: MOV 20h,#4 ;第二行家4
- LJMP KEYH
- E3: MOV 20H,#8 ;第三行加8
- LJMP KEYH
- E4: MOV 20h,#12;第四行加12
- LJMP KEYH
- KEYH:
- MOV P2,#0FH
- MOV A,P2
- JNB ACC.0,DO
- JNB ACC.1,D1
- JNB ACC.2,D2
- JNB ACC.3,D3
- RETI
- DO: MOV A,#0 ;第一列加0,下同
- ADD A,20H
- DA A
- MOV 30H,A
- SJMP EXIT
- D1: MOV A,#1
- ADD A,20H
- DA A
- mov 30h,a
- Sjmp EXIT
- D2: MOV A,#2
- ADD A,20H
- DA A
- MOV 30H,A
- SJMP EXIT
- D3: MOV A,#3
- ADD A,20H
- DA A
- MOV 30H,A
- EXIT:
- MOV A,30H
- ANL A,#0FH ;a的高四位清零留下個位
- MOVC A,@A+DPTR
- CLR P1.1 ;位選
- SETB P1.0
- MOV P0,A
- MOV A,#0FFH;p0清零
- MOV P0,A ;p0清零
- MOV A,30H
- ANL A,#0F0H
- SWAP A;留下十位
- MOVC A,@A+DPTR
- CLR P1.0
- SETB P1.1
- MOV P0,A
- MOV A,#0FFH
- MOV P0,A
- LJMP INT
- DELAY:MOV R0,#2;延時
- D: MOV R1,#25
- DJNZ R1,$
- DJNZ R0,D
- RET
- TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
- END
復制代碼
|