DIY编程器网
标题:
PIC单片机的4*4键盘子程序
[打印本页]
作者:
liyf
时间:
2012-1-16 15:08
标题:
PIC单片机的4*4键盘子程序
;-------4*4键盘程序的使用--------
PC?????? EQU??? 2
STATUS?? EQU??? 3
RA?????? EQU??? 5
RB?????? EQU??? 6
RC?????? EQU??? 7
BIJIAO?? EQU??? 0F
JIANZHI? EQU??? 8
BUFFER?? EQU??? 9
BUFFER1? EQU??? 0AH
BUFFER2? EQU??? 0BH
COUNTER? EQU??? 0CH
CON1???? EQU??? 0DH
CON2???? EQU??? 0EH
PIC57??? EQU??? 7FFH
Z??????? EQU??? 2
;-----------------------------
???????? ORG??? PIC57
???????? GOTO?? MAIN
;-----------------------------
???????? ORG??? 0
;-----------------------------
;??????? 延时子程序
;----------------------------
DELAY??? MOVLW? D'100'
???????? MOVWF? CON1
L1?????? MOVLW? D'200'
???????? MOVWF? CON2
L2?????? DECFSZ CON2,1
???????? GOTO?? L2
???????? DECFSZ CON1,1
???????? GOTO?? L1
???????? RETLW? 0????????
;-----------------------------
;??????? 4*4键盘扫描判断子程序
;-----------------------------
SCANKEY
???????? MOVLW? B'11101111'
???????? MOVWF? RB
???????? MOVF?? RB,W
???????? ANDLW? B'00001111'
???????? MOVWF? BUFFER
???????? MOVLW? B'00001111'
???????? XORWF? BUFFER,W
???????? SKPNZ
???????? GOTO?? XYB1
???????? MOVWF? BUFFER1
???????? MOVLW? 1
???????? MOVWF? JIANZHI
???????? MOVF?? RB,W
???????? MOVWF? BIJIAO
???????? GOTO?? QJZ
XYB1???? MOVLW? B'11011111'
???????? MOVWF? RB
???????? MOVF?? RB,W
???????? ANDLW? B'00001111'
???????? MOVWF? BUFFER
???????? MOVLW? B'00001111'
???????? XORWF? BUFFER,W
???????? SKPNZ
???????? GOTO?? XYB2
???????? MOVWF? BUFFER1
???????? MOVLW? 5
???????? MOVWF? JIANZHI
???????? GOTO?? QJZ
XYB2???? MOVLW? B'10111111'
???????? MOVWF? RB
???????? MOVF?? RB,W
???????? ANDLW? B'00001111'
???????? MOVWF? BUFFER
???????? MOVLW? B'00001111'
???????? XORWF? BUFFER,W
???????? SKPNZ
???????? GOTO?? XYB3
???????? MOVWF? BUFFER1
???????? MOVLW? 9
???????? MOVWF? JIANZHI
???????? MOVF?? RB,W
???????? MOVWF? BIJIAO
???????? GOTO?? QJZ
XYB3???? MOVLW? B'01111111'
???????? MOVWF? RB
???????? MOVF?? RB,W
???????? ANDLW? B'00001111'
???????? MOVWF? BUFFER
???????? MOVLW? B'00001111'
???????? XORWF? BUFFER,W
???????? SKPNZ
???????? RETLW? 0
???????? MOVWF? BUFFER1
???????? MOVLW? 0DH
???????? MOVWF? JIANZHI
???????? MOVF?? RB,W
???????? MOVWF? BIJIAO
QJZ????? MOVLW? 1
???????? MOVWF? BUFFER2
???????? MOVLW? 4
???????? MOVWF? COUNTER
QJZ1???? MOVF?? BUFFER1,W
???????? SUBWF? BUFFER2,W
???????? SKPNZ
???????? RETLW? 1
???????? RLF??? BUFFER2,1
???????? INCF?? JIANZHI,1
???????? DECFSZ COUNTER,1
???????? GOTO?? QJZ1
???????? RETLW? 0
;-------------------------------
;??? 测试程序(注意用法,键值放在JIANZHI里)
;-------------------------------
MAIN
???????? MOVLW? 0
???????? TRIS?? RC
???????? CLRF?? RC
???????? MOVLW? B'00001111'???? ;用RB口作4*4键盘
???????? TRIS?? RB
LOOP???? CLRF?? RC
???????? CALL?? SCANKEY
???????? ANDLW? 0FH
???????? SKPNZ????????????????? ;根据返回值不为零,判断有无键按下
???????? GOTO?? LOOP
???????? MOVLW? 0FH
???????? ANDWF? JIANZHI,W
???????? MOVWF? RC
???????? CALL?? DELAY
LOOP1??? MOVF?? BUFFER1,W
???????? ANDWF? RB,W
???????? XORWF? BIJIAO,W
???????? SKPNZ
???????? GOTO?? LOOP1
???????? GOTO?? LOOP
;--------------
;-------------------------------
???????? END
?
欢迎光临 DIY编程器网 (http://diybcq.com/)
Powered by Discuz! X3.2