#include "74hc595.h"/******************
功  能:定义HC595的功能引脚
备  注:变更引脚,由MX配置完成
*******************/
const T_HC595_PIN hc595 =
{.sck_port   = HC595_SCK_GPIO_Port,.sck_pin    = HC595_SCK_Pin,      //数据输入时钟线.data_port  = HC595_SI_GPIO_Port,.data_pin   = HC595_SI_Pin,       //数据线.rck_port   = HC595_RCK_GPIO_Port,.rck_pin    = HC595_RCK_Pin,      //输出存储器锁存时钟线.en_port    = HC595_OE_GPIO_Port,.en_pin     = HC595_OE_Pin        //芯片使能
};/******************
函数名:hc595Delay
功  能:实现us级延迟
形  参:cnt--us值
返回值:无
备  注:
*******************/
void hc595Delay(volatile uint16_t cnt)
{while(cnt--)continue;
}/******************************
函数名:hc595Init
功  能:初始化hc595的使能脚(EN),默认工作状态
形  参:pin--hc595引脚结构体
返回值:
备  注:0--器件屏蔽  1--器件工作
*******************************/
void hc595Init(const T_HC595_PIN *pin)
{HAL_GPIO_WritePin(pin->en_port, pin->en_pin, GPIO_PIN_RESET);
}/******************************
函数名:hc595DeInit
功  能:初始化hc595的使能脚(EN),默认休息状态
形  参:pin--hc595引脚结构体
返回值:
备  注:0--器件屏蔽  1--器件工作
*******************************/
void hc595DeInit(const T_HC595_PIN *pin)
{HAL_GPIO_WritePin(pin->en_port, pin->en_pin, GPIO_PIN_SET);
}/******************************
函数名:hc595WriteStr
功  能:向hc595输出字符
形  参:pin--引脚结构体 data--数据字节组 length--数据字节长度
返回值:
备  注:1、数据输出方向--高位先进,QH=高八位,QG,高七位,QF,高六位,依次下去。2、CLK:低电平->高电平 移位寄存器存储一个位RCK:低电平->高电平 输出移位寄存器中缓存的位。
笔  记:这里用的是三级串联,根据HC595的特性,移位寄存器只能存储8个位,如果移位寄存器的8个位填满后,再往移位寄存器中塞一个,移位寄存器的最后一个位数据会被挤出去,这个数据会从引脚9(SQH)发送给下个HC595引脚14(SI)。
*******************************/
void hc595WriteStr(const T_HC595_PIN *pin, uint8_t *data, uint16_t length)
{uint16_t i;uint8_t byte;data += length - 1; //等价于data[length - 1]while(length--){byte = *data--;//取数组data[length - 1]赋予byte,然后再--data[length - 1]。for(i = 0; i < 8; i++){HAL_GPIO_WritePin(pin->sck_port, pin->sck_pin, GPIO_PIN_RESET); //clk = 0 保持缓存区状态if(byte & 0x80) //从高位开始发送{HAL_GPIO_WritePin(pin->data_port, pin->data_pin, GPIO_PIN_SET);//data=1}else{HAL_GPIO_WritePin(pin->data_port, pin->data_pin, GPIO_PIN_RESET);//data=0}byte <<= 1;hc595Delay(10);//usHAL_GPIO_WritePin(pin->sck_port, pin->sck_pin, GPIO_PIN_SET); //clk = 1 存储数据至缓存区hc595Delay(10);//us}}HAL_GPIO_WritePin(pin->rck_port, pin->rck_pin, GPIO_PIN_RESET);hc595Delay(10);HAL_GPIO_WritePin(pin->rck_port, pin->rck_pin, GPIO_PIN_SET);//发送缓存区内容
}
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __74HC595_HEADER__
#define __74HC595_HEADER__/* USER CODE BEGIN Includes */
#include "main.h"/* USER CODE END Includes */typedef struct
{GPIO_TypeDef* sck_port;uint16_t      sck_pin;GPIO_TypeDef* data_port;uint16_t      data_pin;GPIO_TypeDef* rck_port;uint16_t      rck_pin;GPIO_TypeDef* en_port;uint16_t      en_pin;
} T_HC595_PIN;extern const T_HC595_PIN hc595;/* Exported functions prototypes ---------------------------------------------*/
void hc595Init(const T_HC595_PIN *pin);
void hc595DeInit(const T_HC595_PIN *pin);
void hc595WriteStr(const T_HC595_PIN *pin, uint8_t  *data, uint16_t length);
#endif

74HC595中文资料.pdf

