玩转树莓派我用 Linux玩转Arduino

Arduino基础入门篇22—74HC595扩展IO

2018-09-21  本文已影响6人  TonyCode

Arduino开发板的普通IO引脚是有限的,必要时要对IO口进行扩展,才能满足外部设备对IO口的需求。本篇介绍74HC595芯片,使用它来扩展Arduino的IO口,用3个IO来控制8路LED灯。

1. 74HC595介绍

74HC595芯片是一个串行输入,并行输出设备。其内部包括一个8位移位寄存器、一个存储器以及三态输出门电路,其中移位寄存器和存储器都有相互独立的时钟。

74HC595芯片

1. 引脚说明

74HC595芯片引脚定义说明如下所示:

管脚定义

2. 操作说明

根据74HC595引脚说明,有三个重要的引脚:数据引脚(data)、锁存引脚(latch)、时钟引脚(clock)。

74HC595操作步骤 操作说明
latch = LOW 只有为low时才可以输入数据
data 通过data传输数据第一位,HIGH/LOW
clock = HIGH 数据锁存
clock = LOW 准备下一个
data… 继续上面步骤,直到传输完成
clock = HIGH 储存全部的数据
clock = LOW 禁止数据再进行传输
latch = HIGH 并行送出数据

2. 实验材料

3. 实验步骤

1. 根据原理图搭建电路。

8个LED发光二极管的负极接开发板GND,正极分别接入220Ω限流电阻,电阻另一端分别接入74HC595芯片的Q0~Q7输出引脚。

74HC595的VCC、MR引脚接入开发板5V,OE、GND引脚接入开发板的GND。DS、SHCP、STCP这三个控制引脚分别接入开发板的8、9、10数字引脚。

实验原理图如下图所示:

实验原理图

实物连接图如下图所示:

实物连接图

2. 新建sketch,拷贝如下代码替换自动生成的代码并进行保存。

/*
   Shift
   74HC595扩展IO,串行驱动8路LED灯
*/
int latchPin = 10;//锁存引脚
int clockPin = 9; //时钟引脚
int dataPin = 8; //数据引脚

void setup ()
{
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT); //让三个脚都是输出状态
}
void loop()
{
  for (int data = 0; data < 255; data++)
  {
    digitalWrite(latchPin, LOW); //将ST_CP口上加低电平让芯片准备好接收数据
    shiftOut(dataPin, clockPin, LSBFIRST, data);
    digitalWrite(latchPin, HIGH); //将ST_CP这个针脚恢复到高电平
    delay(1000); //暂停1秒钟观看显示效果
  }
}

3. 连接开发板,设置好对应端口号和开发板类型,进行程序下载。

程序下载

4. 实验现象

8个LED灯移位进行亮灭显示。

实验现象

5. 函数介绍

shiftOut()

6. 实验分析

程序中将74HC595三个控制引脚设置为输出模式,然后使用shiftOut()函数将数据进行移位写入74HC595的移位寄存器,然后通过控制锁存引脚将数据进行锁存输出。shiftOut()函数的value参数是一个字节长度,即每执行一次会将一个字节(最大值255)进行移位输出。如果移位的数据大于一个字节,需要执行两次shiftOut()函数,例如:

//Do this for MSBFIRST serial
int data = 500;
// shift out highbyte
shiftOut(dataPin, clock, MSBFIRST, (data >> 8));
// shift out lowbyte
shiftOut(dataPin, clock, MSBFIRST, data);

// Or do this for LSBFIRST serial
data = 500;
// shift out lowbyte
shiftOut(dataPin, clock, LSBFIRST, data);
// shift out highbyte
shiftOut(dataPin, clock, LSBFIRST, (data >> 8));
上一篇 下一篇

猜你喜欢

热点阅读