一文搞懂74HC595芯片(附使用方法)

该文章已生成可运行项目,

一、74HC595脚位图及说明

在这里插入图片描述
管脚说明:

  • 14脚:DS(SER),串行数据输入引脚
  • 13脚:OE,输出使能控制脚,它是低电才使能输出,所以接GND
  • 12脚:RCK(STCP),存储寄存器时钟输入引脚。上升沿时,数据从移位寄存器转存到存储寄存器。
  • 11脚:SCK(SHCP),移位寄存器时钟引脚,上升沿时,移位寄存器中的bit 数据整体后移,并接受新的bit(从SER输入)。
  • 10脚:MR,低电平时,清空移位寄存器中已有的bit数据,一般不用,接 高电平即可。
  • 9 脚 :串行数据出口引脚。当移位寄存器中的数据多于8bit时,会把已有的bit“挤出去”,就是从这里出去的。用于595的级联
  • Q0~Q7:并行输出引脚

使用参数:

  • VCC:2V~6V,5V最好
  • IQn:± 35mA

注意事项:

  • 第一个从SER送入的bit将会从Q7出去。

二、74HC595详细介绍

74HC595的最重要的功能就是:串行输入,并行输出。

其次,74HC595里面有2个8位寄存器:移位寄存器、存储寄存器。

74HC595的数据来源只有一个口,一次只能输入一个位,那么连续输入8次,就可以积攒为一个字节了。

2.1、移位寄存器

74HC595的移位寄存器工作方式就像手枪弹夹,但是子弹的发射(移位寄存器中的数据转储到存储寄存器),又像是【散x弹】(因为是并行输出嘛)。

为什么说和弹夹很像呢?

  • 1、串行输入,已进入的位数据依次下移(所以叫移位寄存器) | 子弹也是一颗一颗上的,先上的子弹,被后上的慢慢往下压。
  • 2、第一个输入的位,是并行输出的最后一个位 | 最先进入弹夹的子弹,最后射出。

在这里插入图片描述

  • 74HC595的14脚:DS,又叫SER 英文全称是:Serial data input ,顾名思义,就是串行数据输入口。

595的数据来源只有这一个口,一次只能输入一个位,那么连续输入8次,就可以积攒为一个字节了。

假如,我们要将二进制数据0111 1111 输入到595的移位寄存器中,下面来上一张动态图,模拟了前2个位输入的情景。

在这里插入图片描述

0111 1111 这个数据完全输入后是这样的:

在这里插入图片描述

  • 74HC595的11脚,(shift register clock input) 移位寄存器时钟引脚。上升沿有效。

首先我们要介绍这个引脚的作用,我们知道51单片机的工作离不开晶振,他使CPU的工作步调稳定有序,就像跑步时喊1,2,1的那个人。那么这里的位移寄存器时钟也是同样的道理,当一个新的位数据要进来时,已经进入的位数据就在移位寄存器时钟脉冲的控制下,整体后移,让出位置。

上升沿:电平从低到高的那个过程。移位寄存器时钟在上升沿这个过程中才起作用。

在这里插入图片描述

2.2、存储寄存器

到这里我们已经大致讲了怎么上子弹,也把子弹上齐了。下面来将怎么将子弹打出去,也就是怎么将移位寄存器的数据转移到存储寄存器。存储寄存器是直接和8个输出引脚相通的,将移位寄存器的数据转移到存储寄存器后,Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 就可以接收到我们开始输入的一个字节的数据。所谓存储寄存器,就是数据可以存在这个寄存器中,并不会随着一次输出就消失,只要595不断电,也没有新的数据从移位寄存器中过来,数据就一直不变且有效。新的数据过来后,存储寄存器中的数据就会被覆盖更新。

  • 74HC595的12脚: (storage register clock input ) 存储寄存器时钟

数据从位移寄存器转移到存储寄存器,也是需要时钟脉冲驱动的,这就是12脚的作用。它也是上升沿有效。

在这里插入图片描述

2.3、74HC595级联

通过上面的介绍,见识到595的厉害了吧。138译码器通过3个输入口控制8个输出口,而且还只能是特定的8个输出值,而595只用了一个输入口就可以输任意的8位数据,可谓短小精悍。

你觉的1位控制8位输出还不够?让你的595串联起来吧!打造成加特林机关枪。

在上面的程序中用到的9脚,没用起作用,如果要让2个595串联起来的话,就需要它了。想一下,我们将移位寄存器的8个位填满后,再往移位寄存器中塞一个会怎么样?也许你想到了。对!移位寄存器的最后一个位数据会被挤出去,从哪里出去?就是从9脚输出的。如果我们把第一个595的9脚连接到第二个的串行数据输入脚SER,那么,就形成了595的级联。这样,如果我们用2个595组合成了一个新的超级595,这个超级595的移位寄存器和存储寄存器的容量都翻倍了,1口控制16口,有木有!你还可以继续级联下去!

三、基于51单片机的使用程序

自此,我们已经讲解了一个595正常情况下的工作流程,下面写一个程序,让8个LED保持 亮暗亮暗… 间隔的效果。接线说明如下:

  • Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 分别接 8个LED正极
  • 14脚SER 接 单片机P3.4
  • 11脚SCK 接 单片机P3.6
  • 12脚RCK接 单片机P3.5
  • 13脚OE接GND
  • 10脚MR接VCC
  • 9脚闲置不接
