找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3121|回复: 1
收起左侧

按键加减控制数码管显示问题

[复制链接]
ID:139593 发表于 2016-9-17 09:49 | 显示全部楼层 |阅读模式
本帖最后由 f181912356 于 2016-9-17 09:58 编辑

  本人刚按例程写了一段按键控制数码管加减显示0-99数字的问题,现出现十位数字有的能显示,有的显示不出来的问题,请高手指教,具体代码如下:

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
sbit dula=P2^0;
sbit wei=P2^1;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar num;
void delay(uint ms)   
{
  uchar j;
        while(ms--)
         for(j=110;j>0;j--);
}

void keyscan()
{

   if(key1==0)
   {
    delay(10);
                 if(key1==0)
                 {
       num++;
                         if(num==99)
                                 num=0;
                         while(!key1);
     }
   }                 
         
         if(key2==0)
   {
    delay(10);
                 if(key2==0)
                 {
                           if(num==0)
                                 num=99;
                                 num--;
                         while(!key2);
     }
   }
if(key3==0)
   {
    delay(10);
                 if(key3==0)
                 {
                   num=99;
                         while(!key3);
     }
   }
         if(key4==0)
   {
    delay(10);
                 if(key4==0)
                 {
                   num=0;
                         while(!key4);
     }
   }
}

void disp(uchar num1)
{
  uchar shi,ge;
        shi=num1/10;
        ge=num1%10;
        
        wei=1;
        P0=0XFE;
        wei=0;
        dula=1;
        P0=table[shi];
        dula=0;

        delay(5);
        wei=1;
        P0=0XFD;
        wei=0;
        dula=1;
        P0=table[ge];
        dula=0;
  delay(5);
        
}
        
        void main()
{
  while(1)
        {
        keyscan();
        disp(num);
        }
}

单片机电路图如附件,仿真时十位不能显示的状况如下




小Q截图-20160917095733.png
小Q截图-20160917095001.png
小Q截图-20160917095733.png
回复

使用道具 举报

ID:123289 发表于 2016-9-18 17:13 | 显示全部楼层
看图有6位LED:
请考虑:每4ms显示一位,用24ms将6个LED显示完毕,周而复始,永不停息!
经验告诉你,低于4ms LED会用抖动感!
关键:
显示次序:当前需要显示的位译成LED码→关全部显示→开当前需要显示的位→准备下个显示位→4ms后重复,周而复始,永不停息!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表