#include "74hc595.h"
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
};
void hc595Delay(volatile uint16_t cnt)
{
while(cnt--)
continue;
}
void hc595Init(const T_HC595_PIN *pin)
{
HAL_GPIO_WritePin(pin->en_port, pin->en_pin, GPIO_PIN_RESET);
}
void hc595DeInit(const T_HC595_PIN *pin)
{
HAL_GPIO_WritePin(pin->en_port, pin->en_pin, GPIO_PIN_SET);
}
void hc595WriteStr(const T_HC595_PIN *pin, uint8_t *data, uint16_t length)
{
uint16_t i;
uint8_t byte;
data += length - 1;
while(length--)
{
byte = *data--;
for(i = 0; i < 8; i++)
{
HAL_GPIO_WritePin(pin->sck_port, pin->sck_pin, GPIO_PIN_RESET);
if(byte & 0x80)
{
HAL_GPIO_WritePin(pin->data_port, pin->data_pin, GPIO_PIN_SET);
}
else
{
HAL_GPIO_WritePin(pin->data_port, pin->data_pin, GPIO_PIN_RESET);
}
byte <<= 1;
hc595Delay(10);
HAL_GPIO_WritePin(pin->sck_port, pin->sck_pin, GPIO_PIN_SET);
hc595Delay(10);
}
}
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);
}
#ifndef __74HC595_HEADER__
#define __74HC595_HEADER__
#include "main.h"
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;
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)