【74HC595芯片】核心驱动代码

news/2024/12/2 19:49:54/

介绍

74HC595是一个8位串行输入、并行输出的位移缓存器:并行输出为三态输出。
在SCK 的上升沿,串行数据由SDL输入到内部的8位位移缓存器,并由Q7’输出,而并行输出则是在LCK的上升沿将在8位位移缓存器的数据存入到8位并行输出缓存器。当串行数据输入端OE的控制信号为低使能时,并行输出端的输出值等于并行输出缓存器所存储的值。

引脚说明

在这里插入图片描述

74HC595是3态高速位移寄存器,串行输入,并行输出的锁存器。

DS:14脚,串行数据输入引脚,级联的话接上一级的Q7’。
OE:13脚,输出使能控制脚,它是低电才使能输出,所以接GND
ST_CP:12脚,存储寄存器时钟输入引脚。上升沿时,数据从移位寄存器转存带存储寄存器。
SH_CP:11脚,移位寄存器时钟引脚,上升沿时,移位寄存器中的数据整体后移,并接受新 的数据(从 DS输入)。
MR:10脚,低电平时,清空移位寄存器中已有的数据,一般不用,接高电平即可。
Q7’:9脚,串行数据输出引脚。当移位寄存器中的数据多于8位时,会把已有的位“挤出 去”,就是从这里出去的。用于595的级联,将它接下一个74HC595的DS端。
Q1-Q7:1到7脚,并行输出引脚

核心工作原理:

OE:13脚接GND使能
DS:14脚,串行输入数据原理如下图(高位给完,到低位,一位一位时钟传)
SH_CP:11脚 给个上升沿,移位寄存器
ST_CP:12脚,存储寄存器时钟输。上升沿时,数据从移位寄存器转存带存储寄存器。而已一直保存

在这里插入图片描述
在这里插入图片描述

时序图:

在这里插入图片描述

74HC595.c 代码文件


//这里使用的是74HC595  级联的方式,单联也是差不多#include "74HC595.h"/*******************************************************************************
* 函 数 名       : delay_10us
* 函数功能	  	 : 延时函数,ten_us=1时,大约延时10us
* 输    入       : ten_us
* 输    出    	 : 无
*******************************************************************************/
void delay_10us(unsigned int ten_us)
{while(ten_us--);	
}/*******************************************************************************
* 函 数 名       : delay_ms
* 函数功能		   : ms延时函数,ms=1时,大约延时1ms
* 输    入       : ten_us
* 输    出    	 : 无
*******************************************************************************/
void delay_ms(unsigned int ms)
{unsigned int i,j;for(i=ms;i>0;i--)for(j=110;j>0;j--);
}/*******************************************************************************
* 函 数 名         : hc595_write_data(unsigned char dat)
* 函数功能		     : 向74HC595写入4个字节的数据
* 输    入         : dat1:对应74HC595(A)输出第1行-第8行dat2:对应74HC595(B)输出第9行-第16行dat3:对应74HC595(C)输出第1列-第8列dat4:对应74HC595(D)输出第9列-第16列
* 输    出         : 无
*******************************************************************************/
void hc595_write_data(unsigned char dat1,unsigned char dat2,unsigned char dat3,unsigned char dat4)
{unsigned char i=0;for(i=0;i<8;i++)//循环8次即可将一个字节写入寄存器中{HC595_SER=dat4>>7;//优先传输一个字节中的高位dat4<<=1;//将低位移动到高位HC595_SRCLK=0;delay_10us(1);HC595_SRCLK=1;delay_10us(1);//移位寄存器时钟上升沿将端口数据送入寄存器中	}for(i=0;i<8;i++){HC595_SER=dat3>>7;dat3<<=1;HC595_SRCLK=0;delay_10us(1);HC595_SRCLK=1;delay_10us(1);	}for(i=0;i<8;i++){HC595_SER=dat2>>7;dat2<<=1;HC595_SRCLK=0;delay_10us(1);HC595_SRCLK=1;delay_10us(1);	}for(i=0;i<8;i++){HC595_SER=dat1>>7;dat1<<=1;HC595_SRCLK=0;delay_10us(1);HC595_SRCLK=1;delay_10us(1);	}RCLK=0;delay_10us(1);RCLK=1;//存储寄存器时钟  上升沿将前面写入到寄存器的数据输出	
}/*******************************************************************************
* 函 数 名       : main
* 函数功能		 : 主函数
* 输    入       : 无
* 输    出    	 : 无
*******************************************************************************//**********************************mian.c列子*********************************************unsigned char ghc595_buf[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};void main()
{	unsigned char i=0;while(1){		for(i=0;i<8;i++){	hc595_write_data(ghc595_buf[i],0,0,0);//使74HC595(A)输出delay_ms(500);//延时500ms	}for(i=0;i<8;i++){	hc595_write_data(0,ghc595_buf[i],0,0);//使74HC595(B)输出delay_ms(500);//延时500ms	}									}		
}************************************************************************************/