单片机 STM32 HAL IO扩展 74HC595 例子代码相关推荐

  1. 单片机 STM32 HAL IO扩展 PCA9555

    描述 这个用于两线双向总线(I 2 C)的16位扩展器设计用于2.3V至5.5VV CC 运行.通过I 2 C接口[串行时钟(SCL),串行数据(SDA)],它为大多数微控制器系列产品提供通用远程I ...

  2. 温湿度传感器驱动SHT85 单片机STM32 HAL库

    功能介绍:读取传感器SHT85数据,转换成温度.湿度 .饱和水蒸气含量. 注意事项: SDA脚设置为开漏输出,外部上拉电阻10k.或者设置成推挽,软件切换SDA输入输出. 调试时可适当加长延时时间. ...

  3. 单片机 MM32 HAL 74hc595 例子 代码

    #include "74hc595.h"/****************** 功 能:定义HC595的功能引脚 备 注:变更引脚,由MX配置完成 **************** ...

  4. 单片机 STM32 HAL PCF8574 例子代码

    #include "extgpio.h" #include "pcf8574.h" #include "74hc595.h" /****** ...

  5. 单片机 STM32 HAL 网络模块 ENC28J60

    文章目录 一. 简介 二.特性 三.示例代码 一. 简介 ENC28J60 是带有行业标准串行外设接口(Serial Peripheral Interface,SPI)的独立以太网控制器.它可作为任何 ...

  6. 单片机 STM32 HAL 射频读卡器 RC522

    1.CubeMX 定义任意两个引脚,作为复位脚和片选脚,并对引脚作出如下配置: GPlO output level --High GPIO mode --Output Open Drain GPIO ...

  7. 单片机 STM32 HAL 温湿度 DS18B20

    /*************笔记**************** 1.CubeMX 定义任意一个引脚,作为数据脚,并对引脚作出如下配置:GPlO output level --LOWGPIO mode ...

  8. 单片机 STM32 HAL 步进电机 Motor

    /*************笔记**************** 1.CubeMX 定义任意四个引脚,作为ABCD相,并对引脚作出如下配置:GPlO output level --HighGPIO m ...

  9. 单片机 STM32 HAL 液晶屏 LCD16032

    笔记: 1.采用串行输出 2.器件 [16 NC(PSB)]引脚需要接地, H:并口通信 L:串口通信 3.LCD_CS_Pin LCD_CS_GPIO_Port //片选控制,0,无效 1有效 LC ...

  10. 分享一款基于51单片机和MCP23017的IO扩展方案

    大家好,我是『芯知识学堂』的SingleYork,今天笔者要给大家分享一款单片机IO扩展的设计方案. 学单片机的小伙伴们都知道,单片机的IO口数量都是固定的,在做项目的时候,需要根据自己实际用到的IO ...

最新文章

  1. ThinkPHP的标签制作
  2. hive load data inpath 空目录_走近大数据之Hive进阶(一、Hive数据的导入)
  3. html底部导航_松鼠导航 | 优质资源网站荟萃
  4. IOS开发之下拉刷新和上拉加载更多
  5. ASP.Net 2.0窗体身份验证机制详解(FormsAuthentication) (转载)
  6. 美团容器平台架构及容器技术实践
  7. 鼠标图标怎么自定义_酷鱼魔鼠——给鼠标添加酷炫的特效
  8. Linux系统安装证书(ubuntu、centos7)
  9. android sdk no space,Android SDK folder taking a lot of disk space. Do
  10. 使用OUTPUT从句从SQL Server表删除和归档大量记录
  11. 什么是UML?分哪两类?
  12. Win10系统中蓝牙串口功能启动方法
  13. 怎样恢复手机oracle默认窗口,通达信恢复默认版面,Effects界面如何恢复初始默认设置...
  14. springboot1.5.x+ seata1.4.2(最新版本)+springcloud ( Edgware.SR5) +eureka+feign+mybatis-plus(最新)
  15. 实现ensp的单臂路由
  16. Web前端开发的十佳前端框架优缺点
  17. Dbg2Excel_Word
  18. DELPHI窗体属性介绍
  19. OpenCV图像色温
  20. html 和css常见的面试题

热门文章

  1. win10电脑找不到xps查看器的详细解决步骤
  2. 全网最详细ENSP安装教程,零基础网工小白必看!
  3. 什么才是真正的项目团队,我来告诉你需要做哪些
  4. 小米笔记本重装系统,提示无启动驱动
  5. JAVA架构师之路-视频学习
  6. php时间变时间戳,php 时间如何转换为时间戳
  7. python自动化办公(五)实现将读取的excel数据写到word指定的地方:示例(劳动合同)
  8. oracle网络ora文件,Oracle错误—ORA-03113:在通信信道文件的末尾(归档日志处理)...
  9. 白盒测试实验报告模板
  10. zzulioj题库题解(持续更新中.......)