当前位置:   article > 正文

利用AT89C52单片机实现数码管的静态与动态显示_at89c52与数码管

at89c52与数码管

        资源work1和work2(完整工程文件在笔者本人主页的资源中,免费欢迎下载)分别完成下面两个任务:

        1、单片机接矩阵键盘和2个静态数码管,自行设计硬件电路,利用汇编语言,要求将按键值(0~15)在数码管显示。

        主要代码:

……

        MAIN:    
        
KEYSCAN:
        MOV  P1, #0F0H ; 读行(高4位)引脚前先送高电平
        MOV  A, P1          ;读入高4位行状态,判断是否有键按下
        CJNE  A, #0F0H, KEYC ; 行不全为1,说明有键按下,转按下键的处理
        LJMP KEYSCAN; 没有键按下,退出键盘识别
KEYC:    
        LCALL  DELAY10ms         ; 延时消除抖动
        MOV  A, P1    
        CJNE  A, #0F0H, KEYID   ; 确实有键按下,则转入键识别处理
        LJMP  KEYSCAN                 ; 是干扰引起的抖动,不予处理
DELAY10ms:
        MOV  R7, #25     // ;延时10ms子程序
L1:
        MOV  R6, #200
L2:        
        DJNZ  R6, L2
        DJNZ  R7,L1
        RET
KEYID:
        MOV  SCANCODE, A  ; 低四位代表列,为0000;高四位代表行
        //行列反转,置列全扫描输出,行为输入
        MOV  P1, #0FH          ;读列(低4位)引脚前先送高电平
        NOP
        NOP                            ; 适当短延时,待端口电平稳定
        MOV  A, P1                ; 闭合键的对应行被拉低,将行状态存入A中
        ADD  A, SCANCODE
        MOV  SCANCODE, A ; 将行列相加,得到键扫描码SCANCODE
        //下面等待键释放
KEYUP:    
        MOV  A, P1       
        CJNE  A, #0FH, KEYUP  ; 按键没有松开,则继续等待
        LCALL  DELAY10ms      ; 延时消除抖动
        MOV  A, P1     
        CJNE  A, #0FH, KEYUP  
        MOV  DPTR,  #KEYCODE ; 按键编码处理
        MOV  KEY_index, #0
KEYLOOP:
        MOV  A, KEY_index
        MOVC  A, @A+DPTR
        CJNE  A, SCANCODE, NEXTKEY
        MOV B,#10
        MOV A,KEY_index
        DIV AB
        MOV  DPTR,  #TABLE     //  ;查8段码表
        MOVC  A,  @A+DPTR
        MOV  P2, A               // ;段码,输出显示十位
        MOV A,B
        MOV  DPTR,  #TABLE     //  ;查8段码表
        MOVC  A,  @A+DPTR
        MOV  P3, A               // ;段码,输出显示个位
        LJMP KEYSCAN
NEXTKEY:
        INC KEY_index
        AJMP KEYLOOP

……

        效果如图1:

ce0fcbca6e5e42a9b01fcdd72ceb984b.gif

图1

        2、单片机接独立按键和2个动态数码管,自行设计硬件电路,利用汇编语言,要求将按键次数(0~255)在数码管显示

        主要代码:

……

START:    
        MOV R1,#0
        MOV P1,#0
CHK_KEY:
        MOV  P3, #0FFH   //;读引脚前先写1
        MOV  A, P3            // ;读按键值
        CPL  A                    // ;取反,按下的键相应为1
        JZ  CHK_KEY     //   ;无键按下,重新查询
        LCALL  D10ms     // ;延时去抖动
        MOV  A, P3
        CPL  A
        JZ  CHK_KEY
        JB  ACC.2, KEY    //;是键按下,转KEY处理
        LJMP  CHK_KEY
KEY:    
        JNB P3.2,KEY//若键未松开原地等待
        INC R1//松开加一
        
SHOW:
        MOV A,R1
        CLR P1.6
        SETB P1.4
        CLR P1.5//百位位选,先将个位位选清零
        MOV B,#100
        DIV AB
        MOV  DPTR,  #TAB     //  ;查8段码表
        MOVC  A,  @A+DPTR
        MOV  P2, A               // ;段码,输出显示百位
         LCALL  D1ms
        CLR P1.4
        CLR P1.6
        SETB P1.5//十位位选,先将百位位选清零
        MOV A,B
        MOV B,#10
        DIV AB
        MOV  DPTR,  #TAB     //  ;查8段码表
        MOVC  A,  @A+DPTR
        MOV  P2, A               // ;段码,输出显示十位
         LCALL  D1ms
        CLR P1.5
        CLR P1.4//个位位选,先将十位位选清零
        SETB P1.6
        MOV A,B
        MOV  DPTR,  #TAB      // ;查8段码表
        MOVC  A,  @A+DPTR
        MOV  P2, A              //  ;段码,输出显示个位
         LCALL  D1ms
        JB P3.2,SHOW
        LJMP CHK_KEY
D10ms:  
        MOV  R7, #25     // ;延时10ms子程序
L1:
        MOV  R6, #200
L2:        
        DJNZ  R6, L2
        DJNZ  R7,L1
        RET
        D1ms:
        MOV  R7, #25     // ;延时1ms子程序
LL1:
        MOV  R6, #20
LL2:        
        DJNZ  R6, L2
        DJNZ  R7,L1
        RET

……

        效果如图2:

6d2aefe2bada4ac796073c98108ebfe9.gif

图2

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/495105
推荐阅读
相关标签
  

闽ICP备14008679号