74HC595扩展IO芯片的使用以及例程(74HC595A和75HC595D的区别) 您所在的位置:网站首页 74h595引脚图及功能 74HC595扩展IO芯片的使用以及例程(74HC595A和75HC595D的区别)

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

2024-07-08 05:01| 来源: 网络整理| 查看: 265

这次来详细介绍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


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有