STM32 4位数码管和74HC595

4位数码管

        在使用一位数码管的时候,会用到8个IO口,那如果使用4位数码管,难道要使用32个IO口吗?肯定是不行的,太浪费了IO口了。把四个数码管全部接一起共用8个IO口,然后分别给他们一个片选。所以4位数码管共有12个IO口。

        当选择数码管1显示的时候,这可以选择1(位选)然后再根据1位数码管的原理(段选)显示这个数码管。

动态显示

        根据人眼视觉残留的原理,在显示的时候,位选依次选择数码管,然后段选控制数码管显示。这种依次选择依次显示的速度非常快,快到人眼反应不过来,从而使4位数码管上的数字同时显示(只是人眼看上去同时显示)。

消影

        在动态显示的时候,会发现数码管在闪烁,这是位选和段选不同步导致的。我们可以通过加延迟,或者置零来解决这个问题,这就是常说的消影。

        如果还想用更少的引脚控制4位数码管,我们可以使用74HC595。

74HC595

        74HC595是一个8位串行输入、并行输出的位移缓存器:并行输出为三态输出。在SCK 的上升沿,串行数据由SDL输入到内部的8位位移缓存器,并由Q7'输出,而并行输出则是在LCK的上升沿将在8位位移缓存器的数据存入到8位并行输出缓存器。当串行数据输入端OE的控制信号为低使能时,并行输出端的输出值等于并行输出缓存器所存储的值。

74HC595引脚
符号引脚描述
Q0---Q7第15脚,第1-7脚8位并行数据输出
GND第8脚
Q7第9脚串行数据输出
/MR第10脚主复位(低电平有效)
SH_CP第11脚数据输入时钟线
ST_CP第12脚输出存储器锁存时钟线
/OE第13脚输出有效(第电平有效)
DS第14脚串行数据输入
VCC第16脚

电源

串入并出

        当我们给DS依次输入8个bit的数据,会同时在Q0-Q7输出,那不就可以只用1个IO口连接到DS,相当于扩展成8个IO口。而4位数码管要12个IO口,那用2个74HC595不就好了。

串入串出 

        从原理图上我们可以看见74HC595(1)(左侧的)的QH’连接到了74HC595(2)的SER,也就是一个74HC595的串行输出连接到了下一个74HC595的串行输入。

        当输入的数据超出并行输出的范围时,会依次顶替之前的数据,当输入16位数据时,原先输入到74HC595(1)的数据D0-D7,就会顶替掉成D8-D15,而被顶替的数据则通过QH'到SER的连接传输到74HC595(2)中,使其位D0-D7。

        第一个74HC595(左侧的)用于选择数码管(位选),第二个74HC595用于显示数码管(段选)。

