74HC595扩展IO芯片的使用以及例程(74HC595A和75HC595D的区别)

这次来详细介绍74HC595这个扩展IO芯片的使用方法,虽然这个IC使用简单,但对于初学者理解还是较为困难,所以这次来拿例程解释助理解。

一、芯片介绍:

简单的理解74HC595芯片,是个扩展输出IO的芯片。

当用1颗时,可以用3个IO扩展到8个IO;

当用2颗时,可以用3个IO扩展到16个IO;

当用3颗时,可以用3个IO扩展到24个IO

……

不过串的越多,时效性越低,所以需权衡使用。

二、芯片引脚如下图:

引脚介绍

第1~7、15:Q0~Q7为输出电平引脚(可以理解为:扩展出来的IO);

第9:Q7'为高位数据输出引脚(可以理解为:如果需要再串一颗74HC595芯片时,这个引脚作为下一颗的输入引脚);

第10:MR为复位引脚,低电平复位(一般也不用,直接拉高即可);

第11:SH_CP为时钟引脚(可以理解为:通讯协议中的SCL时钟线);

第12:ST_CP为数据输出使能引脚(可以理解为:每次ST_CP引脚一次高电平脉冲,Q0~Q7的引脚进行输出);

第13:OE引脚为总开关(在低电平时输出Q0~Q7,一般持续拉低即可);

第14:DS引脚为数据输入引脚(可以理解为:通讯协议中的SDA数据线);

第8、16:接地和电源(电源可直接接5V,这样Q0-Q7的高电平也为5V,同时SDA、SCL、ST_CP也可以3.3V逻辑电压输入

具体参见下图

三、原理说明:

一般使用方法:首先给SH_CP引脚时钟信号,给DS引脚数据信号,让存储8位数据。然后给ST_CP引脚给上升沿脉冲,即可在Q0~Q7管脚上输出8位数据。

注意事项:同时注意OE是总开关,低电平才输出电平,MR是复位引脚,一直拉高即可。

Q7’说明:Q7’是高位输出引脚(意思是每给SH_CLK一个上升沿时,Q7的数据会通过Q7’移出)。在串联第二颗74HC595时,这个Q7’就可以接入第二颗的DS引脚,这样当在给芯片输入16Bit数据时,先发送的8Bit就会从Q7’输入到第二个芯片里面,从而在第二个芯片的Q0~Q7输出电平。

四、绘制原理图介绍:

以上原理图中使用了4颗IC驱动了16*8+16*8的2块点阵,拼接在一起也是16*16点阵。我是单独控制16*8+16*8。。

左下脚的U2和U4是串行控制的接法。通过3个IO控制,分别是接在U2芯片上的第11、12、14脚,也就是(SDA、SCL、SER),其中11、12脚接相同的Mcu IO;Q7’的使用是:通过U2的Q7’接到U2的14脚(SDA脚)。

右下角U3和U5是单独控制的接法。

五、C51程序例程

以下是51单片机调用程序代码,可供查看。

//Note: MR 主复位接电源正极, OE 使能端,输出有效接电源负极

/*--------------------------------------------*/
#ifndef __74HC595_H__
#define __74HC595_H__

/*--------------------------------------------*/
sbit SD       = P1^4;    //串行数据输入
sbit ST_CK = P1^5;    //存储寄存器时钟输入
sbit SH_CK = P1^6;    //移位寄存器时钟输入

/*--------------------------------------------*/
//数码管断码和位码的定义
//unsigned char code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00,0xff};
                            //0   1    2    3    4    5    6    7    8    9    a    b    c     d    e     f    8   无
//unsigned char code pos[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
                          //1    2    3   4    5    6     7   8
/*--------------------------------------------*/
//函数声明
void Ser_IN(unsigned char Data);    //串行数据输入
void Par_OUT(void);                    //串行数据输出
//void Ser_Par(unsigned char Data);    //串行输入,并行输出

/*--------------------------------------------*/
//串行数据输入
void Ser_IN(unsigned char Data)
{
    unsigned char i;
    for(i = 0; i < 8; i++)
    {
        SH_CK = 0;            //CLOCK_MAX=100MHz
        SD = Data & 0x80;
        Data <<= 1;
        SH_CK = 1;           //产生上升沿脉冲,数据移位,即数据左移一位
    }
}
//并行数据输出
void Par_OUT(void)
{
    ST_CK = 0;
    ST_CK = 1;            //产生上升沿脉冲,数据从Q0~Q7引脚输出电平
}

/*--------------------------------------------*/

//串行输入,并行输出
void Ser_Par(unsigned char Data)
{//外部调用此函数,即可实现输出芯片的使用,Data是8位数据
    Ser_IN(Data);
    Par_OUT();
}
/*--------------------------------------------*/
#endif 

六、74HC595A和75HC595D的区别

74HC595A和75HC595D都是SOP-16贴片的封装,以上的介绍对2种都适用。但是:74HC595A的IO输出均为开漏输出,什么意思呢?就是如果要输出高电平,必须接上拉电阻。所以我在上次怀疑各种原因,最终发现了是IO是开漏输出,所以2者不能直接替换。

以下是2者需要注意的事项

本人新建了个QQ75HC595A好群,如想进一步沟通可添加:947187213。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值