您好,欢迎来电子发烧友网! ,新用户?[免费注册]

您的位置:电子发烧友网>源码下载>C/C++语言编程>

数码管显示的多种方式

大小:0.15 MB 人气: 2017-09-06 需要积分:0

1、实现3*4按键数码管显示

;******************************************************************************
;*  描述:                                                                                                                                                         
;*         实现3*4按键数码管显示,     按K1 对应四个数码管显示1                                     ;          按K2 对应四个数码管显示2,  按K3 对应四个数码管显示3
;          按K4 对应四个数码管显示4,  按K5 对应四个数码管显示5
;          按K6 对应四个数码管显示6,  按K7 对应四个数码管显示7
;          按K8 对应四个数码管显示8,  按K9 对应四个数码管显示9
;          按K10 对应四个数码管显示a, 按K11 对应四个数码管显示b
;          按K12 对应四个数码管显示C
;          Y1接P2.0  Y2接P2.1  Y3接P2.2    X1接P2.4  X2接P2.5  X3接P2.6   X4接P2.7  
;******************************************************************************
;* 【版权】 Copyright(C)东哥单片机学习网 www.picavr.com  All Rights Reserved       
;* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!                                  
;******************************************************************************
             DATA1   EQU    30H        ;
      DATA2   EQU    31H        ;
             DATA3   EQU    32H        ;
             DATA4   EQU    33H        ;
      KEYBUF  EQU    34H        ;
;-------------------------------------------
             ORG        0000H          ;
             LJMP       START          ;转入主程序
             ORG        0030H          ;
START:
             MOV        SP,#60H        ;初始化堆栈指针 
      MOV        P0,#0FFH       ;初始化I/O口
      MOV        P1,#0FFH       ;
      MOV        P2,#0FFH       ;
      MOV        A,#00H         ;
      MOV        DATA1,A        ;设定显示初值
      MOV        DATA2,A        ;
           MOV        DATA3,A        ;
      MOV        DATA4,A        ;
;*******************************************
MAIN:
             CALL       DISP           ;调显示子程序
      CALL       KEYWORK        ;
      AJMP       MAIN           ;
;*******************************************
;显示子程序
;******************************************
DISP:
      MOV A,DATA1        ;
             MOV        DPTR,#TABLE    ;   
      MOVC A,@A+DPTR      ;取数据表数据
      MOV P0,A           ;DATA1 显示代码传送到P0口
      CLR P1.0           ;
      LCALL DELAY1MS       ;
      SETB P1.0           ;
      MOV A,DATA2        ;
      MOVC A,@A+DPTR      ;取数据表数据
      MOV P0,A           ;DATA2 显示代码传送到P0口
      CLR P1.1           ;
      LCALL DELAY1MS       ;
      SETB P1.1           ;
      MOV A,DATA3        ;
       MOVC A,@A+DPTR      ;取数据表数据
      MOV P0,A           ;DATA3 显示代码传送到P0口
      CLR P1.2           ;
      LCALL DELAY1MS       ;
      SETB P1.2           ;
      MOV A,DATA4        ;
      MOVC A,@A+DPTR      ;取数据表数据
      MOV P0,A           ;DATA4 显示代码传送到P0口
      CLR P1.3           ;
      LCALL DELAY1MS       ;
      SETB P1.3           ;
      RET                       ;
;*******************************************

;******************************************* 
;4*4行列扫描查键子程序 
;*******************************************
KEYWORK:     MOV    P2,#0FFH          ;置P2口為输入状态
             CLR    P2.0              ;扫描第1行(第1行為0)
             MOV    A,P2              ;读入P2口值
             ANL    A,#0F0H           ;低4位为0
             CJNE   A,#0F0H,KEYROW    ;高4位不为全1(有鍵按下)轉KEYROW
             SETB   P2.0              ;
             CLR    P2.1              ;扫描第2行(第2行為0)
             MOV    A,P2              ;读入P2口值
             ANL    A,#0F0H           ;低4位为0
             CJNE   A,#0F0H,KEYROW    ;高4位不为全1(有鍵按下)轉KEYROW
             SETB   P2.1              ;
             CLR    P2.2              ;扫描第3行(第3行為0)
             MOV    A,P2              ;读入P2口值
             ANL    A,#0F0H           ;低4位为0
             CJNE   A,#0F0H,KEYROW    ;高4位不为全1(有鍵按下)轉KEYROW
             SETB   P2.2              ;
             RET                      ;子程序返回
;***********************************************************************
KEYROW:      ACALL  DISP              ;消抖處理
             MOV    A,P2              ;再讀入P2口值
             ANL    A,#0F0H           ;低4位为0
             CJNE   A,#0F0H,KEYCHE    ;高4位不为全1確有鍵按下轉KEYCHE
KEYOUT:      RET                      ;干擾子程序返回
;------------------------------------------------------
KEYCHE:      MOV    A,P2              ;读入P2口值
             MOV    KEYBUF,A          ;放入KEYBUF暫存
CJLOOP:      ACALL  DISP              ;調顯示子程序
             MOV    A,P2              ;读入P2口值
             ANL    A,#0F0H           ;低4位为0
             CJNE   A,#0F0H,CJLOOP    ;高4位为全1(鍵還按住),轉CJLOOP等待釋放
             MOV    R7,#00H           ;鍵釋放,置R7初值為#00H(查表次數)
             MOV    DPTR,#KEYTAB      ;取鍵值表首址
CHEKEYLOOP:  MOV    A,R7              ;查表次數入A
             MOVC   A,@A+DPTR         ;查表
             XRL    A,KEYBUF          ;查表值與P2口讀入值比較
             JZ     K1                ;為0(相等)轉KEYOK
             INC    R7                ;不等,查表次數加1
             CJNE   R7,#0DH,CHEKEYLOOP;查表次數不超過12次轉LHEKEYLOOP再查
             AJMP   KEYOUT            ;12次到,退出
