打造一个通用性MCU架构,支持CX32/AT32/NRF51/NRF52等。 OS支持RTX4/RTX5/FreeRtos。 采用VsCode+GCC组合,VsCode+KEIL5,超强开发方式。 QQ群:524408033

LiSun

打造一个通用性MCU架构,支持CX32/AT32/NRF51/NRF52等。 OS支持RTX4/RTX5/FreeRtos。 采用VsCode+GCC组合,VsCode+KEIL5,超强开发方式。 QQ群:524408033

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  337 随笔 :: 0 文章 :: 2 评论 :: 71281 阅读
#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);//us
            HAL_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

posted on   xuejianqiang  阅读(223)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
打造一个通用性MCU架构,支持CX32/AT32/NRF51/NRF52等。 OS支持RTX4/RTX5/FreeRtos。 采用VsCode+GCC组合,VsCode+KEIL5,超强开发方式。 QQ群:524408033
点击右上角即可分享
微信分享提示