74HC595D驱动程序

news/2025/1/16 3:35:23/

1.介绍

74HC595D是以款串行输入并行输出的芯片,支持级连功能

2.引脚功能

Q0~Q7是并行输出

Q7'是串行输出,如果使用级连功能,只需将这个引脚接到下一块芯片的DS脚即可

MR是复位引脚 ,低电平有效

OE是使能引脚 , 低电平有效

DS是数据输入端

SHCP是控制数据移位的

STCP是将数据锁存在Q0-Q7上

3. 74hc595d初始化程序

我这里使用的是东软HR8P506单片机,其他单片机类似,IO口都配置成数字量推挽输出即可

void _74hc595d_Init(void)
{GPIO_InitSettingType x;x.Signal = GPIO_Pin_Signal_Digital;x.Dir = GPIO_Direction_Output;x.Func = GPIO_Reuse_Func0;x.ODE = GPIO_ODE_Output_Disable;x.DS = GPIO_DS_Output_Strong;x.PUE = GPIO_PUE_Input_Disable;x.PDE = GPIO_PDE_Input_Disable;GPIO_Init(GPIO_Pin_A17, &x);        //MR  PA17GPIO_Init(GPIO_Pin_A18, &x);        //STCP  PA18GPIO_Init(GPIO_Pin_A19, &x);        //SHCP  PA19GPIO_Init(GPIO_Pin_A20, &x);        //DS1  PA20GPIO_Init(GPIO_Pin_A21, &x);        //OE  PA21}

4.驱动程序编写

先定义一下引脚的宏定义

#define MR(x)    x>=1?GPIO_SetBit(GPIO_Pin_A17):GPIO_ResetBit(GPIO_Pin_A17)
#define STCP(x)  x>=1?GPIO_SetBit(GPIO_Pin_A18):GPIO_ResetBit(GPIO_Pin_A18)
#define SHCP(x)  x>=1?GPIO_SetBit(GPIO_Pin_A19):GPIO_ResetBit(GPIO_Pin_A19)
#define   DS(x)  x>=1?GPIO_SetBit(GPIO_Pin_A20):GPIO_ResetBit(GPIO_Pin_A20)
#define   OE(x)  x>=1?GPIO_SetBit(GPIO_Pin_A21):GPIO_ResetBit(GPIO_Pin_A21)

编写驱动

/* 完整版 */
void output(uint8_t data)
{int i = 0;MR(0); /* 清除之前的数据 */MR(1); /* 不使能复位 */OE(1); /* 不使能输出 */for(i = 0; i < 8; i++){DS(((data >> i) & 0x01)); /* 将bit先放在DS引脚,等待脉冲移位出去 */SHCP(0); delay_ms(1);     /* 将SHCP引脚拉低,延时1ms */SHCP(1); delay_ms(1);     /* 将SHCP引脚拉高,延时1ms,这样就产生了时钟脉冲 */}STCP(0); delay_ms(1);         /* 推送数据到锁存器 */STCP(1); delay_ms(1);OE(0); /* 等待数据全部发送完,再使能输出 */
}/* 简化版* 不使能复位,并一直保持输出(MR通过15K电阻接VCC,OE引脚直接接地)* 只需要DS,STCP和SHCP便可完成控制*/
void output(uint8_t data)
{int i = 0;// MR(0); /* 清除之前的数据 */// MR(1); /* 不使能复位 */// OE(1); /* 不使能输出 */for(i = 0; i < 8; i++){DS(((data >> i) & 0x01)); /* 将bit先放在DS引脚,等待脉冲移位出去 */SHCP(0); delay_ms(1);     /* 将SHCP引脚拉低,延时1ms */SHCP(1); delay_ms(1);     /* 将SHCP引脚拉高,延时1ms,这样就产生了时钟脉冲 */}STCP(0); delay_ms(1);         /* 推送数据到锁存器 */STCP(1); delay_ms(1);// OE(0); /* 等待数据全部发送完,再使能输出 */
}

这里是从数据的地位开始移的,最后实现的效果就是写入一个数据比如0x01,那么第一个灯就会点亮

5.其他

这里简单说一下级连功能,使用级连时将第一块芯片的Q7'引脚接到下一块芯片的DS引脚,而其他的引脚SHCP,STCP,MR,OE则连接在一起共用一个IO口,比如:

这里是三块级连,使用的时候需要一次发8*3=24位数据。

所有相关的程序都在文章中了,程序测试是可以的,有问题评论区见


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

相关文章

APDS9930

最近弄了2个APDS9930模块&#xff0c;本来想精准的测试一下距离&#xff0c;但是最终经过测试&#xff0c;发现测出来的距离其实不是很准。 一、硬件以及连接方式 其中&#xff0c;出了INT可以不连&#xff0c;其他的必须连。 注&#xff1a;VL连3.3V&#xff0c;我最开始没有连…

d954(D9546)

恩施到汉口的D954途经站时刻列表有吗&#xff1f; 恩施到汉口的D954这趟动车的开车时间12:19&#xff0c;预计到达时间15:49&#xff0c;总预计用时03:30。 重庆北到南京南的D954途经哪些站&#xff1f; 重庆北到南京南的D954这趟动车的开车时间10:05&#xff0c;预计到达时间1…

官方喊你来免费下载 Navicat Premium 16.2 Beta 中文版 | Redis 体验官火热招募中

今天&#xff0c;我们发布了 Navicat 16.2 Beta 中文版&#xff0c;它适用于 Windows、macOS 和 Linux 平台。届时&#xff0c;我们诚邀广大 Redis 用户及爱好者亲测 Beta 版&#xff0c;希望 Redis 新功能将为 Redis 相关工作者&#xff08;应用开发人员、DBA 和数据分析师等&…

MySQL部署PXC集群-全网最详细

MySQL部署PXC集群 一&#xff0c;PXC了解 1.PXC介绍 Percona XtraDB Cluster&#xff08;简称PXC&#xff09; 是基于Galera的MySQL高可用集群解决方案 Galera Cluster是Codership公司开发的一套免费开源的高可用方案 PXC集群主要由两部分组成&#xff1a;Percona Server …

华为OD机试之考勤信息(Java源码)

考勤信息 题目描述 公司用一个字符串来表示员工的出勤信息 absent&#xff1a;缺勤late&#xff1a;迟到leaveearly&#xff1a;早退present&#xff1a;正常上班 现需根据员工出勤信息&#xff0c;判断本次是否能获得出勤奖&#xff0c;能获得出勤奖的条件如下&#xff1a; 缺…

makefile编译debug版本调试时无法定位到源文件:No source available for “main() at 0x8544“

问题 之前用makefile编译了一个release版本的可执行文件&#xff0c;但是后面想调试的时候发现无法调试。 觉得-g就能解决问题&#xff0c;后面发现根本不行。 这里虽然加了-g选项&#xff0c;但是调试的时候还是出现找不到源文件的情况。 解决方案 对已有的C/C工程用mak…

UI设计用什么软件做?

1、即时设计 即时设计是一款国内的在线协同设计工具&#xff0c;提供原型设计、UI/UX 设计和设计交付等核心功能。它无需第三方插件&#xff0c;拥有丰富的组件样式、中英文字体库和本地化资源&#xff0c;受到专业设计师的好评。与其他国外的 UI 工具相比&#xff0c;即时设计…

警惕,最近的副业兼职诈骗。

大家好&#xff0c;我是鸟哥。 今天和大家聊聊最近超级猖狂的几类诈骗。 一、副业诈骗。最近两年“副业刚需”这个口号很流行&#xff0c;尤其是今年&#xff0c;职场动荡、工作难找&#xff0c;副业刚需变成了副业焦虑&#xff0c;骗子们也正是抓住了大家的这个心理&#xf…