【蓝桥杯嵌入式】拓展板之数码管显示

news2025/1/11 17:10:20

文章目录

  • 硬件电路
  • 连接方式
  • 函数实现
  • 文章福利

硬件电路

在这里插入图片描述
  通过上述原理图,可知拓展板上的数码管是一个共阴数码管,也就是说某段数码管接上高电平时,就会点亮。
  上述原理图还给出一个提示,即:三个数码管分别与三个74HC595移位缓存器并联,而三个移位寄存器串联
  74LS595芯片实际上是一个8位串行输入、并行输出的位移缓存器。也就是说数据是一个一个进入,但是一起输出的。
  当SCK处于上升沿时,串行数据由SDL输入到内部的8位位移缓存器,并由Q7’输出;而并行输出则是在LCK处于上升沿时,将在8位位移缓存器的数据存入到8位并行输出缓存器。当串行数据输入端OE的控制信号为低使能时,并行输出端的输出值等于并行输出缓存器所存储的值。
  点亮三个数码管需要3*8=24个数据,而一个74LS595移位寄存器只能够存储8位数据,其存储值远小于输入值。
  根据上述的原理,可知:上图中seg3数码管的数据是经seg2数码管位移过来的,而seg2数码管数据是经seg1数码管位移过来。也就是说数码管刷新的顺序为seg3->seg2->seg1。

共阴数码管显示说明
  首先来看看一个数码管的段码分布吧!🤤🤤🤤
在这里插入图片描述
  也就是说一个数码管是由八段组成,a段为最低位,dp为最高位。
  由于拓展板的数码管是一个共阴数码管(1有效)。那么显示数值的段码由来示例分析为:

显示值dpgfedcba十六进制表示
0001111110x3f
1000001100x06
0.101111110xbf
1.100001100x86

连接方式

在这里插入图片描述
  经过查找原理图,不难发现74LS595芯片的三个输入端(SER、PCLK、SCK)实际上分别与PA1、PA2、PA3引脚相连接。
  因此,其连接方式如下图:
在这里插入图片描述

函数实现

cubeMx配置
在这里插入图片描述

函数示例

  声明定义:

// 声明GPIO分组及引脚
#define RCLK_PIN    GPIO_PIN_2
#define RCLK_PORT   GPIOA
#define SER_PIN   	GPIO_PIN_1
#define SER_PORT    GPIOA
#define SCK_PIN   	GPIO_PIN_3
#define SCK_PORT    GPIOA

// 声明函数别名
#define RCLK_H	HAL_GPIO_WritePin(RCLK_PORT, RCLK_PIN, GPIO_PIN_SET)
#define RCLK_L	HAL_GPIO_WritePin(RCLK_PORT, RCLK_PIN, GPIO_PIN_RESET)

#define SER_H	HAL_GPIO_WritePin(SER_PORT, SER_PIN, GPIO_PIN_SET)
#define SER_L	HAL_GPIO_WritePin(SER_PORT, SER_PIN, GPIO_PIN_RESET)

#define SCK_H	HAL_GPIO_WritePin(SCK_PORT, SCK_PIN, GPIO_PIN_SET)
#define SCK_L	HAL_GPIO_WritePin(SCK_PORT, SCK_PIN, GPIO_PIN_RESET)

  函数实现:

/************   共阴数码管段码  *****************/
//               0     1     2     3      4		5	  6     7     8     9    -    熄灭
u8 segTab[] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x40, 0x00,
//               0.    1.   2.    3.     4.	   5.    6.    7.    8.     9.    -    熄灭	
				0xbf, 0x86, 0xdb, 0xcf, 0xe6, 0xed, 0xfd, 0x87, 0xff, 0xef, 0x40, 0x00,
//				A      B     C     D      E      F  熄灭
				0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, 0x00 };
// 储存数码管需要显示的值
u8 segBuff[3] = {10,10,10};

/* -------------------------------- begin  -------------------------------- */
/**
  * @Name    segDisplay
  * @brief   数码管显示函数
  * @param   None
  * @retval  None
  * @author  黑心萝卜三条杠
  * @Data    2023-03-02
 **/
