STM32实现74HC595控制

2023-11-07

一、前言

        本文主要是实出74HC595的简单控制功能实现(学习笔记整理)。

二、概述

(一)74HC595简述

         74HC595是一个8位串行输入、平行输出的位移缓存器:平台行输出为三态输出

        在SCHCP的上升沿输入,在STCP的上升沿进入存储寄存器中去,如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7‘),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(低电平),存储寄存器的数据输出到总线。

        74HC595支持级联,当多个74HC595级联一起时,通过数据线发送一个数据最终会移位给最后一个74HC595。因为级联数据会被挤到下一级的ic中,所以先发送的数据是到最后一级的74HC595.。

        每次向74HC595发送一个字节,74HC595最先发到的是高位数据,也就是最先收到的数据到达Q7脚,当我们输出数据高位时,最高位的8个脉冲会到Q7脚(数据脚的最高位),如下图: 

(二)引脚功能

   

(三)真值表

三、硬件连接

四、程序例程

1、头文件

#ifndef _74HC595_H_
#define _74HC595_H_

#include "stm32f10x.h"
#include "io_bit.h"
#include "delay.h"

#define SRCLK PAout(14)
#define RCLK PAout(13)
#define SER PAout(12)

void HC595_Pin_Init(void);
void HC595_Send_Data(u8 data);
void HC595_Send_Byte(u8 dat1,u8 dat2,u8 dat3,u8 dat4);

#endif

2、源文件

#include "74HC595.h"

void HC595_Pin_Init(void)
{
	 GPIO_InitTypeDef GPIO_InitStructure;

	//打开时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	// 改变指定管脚的映射 GPIO_Remap_SWJ_Disable SWJ 完全禁用(JTAG+SW-DP)
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);
	// 改变指定管脚的映射 GPIO_Remap_SWJ_JTAGDisable ,JTAG-DP 禁用 + SW-DP 使能
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);

	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	GPIO_ResetBits(GPIOA, GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14);
}


void HC595_Send_Data(u8 data)
{
	u8 i = 0;
	
	for (i = 0; i < 8; i++)
	{
		if (data & 0x80)        //先传输高位,通过与运算判断第八是否为1
			SER = 1;    //如果第八位是1,则与 595 DS连接的引脚输出高电平
		else                    //否则输出低电平
			SER = 0;

		SRCLK = 0;
		delay_us(20);
		SRCLK = 1;
		data <<= 1;
	}
}

void HC595_Send_Byte(u8 dat1,u8 dat2,u8 dat3,u8 dat4)
{
	SRCLK = 1;
	RCLK = 1;
	
	HC595_Send_Data(dat1);
	HC595_Send_Data(dat2);
	HC595_Send_Data(dat3);
	HC595_Send_Data(dat4);

	RCLK = 0;
	delay_us(2);
	RCLK = 1;
	delay_us(2);
	RCLK = 0;
	
}

注:

        STM32F103C8T6主控中PA13和PA14默认不是GPIO口模式,需要配置成GPIO口模式 

 相关资料链接,有需要自行下载,谢谢!

        链接:https://pan.baidu.com/s/1Tl-AHndfCAuOs3ykptsV2A 
        提取码:q7ks

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32实现74HC595控制 的相关文章

  • 云原生全栈体系(二)

    Kubernetes实战入门 第一章 Kubernetes基础概念 一 是什么 我们急需一个大规模容器编排系统 kubernetes具有以下特性 服务发现和负载均衡 Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器