SH_CP和ST_CP

  • SH_CP(11脚):上升沿时数据寄存器的数据移位。Q0->Q1->Q2-->Q3-->...-->Q7;下降沿移位寄存器数据不变。
  • ST_CP(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。通常我将ST_CP置为低电平,当移位结束后,在ST_CP端产生一个正脉冲,更新显示数据。

使用方法 

第一步:目的:将要准备输入的位数据移入74HC595数据输入端上。

方法:送位数据到_595。

第二步:目的:将位数据逐位移入74HC595,即数据串入

方法:SH_CP产生一上升沿,将DS上的数据移入74HC595移位寄存器中,先送低位,后送高位。(应该是先送高位)

第三步:目的:并行输出数据。即数据并出

方法:ST_CP产生一上升沿,将由DS上已移入数据寄存器中的数据

送入到输出锁存器。

说明: 从上可分析:从SH_CP产生一上升沿(移入数据)和ST_CP产生一上升沿(输出数据)是二个独立过程,实际应用时互不干扰。即可输出数据的 同时移入数据。

引脚连接

P1的5个IO口连接单片机,而P2通过级联可以继续接数码管。

输入顺序

 从图中可以看到数据是QA-QB-QC...QH,最先输入的是QA。

上图最后一行PARALLEL OUTPUTS(并行输出),可以知道QA是高位。

代码

bsp_74HC595.c

#include "bsp_74HC595.h"unsigned int num[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x00};void HC595_GPIO_Configuration()
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_12|GPIO_Pin_15;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_RESET);GPIO_WriteBit(GPIOB,GPIO_Pin_13,Bit_RESET);GPIO_WriteBit(GPIOB,GPIO_Pin_15,Bit_RESET);
}
//串入
void HC595_Send_Byte(unsigned char num)
{unsigned int i;for(i = 0;i<8;i++){if(num & 0x80)//取最高位 1000 0000{GPIO_WriteBit(GPIOB,GPIO_Pin_15,Bit_SET);}else{GPIO_WriteBit(GPIOB,GPIO_Pin_15,Bit_RESET);}GPIO_WriteBit(GPIOB,GPIO_Pin_13,Bit_SET);Delay_us(10);GPIO_WriteBit(GPIOB,GPIO_Pin_13,Bit_RESET);Delay_us(10);num <<=1;}
}
//并出
void HC595_Send_Data(unsigned char num,unsigned char show_bit)
{HC595_Send_Byte(num);HC595_Send_Byte(1 << show_bit);//高4位没有用GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_RESET);Delay_us(10);GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_SET);Delay_us(10);
}

bsp_74HC595.h

#ifndef __BSP_74HC595_H__
#define __BSP_74HC595_H__#include<stm32f10x.h>
#include "Delay.h"
extern unsigned num[];
void HC595_GPIO_Configuration(void);void HC595_Send_Data(unsigned char num,unsigned char show_bit);void HC595_Send_Byte(unsigned char num);#endif

main.c

int main(void)
{HC595_GPIO_Configuration();while(1){HC595_Send_Data(num[2],4);//4号数码管,显示数字2HC595_Send_Data(num[0],1);//1号数码管,显示数字0HC595_Send_Data(num[3],2);//2号数码管,显示数字3}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/703148.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

✅技术社区项目—JWT身份验证

通用的JWT鉴权方案 JWT鉴权流程 基本流程分三步: ● 用户登录成功之后&#xff0c;后端将生成的jwt返回给前端&#xff0c;然后前端将其保存在本地缓存; ● 之后前端与后端的交互时&#xff0c;都将iwt放在请求头中&#xff0c;比如可以将其放在Http的身份认证的请求头 Author…

C语言编程安全规范

目的 本规范旨在加强编程人员在编程过程中的安全意识,建立编程人员的攻击者思维,养成安全编码的习惯,编写出安全可靠的代码。 2 宏 2.1 用宏定义表达式时,要使用完备的括号 2.2 使用宏时,不允许参数发生变化 3 变量 3.1 所有变量在定义时必须赋初值 变量声明赋予初值,可…

B端系统:导航机制设计,用户体验提升的法宝

Hi&#xff0c;大家好&#xff0c;我是贝格前端工场&#xff0c;从事8年前端开发的老司机。很多B端系统体验不好很大一部分原因在于导航设计的不合理&#xff0c;让用户无所适从&#xff0c;大大降低了操作体验&#xff0c;本文着重分析B端系统的导航体系改如何设计&#xff0c…

$attrs

一、概念 vue官网定义如下: 包含了父作用域中不作为 prop 被识别 (且获取) 的 attribute 绑定 (class 和 style 除外)。当一个组件没有声明任何 prop 时,这里会包含所有父作用域的绑定 (class 和 style 除外),并且可以通过v-bind="$attrs"传入内部组件——在创建…

抖店是怎么运营做起来的?一文详解抖店的运营逻辑和流程,可收藏

我是王路飞。 很多人都知道现在的抖音有【商城】&#xff0c;进入之后就是一个个的抖音小店了&#xff0c;也知道抖店的红利。 但是抖店具体是怎么运营并且做起来的&#xff0c;就不太清楚了&#xff0c;因此很多新手明明眼馋抖店的红利&#xff0c;却又无从下手。 今天这篇…

Java 中常用的数据结构类 API

目录 常用数据结构API 对应的线程安全的api 高可用衡量标准 常用数据结构API ArrayList: 实现了动态数组&#xff0c;允许快速随机访问元素。 import java.util.ArrayList; LinkedList: 实现了双向链表&#xff0c;适用于频繁插入和删除操作。 import java.util.LinkedLis…

Spring综合漏洞利用工具

Spring综合漏洞利用工具 工具目前支持Spring Cloud Gateway RCE(CVE-2022-22947)、Spring Cloud Function SpEL RCE (CVE-2022-22963)、Spring Framework RCE (CVE-2022-22965) 的检测以及利用&#xff0c;目前仅为第一个版本&#xff0c;后续会添加更多漏洞POC&#xff0c;以及…

逆向茶话会笔记

安卓逆向 用用burp设置代理或者用charles抓包 windows httpopen 类比web站点渗透测试 推荐书 飞虫 安卓大佬不怎么打ctf 喜欢在看雪和吾爱破解 提问环节 q websocket grpc抓包有什么推荐的工具&#xff1f; a 不太了解 游戏安全和llvm 既要逆游戏也要逆外挂 逆游戏入…

发电机测试的常见参数和规格有哪些需要关注?

发电机测试是确保其正常运行和性能的关键步骤。在进行发电机测试时&#xff0c;需要关注一些常见的参数和规格&#xff0c;以确保其安全、高效和可靠的运行。以下是一些需要关注的发电机测试参数和规格&#xff1a; 1. 电压&#xff1a;发电机的输出电压是衡量其性能的重要指标…

【数据结构初阶 7】二叉树:链式二叉树的基本操作实现

文章目录 &#x1f308; Ⅰ 定义二叉树结点&#x1f308; Ⅱ 创建二叉树结点&#x1f308; Ⅲ 遍历二叉树1. 先序遍历2. 中序遍历3. 后序遍历4. 层序遍历 &#x1f308; Ⅳ 销毁二叉树 &#x1f308; Ⅰ 定义二叉树结点 1. 每个结点都由三部分组成 数据域&#xff1a;存储本结…

代码随想录Leetcode474. 一和零

题目&#xff1a; 代码(首刷看解析 2024年2月26日&#xff09; class Solution { public:// 二维 0 1背包int findMaxForm(vector<string>& strs, int m, int n) {// 1 二维 [i]表示 0 的个数&#xff0c;上限m; [j]表示 1 的个数&#xff0c;上限nvector<vector…

大佬推荐的网络安全学习路线(从基础到高级)

说起网络安全&#xff0c;你可能会担心它是一个过时的行业。有人说&#xff0c;网络安全快卷死了&#xff0c;你既要攻又要防&#xff0c;并且随着技术的发展&#xff0c;你还要不断地学习&#xff0c;不在卷中生&#xff0c;就在卷中死。 实际上&#xff0c;随着数字化进程的…

BUGKU-WEB 文件包含

题目描述 题目截图如下&#xff1a; 进入场景看看&#xff1a; 解题思路 你说啥我就干啥&#xff1a;点击一下试试你会想到PHP伪协议这方面去嘛&#xff0c;你有这方面的知识储备吗&#xff1f; 相关工具 解题步骤 查看源码 看到了一点提示信息&#xff1a; ./index.…

Python文件和异常(二)

目录 三、异常 &#xff08;一&#xff09;处理 ZeroDivisionError 异常 &#xff08;二&#xff09;使用 try-except 代码块 &#xff08;三&#xff09;使用异常避免崩溃 &#xff08;四&#xff09;else 代码块 &#xff08;五&#xff09;处理 FileNotFoundError 异常…

什么是web组态?

一、web组态的定义和背景 在深入探讨之前&#xff0c;我们先回顾一下“组态”的定义。在工业自动化领域&#xff0c;组态软件是用于创建监控和数据采集&#xff08;SCADA&#xff09;系统的工具&#xff0c;它允许工程师构建图形界面&#xff0c;实现与各种设备和机器的数据交互…

C++线程同步(下)

多线程同步 概述信号量示例一代码实现运行结果分析示例二开发环境代码实现运行结果分析future和promise示例一实现代码运行结果分析示例二实现代码运行结果示例三实现代码运行结果示例四示例代码运行结果注意附加示例扩展实现代码运行结果注意扩展原子应用场景头文件示例实现代…

【蓝桥杯】拓扑排序

一.拓扑排序 1.定义&#xff1a; 设G&#xff08;V&#xff0c;E&#xff09;是一个具有n个顶点的有向图&#xff0c;V中的顶点序列称为一个拓扑序列&#xff0c;当且仅当满足下列条件&#xff1a;若从顶点到有一条路径&#xff0c;则在顶点序列中顶点必在之前。 2.基本思想…

prime_series_level-1靶场详解

环境搭建 官网https://www.vulnhub.com/entry/prime-1,358/ 直接导入靶机 解题思路 arp-scan -l 确认靶机ip为192.168.236.136 也可以使用nmap扫网段 nmap -sn 192.168.236.0/24 使用nmap扫描靶机开放的端口 nmap -sS -T5 --min-rate 10000 192.168.236.136 -sC -p- &#xf…

【项目部署上线】宝塔部署前端Docker部署后端

【项目部署上线】宝塔部署前端&Docker部署后端 文章目录 【项目部署上线】宝塔部署前端&Docker部署后端1.安装依赖1.1 安装mysql1.2 安装Canal1.3 安装redis1.4 安装rabbitmq1.5 安装nacos 2. 部署前端3. 部署后端 1.安装依赖 1.1 安装mysql docker run -d -p 3306:3…

Redis主从、哨兵、Redis Cluster集群架构

Redis主从、哨兵、Redis Cluster集群架构 Redis主从架构 Redis主从架构搭建 主从搭建的问题 如果同步数据失败&#xff0c;查看log日志报错无法连接&#xff0c;检查是否端口未开放出现”Error reply to PING from master:...“日志&#xff0c;修改参数protected-mode no …