/* -------------------------------- end -------------------------------- */
void segDisplay(void)
{
    u8 code_tmp = 0,j = 0;
	static u8 i = 3;
	
	code_tmp = segTab[segBuff[i-1]];
	
	// 拉低复位端口 低电平有效 表示需要写入数据
	RCLK_L;
	for(j = 0; j < 8; ++j)
	{
		// 拉低控制信号
		SCK_L;
		// 判断最高位是否为1
		if(code_tmp & 0x80)
			// 写入1
			SER_H;
		else
			// 写入0
			SER_L;
		code_tmp = code_tmp << 1;
		// 拉低控制信号
		SCK_L;
		// 拉高控制信号
		SCK_H;
	}
	// 拉高复位端口 一般默认接VCC  表示写入数据完成
    RCLK_H;
	
	// 移动下一次显示数码管的位置
	if(--i > 0 ) i = 3;
}

  使用说明:使用时直接将要显示的数据放入数组segBuff[],再调用刷新函数segDisplay()code>即可。
例如

void sysWork(void)
{
	static int i = 0;	
	segDisplay();
	
	segBuff[0] = i;
	segBuff[1] = i+1;
	segBuff[2] = i+2;
	i = (i+1)%24;
}

  注意使用上述的segDisplay()函数还需要调整刷新频率,否则会出现闪烁的情况。
  若认为老实调节频率过于麻烦,可以使用下面这个版本的>segDisplay():

/* -------------------------------- begin  -------------------------------- */
/**
  * @Name    segDisplay
  * @brief   数码管显示函数
  * @param   None
  * @retval  None
  * @author  黑心萝卜三条杠
  * @Data    2023-03-02
 **/
/* -------------------------------- end -------------------------------- */
void segDisplay(void)
{
    u8 code_tmp = 0,j = 0,i = 3;
	
	for(i=3;i>0;--i)
	{
		code_tmp = segTab[segBuff[i-1]];
		
		// 拉低复位端口 低电平有效 表示需要写入数据
		RCLK_L;
		for(j = 0; j < 8; ++j)
		{
			// 拉低控制信号
			SCK_L;
			// 判断最高位是否为1
			if(code_tmp & 0x80)
				// 写入1
				SER_H;
			else
				// 写入0
				SER_L;
			code_tmp = code_tmp << 1;
			// 拉低控制信号
			SCK_L;
			// 拉高控制信号
			SCK_H;
		}
		// 拉高复位端口 一般默认接VCC  表示写入数据完成
		RCLK_H;
	}
}

  至于函数调用本质上是一样的,只不过可以不用细调数码管的刷新频率了。🤣🤣🤣

文章福利

下边是小编个人整理出来免费的蓝桥杯嵌入式福利,有需要的童鞋可以自取哟!🤤🤤🤤

  • 【蓝桥杯嵌入式】第十一届蓝桥杯嵌入式省赛(第二场)程序设计试题及其题解
  • 【蓝桥杯嵌入式】第十二届蓝桥杯嵌入式省赛程序设计试题以及详细题解
  • 【蓝桥杯嵌入式】第十三届蓝桥杯嵌入式省赛程序设计试题及其详细题解
  • 【蓝桥杯嵌入式】第十三届蓝桥杯嵌入式省赛(第二场)程序设计试题及其题解
  • 【蓝桥杯嵌入式】第十三届蓝桥杯嵌入式国赛程序设计试题以及详细题解
  • 【蓝桥杯】一文解决蓝桥杯嵌入式开发板(STM32G431RBT6)LCD与LED显示冲突问题,并讲述LCD翻转显示

也欢迎大家留言或私信交流,共同进步哟!😉😉😉

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

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

相关文章

十八、Django-restframework之请求和响应(三)

1. 请求对象 REST框架引入了一个扩展了常规HttpRequest的请求对象&#xff0c; 并提供更灵活的请求解析。请求对象的核心功能是属性request.data&#xff0c;这与request.POST类似&#xff0c;但对于WebAPIs更有用。 request.POST # Only handles form data. Only works fo…