随机推荐

  • 《自己动手设计数据库》第7章 设计表结构

    第7章 建立表结构 到此章为止 你手上应该有3张列表了 主题列表 经过评审的特征列表 又名初始字段列表 计算字段列表 定义初始表列表 要执行这一段内容 还需要第5章定义的任务目标 确定隐含主题 首先不去看主题列表 这里先去看初始字段列表 原
  • 执行程序时提示cuBLAS Error: cublasGemmStridedBatchedEx failed.

    操作步骤 问题现象 在使用Mindspore GPU跑程序的时候出现报错 CRITICAL KERNEL 1084 7f5e5ffff700 python3 2022 06 22 19 46 23 385 199 mindspore ccs
  • linux查看文件夹大小

    linux怎么查看文件夹多大 1 最简单的查看方法可以使用ls ll ls lh命令进行查看 当使用ls ll 会显示成字节大小 而ls lh会以KB MB等为单位进行显示 这样比较直观一些 2 通过命令du h max depth 1 可
  • Lesson 6.4 逻辑回归手动调参实验

    文章目录 一 数据准备与评估器构造 1 数据准备 2 构建机器学习流 二 评估器训练与过拟合实验 三 评估器的手动调参 在补充了一系列关于正则化的基础理论以及 sklearn 中逻辑回归评估器的参数解释之后 接下来 我们尝试借助 sklea
  • 知网CAJ直接PDF下载,并且autoBookMark添加书目

    知网能下PDF 谷歌浏览器下 You猴 安装这两个插件 CNKI 中国知网 PDF 全文下载 特制版 知网下载助手 安装所需要的文件链接 链接 https pan baidu com s 1sIKJnvuZE2P8r4HSETrWGQ 提取
  • Android TextEdit 文本框设置

    文本框类型设置 android inputType none 输入普通字符 android inputType text 输入普通字符 android inputType textCapCharacters 输入普通字符 android i
  • 从零开始学习React——(十六):利用React生命周期优化组件

    通过上一节 对于React生命周期有了新认识 如何利用它来提高组件的性能呢 本节将会抛砖引玉讲解一个小例子 为了代码的清晰 可以删除上一节一些无关的生命周期函数代码 1 ChildItem js存在性能问题 那就是 子组件ChildItem
  • GPU指令下发方式

    1 概述 GPU接收CPU发送的渲染命令 执行相应的计算 渲染命令在CPU和GPU之间传递 由CPU发送给GPU AMD的GPU有两种命令发送方式 第一种是CPU通过直接写GPU的寄存器 发送相应的渲染命令 对于GPU来说 这种方式是CPU
  • Vue中table实现行的上移和下移

    链接 html
  • 【基础知识学习】链表的创建

    链表的创建 因为对链表使用不太熟悉 学习使用数组创建了一个链表并访问 代码如下 以后学到新的知识继续补充 include
  • mfc入门基础(七)向导对话框的创建与显示

    实现参考 VS2010 MFC编程入门之十四 对话框 向导对话框的创建及显示 软件开发 鸡啄米 一 向导对话框的创建与显示 1 具体的例子使用 还是参照上节或者说上上节中的例子写出来 test02 所以也还是在这个基础上来进行更改 2 创建
  • Day82-基于ElasticSearch的实战-仿京东搜素

    基于ElasticSearch的实战 仿京东搜素 1 创建springboot项目 添加相关依赖 2 导入相关Maven依赖
  • HAL库使用硬件SPI驱动0.96寸OLED stm32F401

    找一个可以使用SPI接口的OLED驱动程序 一般买OLED会提供 或者自己网上找 这里用的是中景园的例程 由于我使用的开发板是STM32F401ccu6 所以我先移植到我的开发板上 主要改的 打开MXcube 配置时钟 配置DEBUG 我这
  • RBM中的Gibbs,CD-K,PCD三种抽样方式

    首先看RBM教程推导 http blog csdn net itplus article details 19207371 推导到下图时 对中括号中的第二项进行计算 是 通过采样的到的 那么采样有三种方法 Gibbs CD K PCD 下面
  • JDBC的原理及应用

    一 JDBC作用 JDBC Java DataBase Connectivity 就是Java数据库连接 简单说就是封装了java语言操作不同据库 例如 mysql oracle sqlServer等数据库 的接口 各个数据库厂商实现这个接
  • SpringBoot 多模块的优点与必要性

    使用多模块的原因 使用Java技术开发的工程项目 无论是数据处理系统还是Web网站 随着项目的不断发展 需求的不断细化与添加 工程项目中的代码越来越多 包结构也越来越复杂这时候工程的进展就会遇到各种问题 1 不同方面的代码之间相互耦合 这时
  • vsCode注释快捷键

    系列文章目录 文章目录 系列文章目录 前言 一 pandas是什么 二 使用步骤 1 你也可以选择代码 使用上方菜单的 编辑 来手动注释代码 前言 VScode怎么注释掉一段代码 快捷键直接搞定 一 pandas是什么 示例 pandas
  • vue 封装组件供全局使用_Vue如何封装高质量组件

    依照MVC模式思想来解释高可复用性 低耦合性的组件定义方法 组件分类 级别从小到大 基础组件 只是一种宽泛的定义 可见场景较多 与业务无关的组件 比如列表 表格 输入框等 没有实际的UI 故不能直接使用 UI组件 与基础组件同级 为基础组件
  • python os.walk 指定遍历深度_使用os.walk()以递归方式遍历Python中的目录

    试试这个 usr bin env python coding utf 8 FileTreeMaker py author legendmohe import os import argparse import time class File
  • STM32实现74HC595控制

    一 前言 本文主要是实出74HC595的简单控制功能实现 学习笔记整理 二 概述 一 74HC595简述 74HC595是一个8位串行输入 平行输出的位移缓存器 平台行输出为三态输出 在SCHCP的上升沿输入 在STCP的上升沿进入存储寄存