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驱动程序相关推荐

  1. OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)?

    OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)? 图形硬件供应商,需要为显示适配器编,编写用户模式显示驱动程序.用户模式显示驱动程序,是由Microsoft Direct3D运行时加 ...

  2. 嵌入式Linux设备驱动程序:在运行时读取驱动程序状态

    嵌入式Linux设备驱动程序:在运行时读取驱动程序状态 Embedded Linux device drivers: Reading driver state at runtime 在运行时了解驱动程 ...

  3. 嵌入式Linux设备驱动程序:用户空间中的设备驱动程序

    嵌入式Linux设备驱动程序:用户空间中的设备驱动程序 Embedded Linux device drivers: Device drivers in user space Interfacing ...

  4. 嵌入式Linux设备驱动程序:发现硬件配置

    嵌入式Linux设备驱动程序:发现硬件配置 Embedded Linux device drivers: Discovering the hardware configuration Interfac ...

  5. 嵌入式Linux设备驱动程序:编写内核设备驱动程序

    嵌入式Linux设备驱动程序:编写内核设备驱动程序 Embedded Linux device drivers: Writing a kernel device driver 编写内核设备驱动程序 最 ...

  6. 现代传感器的接口:中断驱动的ADC驱动程序

    现代传感器的接口:中断驱动的ADC驱动程序 Interfacing with modern sensors: Interrupt driven ADC drivers 研究了如何编写一个阻塞的模数转换 ...

  7. 与现代传感器的接口:轮询ADC驱动程序

    与现代传感器的接口:轮询ADC驱动程序 Interfacing with modern sensors: Polled ADC drivers 我们研究了在现代嵌入式应用程序中,开发人员应该如何创建一 ...

  8. java加载驱动没有异常显示_java – Tomcat没有加载MSSQL驱动程序

    我正在尝试将我的webapp部署到Tomcat容器,但是我得到一个例外,说明找不到我的数据库的驱动程序.在本地我测试Jetty上的应用程序,驱动程序jar由Maven提供.我将驱动程序jar复制到To ...

  9. Linux驱动程序编写

    工作需要写了我们公司一块网卡的Linux驱动程序.经历一个从无到有的过程,深感技术交流的重要.Linux作为挑战微 软垄断的强有力武器,日益受到大家的喜爱.真希望她能在中国迅速成长.把程序文档贴出来, ...

  10. Linux网卡驱动程序编写

    Linux网卡驱动程序编写 [摘自 LinuxAID] 工作需要写了我们公司一块网卡的Linux驱动程序.经历一个从无到有的过程,深感技术交流的重要.Linux作为挑战微软垄断的强有力武器,日益受到大 ...

最新文章

  1. ACR2010_依那西普改善RA患者骨代谢
  2. Android SwipeRefreshLayout 官方下拉刷新控件介绍
  3. DataFormatString={0:格式字符串} 用法
  4. 3DSlicer26:Add Extension/Module filepath,no module named ...
  5. php5.6 交叉编译,Cross-compile - 龙芯开源社区
  6. 回归树与基于规则的模型(part1)--if-then语句
  7. eclipse 编码设置之BOM丢失
  8. 二维码用的完吗?有没有二维码图案用完的那天?
  9. Vue:数组的过滤排序显示客户端实现
  10. 图解密码学密钥的分配方式
  11. fan4801开关电源原理图_开关电源各模块原理实图讲解精编版
  12. WanderAndLogData
  13. 阿里云主机泄露Access Key到getshell
  14. HDU5855(最大权闭合图构图技巧+裸的最大流)
  15. 瑞尔森大学计算机网络专业怎么样,瑞尔森大学怎么样?
  16. Echarts参数属性学习Gird演示案例
  17. JVM 判断对象已死,实践验证GC回收
  18. 个人上班作息时间规划(周一至周五)
  19. 惠普136w墨粉量低_惠普136w加粉清零
  20. 用云盘搭建自己的内容平台

热门文章

  1. vue+node项目部署上线
  2. 摩尔定律终结——后摩尔时代,何去何从?
  3. 代码的版权声明怎么写
  4. 计算机am3代表,拨开重重迷雾 AMD处理器历代接口解谜
  5. php登陆网页版微信代码,php版微信公众平台之微信网页登陆授权示例
  6. 学生上课睡觉班主任怎么处理_学生上课睡觉,老师该怎么处理? | 实操课103
  7. Java——Json语法介绍与使用(详细介绍)
  8. 蓝桥杯试题 入门训练 圆的面积
  9. 天骄辅助外挂制作,寻求合作
  10. 南京公积金贷款一些规定要点。