74HC595D驱动程序
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位数据。
所有相关的程序都在文章中了,程序测试是可以的,有问题评论区见
74HC595D驱动程序相关推荐
- OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)?
OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)? 图形硬件供应商,需要为显示适配器编,编写用户模式显示驱动程序.用户模式显示驱动程序,是由Microsoft Direct3D运行时加 ...
- 嵌入式Linux设备驱动程序:在运行时读取驱动程序状态
嵌入式Linux设备驱动程序:在运行时读取驱动程序状态 Embedded Linux device drivers: Reading driver state at runtime 在运行时了解驱动程 ...
- 嵌入式Linux设备驱动程序:用户空间中的设备驱动程序
嵌入式Linux设备驱动程序:用户空间中的设备驱动程序 Embedded Linux device drivers: Device drivers in user space Interfacing ...
- 嵌入式Linux设备驱动程序:发现硬件配置
嵌入式Linux设备驱动程序:发现硬件配置 Embedded Linux device drivers: Discovering the hardware configuration Interfac ...
- 嵌入式Linux设备驱动程序:编写内核设备驱动程序
嵌入式Linux设备驱动程序:编写内核设备驱动程序 Embedded Linux device drivers: Writing a kernel device driver 编写内核设备驱动程序 最 ...
- 现代传感器的接口:中断驱动的ADC驱动程序
现代传感器的接口:中断驱动的ADC驱动程序 Interfacing with modern sensors: Interrupt driven ADC drivers 研究了如何编写一个阻塞的模数转换 ...
- 与现代传感器的接口:轮询ADC驱动程序
与现代传感器的接口:轮询ADC驱动程序 Interfacing with modern sensors: Polled ADC drivers 我们研究了在现代嵌入式应用程序中,开发人员应该如何创建一 ...
- java加载驱动没有异常显示_java – Tomcat没有加载MSSQL驱动程序
我正在尝试将我的webapp部署到Tomcat容器,但是我得到一个例外,说明找不到我的数据库的驱动程序.在本地我测试Jetty上的应用程序,驱动程序jar由Maven提供.我将驱动程序jar复制到To ...
- Linux驱动程序编写
工作需要写了我们公司一块网卡的Linux驱动程序.经历一个从无到有的过程,深感技术交流的重要.Linux作为挑战微 软垄断的强有力武器,日益受到大家的喜爱.真希望她能在中国迅速成长.把程序文档贴出来, ...
- Linux网卡驱动程序编写
Linux网卡驱动程序编写 [摘自 LinuxAID] 工作需要写了我们公司一块网卡的Linux驱动程序.经历一个从无到有的过程,深感技术交流的重要.Linux作为挑战微软垄断的强有力武器,日益受到大 ...
最新文章
- ACR2010_依那西普改善RA患者骨代谢
- Android SwipeRefreshLayout 官方下拉刷新控件介绍
- DataFormatString={0:格式字符串} 用法
- 3DSlicer26:Add Extension/Module filepath,no module named ...
- php5.6 交叉编译,Cross-compile - 龙芯开源社区
- 回归树与基于规则的模型(part1)--if-then语句
- eclipse 编码设置之BOM丢失
- 二维码用的完吗?有没有二维码图案用完的那天?
- Vue:数组的过滤排序显示客户端实现
- 图解密码学密钥的分配方式
- fan4801开关电源原理图_开关电源各模块原理实图讲解精编版
- WanderAndLogData
- 阿里云主机泄露Access Key到getshell
- HDU5855(最大权闭合图构图技巧+裸的最大流)
- 瑞尔森大学计算机网络专业怎么样,瑞尔森大学怎么样?
- Echarts参数属性学习Gird演示案例
- JVM 判断对象已死,实践验证GC回收
- 个人上班作息时间规划(周一至周五)
- 惠普136w墨粉量低_惠普136w加粉清零
- 用云盘搭建自己的内容平台