Arduino 的 IO 口就那么十几个,要做 8 颗灯、8 个数码管或者一块 LED 点阵时总不够用。74HC595 就是一块“串转并”的移位寄存器,用 3 根信号线就能扩展出 8 路并行输出,是入门级多路控制里性价比最高的小芯片。
移位寄存器是什么
简单说,74HC595 把你用一根数据线一位一位送进来的数据,攒够 8 位后,一次性在它的 8 个输出脚 Q0~Q7 上同时放出去。Arduino 只要提供三根信号:数据(SER/DS)、移位时钟(SRCLK/SH_CP)、锁存时钟(RCLK/ST_CP)。

怎么接线
常用接法:SER 接 D2,RCLK(锁存) 接 D3,SRCLK(移位) 接 D4。VCC 和 OE 接 5V,GND 和 SRCLR 接地(SRCLR 是清零脚,正常拉高)。8 个输出脚 Q0~Q7 各串一颗 220~470Ω 限流电阻接到 8 颗 LED 的正极,LED 负极统一接地。

控制代码
先 phối 好锁存脚和移位时钟,用 shiftOut 往片子里一位位送数据:
#define DS 2
#define ST_CP 3
#define SH_CP 4
void setup(){
pinMode(DS,OUTPUT);pinMode(ST_CP,OUTPUT);pinMode(SH_CP,OUTPUT);
}
void loop(){
digitalWrite(ST_CP,LOW);
shiftOut(DS,SH_CP,LSBFIRST,0b10101010);
digitalWrite(ST_CP,HIGH);
delay(500);
digitalWrite(ST_CP,LOW);
shiftOut(DS,SH_CP,LSBFIRST,0b01010101);
digitalWrite(ST_CP,HIGH);
delay(500);
}想要更多输出就级联
一片只能 8 路,但 74HC595 可以级联:把第一片的 Q7'(串行输出)接到第二片的 DATA 脚,共用移位和锁存时钟,就能用同样 3 根线控制 16 路、24 路甚至更多。对点阵、跑马灯这类“输出超多”的项目,这是最省 IO 的常用招。
避坑提醒
一是 LED 一定要串限流电阻,直接怼输出脚易烧芯片。二是数据发送要遵循 先移位后锁存 的顺序,否则显示会乱闪。三是买芯片认准 74HC595 或 M74HC595,别和 74LS595(不同电平)混着用。




先移位后锁存,这个顺序记下了。
限流电阻必须串,我第一次没串直接冒烟了。
级联那段讲得明白,跑马灯不愁 IO 不够了。
3 根线控制 8 个灯,这个扩展思路太实用了。