打印

关于动态数码管驱动,有时闪烁的问题。

[复制链接]
5369|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
不管怎么说,先上图,结合图,麻烦各位同仁帮忙分析下,到底什么原因,



其实遇到这个问题有点意外,我是用的AT89C51,AT89C51——74HC573——ULN2803,段驱动是采用这种方式,位选用三极管。用ADC0809作为采集IC,比如要显示个18.9,有时候会出现闪烁现象,有时候又正常。在程序里面,在每位的前面,我已经加了消隐措施(就是先关闭数码管),当我用滑动变阻器模拟不同电压输入时,有时正常(亮度也够,也不闪烁,其它段也不存在拖尾现象),但有时又会出现某些段闪烁现象,稍调整一下滑动电阻值,又会不闪烁。当出现闪烁时,我测P0口闪烁的那一段电压,高电居然是3.67V(不闪烁时为4.12V),两都竟相差0.5V左右。这种电平加到2803,导致输出电压也不确定,出现某些段闪烁现象,按理说,在循环扫描时,只要采集的数据一旦计算正确,输送到P0口,高电平就是高电平,低电平就是低电平,怎么有时,会不一样呢。还请高手指点。



最后我又把P0口的上位电阻由原来的10K改为4.7K,好像感觉稍微好一点。但偶尔还是有点这种问题,稍调一下滑动阻值,会正常。真是搞不懂。软件上应该不会有问题。

相关帖子

沙发
tyw| | 2011-1-5 17:26 | 只看该作者
提高扫描频率

使用特权

评论回复
板凳
mmax| | 2011-1-5 17:32 | 只看该作者
“当出现闪烁时,我测P0口闪烁的那一段电压,高电居然是3.67V(不闪烁时为4.12V)”

示波器测的吗?

使用特权

评论回复
地板
homestar小张| | 2011-1-5 17:57 | 只看该作者
[img][/img]

使用特权

评论回复
5
gx_huang| | 2011-1-5 18:01 | 只看该作者
也许是软件的问题。
段驱动没有问题,PNP的位驱动可能有问题,最好加上拉。

使用特权

评论回复
6
itelectron| | 2011-1-5 21:30 | 只看该作者
也许是软件的问题。

可能 没有 去 重影呵呵!!

使用特权

评论回复
7
homestar小张| | 2011-1-5 21:46 | 只看该作者
师傅!这些技术上的问题我不会,我只是看了一下你的电路图。现我这里有一棵新产品,叫1642是直接可以驱运数码管的,工程给到我的图纸看上去好样比你那个要简单。它只需要一棵IC就行,三极管也不需要,能直接驱动32段,目前主要是用在电视机顶合上。不知对你是否有用。但在这里我不会上传图片。可以联系我QQ872794249

使用特权

评论回复
8
chunyang| | 2011-1-5 22:52 | 只看该作者
是楼主的软件流程问题,注意时序的控制,先锁存后打开位选通,选通时间要够,各数码管需一致,且扫描速度要满足人眼的视觉残留,这个过程不能被其它程序代码的执行打断,否则必然造成闪烁,可以在定时器中断中进行处理。

使用特权

评论回复
9
itelectron| | 2011-1-5 23:03 | 只看该作者
:lol描速度>50HZ

使用特权

评论回复
10
mmax| | 2011-1-6 08:48 | 只看该作者
8# chunyang

感觉像刷新的程序被中断、或者其他程序打断了。呵呵

要不然怎么跟外界AD的动作关联上呢?

使用特权

评论回复
11
hwwyhy| | 2011-1-6 09:27 | 只看该作者
软件里面还做了其他的事情不,能保证数码管每次扫描的时间均匀分布吗?

使用特权

