arduino 3位数码管 余辉显示 74hc164

无意拆了一个万利达的卫星接收盒,控制面板有几个按钮、一个3位七段数码管、一个74hc164、一个IR,排线的接口分别是V5+、sda、clk、lock、ir、det、o、t、k、GND。查了74hc164发现是一个串口数据转并口,8位并口连接7段数码管。我就纳闷了一个hc164怎么能在三位显示不同的数值呢?利用余辉,第一次与第一次打印同一字母,间隔3*(3~7)人眼分辨不了。原理是这样的:第一步显示第一位0,delay(3-7毫秒),第2步显示第二位1,delay(3-7秒),第三步显示第3位2,delay(3-7秒),然后loop循环,那么第一位就是0毫秒,9毫秒,18毫秒.....显示0;3、12、21毫秒显示1;6、15、24毫秒显示2;间隔9毫秒的刷新率人眼分辨不了。最多间隔:如果是30毫秒刷新率是能看到数字在闪烁。最少间隔:如果第一位和第二位小于delay(1),则分辨不出数字。

#include 
 
// use binary notation to discribe our number layouts
byte none  = B00000001 ;//此处由于是接线不是标准,所以得自己试验是如何编码
byte zero  = B00000011 ;
byte one   = B00000110;//不对
byte two   = B11011010;
byte three = B11010110;
byte four  = B10100110;
byte five  = B11110100;
byte six   = B11111100;
byte seven = B01000110;
byte eight = B11111110;
byte nine  = B11110110;
 
#define COM1 4
#define COM2 5
#define COM3 6


#define data 2
#define clock 3
 
 
void setup()
{
  pinMode(clock, OUTPUT); // make the clock pin an output
  pinMode(data , OUTPUT); // make the data pin an output3
 
  pinMode(COM1,OUTPUT);
  pinMode(COM2,OUTPUT);
  pinMode(COM3,OUTPUT);
 
}
 
void loop()
{
  //shiftOut(data, clock, LSBFIRST, none);
  Display(1,zero);     //第1位显示1
  delay(3);
  Display(2,one);     //第2位显示2
  delay(3);
  Display(3,two);     //第3位显示3
  delay(3);

}
 
void Display(unsigned char com,unsigned char num)     //显示函数,com可选数值范围1-4,num可选数值范围0-9
{
shiftOut(data, clock, LSBFIRST, none);//去除余辉
 
  switch(com)           //选通位选
  {
    case 1:
      digitalWrite(COM1,LOW);   //选择位1
      digitalWrite(COM2,HIGH);
      digitalWrite(COM3,HIGH);
     
      break;
    case 2:
      digitalWrite(COM1,HIGH);
      digitalWrite(COM2,LOW);   //选择位2
      digitalWrite(COM3,HIGH);
      
      break;
    case 3:
      digitalWrite(COM1,HIGH);
      digitalWrite(COM2,HIGH);
      digitalWrite(COM3,LOW);   //选择位3
          
      break;
    default:break;
  }
 
shiftOut(data, clock, LSBFIRST, num);//显示
}
七段数码管显示.jpg

你可能感兴趣的:(arduino 3位数码管 余辉显示 74hc164)