;P0口是段碼,共陰。
;P1.0是位碼
;按鍵16個在P3口
;按鍵用1S延時,沒有用等待鬆開確認
;按鍵只做了第一列00-12共4個按鍵,後3列02-15按鍵自己按照這個意思編寫
ORG 0000H
AJMP MAIN
MAIN:
SETB P1.0
MOV P0,#00H
SCAN:
CLR P3.0
ACALL DELAY1S
JB P3.4,KEY04 ;是按鍵0嗎?不是就跳轉到按鍵4,如果是按鍵0被按下,顯示按鍵位號0.
MOV A,#00H
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
CLR P1.0
LCALL SCAN
KEY04:
JB P3.5,KEY08
MOV A,#04H
KEY08:
JB P3.6,KEY12
MOV A,#08H
KEY12:
JB P3.7,KEY02
MOV A,#0CH
SETB P3.0
KEY02:
;省略
RET
TAB:
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;Define定義段碼0、1、2、3、4、5、6、7、8、9
DB 77H,7CH,39H,5EH,79H,71H,0FFH,73H,5CH,70H ;Define定義段碼A、B、C、D、E、F、滅、P、o、r
DELAY1S: MOV R4,#08H
MOV R5,#00H
MOV R6,#00H
DJNZ R4,$
DELAY2: DJNZ R5,DELAY2
DJNZ R6,DELAY2
END
;P0口是段碼,共陰。
;P1.0是位碼
;按鍵16個在P3口
;按鍵用1S延時,沒有用等待鬆開確認
;按鍵只做了第一列00-12共4個按鍵,後3列02-15按鍵自己按照這個意思編寫
ORG 0000H
AJMP MAIN
MAIN:
SETB P1.0
MOV P0,#00H
SCAN:
CLR P3.0
ACALL DELAY1S
JB P3.4,KEY04 ;是按鍵0嗎?不是就跳轉到按鍵4,如果是按鍵0被按下,顯示按鍵位號0.
MOV A,#00H
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
CLR P1.0
LCALL SCAN
KEY04:
CLR P3.0
ACALL DELAY1S
JB P3.5,KEY08
CLR P1.0
MOV A,#04H
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
CLR P1.0
LCALL SCAN
KEY08:
CLR P3.0
ACALL DELAY1S
JB P3.6,KEY12
CLR P1.0
MOV A,#08H
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
CLR P1.0
LCALL SCAN
KEY12:
CLR P3.0
ACALL DELAY1S
JB P3.7,KEY02
MOV A,#0CH
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
CLR P1.0
SETB P3.0
LCALL SCAN
KEY02:
;省略
RET
TAB:
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;Define定義段碼0、1、2、3、4、5、6、7、8、9
DB 77H,7CH,39H,5EH,79H,71H,0FFH,73H,5CH,70H ;Define定義段碼A、B、C、D、E、F、滅、P、o、r
DELAY1S: MOV R4,#08H
MOV R5,#00H
MOV R6,#00H
DJNZ R4,$
DELAY2: DJNZ R5,DELAY2
DJNZ R6,DELAY2
RET
END