Arduino从零开始
你将学到什么
1、你将学到如何增加arduino uno的数字输出针脚
2、你将学到74HC595移位寄存器的使用方法
3、你将学到shiftOut函数的使用方法
Arduino uno板子只有13个数字针脚作为输出使用,但是有的时候13个针脚是不够用的,为了增加输出,我们可以使用移位寄存器。
一个移位寄存器有8个可以被一个字节数据控制的数字输出针脚,这里我们使用的移位寄存器为74HC595。
74HC595移位寄存器有八个数字输出针脚(和arduino数字针脚类似),共占用arduino 三个数字针脚,所以使用一个74HC595移位寄存器实际上增加了5个数字输出针脚。
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灯8个LED与移位寄存器接线图
(因为只有一个移位寄存器,所以针脚9没有连线)
接下来需要使用这8个LED来显示一个二进制数(一个字节数据)。
程序代码
文字代码如下:
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);
}
}