Barra模型因子的构建及应用系列五之NonLinear Size因子

一、摘要 在前期的Barra模型系列文章中&#xff0c;我们构建了Size因子、Beta因子、Momentum因子和Residual Volatility因子&#xff0c;并分别创建了对应的单因子策略&#xff0c;本节文章在该系列下进一步构建NonLinear Size因子。从回测结果看&#xff0c;自2022年以来&…

ConcurrentHashMap-Java八股面试(五)

系列文章目录 第一章 ArrayList-Java八股面试(一) 第二章 HashMap-Java八股面试(二) 第三章 单例模式-Java八股面试(三) 第四章 线程池和Volatile关键字-Java八股面试(四) 提示&#xff1a;动态每日更新算法题&#xff0c;想要学习的可以关注一下 文章目录系列文章目录一、…

基于卷积神经网络CNN的三相故障识别

目录 背影 卷积神经网络CNN的原理 卷积神经网络CNN的定义 卷积神经网络CNN的神经元 卷积神经网络CNN的激活函数 卷积神经网络CNN的传递函数 卷积神经网络CNN手写体识别 基本结构 主要参数 MATALB代码 结果图 展望 背影 现在生活&#xff0c;为节能减排&#xff0c;减少电能损…

Ajax学习 基础概念 发送请求 常见方法

AJAX 简介 AJAX 全称为Asynchronous Javascript And XML &#xff0c;就是异步的JS和XML。 通过AJAX可以再浏览器中向服务器发送异步请求&#xff0c;最大的优势&#xff1a;无刷新获取数据。 AJAX 不是新的编程语言&#xff0c;而是一种将现有的标准组合在一起使用的新方式。…

从FPGA说起的深度学习(四)

这是新的系列教程&#xff0c;在本教程中&#xff0c;我们将介绍使用 FPGA 实现深度学习的技术&#xff0c;深度学习是近年来人工智能领域的热门话题。在本教程中&#xff0c;旨在加深对深度学习和 FPGA 的理解。用 C/C 编写深度学习推理代码高级综合 (HLS) 将 C/C 代码转换为硬…

锚点定位使内容在指定区域显示

1、问题描述 在使用锚点定位时&#xff0c;使用 scrollIntoView 方法&#xff0c;导致整个页面随着锚点跳转 2、问题分析 因为最开始做需求的时候&#xff0c;只在最外层设置了一个滚动条&#xff0c;所以导致整体锚点的跳转是随着最外层滚动条距离顶部的高度跳转的&#xf…

从NLP视角看电视剧《狂飙》,会有什么发现?

文章目录1、背景2、数据获取3、文本分析与可视化3.1 短评数据预处理3.2 词云图可视化3.3 top关键词共现矩阵网络3.4 《狂飙》演职员图谱构建4、短评相关数据分析与可视化5、总结原文请关注&#xff1a;实用自然语言处理 作者&#xff1a;风兮 建议查看原文&#xff1a; https…

Linux下软件部署安装管理----rpmbuild打包rpm包部署安装

来源&#xff1a;微信公众号「编程学习基地」 文章目录1.安装rpmbuild2.rpm包制作打包rpm包3.rpm包安装4.rpm包卸载1.安装rpmbuild yum install rpmbuild yum install rpmdevtools创建rpm包管理路径&#xff0c;生成rpm相关目录 RPM打包的时候需要编译源码&#xff0c;还需要…

基于Cortex-M7内核STM32F767NIH6,STM32F767VGT6,STM32F767VIT6嵌入式技术资料

STM32F7 32 位 MCUFPU 基于高性能的 ARMCortex-M7 32 位 RISC 内核&#xff0c;工作频率高达 216MHz。Cortex-M7 内核具有单浮点单元(SFPU)精度&#xff0c;支持所有 ARM 单精度数据处理指令与数据类型。同时执行全套 DSP 指令和存储保护单元&#xff08;MPU&#xff09;&#…

