74HC595 8位移位寄存器的使用小结

摘要:
移位寄存器的基本原理是,串进并出,有锁存功能。左侧是ti的芯片封装,引脚排列;右侧是Nexperia芯片封装,引脚排列的下图是ti的芯片管脚说明:0、QA-QH等同于Q1-Q7,8位并行输出端1、SER数据输入端2、SRCLK是移位用的时钟管脚,S代表shift,上升沿有效,和Nexperia的SHCP等同3、RCLK是用的存储寄存器用的时钟管脚,上升沿有效,和Nexperia的STCP等同4、Qh'(低9脚)用于串级,和下级的ser连接即可。

上一篇文章已经讲到,电灯电路比较复杂,以少控多的方式,只能使用串行的方式,因此移位寄存器就发挥功能了。
学生时代,很少实际用过,只是理论学习,但是在项目中,真正用上了,的确要复习一番。
参考文章:
https://blog.csdn.net/k1ang/article/details/80012686 此文有一个错误,数据搬运的地方,但值得参考。
http://www.51hei.com/bbs/dpj-152282-1.html 这个文章也不错
https://www.cnblogs.com/lulipro/p/5067835.html 这个也好
但是最后还是要根据自己的使用情况来分析。我使用的是ti的芯片,也可以参考Nexperia的文档,加深理解。
移位寄存器的基本原理是,串进并出,有锁存功能。
具体以芯片手册来分析。

左侧是ti的芯片封装,引脚排列;

右侧是Nexperia芯片封装,引脚排列的

74HC595 8位移位寄存器的使用小结第1张74HC595 8位移位寄存器的使用小结第2张

下图是ti的芯片管脚说明:

0、QA-QH等同于Q1-Q7,8位并行输出端

1、SER数据输入端

2、SRCLK是移位用的时钟管脚,S代表shift,上升沿有效,和Nexperia的SHCP等同

3、RCLK是用的存储寄存器用的时钟管脚,上升沿有效,和Nexperia的STCP等同

4、Qh'(低9脚)用于串级,和下级的ser连接即可。和Nexperia的Q7S等同

5、OE输出是能,低电平有效,

6、10脚可以不用。接地即可

74HC595 8位移位寄存器的使用小结第3张

Nexperia引脚功能说明

74HC595 8位移位寄存器的使用小结第4张

还有一个比较好的功能图:可以解释SHCP,STCP, OE的作用。

74HC595 8位移位寄存器的使用小结第5张

时序图:可以看出数据位是先进入QA的。

ti的时序图:

74HC595 8位移位寄存器的使用小结第6张

Nexperia时序图:

74HC595 8位移位寄存器的使用小结第7张

数据的搬运过程如下:参考自博客,原图有错误,做了修改:

74HC595 8位移位寄存器的使用小结第8张

上面的图中,先在DS引脚输出1,在输入0,以次类推,74hc595首先将数据位写入Q0,之后陆续写入Q1,以此类推,Q7写完后,如果还有数据在ser输出,就从Q7s端口输出到下一级芯片,实现级联。

一般情况是一次性输入8个数据,使用for循环,上升沿写入存储寄存器。

最后使用stcp的上升沿,将输出输出端的数据并行输出引脚端。

参考代码如下:

byte = WRITE_1_STEP_1;
        for (i = 0; i < 8; i++)
        {
            //步骤1:将数据传到DS引脚
            if (byte & 0x80)    //先传输高位,通过与运算判断第八是否为1
            {
                DS_OUT_HIGH;    //如果第八位是1,则与 595 DS连接的引脚输出高电平
            }
            else
            {
                DS_OUT_LOW;     //否则输出低电平
            }
            //步骤2:SHCP每产生一个上升沿,当前的bit就被送入移位寄存器
            SHCP_CLK_OUT_LOW;   //SHCP拉低
            delay_us(CLK_DELAY_US);
            SHCP_CLK_OUT_HIGH;   //SHCP拉高, SHCP产生上升沿
            delay_us(CLK_DELAY_US);
            byte <<= 1;     // 左移一位,将低位往高位移
        }
        //位移寄存器数据准备完毕,转移到存储寄存器
        //步骤3:STCP产生一个上升沿,移位寄存器的数据移入存储寄存器
        STCP_CLK_OUT_LOW;   // 将STCP拉低
        delay_us(CLK_DELAY_US);           // 适当延时
        STCP_CLK_OUT_HIGH;  // 再将STCP拉高,STCP即可产生一个上升沿
        delay_us(CLK_DELAY_US);

另外,数字电路的时钟保持是有要求,数据手册上面是ns级别,但是实际的电路可能比较复杂,通常10us的高、低电平是可以成功写入的,延时太短是写不成功。

实际电路设计如下:

74HC595 8位移位寄存器的使用小结第9张

免责声明:文章转载自《74HC595 8位移位寄存器的使用小结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python 调用 opencv 实现 图片文本倾斜校正【IPC进程间通讯之二】管道Pipe下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

用Tinkercad学arduino之 74HC595寄存器控制8个led跑马灯

项目地址:https://www.tinkercad.com/things/5nsSWyQOAkI-chenillard // Arduino Pattern Creator by PhilCam // http://my.free.time.free.fr/ // Use with Uno R3 + 74HC595 + 8 leds int d...