单片机 STM32 HAL IO扩展 74HC595 例子代码
#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 例子代码相关推荐
- 单片机 STM32 HAL IO扩展 PCA9555
描述 这个用于两线双向总线(I 2 C)的16位扩展器设计用于2.3V至5.5VV CC 运行.通过I 2 C接口[串行时钟(SCL),串行数据(SDA)],它为大多数微控制器系列产品提供通用远程I ...
- 温湿度传感器驱动SHT85 单片机STM32 HAL库
功能介绍:读取传感器SHT85数据,转换成温度.湿度 .饱和水蒸气含量. 注意事项: SDA脚设置为开漏输出,外部上拉电阻10k.或者设置成推挽,软件切换SDA输入输出. 调试时可适当加长延时时间. ...
- 单片机 MM32 HAL 74hc595 例子 代码
#include "74hc595.h"/****************** 功 能:定义HC595的功能引脚 备 注:变更引脚,由MX配置完成 **************** ...
- 单片机 STM32 HAL PCF8574 例子代码
#include "extgpio.h" #include "pcf8574.h" #include "74hc595.h" /****** ...
- 单片机 STM32 HAL 网络模块 ENC28J60
文章目录 一. 简介 二.特性 三.示例代码 一. 简介 ENC28J60 是带有行业标准串行外设接口(Serial Peripheral Interface,SPI)的独立以太网控制器.它可作为任何 ...
- 单片机 STM32 HAL 射频读卡器 RC522
1.CubeMX 定义任意两个引脚,作为复位脚和片选脚,并对引脚作出如下配置: GPlO output level --High GPIO mode --Output Open Drain GPIO ...
- 单片机 STM32 HAL 温湿度 DS18B20
/*************笔记**************** 1.CubeMX 定义任意一个引脚,作为数据脚,并对引脚作出如下配置:GPlO output level --LOWGPIO mode ...
- 单片机 STM32 HAL 步进电机 Motor
/*************笔记**************** 1.CubeMX 定义任意四个引脚,作为ABCD相,并对引脚作出如下配置:GPlO output level --HighGPIO m ...
- 单片机 STM32 HAL 液晶屏 LCD16032
笔记: 1.采用串行输出 2.器件 [16 NC(PSB)]引脚需要接地, H:并口通信 L:串口通信 3.LCD_CS_Pin LCD_CS_GPIO_Port //片选控制,0,无效 1有效 LC ...
- 分享一款基于51单片机和MCP23017的IO扩展方案
大家好,我是『芯知识学堂』的SingleYork,今天笔者要给大家分享一款单片机IO扩展的设计方案. 学单片机的小伙伴们都知道,单片机的IO口数量都是固定的,在做项目的时候,需要根据自己实际用到的IO ...
最新文章
- ThinkPHP的标签制作
- hive load data inpath 空目录_走近大数据之Hive进阶(一、Hive数据的导入)
- html底部导航_松鼠导航 | 优质资源网站荟萃
- IOS开发之下拉刷新和上拉加载更多
- ASP.Net 2.0窗体身份验证机制详解(FormsAuthentication) (转载)
- 美团容器平台架构及容器技术实践
- 鼠标图标怎么自定义_酷鱼魔鼠——给鼠标添加酷炫的特效
- Linux系统安装证书(ubuntu、centos7)
- android sdk no space,Android SDK folder taking a lot of disk space. Do
- 使用OUTPUT从句从SQL Server表删除和归档大量记录
- 什么是UML?分哪两类?
- Win10系统中蓝牙串口功能启动方法
- 怎样恢复手机oracle默认窗口,通达信恢复默认版面,Effects界面如何恢复初始默认设置...
- springboot1.5.x+ seata1.4.2(最新版本)+springcloud ( Edgware.SR5) +eureka+feign+mybatis-plus(最新)
- 实现ensp的单臂路由
- Web前端开发的十佳前端框架优缺点
- Dbg2Excel_Word
- DELPHI窗体属性介绍
- OpenCV图像色温
- html 和css常见的面试题
热门文章
- win10电脑找不到xps查看器的详细解决步骤
- 全网最详细ENSP安装教程,零基础网工小白必看!
- 什么才是真正的项目团队,我来告诉你需要做哪些
- 小米笔记本重装系统,提示无启动驱动
- JAVA架构师之路-视频学习
- php时间变时间戳,php 时间如何转换为时间戳
- python自动化办公(五)实现将读取的excel数据写到word指定的地方:示例(劳动合同)
- oracle网络ora文件,Oracle错误—ORA-03113:在通信信道文件的末尾(归档日志处理)...
- 白盒测试实验报告模板
- zzulioj题库题解(持续更新中.......)