硬件芯片----74HC595芯片的运用原理

硬件芯片----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

  • 5
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是74HC595级联的C语言程序示例: ```c #include <stdio.h> #include <wiringPi.h> // 定义74HC595芯片的引脚连接 #define DATA_PIN 0 // 连接到74HC595的SER(串行数据输入)引脚 #define LATCH_PIN 2 // 连接到74HC595的RCLK(锁存时钟)引脚 #define CLOCK_PIN 3 // 连接到74HC595的SRCLK(移位寄存器时钟)引脚 // 向74HC595芯片发送一个字节的数据 void shiftOut(uint8_t data) { for (int i = 0; i < 8; i++) { digitalWrite(CLOCK_PIN, LOW); // 将移位寄存器时钟引脚置低,准备发送数据 // 将数据的最低位写入串行数据输入引脚 digitalWrite(DATA_PIN, data & 0x01); digitalWrite(CLOCK_PIN, HIGH); // 将移位寄存器时钟引脚置高,将数据写入移位寄存器 data >>= 1; // 将数据右移一位,准备发送下一位数据 } } // 将数据发送到所有级联的74HC595芯片 void updateShiftRegisters() { digitalWrite(LATCH_PIN, LOW); // 将锁存时钟引脚置低,准备发送数据 // 通过移位寄存器发送每个芯片的数据 for (int i = 0; i < 8; i++) { shiftOut(0x00); // 发送一个字节的0,表示关闭所有输出 } digitalWrite(LATCH_PIN, HIGH); // 将锁存时钟引脚置高,将数据加载到输出引脚 } int main() { wiringPiSetup(); // 初始化WiringPi库 pinMode(DATA_PIN, OUTPUT); pinMode(LATCH_PIN, OUTPUT); pinMode(CLOCK_PIN, OUTPUT); while (1) { // 向74HC595芯片发送数据 updateShiftRegisters(); // 延时一段时间,观察输出结果 delay(1000); } return 0; } ``` 这个程序使用了WiringPi库来控制GPIO引脚。在代码中,我们定义了74HC595芯片的引脚连接,然后实现了两个函数,一个用于向74HC595芯片发送一个字节的数据,另一个用于将数据发送到所有级联的74HC595芯片。在`main`函数中,我们初始化引脚,并在一个无限循环中不断发送数据。你可以根据需要修改代码中的引脚定义和延时时间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值