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

|

    阅读本文大概需要6分钟。

|

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

1. 74HC595介绍

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

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

1. 引脚说明

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

Arduino基础入门篇22—74HC595扩展IO
管脚定义
  • VCC、GND为芯片供电管脚,工作电压5V。

  • Q0~Q7这8个引脚是芯片的输出引脚。

  • DS引脚为串行输入引脚。我们需要将数据一位一位的写入该引脚。

  • STCP引脚为锁存引脚。当移位寄存器的8位数据全部传输完毕后,通过控制此引脚将数据复制到锁存器准备并行输出。

  • SHCP引脚为时钟引脚。通过控制此引脚将数据写入移位寄存器。

  • OE引脚为输出使能。其作用是控制锁存器里的数据是否最终输出到Q0-Q7输出引脚上。低电平时输出,高电平时不输出,本实验直接接在GND使其一直保持低电平输出数据。

  • MR是用来重置内部寄存器的引脚。低电平时重置内部寄存器。本实验直接连接在VCC上一直保持高电平。

  • Q7S引脚为串行输出引脚,专门用于芯片级联。

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. 实验材料

  • Uno R3开发板

  • 配套USB数据线

  • 面包板及配套连接线

  • 74HC595芯片

  • 8个220Ω限流电阻

  • 8个LED发光二极管

3. 实验步骤

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

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

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

实验原理图如下图所示:

Arduino基础入门篇22—74HC595扩展IO
实验原理图

实物连接图如下图所示:

Arduino基础入门篇22—74HC595扩展IO
实物连接图

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

 1/*
2      Shift
3      74HC595扩展IO,串行驱动8路LED灯
4*/

5int  latchPin  =  10; //锁存引脚
6int  clockPin  =  9;   //时钟引脚
7int  dataPin  =  8;   //数据引脚
8
9void  setup  ()
10
{
11    pinMode(latchPin,  OUTPUT);
12    pinMode(clockPin,  OUTPUT);
13    pinMode(dataPin,  OUTPUT);   //让三个脚都是输出状态
14 }
15void  loop()
16
{
17    for  (int  data  =  0;   data  <  255;   data++)
18    {
19        digitalWrite(latchPin,  LOW);   //将ST_CP口上加低电平让芯片准备好接收数据
20        shiftOut(dataPin,  clockPin,  LSBFIRST,  data);
21        digitalWrite(latchPin,  HIGH);   //将ST_CP这个针脚恢复到高电平
22        delay(1000);   //暂停1秒钟观看显示效果
23    }
24 }

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

Arduino基础入门篇22—74HC595扩展IO
程序下载

4. 实验现象

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

Arduino基础入门篇22—74HC595扩展IO
实验现象

5. 函数介绍


shiftOut()

  • 描述:将数据在时钟引脚脉冲控制下按位移出写入到数字引脚。

  • 函数原型:

    shiftOut(dataPin, clockPin, bitOrder, value)

  • 参数:

    • dataPin: 数据输入引脚。

    • clockPin: 时钟引脚。

    • bitOrder: 移位顺序。MSBFIRST(高位在前)、LSBFIRST(低位在前)。

    • value: 需要移位的数据。

  • 返回值:没有。

6. 实验分析

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

 1//Do 

this 


for 

MSBFIRST 

serial
2int  data  =  500;
3//  shift  out  highbyte
4 shiftOut(dataPin,  clock,  MSBFIRST,  (data  >>  8));
5//  shift  out  lowbyte
6 shiftOut(dataPin,  clock,  MSBFIRST,  data);
7
8//  Or  do  this  for  LSBFIRST  serial
9data  =  500;
10//  shift  out  lowbyte
11 shiftOut(dataPin,  clock,  LSBFIRST,  data);
12//  shift  out  highbyte
13 shiftOut(dataPin,  clock,  LSBFIRST,  (data  >>  8));


Arduino基础入门篇22—74HC595扩展IO
扫码加入微信公众号:TonyCode


原文始发于微信公众号(

TonyCode

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

|

发表评论