74HC595.H 代码文件

#ifndef _74HC595_H
#define _74HC595_H
#include "reg52.h"//定义74HC595控制管脚  ==>HC595 内部结构有两个寄存器。1.移位寄存器 2.存储寄存器
sbit HC595_SRCLK=P3^6;	//移位寄存器 时钟输入
sbit HC595_RCLK=P3^5;		//存储寄存器 时钟输入
sbit HC595_SER=P3^4; 		//串行数据 输入void delay_10us(unsigned int ten_us);
void delay_ms(unsigned int ms);
void hc595_write_data(unsigned char dat1,unsigned char dat2,unsigned char dat3,unsigned char dat4);#endif

http://www.ppmy.cn/news/179707.html

相关文章

AMD phenom(翼龙) x4 955 黑苹果(El Capital 10.11.6)安装成功记录

最近喜欢上了黑苹果&#xff0c;尽管我自己已经有一台MBP但我很喜欢自己从零开始学习而且做出东西&#xff0c;而黑苹果的学习资源很多&#xff0c;做成又不会耗费太久。论坛爬了一星期&#xff0c;爬了不少贴&#xff0c;终于弄好了黑苹果(有点瑕疵但是正常使用)享受了一把装系…

ARM7,ARM9,cortex-m3,cortex-m4,cortex-a8的区别

arm系列从arm11开始&#xff0c;以后的就命名为cortex&#xff0c;并且性能上大幅度提升。 从cortex开始&#xff0c;分为三个系列&#xff0c;a系列&#xff0c;r系列&#xff0c;m系列。 m系列与arm7相似&#xff0c;不能跑操作系统&#xff08;只能跑ucos2&#xff09;&…

74HC595 芯片详细介绍

74HC595是8 位串行输入/输出或者并行输出移位寄存器&#xff0c;具有高阻关断状态。三态。 特点&#xff1a; 1&#xff0c;8 位串行输入 2&#xff0c;8 位串行或并行输出 3&#xff0c;存储状态寄存器&#xff0c;三种状态 4&#xff0c;输出寄存器可以直接清除 5&#xff0…

微星970A-G43 主板 PCIE接NVME固态硬盘无法启动Win7,解决方案

微星970A-G43 主板 PCIE接NVME固态硬盘无法启动Win7解决心路&#xff01; 华硕M5A97主板添加 PCI NVME硬盘 ADM970芯片组添加PCIE NVME硬盘&#xff0c;并WIN7启动问题。 970芯版组添加 NVME协议 春节期&#xff0c;这几天闲来无事&#xff0c;想着给自己两台电脑提升一下运…

org.springframework.boot.ApplicationRunner.run 执行说明

说明 org.springframework.boot.ApplicationRunner 是 Spring Boot 框架中的一个接口&#xff0c;用于在 Spring Boot 应用程序启动后执行一些任务。它是一个函数式接口&#xff0c;只包含一个方法 void run(ApplicationArguments args)&#xff0c;用于定义在应用程序启动后需…

LeetCode刷题(ACM模式)-04字符串

参考引用&#xff1a;代码随想录 注&#xff1a;每道 LeetCode 题目都使用 ACM 代码模式&#xff0c;可直接在本地运行&#xff0c;蓝色字体为题目超链接 1. 反转字符串 344. 反转字符串 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形…

联想服务器能够上固态硬盘吗,联想Y400能不能装固态硬盘 需要什么接口的

现在多数用户会选择给笔记本更换或加固态硬盘&#xff0c;这样能够大幅提升笔记本电脑的性能。联想Y400笔记本电脑预留了一个固态硬盘接口&#xff0c;用户不需要拆下原来的硬盘&#xff0c;而是可以加一个固态硬盘&#xff0c;形成双硬盘。联想Y400预留的固态硬盘接口是MSATA迷…

联想Y400电脑装WIN7无法重装系统解决方法

1. 由于您笔记本预装的Windows8系统需要使用BIOS中的UEFI功能及GPT分区表&#xff0c;所以在您将系统改装为Windows7系统时&#xff0c;需要将随机Windows8系统的所有分区全部删除&#xff08;包括Windows8引导分区、Windows8系统修复分区、GPT分区表的保留分区、一键恢复的功能…