#include<reg51.h>
#include<intrins.h>

typedef unsigned char uchar;
typedef unsigned int uint;

/**********函数声明********************/
void SendTo595(uchar byteData);
/***********************************/

sbit SER = P3^4;    //p3.4脚控制串行数据输入
sbit SCK = P3^6;    //串行输入时钟
sbit RCK = P3^5;    //存储寄存器时钟


void main()
{

       SendTo595(85);  //85的二进制:0101 0101
       
       while(1);


}

//功能:发送一个字节的数据给595,再并行输出
void SendTo595(uchar byteData)
{
   char i=0;
    for(;i<8;i++)
   {
           SER = byteData>>7;         //大家自己考量这2句
        byteData= byteData<<1;      

          SCK = 1;          //上升沿,让串行输入时钟变为高电平,并延时2个时钟周期
        _nop_();
        _nop_();

        SCK = 0;          //变为低电平,为下次准备
   }  
   
   /*位移寄存器数据准备完毕,转移到存储寄存器*/
   RCK = 1;         //上升沿,让存储寄存器时钟变为高电平,并延时2个时钟周期
   _nop_();
   _nop_();
   RCK = 0; 

}

参考

本文章已经生成可运行项目
06-04
### 74HC595芯片的详细信息与使用方法 #### 芯片概述 74HC595是一种8位串行输入/输出移位寄存器,具有存储寄存器和三态输出功能。该芯片广泛应用于单片机系统中,用于扩展并行输出端口。其核心特点是能够通过级联实现多路输出控制[^1]。 #### 主要特性 - **移位寄存器**:支持串行数据输入(DS引脚),在时钟信号(SH_CP)的作用下将数据逐位移入。 - **存储寄存器**:当接收到锁存信号(ST_CP)时,将移位寄存器中的数据传输到存储寄存器,并通过输出引脚显示。 - **三态输出**:OE(输出使能)引脚可以控制输出状态,低电平有效。 - **级联功能**:Q7S引脚可连接到下一个74HC595的DS引脚,从而实现多片级联[^2]。 #### 引脚说明 | 引脚编号 | 功能描述 | |----------|------------------------------| | DS | 数据输入引脚 | | SH_CP | 移位寄存器时钟 | | ST_CP | 存储寄存器时钟 | | OE | 输出使能(低电平有效) | | MR | 复位引脚(高电平复位) | | Q0-Q7 | 并行输出引脚 | | Q7S | 级联用串行输出引脚 | #### 使用方法 ##### 单片机控制示例 以下是一个基于51单片机的程序示例,展示如何通过74HC595驱动LED灯: ```c #include <reg52.h> sbit DS = P1^0; // 数据输入 sbit SH_CP = P1^1; // 移位寄存器时钟 sbit ST_CP = P1^2; // 存储寄存器时钟 void delay(unsigned int i) { while(i--); } void send_data(unsigned char data) { unsigned char i; for(i=0;i<8;i++) { DS = (data >> i) & 0x01; delay(500); SH_CP = 1; delay(500); SH_CP = 0; } ST_CP = 1; delay(500); ST_CP = 0; } void main() { while(1) { send_data(0xFF); // 所有LED亮 delay(10000); send_data(0x00); // 所有LED灭 delay(10000); } } ``` ##### FPGA应用示例 在FPGA设计中,74HC595常用于驱动数码管等外设。以下是一个Verilog代码示例,展示如何通过两个74HC595芯片驱动32位数据输出[^3]: ```verilog module digitial_tube_hc595( input Clk, input Reset_n, input [1:0] SW, output DIO, output SRCLK, output RCLK ); wire [7:0] SEL; wire [7:0] SEG; reg [31:0] Disp_Data; always @(*) begin case(SW) 2'b00: Disp_Data <= 32'h01234567; 2'b01: Disp_Data <= 32'h89abcdef; 2'b10: Disp_Data <= 32'h02468ace; 2'b11: Disp_Data <= 32'h13579bdf; endcase end // 驱动模块实例化 digitial_tube_0 digitial_tube_0 ( .Clk(Clk), .Reset_n(Reset_n), .Disp_Data(Disp_Data), .SEL(SEL), .SEG(SEG) ); HC595_driver HC595_driver1 ( .Clk(Clk), .Reset_n(Reset_n), .SEG(SEG), .SEL(SEL), .DIO(DIO), .SRCLK(SRCLK), .RCLK(RCLK) ); endmodule ``` #### 数据手册获取 74HC595的数据手册可以通过以下方式获取: 1. 访问芯片制造商官网(如NXP或TI)下载官方文档。 2. 在电子元器件分销商网站(如Digi-Key、Mouser)搜索“74HC595”并下载相关资料。 #### 注意事项 - 在级联多个74HC595时,确保所有芯片共用相同的时钟和锁存信号。 - 输出使能引脚(OE)需正确配置,避免不必要的功耗或信号干扰。
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ReCclay

如果觉得不错,不妨请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值