2014-06-09 31 views
0

我有一个3.5数字7段LED显示屏,我试图用Arduino驱动。 Arduino运行带锁存器的移位寄存器(M74HC595)。 移位寄存器的8个输出端通过2000欧姆电阻器进入显示器的8段引脚。 显示器的三位控制引脚转到Arduino上的三个引脚。 显示屏有一个共阴极,因此当控制引脚为低电平时,该数字打开,当该数字处于高电平时,该数字关闭。Arduino:复用7段显示问题

这工作正常,只要我只点亮一个数字,或点亮多个数字具有相同的段,但一旦我尝试切换两个或三个数字之间的段,这一切都搞砸了。 不应该有光的部分,而是有一个弱光,这与读取实际数字有关。

如果我在写入每个数字之间添加延迟,那么不需要的光线会变暗一些,但很快,整个事物就会因为高延迟而闪烁并且无法使用。

我做错了什么?

为了使一个特定的数字,我上设置的Arduino的控制引脚,例如这是我使第一位数:

digitalWrite(digit1, LOW); 
digitalWrite(digit2, HIGH); 
digitalWrite(digit3, HIGH); 

然后推号码到移位寄存器并将其移动到闩锁(并且因此到显示):

digitalWrite(latchPin, LOW); 
shiftOut(dataPin, clockPin, MSBFIRST, number); 
digitalWrite(latchPin, HIGH); 

这是我的方案:

Scheme

回答

2

首先,只有在输出准备就绪后,才能通过公共引脚启用数字。其次,它看起来像是在启用了引脚的情况下切换数字,并且在数字变为可见之后您正在更改它们,因此为什么在使用不同的数字时会变暗。

你应该按照这样的循环。

  1. 推出你想要的值并启用锁存器。
  2. 用公共引脚点亮数字。
  3. 睡眠x毫秒。
  4. 用公共引脚关闭数字。
  5. 返回1并重复其他数字。

这个想法是,3位数字实际上会非常快地闪烁,但对于人眼来说,它总是看起来像是一直在闪烁。如果您首先启用它们,那么74595输出中的最后一位数字将会有一个值,并且在一小段时间内会显示该值。当你切换到实际值时,它会看起来更暗,因为它可见的时间更少。当数字相同时,看起来没有什么不对。

+0

你是对的!它只需切换操作顺序,以便在设置锁存器后启用该数字。谢谢 – user2503048

+0

不客气。如果解决了你的问题,不要忘记接受答案。 –