【完美解决】应用程序无法正常启动(0xc000007b)请单击“确定”关闭应用程序

年期安装CorelDRAW X8 (64-Bit)&#xff0c;安装完成之后运行一点毛病都没有&#xff0c;可是过了两三个月&#xff0c;再打开就出现“应用程序无法正常启动(0xc000007b)请单击“确定”关闭应用程序”这个提示框&#xff0c;如下图示 出现这个问题我就上网查找&#xff0c;无非…

Java学习笔记 --- JavaScript

一、JavaScript介绍 JavaScript语言诞生主要是完成页面的数据验证。因此它运行在客户端&#xff0c;需要运行浏览器来解析执行JavaScript代码。JS是Netcape网景公司的产品&#xff0c;最早取名为LiveScript&#xff1b;为了吸引更多java程序员。更名为 JavaScript JS是弱类型&…

File 文件操作

File 文件操作&#xff1a; 一、常用方法&#xff1a; 方法类型描述public File(String pathname&#xff09;构造给定一个要操作文件的完整路径public File(File parent, String child)构造给定要操作文件的父路径和子文件名称public boolean createNewFile() throws IOExce…

hexo部署github搭建个人博客 完整详细带图版(更新中)

文章目录0. 前置内容1. hexo创建个人博客2. GitHub创建仓库3. hexo部署到GitHub4. 常用命令newcleangenerateserverdeploy5. 添加插件5.1 主题5.2 博客基本信息5.3 创建新的菜单5.4 添加搜索功能5.5 添加阅读时间字数提示5.6 打赏功能5.7 切换主题5.8 添加不蒜子统计5.9 添加百…

小程序的拉流组件live-player的使用

前言&#xff1a; 我们在小程序中实现音视频-直播/录播 的播放时候&#xff0c;会使用到微信官方提供的两个组件&#xff0c;推流组件和拉流组件&#xff0c;这里来分享下他的拉流组件的使用和具体需要注意的点。 效果图&#xff1a; 1、拉流状态code日志 2、代码使用截图&am…

深度学习 Day26——利用Pytorch实现天气识别

深度学习 Day26——利用Pytorch实现天气识别 文章目录深度学习 Day26——利用Pytorch实现天气识别一、前言二、我的环境三、前期工作1、导入依赖项和设置GPU2、导入数据3、划分数据集四、构建CNN网络五、训练模型1、设置超参数2、编写训练函数3、编写测试函数4、正式训练六、结…

前端利用emailjs发送邮件

最近有一个需求&#xff0c;前端发送一个form表单到一个邮箱&#xff0c;找了一圈发现emailjs还不错就使用他了。首先emailjs官网注册一个账号注册完之后创建一个邮件服务&#xff08;我这里使用的是谷歌邮箱&#xff09;链接谷歌邮箱账户 然后创建服务接下来就要创建一个邮件的…

浅谈入门Servlet注解式开发

Servlet3.0版本之后&#xff0c;推出了Servlet基于注解式开发。 优点&#xff1a;开发效率高&#xff0c;直接在java类上使用注解进行标注&#xff0c;可直接省略WEB.xml文件配置import javax.servlet.annotation.WebServlet; WebServlet 使用WebServlet注解标注 WebServlet的…

五子棋的设计与实现

术&#xff1a;Java等摘要&#xff1a;五子棋是一种两人对弈的纯策略型棋类游戏&#xff0c;非常容易上手&#xff0c;老少皆宜。为了更好的推广五子棋&#xff0c;研究简单的人工智能方式&#xff0c;运用Java开发五子棋游戏。主要包含了人机对战&#xff0c;棋盘初始化&#…

中国跻身量子计算第一梯队,为何它是硬科技必争之地?丨两会唠科

科技云报道原创。 “两会唠科”是由腾讯科技推出的两会特别策划&#xff0c;重点讲述中国科技名片。本期与科技云报道联合出品&#xff0c;聚焦中国量子计算研究成果和相关进展。 全球越来越多的国家加入到量子科技领域的竞赛当中&#xff0c;争夺下一步的技术战略制高点。 今…