;***********************************************************************
K1:       
             MOV    A,R7              ;查表次數入 A(即鍵號值)
             CJNE   A,#00H,K2         ;
             MOV    A,#01H            ;
             MOV    DATA1,A           ;
      MOV    DATA2,A           ;
      MOV    DATA3,A           ;
      MOV    DATA4,A           ;
             AJMP   KEYOUT            ;
K2:  
             MOV    A,R7              ;
             CJNE   A,#01H,K3         ;
             MOV    A,#02H            ;
             MOV    DATA1,A           ;
      MOV    DATA2,A           ;
      MOV    DATA3,A           ;
      MOV    DATA4,A           ;
             AJMP   KEYOUT            ; 
K3:  
             MOV    A,R7              ;
             CJNE   A,#02H,K4         ;
             MOV    A,#03H            ;
             MOV    DATA1,A           ;
      MOV    DATA2,A           ;
      MOV    DATA3,A           ;
      MOV    DATA4,A           ;
             AJMP   KEYOUT            ;  
K4:  
             MOV    A,R7              ;
             CJNE   A,#03H,K5         ;
             MOV    A,#04H            ;
             MOV    DATA1,A           ;
      MOV    DATA2,A           ;
      MOV    DATA3,A           ;
      MOV    DATA4,A           ;
             AJMP   KEYOUT            ; 
;-------------------------------------------
K5:
             MOV    A,R7              ;
             CJNE   A,#04H,K6         ; 
             MOV    A,#05H            ;
             MOV    DATA1,A           ;
      MOV    DATA2,A           ;
      MOV    DATA3,A           ;
      MOV    DATA4,A           ;
             AJMP   KEYOUT            ; 
K6:
             MOV    A,R7              ;
             CJNE   A,#05H,K7         ; 
             MOV    A,#06H            ;
             MOV    DATA1,A           ;
      MOV    DATA2,A           ;
      MOV    DATA3,A           ;
      MOV    DATA4,A           ;
             AJMP   KEYOUT            ;
K7:
             MOV    A,R7              ;
             CJNE   A,#06H,K8         ;
             MOV    A,#07H            ; 
             MOV    DATA1,A           ;
      MOV    DATA2,A           ;
      MOV    DATA3,A           ;
      MOV    DATA4,A           ;
             AJMP   KEYOUT            ;
K8:
             MOV    A,R7              ;
             CJNE   A,#07H,K9         ; 
             MOV    A,#08H            ;
             MOV    DATA1,A           ;
      MOV    DATA2,A           ;
      MOV    DATA3,A           ;
      MOV    DATA4,A           ;
             AJMP   KEYOUT            ;
K9:
             MOV    A,R7              ;
             CJNE   A,#08H,K10         ; 
             MOV    A,#09H            ;
             MOV    DATA1,A           ;
      MOV    DATA2,A           ;
      MOV    DATA3,A           ;
      MOV    DATA4,A           ;
             AJMP   KEYOUT            ;
K10:
             MOV    A,R7              ;
             CJNE   A,#09H,K11        ; 
             MOV    A,#0AH            ;
             MOV    DATA1,A           ;
      MOV    DATA2,A           ;
      MOV    DATA3,A           ;
      MOV    DATA4,A           ;
             AJMP   KEYOUT            ;
K11:
             MOV    A,R7              ;
             CJNE   A,#0AH,K12        ; 
             MOV    A,#0BH            ;
             MOV    DATA1,A           ;
      MOV    DATA2,A           ;
      MOV    DATA3,A           ;
      MOV    DATA4,A           ;
             AJMP   KEYOUT            ;
K12:
             MOV    A,R7              ;
             CJNE   A,#0BH,K12_1      ; 
             MOV    A,#0CH            ;
             MOV    DATA1,A           ;
      MOV    DATA2,A           ;
      MOV    DATA3,A           ;
      MOV    DATA4,A           ;
K12_1:
             AJMP   KEYOUT            ;
;******************************************* 
DELAY1MS: 
     MOV         R4,#2          ;延时子程序
DEL1:
     MOV         R5,#250        ;
     DJNZ R5,$           ;
     DJNZ R4,DEL1        ;
            RET                        ;
;-------------------------------------------
DELAY10MS: 
     MOV         R4,#20         ;
DEL2:
     MOV         R5,#250        ;
            DJNZ        R5,$           ;
     DJNZ        R4,DEL2        ;
            RET                        ;
;******************************************* 
TABLE:
      DB 0C0H                  ;0  11000000B  
      DB 0F9H                  ;1  11111001B 
      DB 0A4H                  ;2  10100100B 
      DB 0B0H                  ;3  10110000B
      DB 99H                   ;4  10011001B
      DB 92H                   ;5  10010010B
             DB 82H                   ;6  10000010B
      DB 0F8H                  ;7  11111000B 
      DB 80H                   ;8  10000000B
      DB 90H                   ;9  10010000B  
             DB 88H                   ;A  10001000B
      DB 83H                   ;b  10000011B
      DB 0C6H                  ;C  11000110B
;********************************************
;鍵號對應P2口數值表(同時按下兩鍵為無效操作)
KEYTAB:      DB  0EEH,0DEH,0BEH,7EH   ;
             DB  0EDH,0DDH,0BDH,7DH   ;
             DB  0EBH,0DBH,0BBH,7BH   ;
             END                      ;

非常好我支持^.^

(0) 0%

不好我反对

(0) 0%

      发表评论

      用户评论
      评价:好评中评差评

      发表评论,获取积分! 请遵守相关规定!