单片机控制数码管同时闪烁结果闪烁频率不一致

2020-03-11 19:35发布

用定时器实现两个数码管同时点亮的程序:


if(smgtime==10)  
      {
          smg_show(10);
        WE_1=1;
        WE_2=0;
        smg_show(data/10);
      }
      if(smgtime==20)
      {   smg_show(10);
        WE_1=0;
        WE_2=1;
        smg_show(data);
        smgtime=0;

      }


现在想让数码管实现闪烁的功能,两个数码管按照一定的频率闪烁,在同时点亮的基础上加了一个关闭数码管的功能,我是这样编写的,
if(smgtime==10)  
      {
          smg_show(10);
        WE_1=1;
        WE_2=0;
        smg_show(data/10);
      }
      if(smgtime==20)
      {   smg_show(10);
        WE_1=0;
        WE_2=1;
        smg_show(data);

      }
      if(smgtime==30)
      {
          smg_show(10);
          smgtime=0;
      }


出现的问题是,第二个数码管的亮度比第一个数码管亮度明显,第一个数码管出现明显的闪烁,第二个数码管闪烁不明显。硬件电路是这样设计的,
74HC573驱动段选,数码管是共阴极的,单片机通过三极管来控制公共端。
现在问题不知道出现在哪里,请大家帮我分析一下,谢谢。

 

20条回答
tianxj01
2020-03-14 03:12
你这个573驱动笔划段,三极管控制位选,首先得编写一个带合适刷新率的显示程序。
在合适的动态扫描频率下面,定时更新显示。鉴于动态扫描的特征,一般我们扫描频率定义在300Hz-1000KHz之间。
为了实现驱动的统一性,我们选择字符闪烁,其实不是在位扫描上面做文章,这里显示函数是功能一样、确定的,只是需要闪烁的字符,将按照闪烁频率轮流显示空白和数字而已,比如我定义半秒闪烁,则0.25S显示欲显示的字符而0.25S显示空白。这样我们看见的实际效果,就是字符半秒周期的闪烁。
在实际显示函数,可以加一个闪烁参数传递,当需要闪烁,根据内部一个比如闪烁周期一一半的计时单元,为奇偶判断显示空白还是正常字符去查表驱动输出,这样就一个函数归一化实现了字符动态扫描+是否闪烁。
同理,多位动态扫描,数据显示的高位灭0,同样的也是驱动输出一个空白。而且该空白并不需要单独做,只需要把一个00(共阴)、或者FF(共阳),加在BCD-7段的驱动表格最末尾就可以了。

一周热门 更多>