用Tinkercad学arduino之 74HC595寄存器控制8个led跑马灯

项目地址:https://www.tinkercad.com/things/5nsSWyQOAkI-chenillard

// Arduino Pattern Creator by PhilCam
//    http://my.free.time.free.fr/
// Use with Uno R3 + 74HC595 + 8 leds

int dataPin = 2;
int latchPin = 3;
int clockPin = 4;
int seq[] = {128, 192, 224, 240, 248, 252, 254, 255, 127, 63, 31, 15, 7, 3, 1, 0, 1, 3, 7, 15, 31, 63, 127, 255, 254, 252, 248, 240, 224, 192, 128, 0};

void setup()
{
  pinMode(dataPin, OUTPUT);
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
}

void loop()
{
  for (int n = 0; n < 32; n++)
  {
    digitalWrite(latchPin, LOW);  //Pull latch LOW to start sending data
    shiftOut(dataPin, clockPin, MSBFIRST, seq[n]);  //Send the data
    digitalWrite(latchPin, HIGH);  //Pull latch HIGH to stop sending data
    delay(100);
  }
}

如果需要做8个LED灯或者16个LED灯的跑马灯效果时,数字引脚(Digital Pin)明显会不够用;这时我们可以使用寄存器来实现数字引脚的扩充,这里使用了74HC595这个型号的位移缓存器进行实验。

先看下74HC595的引脚说明,共16个引脚,8个输出引脚对应可以控制8个LED,详情参考下图:

 

  • Q0 - Q7(第15脚,第1-7脚):8位并行数据输出
  • GND(第8引脚):地
  • Q7’(第9引脚):串行数据输出
  • MR(第10引脚):主复位(低电平)
  • SHCP(第11引脚):数据输入时钟线
  • STCP(第12引脚):输出存储器锁存时钟线
  • OE(第13引脚):输出有效(低电平)
  • DS(第14引脚):串行数据输入
  • VCC(第16引脚):电源

74HC595寄存器可以简单的理解为是一组8个的开关组,如上图(8个开关控制LED),这组开关的开关用0和1来控制,0为关,1为开。要让这组灯从左到右像跑马灯那样逐个亮,可以简单列出来这组开关:

  • 1 0 0 0 0 0 0 0 第一个亮,其他关
  • 0 1 0 0 0 0 0 0 第二个亮,其他关
  • 0 0 1 0 0 0 0 0 第三个亮,其他关
  • 0 0 0 1 0 0 0 0 第四个亮,其他关
  • 0 0 0 0 1 0 0 0 第五个亮,其他关
  • 0 0 0 0 0 1 0 0 第六个亮,其他关
  • 0 0 0 0 0 0 1 0 第七个亮,其他关
  • 0 0 0 0 0 0 0 1 第八个亮,其他关

按顺序循环上面这组开关就是一个跑马灯。要让寄存器出现这样的开关组,只需要把这组开关转换成十进制(这八组开关对应的十进制数字为: 128, 64, 32, 16, 8, 4, 2, 1 ),然后往寄存器写即可;

TIPS:

  • 一个74HC595寄存器最大只能处理256(2^8)以内的数字,需要处理更大的数字(更多灯)则加多一个/多个寄存器即可
  • 数字引脚可以输入输出,扩展输入引脚需要的寄存器跟扩张输出引脚的寄存器是不同的
  • 加多一个74HC595寄存器接线:
    • 新加寄存器的DS接上一个寄存器的Q7’
    • 新加寄存器的SHCP接上一个寄存器的SHCP
    • 新加寄存器的STCP接上一个寄存器的STCP

引用一个图,可以直观对寄存器的理解。

posted @ 2020-12-03 18:33  meetrice  阅读(66)  评论(0编辑  收藏