最新消息:680元/半年,推荐全网最具性价比的一站式编程学习平台码丁实验室

arduino从零开始(15)移位寄存器

Arduino 少儿编程 1801浏览 0评论

友情提示:680元/半年,儿童学编程,就上码丁实验室

arduino从零开始(15)移位寄存器

arduino从零开始


你将学到什么

1、你将学到如何增加arduino uno的数字输出针脚

2、你将学到74HC595移位寄存器的使用方法

3、你将学到shiftOut函数的使用方法


        Arduino uno板子只有13个数字针脚作为输出使用,但是有的时候13个针脚是不够用的,为了增加输出,我们可以使用移位寄存器

        一个移位寄存器有8个可以被一个字节数据控制的数字输出针脚,这里我们使用的移位寄存器为74HC595

        74HC595移位寄存器有八个数字输出针脚(和arduino数字针脚类似),共占用arduino 三个数字针脚,所以使用一个74HC595移位寄存器实际上增加了5个数字输出针脚。

arduino从零开始(15)移位寄存器arduino从零开始(15)移位寄存器

74HC595移位寄存器

移位寄存器的原理

        我们发送一个字节的数据给移位寄存器,其根据这个字节的数据(8位二进制数)来开关对应的八个数字输出针脚(0关1开)。

重点:

发送字节数据的函数是shiftOut,其有一个参数用来告诉移位寄存器从哪个方向解析这个字节的数据,共两种方向。

当参数为MSBFIRST的时候:

      字节数据最左边的比特位(MSB)对应着移位寄存器的7号数字输出针脚。

      字节数据最右边的比特位(LSB)对应着移位寄存器的0号数字输出针脚。

此时如果发送的字节数据为B11110000,则它会打开数字输出针脚7、6、5、4而关闭数字输出针脚3、2、1、0直到下一 个字节数据被接收或电源被断开。

当参数为LSBFIRST的时候:

      字节数据最左边的比特位(MSB)对应着移位寄存器的0号数字输出针脚。

      字节数据最右边的比特位(LSB)对应着移位寄存器的7号数字输出针脚。

此时如果发送的字节数据为B11110000,则它会关闭数字输出针脚7、6、5、4而打开数字输出针脚3、2、1、0直到下一个字节数据被接收或电源被断开。

Q7对应着字节数据中第一个发送过来的比特位。

        Arduino的三个数字针脚不仅仅只能添加一个移位寄存器,多个移位寄存器也是可以的,这样当需要控制多个LED的时候,使用移位寄存器便很方便。

连接移位寄存器

  •     我们的移位寄存器上共16个针脚,针脚15和针脚1到7对应着8个数字输出针脚(标记为Q0到Q7)。

  •     针脚8连接GND

  •     针脚9是”数据输出”针脚,用来发送数据到另外一个移位寄存器

  •     针脚10连5V

  •     针脚11和12叫clock和latch

  •     针脚13连接GND

  •     针脚14接收来自arduino的数据

  •     针脚16连接5V

项目实战:使用移位寄存器控制8个LED灯

arduino从零开始(15)移位寄存器

8个LED与移位寄存器接线图

(因为只有一个移位寄存器,所以针脚9没有连线)

接下来需要使用这8个LED来显示一个二进制数(一个字节数据)。

arduino从零开始(15)移位寄存器

程序代码



文字代码如下:

int DATA = 6,LATCH= 8,CLOCK =10;

void setup() {

// put your setup code here, to run once:

pinMode(LATCH,OUTPUT);

pinMode(DATA,OUTPUT);

pinMode(CLOCK,OUTPUT);

}


void loop() {

// put your main code here, to run repeatedly:

for(byte i=0;i<256;i++)

{

digitalWrite(LATCH,LOW);//准备传输数据

shiftOut(DATA,CLOCK,MSBFIRST,i);//传输数据

digitalWrite(LATCH,HIGH);//数据传输结束

delay(200);

}

}


您必须 登录 才能发表评论!