评论回复
12
hjiannew|  楼主 | 2011-1-6 14:02 | 只看该作者
首先感谢各位的讨论,现把程序发上来,还请大家看下。
void main()
{
   Self_Intil();//自检
   TMOD=0x10; //定时器设置,工作方式1,16位
   TH0=0xd8;
   TL0=0xf0; //定时20ms
   ET0=1; //允许TO定时中断
   EA=1;

   TR0=1;
         
    while(1)
   {  
             zh_display();//调显示程序
                  if(i_i==4)
               {
                DataProcess();//数据处理
                     i_i=0;//清数次
                   }  
   }
}
//adc启动程序
void adcst_0809()
{
    p3_0=0;
    p3_1=0;
    p3_2=0;          //选择第一通道
  oe=0;
  _nop_();
  st=0;
  _nop_();
  st=1;
  _nop_();
  st=0;
  delaynms(1);
  while(!eoc);
     oe=1;
         _nop_();
         _nop_();
         getdata[i_i]=p1;
         oe=0;
}
/数据处理
void   DataProcess()
{  
  char count;
  int sum=0;

TR0=0;//数据处理时,关闭定时器
TH0=0xd8;
TL0=0xf0;
bai=1;
shi=1;
ge=1; //关闭数码管
          for (count=0;count<N;count++)
            {
                  sum = sum + getdata[count];
                  _nop_();
                  _nop_();
                  _nop_();       
            }
          if(sum>1)
        {
                  sum1=(char)(sum/N);       
                }
          else
                  sum1=0;
                      temp=sum1*151;
                      temp=temp/128;
                          a_data1=temp/100;
                          a_data2=temp%100/10; //数据处理
                          a_data3=temp%10;
                         
TR0=1;//数据处理完毕,重新开启定时器
}


//延时程序
void  delaynms(uint x)
{
uchar  i;
  while(x-->0)
    { for(i=0;i<13;i++)
          {_nop_();}
    }
}

//数据处理并送显程序
void  zh_display()

{   
  p0=0x00; //消隐
  le=1;//573的LE锁存使能置高
  bai=0;
  shi=1;
  ge=1;
  p0=codetab[a_data1]; //点亮百位
  le=0;
  delaynms(1);

  p0=0x00;
  le=1;
  bai=1;
  shi=0;
  ge=1;
   p0=codetab[a_data2];//点亮十位
   p0_7=1;//小数点
  le=0;
  delaynms(1);

  p0=0x00;
  le=1;
  bai=1;
  shi=1;
  ge=0;
  p0=codetab[a_data3];//点亮个位
  le=0;
  delaynms(1);
}


//T0中断处理程序
void  T0ISR(void)  interrupt   1       

{
   TR0=0;
   TH0=0xd8;
   TL0=0xf0;
        adcst_0809();//调adc启动程序   
         i_i++;                     
   TR0=1;   
  
}

使用特权

评论回复
13
hjiannew|  楼主 | 2011-1-6 14:09 | 只看该作者
我试过,在显示的时候,没有重影,只是有时候,当调到到一个值,某些段会有,比如要显示1,显示1那几个段(b.c段)很亮,但(e,f,d)也有点微亮加闪烁,但我再稍调下变阻器,微亮段会消失,显示正常。就是这种情况。照理说,数据送显没有问题的话,循环扫描不会出现这种情况呀,若是扫描频率不对,那为什么正常的时候又很正常。

使用特权

评论回复
14
chenczy| | 2011-1-6 15:43 | 只看该作者
注意一下你的延时时间(这个会出现一些段会比较亮),会闪是你扫描的频率不够快

使用特权

评论回复
15
zjswuyunbo| | 2011-1-6 15:49 | 只看该作者
2803的10脚断开试试看。
:)

使用特权

评论回复
16
chunyang| | 2011-1-6 15:50 | 只看该作者
还是程序结构的问题,前面讲过,显示不能被其它进程打断,必须定期刷新,可用定时中断实现,楼主的程序需要重新编制。

使用特权

评论回复
17
zjswuyunbo| | 2011-1-6 15:51 | 只看该作者
但有时又会出现某些段闪烁现象,稍调整一下滑动电阻值,又会不闪烁。----------------------------
从这里看,就是你采集的AD值本身就不稳定。。。

对采样结果进行滤波吧

使用特权

评论回复
18
chunyang| | 2011-1-6 15:54 | 只看该作者
楼上说的情况也要注意,但首先是扫描的连续性必须保证。

使用特权

评论回复
19
zjswuyunbo| | 2011-1-6 15:54 | 只看该作者
程序也怪怪的

使用特权

评论回复
20
maychang| | 2011-1-6 16:13 | 只看该作者
软件问题。显示应该使用定时中断,效率高(占用机器时间少),定时准确。
注意16楼chunyang的意见。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

15

帖子

1

粉丝