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

摘要:
让我们看看74HC595的引脚描述。总共有16个引脚,8个输出引脚可以控制8个LED。有关详细信息,请参阅下图:Q0-Q7:8位并行数据输出GND:接地Q7’:串行数据输出MR:主复位(低电平)SHCP:数据输入时钟线STCP:输出存储器锁存时钟线OE:输出有效(低电平,该组的开关由0和1控制,0关闭,1打开。

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

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

// 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,详情参考下图:

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

  • 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

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

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

免责声明:文章转载自《用Tinkercad学arduino之 74HC595寄存器控制8个led跑马灯》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[转]Oracle存储过程给变量赋值的方法VB创建类模块DLL文件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux中的汇编简介

GNU as汇编语法 GNU汇编语法使用的是AT&T汇编它和Intel汇编的语法主要有以下一些不同: AT&T汇编中的立即操作数前面要加上'$',寄存器操作数名前要加上百分号'%',绝对跳转操作数前要加上'*',Intel的语法均不包含这些符号; AT&T语法与Intel语法中使用的源操作数和目的操作数顺序正好相反,AT&...

Arduino上“Collect2.exe: error: ld returned 5 exit status”错误的解决方法

1.运行环境 Windows xp;Arduino1.6.11 IDE. 2.问题 在Arduino编译时,经常出现如下的错误: collect2.exe: error: ld returned 5 exit statusexit status 1Error compiling for board Arduino Duemilanove or Diecim...

STM32 USART整理说明(转)

  该接口通过3个引脚连接到另外的外部设备上。    任何USART双向通信都至少需要两个引脚:接收数据输入RX和发送数据输出TX。    当发送器禁能时输出引脚恢复到I/O端口配置。当发送器使能时且无数据发送,TX引脚为高电平。     字长可以通过设置USART_CR1寄存器中的M位来选择是8位还是9位。    TX引脚在起始位期间为低,停止位期间为高...

RS485通信和Modbus协议(转)

转自:http://www.51hei.com/bbs/dpj-23230-1.html     在工业控制、电力通讯、智能仪表等领域,通常情况下是采用串口通信的方式进行数据交换。最初采用的方式是RS232接口,由于工业现场比较复杂,各种电气设备会在环境中产生比较多的电磁干扰,会导致信号传输错误。除此之外,RS232接口只能实现点对点通信,不具备联网功能,...

时序分析之Arrival Time

首先要理解两个概念:launch edge 和latch edge launch edge 是源寄存器发送数据的时钟沿,是时序分析的起点。 latch edge是目的寄存器捕获数据的时钟沿,是时序分析的终点。 如图示,源寄存器在0ns时发送数据,目的寄存器在5ns时采样数据,两者刚好相差一个时钟周期。 Data Arrival Time :从launch...

定时器中断---那些年我们一起玩mini2440(arm9)裸机

(时钟体系)http://blog.sina.com.cn/s/blog_815420370101ni84.html 时钟概念: ★时钟脉冲:一个按一定电压幅度,一定时间间隔连续发出的脉冲信号;   ★时钟频率:在单位时间(如:1秒)内产生的时钟秒冲数; 时钟的作用: 时钟信号是时序逻辑的基础,它用于决定逻辑单元中的状态何时更新。数字芯片中众多的晶体管都工...