使用74HC595移位寄存器的指南
74HC595
74HC595是一个移位寄存器,它是8位串行输入,并排输出!
首先74HC595不用管它,只要知道这个名字就好,那什么是移位寄存呢?什么又是8位串行输入,并排输出呢?
这里我们先来理解什么是移位寄存和8位串行输入:
74HC595移位寄存器+8位串行输入(01)
8位串行输入:
看到上面的一串数字了吗?,就是那个视频,它是由8个数字组成(当然这八个数字是我随意输入的二进制数)
所谓8位串行输入,就是由8个数字组成,每一个数字占据一个位,共有8个位,像串在一起一样以一行的方式输入到蓝色方框内!
(备注:蓝色方框,就代表咱们本文所介绍的主角儿74HC595移位寄存器)
移位寄存:
那移位寄存又是什么意思呢?我们再次看向那一串数字
它不是直接进去的,而是以“移位”的方式进去的,每次只移动一个数字进去
蓝色方框内最多可以移进去8个数字,也就说74HC595移位寄存器最多可存储8个数字,称为“寄存”
绿色方框 = SH_CP
因为移位寄存是需要条件的,
就像绿色方框 给了蓝色方框8个数一样,
那么移位寄存器的输入条件就是SH_CP这个引脚,
当它处于高电频时,数字才能被送进74HC595
现在不理解不要紧,待会儿咱们看实物!
并排输出
74HC595移位寄存器+并行输出
并排输出开关=ST_CP (由蓝色变成黄色为打开开关)
跟上面一个意思,一个输出条件的引脚,处于高电频时触发输出
最后这个并排输出又啥?看上面的视频,当“并排输出开关”被触发时,74HC595移位寄存器里面存储的数字就会被输出出来,它不是一个一个的出来的,而是并排同时出来,称为“并排输出”
74HC595移位寄存器实物(引脚)

Q0~Q7 | 8个数字输出(二进制) |
---|---|
Vcc | 接电源正极 |
GND | 接电源负极 |
DS | 高电频输入1,低电平输入0 |
/OE |
低电平74HC595有效使用(接地GND就好了) |
/MR | 低电平复位(如果不需要复位直接接电源就行) |
SH_CP | 高电平触发时,DS的数被存入,一次存一个 |
ST_CP | 高电平触发时,DS存入的所有二进制数被输出 |
Q7' | 不用接 |
如何判断74HC595移位寄存器的方向?


哪边有豁口哪边就朝上,然后对照那个“74HC595移位寄存器(引脚图)”认一下就知道咋接了!
I/O表:
74HC595移位寄存器 | Arduino UNO开发板 |
---|---|
Vcc | 电源正极 |
GND | GND |
DS | D5 |
/MR | 电源正极 |
/OE | GND |
Q0~Q7 | LED1~LED8(灯) |
SH_CP | D3 |
ST_CP |
D4 |
程序部分:
//74HC595
int SH_CP=3;//输入条件
int ST_CP=4;//输出条件
int DS=5;//二进制数的输入
void setup() //子函数(只执行一次)
{
pinMode(SH_CP,OUTPUT);//定义为输出模式
pinMode(ST_CP,OUTPUT);//定义为输出模式
pinMode(DS,OUTPUT);//定义为输出模式
}
void loop() //主函数(无限循环执行)
{
digitalWrite(ST_CP,LOW);//初始化输出条件为低电平,一开始我们不需要它并排输出什么,因为DS还没有输入二进制数
digitalWrite(SH_CP,LOW); //初始化输入条件为低电平,等我们把DS输入完数之后再用它(高电平)写进去
digitalWrite(DS,1); //我这里就写一个二进制数1
digitalWrite(SH_CP,HIGH); //高电平把1写入
digitalWrite(SH_CP,LOW);//再次将其至低电平,因为只有它处于低电平模式,DS才能写二进制数进去
digitalWrite(DS,0); //这里我写的二进制数是0
digitalWrite(SH_CP,HIGH);//高电平写入
/*下面的都是以此类推8*/
digitalWrite(SH_CP,LOW);
digitalWrite(DS,1);
digitalWrite(SH_CP,HIGH);
digitalWrite(SH_CP,LOW);
digitalWrite(DS,0);
digitalWrite(SH_CP,HIGH);
digitalWrite(SH_CP,LOW);
digitalWrite(DS,1);
digitalWrite(SH_CP,HIGH);
digitalWrite(SH_CP,LOW);
digitalWrite(DS,0);
digitalWrite(SH_CP,HIGH);
digitalWrite(SH_CP,LOW);
digitalWrite(DS,1);
digitalWrite(SH_CP,HIGH);
digitalWrite(SH_CP,LOW);
digitalWrite(DS,0);
digitalWrite(SH_CP,HIGH);
digitalWrite(ST_CP,HIGH);//等到8个数都写完了以后,就把这个输出条件至于高电平,进行“并排输出”,结果就可以点亮啦!!!
}
我的程序里面写的是10101010,所有的就只有4个LED灯是亮的
我是正着写进去的,它是倒着显示的01010101
所以它是反过来的输出。
Protues8.9模拟仿真74HC595移位寄存器!!!(真能亮)
总结:
代码相对来说还是很容易理解的,不过也可以对代码进行简化,然后按照你能接受的方式去编写代码!