久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7465|回復: 1
收起左側

PIC單片機控制數碼管顯示4*4矩陣鍵盤對應按鍵號

[復制鏈接]
ID:50658 發表于 2013-6-12 23:28 | 顯示全部樓層 |閱讀模式
;使用C口作鍵盤掃描,7段數碼管顯示按鍵號 ,63系列通用寄存器地址:20~7FH, A0~FFH ,未達到預期目的,只用個位數顯示按鍵號時正常工作,增加按鍵號轉換(用2位數顯示),則提示“STACK OVERFLOW"--堆棧溢出.編譯后機器碼容量為1.3KB左右,未超過CALL跳轉范圍——1頁(2K) 。
#include P16C63A.INC
KEYCODE EQU  H'0020'
KEYNUM  EQU  H'0021'
CC    EQU  H'0024'
TABADD EQU H'0025'
SW   EQU H'0026'
GW   EQU H'0027'
;PD   EQU H'0028'

ORG H'0000'
GOTO MAIN
ORG H'0010'

MAIN  MOVLW H'00'
      TRIS PORTA
      TRIS PORTB ;RB口全為輸出,用作驅動7段數碼管
      MOVWF KEYNUM
      MOVLW H'F0'  
      TRIS PORTC ;  設置RC低四位為輸出,高四位為輸入
      MOVLW TABLE
      MOVWF TABADD
      MOVLW H'0001'
;      MOVWF PD   ;用來判斷按鍵號是否大于9

LOOP   
      CALL KEYSCAN
   ;   CALL JUDGE     ;判斷是按鍵號是否大于9
   ;   XORLW H'0001'
   ;   BTFSS STATUS,Z
       CALL XIAO
   ;   GOTO DASHU
XS    CALL DISP_2
      GOTO LOOP    ;循環掃描、顯示按鍵號

JUDGE      
      MOVLW H'0A'
      SUBWF KEYNUM,0
      BTFSC STATUS,0  ; C標志
   ;   RETLW 0  ;小于10
   ;   RETLW 1  ; 10以上的按鍵號
      GOTO XIAO
      GOTO DASHU

XIAO  MOVLW 0
      MOVWF SW
      MOVF KEYNUM,0
      MOVWF GW
      RETLW 0
     ; GOTO XS

DASHU   
      MOVLW H'01'
      MOVWF SW
      MOVLW H'0A'
      SUBWF KEYNUM,0
      MOVWF GW
      RETLW 0
     ; GOTO XS  

DISP_2
      MOVLW H'02'
      MOVWF PORTA
      MOVF SW,0
      CALL DISP
      CALL DELAY

      MOVLW H'01'
      MOVWF PORTA
      MOVF GW,0
      CALL DISP
      CALL DELAY
      RETLW 0

DELAY MOVLW 0
      MOVWF CC
LL    DECFSZ CC,1
      GOTO LL
      RETLW 0

DISP  ; MOVF KEYNUM,0                    ;輸入W,輸出W
      ADDWF TABADD,0  
      CALL CONV
      MOVWF PORTB
      RETLW 0
CONV  MOVWF PCL   ;取碼,輸入W(0~F),輸出W
TABLE RETLW H'C0'
      RETLW H'F9'
      RETLW H'A4'
      RETLW H'B0'
      RETLW H'99'
      RETLW H'92'
      RETLW H'82'
      RETLW H'F8'
      RETLW H'80'
      RETLW H'90'
      RETLW H'88'
      RETLW H'83'
      RETLW H'C6'  
      RETLW H'A1'
      RETLW H'86'
      RETLW H'8E'    ;0~F 數碼管代碼
      RETLW H'C0'

KEYSCAN  MOVLW H'FE'  ;第一行置低(RC0輸出0)
         MOVWF PORTC
         NOP
         MOVF PORTC,0 ;讀RC各端口狀態
         ANDLW H'F0' ;屏蔽低四位,只需要低四位來判斷
         MOVWF KEYCODE ;保存端口狀態
         MOVLW H'F0'
         SUBWF KEYCODE,0 ;與初值比較,看是否有鍵按下
         BTFSS STATUS,Z  ;有鍵按下(不等于初值,Z為零)則結束掃描
         GOTO  GETNUM1

         MOVLW H'FD'  ;第二行置低(RC1輸出0)
         MOVWF PORTC
         NOP
         MOVF PORTC,0 ;讀RC各端口值
         ANDLW H'F0' ;屏蔽低四位,只需要低四位來判斷
         MOVWF KEYCODE ;保存端口狀態
         MOVLW H'F0'
         SUBWF KEYCODE,0 ;與初值比較,看是否有鍵按下
         BTFSS STATUS,Z  ;有鍵按下(不等于初值,Z為零)則結束掃描
         GOTO  GETNUM2

         MOVLW H'FB'  ;第三行置低(RC2輸出0)
         MOVWF PORTC
         NOP
         MOVF PORTC,0 ;讀RC各端口值
         ANDLW H'F0' ;屏蔽低四位,只需要低四位來判斷
         MOVWF KEYCODE ;保存端口狀態
         MOVLW H'F0'
         SUBWF KEYCODE,0 ;與初值比較,看是否有鍵按下
         BTFSS STATUS,Z  ;有鍵按下(不等于初值,Z為零)則結束掃描
         GOTO  GETNUM3

         MOVLW H'F7'  ;第四行置低(RC3輸出0)
         MOVWF PORTC
         NOP
         MOVF PORTC,0 ;讀RC各端口值
         ANDLW H'F0' ;屏蔽低四位,只需要低四位來判斷
         MOVWF KEYCODE ;保存端口狀態
         MOVLW H'F0'
         SUBWF KEYCODE,0 ;與初值比較,看是否有鍵按下
         BTFSS STATUS,Z  ;有鍵按下(不等于初值,Z為零)則結束掃描
         GOTO  GETNUM4
FH       RETLW  0    ; 子程序返回

QUDOU    MOVF PORTC,0  ;去抖處理
         SUBWF KEYCODE,0
         BTFSC STATUS,Z
         GOTO QUDOU
         GOTO FH


回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久亚洲 | 亚洲一区二区免费 | 三级黄色片在线观看 | 黄色亚洲网站 | 婷婷在线免费 | 欧美日本韩国一区二区三区 | 人人性人人性碰国产 | 国产激情视频网站 | 国产一区欧美 | 亚洲小视频在线观看 | 爱草在线 | 久久爱一区 | 色伊人久久 | 91久久精品日日躁夜夜躁欧美 | 亚洲国产片 | 蜜月va乱码一区二区三区 | 午夜精品一区二区三区在线视频 | 国产一区二区 | 正在播放国产精品 | 天天影视网天天综合色在线播放 | 男人天堂免费在线 | 狠狠撸在线视频 | 羞羞视频在线观看 | 国产精品九九九 | 热99| 亚洲精品v | 亚洲日韩中文字幕一区 | 国产九九精品 | 天天噜天天干 | 亚洲美女视频 | 成人午夜免费视频 | 亚洲欧洲日韩 | 午夜a区 | 日日骚网| 亚洲成人毛片 | 国产精品夜夜夜一区二区三区尤 | 欧美 日韩 国产 成人 在线 | 欧美激情视频网站 | 龙珠z在线观看 | 99一区二区 | 可以看黄的视频 |