做项目最头疼的就是Arduino引脚不够用——屏幕占走几个,传感器再占几个,就剩不下了。74HC595这个8位移位寄存器,就是用来“凭空”变出额外输出的:只用三个引脚,就能扩展出8个输出,还能级联再接更多。这篇讲它怎么接、怎么用代码让它“发光”。
74HC595引脚怎么接Arduino
一块74HC595有16个脚,真正要Arduino控制的只有三个:数据脚DS(也叫SER)接数据、时钟脚SH_CP(也叫SRCLK)负责一位一位把数据移进去、锁存脚ST_CP(也叫RCLK)最后把数据一次性送到输出。常规接法DS接D11、SH_CP接D12、ST_CP接D8,当然引脚随便挑能PWM的也成。供电上VCC接5V、GND接地,另外OE脚接地、MR脚接5V,让输出一直有效。

电路图把三个控制脚和8个输出脚Q0到Q7的关系标得很清楚——发一个字节,8个输出脚就按位点亮或熄灭。Q0到Q7每个脚挂一个LED,LED另一头通过限流电阻回地,就能拿来做流水灯。
为什么三个引脚能控八个输出
奥妙在于“串行移位”:Arduino把要显示的8个bit,一个bit一个bit从DS脚送进去,每送一个bit给SH_CP一个上升沿,就把数据往前进一位。全部8个bit送完后,给ST_CP一个脉冲,数据就从内部寄存器一次性搬到输出脚上,8个输出同时亮起。这也是“串转并”的由来。

原理图你可能嫌抽象,看这张面包板实物图就懂了——中间那颗黑色芯片就是74HC595,左边三根杜邦线连Arduino,右边一排LED各接一个输出。模块虽小,一个就能顶8个Arduino引脚,做点阵、数码管扫描都是它的主场。
控制74HC595的代码示例
核心就是Arduino自带的shiftOut函数:把数据脚、时钟脚、字节序和一个byte值传进去,它会自动一位一位把数据移出;移位完成后把锁存脚拉低再拉高,数据就落到了输出上。比如想让第一颗灯亮,就移出一个高位为1的字节再锁存。要是觉得一个不够,还能把Q7'级联到下一颗74HC595的DS脚,几个芯片叠起来,3根线就能控制几十个输出。







MR接5V、OE接地这两个别漏,不然芯片可能不工作
注意锁存很重要,忘记锁存那一下,输出就一直卡在旧数据上
级联起来更爽,两片就能控16个灯,点阵都靠它扫
三个脚控八个输出,第一次跑通流水灯的时候真的有被惊艳到