74HC595是8位串入并出的移位寄存器,它共有16个引脚,引脚功能如下:
每个芯片的引脚名字可能都不一样,但引脚编号都是一样的。
引脚 | 符号 | 功能 |
1 | Q1 | 并行数据输出 |
2 | Q2 | 并行数据输出 |
3 | Q3 | 并行数据输出 |
4 | Q4 | 并行数据输出 |
5 | Q5 | 并行数据输出 |
6 | Q6 | 并行数据输出 |
7 | Q7 | 并行数据输出 |
8 | GND | 接地 |
9 | Q7S | 串行数据输出 |
10 | ![]() |
主复位(低电平有效) |
11 | SHCP | 移位寄存器时钟输入 |
12 | STCP | 存储寄存器时钟输入 |
13 | ![]() |
使能输出(低电平有效) |
14 | DS | 串行数据输入 |
15 | Q0 | 并行数据输出 |
16 | VCC | 电源电压 |
以下是功能框图,根据功能框图,引脚功能如下:
Q0-Q7:输出引脚。
DS:数据的输入引脚,接单片机IO口。
SHCP:捕捉到该引脚上升沿则将DS的数据存入移位寄存器,但不输出。
STCP:捕捉到该引脚上升沿则将存入的所有数据并行输出。
Q7S:若存入移位寄存器的数据高于8个,则把已有的数据从该引脚输出,用于级联。
MR:低电平清空移位寄存器,一般不用,接高电平。
OE:使能,接低电平或单片机引脚。
用程序来说就是这样(Arduino C/C++):
void _74HC595_WriteByte(unsigned char data)
{
unsigned char i;
for(i=0;i<8;i++)//传入8bit数据
{
digitalWrite(pinDS, bitRead(data, i) ); //待传数据
digitalWrite(pinSHCP, HIGH); //SHCP上升,存入数据到移位寄存器
digitalWrite(pinSHCP, LOW); //SHCP下降
}
digitalWrite(pinSTCP, HIGH); //STCP上升,输出数据
digitalWrite(pinSTCP, LOW); //STCP下降
}
单个74HC595接线:
两个74HC595接线:
最后再说一下移位寄存器是如何工作的,也就是数据存入顺序:
把移位寄存器比作“货运火车”,数据比作“货物”。
当只有一个货物时,“货物”先放在最外面:
为了能放下第二个“货物”,需要把第一个货物往里面推:
最后放下8个“货物”:
而每一次往上放“货物”的指令就是SHCP的上升沿。
如果“货物”大于8个,装不下了,则从第一个“货物”开始,通过Q7S交给连接的火车运送,将Q7S连接至下一节的DS就可以完成级联。
卸货,也就是输出,则是直接把一整个车厢拆卸下来,卸货的指令就是STCP的上升沿。
要注意的顺序,最后一个“货物”会卸给“Q0”。
来源:https://blog.csdn.net/rssxdsl/article/details/148512669
FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。
74HC595是一个8位串行输入、平行输出的移位缓存器:平行输出为三态输出。