当前位置: 代码迷 >> 单片机 >> 关于数码管显示闪烁有关问题
  详细解决方案

关于数码管显示闪烁有关问题

热度:250   发布时间:2016-04-28 14:42:59.0
关于数码管显示闪烁问题
CAN总线接收数据通过数码管显示出来,可是数码管显示闪烁。求大神解答。
下面是数码管显示程序:
void delay(unsigned char count)      //delay

{   

  unsigned char i;

  while(count)

  {

    i=200;

    while(i>0)

    i--;

    count--;

  }

}
void display18B20(unsigned char temp,unsigned char temp2)             
{

   unsigned char A1,A2;

   //ser=temp/10;           //分离出三位要显示的数字

   SBUF=temp;
   

   A1=temp/10;
   A2=temp%10;
  
   if(temp<10){low=20;}   //设置温度显示下限
   if(temp>35){high=28;}   //设置温度显示上限 
   display[3]=A1;
   display[2]=A2&0x7f; 
   display[1]=temp2;
   display[0]=12;
 
   P1=table[A1];       //显示百位
    
   P2_0=1;//选通第一位数码管的阳极位选端,即给数码管的共阳极供电
   P2_1=1;//选通第二位数码管的阳极位选端,即给数码管的共阳极供电
   P2_2=1;//选通第一位数码管的阳极位选端,即给数码管的共阳极供电
   P2_3=0;//选通第二位数码管的阳极位选端,即给数码管的共阳极供电
 
   delay(1);

   P1=table[A2]&0x7f;          //显示十位 带小数点的

    P2_0=1;//选通第一位数码管的阳极位选端,即给数码管的共阳极供电
    P2_1=1;//选通第二位数码管的阳极位选端,即给数码管的共阳极供电
    P2_2=0;//选通第三位数码管的阳极位选端,即给数码管的共阳极供电
    P2_3=1;//选通第四位数码管的阳极位选端,即给数码管的共阳极供电
    delay(1);
    P1=table[temp2];          //显示十位 带小数点的

    P2_0=1;
    P2_1=0;
    P2_2=1;
    P2_3=1;
    delay(1);
    P1=table[12];          //c

    P2_0=0;
    P2_1=1;

    P2_2=1;
    P2_3=1;
 
   delay(1);

}
------解决思路----------------------
调整下delay时间试试
先试下减小
------解决思路----------------------
数码显示要想不闪烁,要注意刷新率,可以放在50Hz以上,也就是每一个数码管都能保证每秒点亮50次
你在子程序里刷新不行的,刷新率没有保障,任何其它程序运行时间数码管都不能刷新
正确做法是:
显示子程序只计算数据,放到变量中,不负责实际点亮
单独做一个定式中断程序负责刷新,各个位轮流显示,每次进中断关闭上一位显示,打开下一位显示
  相关解决方案