赞助论坛
  • 3650阅读
  • 0回复

学习单片机之---4*4键盘程序的使用 [复制链接]

楼层直达
jswr  
发帖
339
精华
1
金币
264
威望
8
贡献
7
好评
15
注册
2008-06-30
楼主    jswr 发表于: 2008-08-05 14:45:17 
4*4键盘程序的使用

<!--StartFragment-->;-------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