硬件芯片----74HC595芯片的运用原理
目录
- 一、74HC595芯片是怎样的一种芯片?
- 二、74HC595芯片的引脚说明
- 三、什么是上升沿?
- 四、74HC595芯片具体使用的步骤图
- 五、74HC595芯片使用电路样例
- 六、74HC595芯片实现流水灯程序样例
- 七、74HC595芯片的数据手册
一、74HC595芯片是怎样的一种芯片?(特点)
74HC595芯片是由8位的移位寄存器、8位的数据存储寄存器和其它线口组成。
特点:
- 8位串行输入数据
- 8位并行输出数据三态输出(三态:低电平、高电平和高阻态)
- 输出寄存器可以直接清除
- 具有100MHz的移位频率
- 能串行输出控制下一级级联芯片
- 输出端的输出可以被保流
二、74HC595芯片的引脚说明
芯片数据端说明:
- Q0–Q7: 八位并行输出端,例可以直接控制数码管的8个段。
- Q7’: 级联输出端。将它接下一个74HC595芯片的DS引脚。
- DS: 串行数据输入端,级联的话接上一级的Q7’。
芯片控制端说明:
- /MR(10脚):
低电平时将移位寄存器的数据清零。[通常接到VCC,防止数据清零] - SH_CP(11脚):
上升沿时数据寄存器的数据移位。Q0->Q1->Q2–>Q3–>…–>Q7;下降沿移位寄存器数据不变。(脉冲宽度:5V时,大于几十纳秒就行了。我通常都选微秒级)[简单点说就是电平上升沿一次,才能从DS端的数据中的一个bit移入移位寄存器中] - ST_CP(12脚):
上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。通常我将ST_CP置为低电平,当移位结束后,在ST_CP端产生一个正脉冲(5V时,大于几十纳秒就行了。我通常都选微秒级),更新显示数据。[简单点说就是电平上升沿一次,移位寄存器的8个bit就全移入数据存储器] - /OE(13脚):
高电平时禁止输出(高阻态)。如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。比通过数据端移位控制要省时省力。[输出使能控制脚,它是低电才使能输出,一般接GND]
三、什么是上升沿?
四、74HC595芯片具体使用的步骤图:

-
第一步:目的:将要准备输入的位数据移入74HC595数据输入端上。 方法:送位数据到_595。
-
第二步:目的:将位数据逐位移入74HC595,即数据串入
方法:SH_CP产生一上升沿,将DS上的数据移入74HC595移位寄存器中,先送低位,后送高位。 -
第三步:目的:并行输出数据。即数据并出 方法:ST_CP产生一上升沿,将由DS上已移入数据寄存器中的数据 送入到输出锁存器。
说明: 从上可分析:从SH_CP产生一上升沿(移入数据)和ST_CP产生一上升沿(输出数据)是二个独立过程,实际应用时互不干扰。即可输出数据的 同时移入数据。

五、74HC595芯片使用电路样例
- (注:OE第13引脚一般接GND,输出使能端) (注:OM第10引脚一般接VCC,防止移位寄存器的数据清零)
六、74HC595芯片实现流水灯程序样例
/*************************************************************************************
实验现象:下载程序后,LED灯从左往右点亮,类似流水灯效果
**************************************************************************************
*/
#include "reg51.h" //此文件中定义了单片机的一些特殊功能寄存器
#include "intrins.h"
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
u8 ledNum;
//--定义使用的IO口--//
sbit SRCLK=P3^6; // SH_CP口,数据输入时钟线
sbit RCLK=P3^5; // ST_CP口,输出存储器锁存时钟线
sbit SER=P3^4; // DS口,串行数据输入
/*******************************************************************************
* 函 数 名 : delay
* 函数功能 : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
/*******************************************************************************
* 函 数 名 : Hc595SendByte(u8 dat)
* 函数功能 : 想74H595发送一个字节的数据
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void Hc595SendByte(u8 dat)
{
u8 a;
SRCLK = 1;
RCLK = 1;
for(a=0;a<8;a++) //发送8位数
{
SER = dat >> 7; //从最高位开始发送
dat <<= 1;
SRCLK = 0; //发送时序
_nop_();
_nop_();
SRCLK = 1;
}
RCLK = 0;
_nop_();
_nop_();
RCLK = 1;
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
ledNum = ~0x01;
while(1)
{
Hc595SendByte(ledNum);
ledNum = _crol_(ledNum, 1);
delay(50000);
}
}
七、74HC595芯片的数据手册
74HC595芯片中文资料:https://wenku.baidu.com/view/44879cd1c1c708a1284a44ed.html