蓝桥杯单片机组备赛——数码管静态显示

news2024/9/26 5:19:47

文章目录

  • 一、预备知识
    • 1.1 段选&位选
    • 1.2 静态显示和动态显示
  • 二、原理图分析
  • 三、代码编写思路
  • 四、最终代码
  • 五、静态数码管显示练习与答案
    • 5.1 练习题目
    • 5.2 练习答案

一、预备知识

1.1 段选&位选

段选:段选指的是选择数码管哪个“段”应该被点亮。一般情况下,每个“段”会连接到一个GPIO(通用输入/输出)管脚。我们通过更改GPIO电平来控制特定“段”是否点亮。例如,要显示数字“8”,我们就需要点亮所有的段。

位选:位选则是指选择哪一个数码管应该被点亮。这在我们有多个数码管需要显示不同数字或者字符的时候非常重要。比如在一个8位数码管显示器中,要显示“12345678”,我们首先选择第一位(位选)并且设置相应的“段”,以显示“1”,然后我们选择第二位并设置“段”以显示“2”,以此类推。

1.2 静态显示和动态显示

静态显示:在静态显示中,每一个段和每一位都直接连接到驱动电路(如微控制器)。当你需要显示一个数字或字母时,对应的段会被驱动电路点亮,同时,选中的位也会被驱动电路点亮,从而形成完整的显示。
静态显示的优点在于显示稳定,无需频繁刷新,但缺点是需要较多的驱动管脚,对于具有多位显示的数码管来说,可能需要很大的控制线路资源。

动态显示:动态显示则是一种更为经济的显示方式。在动态显示中,一次只点亮一位数码管,但是通过快速的切换显示内容,使人的眼睛看不出切换,给人一种所有数码管都同时在显示的假象,这就是视觉暂留效应。动态显示可以减少驱动管脚的数量,上大大减小了控制线路资源的需求。
但是,动态显示的缺点是需要持续刷新并维护显示内容,否则会产生闪烁。由于需要定时更新显示,对于程序而言可能更加复杂,并且会占用一部分处理器资源。在公共显示屏或者需要显示大量信息的场合,动态显示是最常用的。

二、原理图分析

在这里插入图片描述

开发板上用的数码管型号为F3461BH,也就是共阳极数码管。所以在段选锁存器输出端输出低电平时,数码管才能亮起来。
我画了一个表格来说明怎么设置段码的高低电平,如下图
在这里插入图片描述

在说完段码的设置之后,又有一个新问题就是:一共8个数码管,我们到底要把这个段码显示在哪个数码管上。
这个问题就涉及到了位选,位选就是选定我们要在哪个或哪几个数码管上显示我们的数据。我们要在哪个数码管上显示就设置哪个com为1就可以了。例如我想让第一个数码管显示,那么令P0=0x01。

三、代码编写思路

记住两个点:
1.段码是低电平有效,也就是低电平使得数码管的某一段亮起来。
2.位选是高电平有效,也就是给哪个com口高电平,哪个数码管被选中。

编写流程:
清除P0口数据(P0=0xff)
---->设置138译码器,开启段选573锁存器(74HC138)
---->关闭所有锁存器
---->设置段选数据(P0=pos)
---->设置138译码器,开启位选573锁存器(74HC138)
---->设置段选数据(P0=data)
---->设置138译码器,开启段选573锁存器(74HC138)
---->关闭所有锁存器

四、最终代码

代码如下:

void SegBit(u8 pos,u8 dat){
	
	P0=0xff;   			// 清除P0先前的数据
	HC573Select(7);  	// 开启段选锁存器
	HC573Select(0); 	// 关闭段选锁存器
	
	P0=0x01<<pos;  		// 选择要在哪个数码管上显示
	HC573Select(6);		// 开启位选锁存器
	HC573Select(0);		// 关闭位选锁存器
	
	P0=dat;  // 设置要显示什么
	HC573Select(7); 	// 开启段选锁存器
	HC573Select(0);		// 关闭段选锁存器
}

代码使用技巧:也许大家不知道我为什么这么写,所以推荐大家先自己写一遍,写完后看也没有什么bug,如果没有bug那么恭喜,你很厉害。如果有bug大家参照我的代码修改一下自己的代码,会更有收获。

五、静态数码管显示练习与答案

5.1 练习题目

在这里插入图片描述

5.2 练习答案

#include <stc15.h>
#include <intrins.h>


unsigned char code dat[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99,
					      0x92, 0x82, 0xf8, 0x80, 0x90,
						  0x88, 0x83, 0xc6, 0xa1, 0x86, 
                          0x8e, 0xff};



void selectHC573(unsigned char num)  
{
	switch(num)
	{
		case 4:
			P2=(P2 & 0x1f) | 0x80;
			break;
		case 5:
			P2=(P2 & 0x1f) | 0xa0;
			break;
		case 6:
			P2=(P2 & 0x1f) | 0xc0;
			break;
		case 7:
			P2=(P2 & 0x1f) | 0xe0;
			break;
		case 0:
			P2=(P2 & 0x1f) | 0x00;
			break;
	}
}

void system_Init()
{
	selectHC573(5);
	P0=0x00;
}


void display_SMG_Bit(unsigned char dat, unsigned pos)
{
	P0=0x00;
	selectHC573(6);
	P0=0x01<<pos-1;
	selectHC573(0);
	
	P0=0x00;
	selectHC573(7);
	P0=dat;
}

void display_All_SMG(unsigned char dat)
{
	P0=0x00;
	selectHC573(6);
	P0=0xff;
	
	selectHC573(0);
	
	P0=0x00;
	selectHC573(7);
	P0=dat;
}

void Delay(unsigned int t)
{
	while(t--);
	while(t--);
}

void display_SMG()
{
	int i,j;
	for(i=0;i<9;i++)
	{
		for(j=0;j<10;j++)
		{
			display_SMG_Bit(dat[j], i);
			Delay(60000);
			Delay(60000);
		}
	}
	
	
	for(j=0;j<16;j++)
		{
			display_All_SMG(dat[j]);
			Delay(60000);
			Delay(60000);
			Delay(60000);
			Delay(60000);
		}
}

void main()
{
	system_Init();
	while(1)
	{
		display_SMG();
	}
}

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

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

相关文章

py连接sqlserver数据库报错问题处理。20009

报错 pymssql模块连接sqlserver出现如下错误&#xff1a; pymssql._pymssql.OperationalError) (20009, bDB-Lib error message 20009, severity 9:\nUnable to connect: Adaptive Server is unavailable or does not exist (passwordlocalhost)\n) 解决办法&#xff1a; 打…

超声波清洗机洗眼镜有用吗?越贵的超声波清洗机洗的越干净吗?

首先&#xff01;作为一个眼镜党同时兼在眼镜店工作的人&#xff0c;用超声波清洗机洗眼镜可以说是非常高效的一种清洁方式&#xff0c;远比于我们手动清洗还要方便&#xff0c;现在市面上有非常多超声波清洗机的清洗技术是不太行的&#xff0c;所以大家在购买的时候还是需要多…

互联网资讯精选:科技爱好者周刊 | 开源日报 No.145

ruanyf/weekly Stars: 37.4k License: NOASSERTION 记录每周值得分享的科技内容&#xff0c;提供大量就业信息。欢迎投稿、推荐或自荐文章/软件/资源&#xff0c;并可通过多种方式进行搜索。 提供丰富的科技内容每周更新可以提交工作/实习岗位支持投稿和推荐功能 GyulyVGC/…

监督、半监督、无监督、自监督学习方法之间的区别

概念辨别 监督学习&#xff08;Supervised Learning&#xff09;&#xff1a;利用大量的标注数据来训练模型&#xff0c;模型最终学习到输入和输出标签之间的相关性&#xff1b;半监督学习&#xff08;Semi-supervised Learning&#xff09;&#xff1a;利用少量有标签的数据和…

行为驱动测试 python + behave

行为驱动&#xff0c;Behave-Driven Development&#xff0c;简称BDD。在行为驱动中运用结构化的自然语言描述场景测试&#xff0c;然后将这些结构化的自然语言转化为可执行的测试脚本或者其他形式。BDD的一种优势是&#xff0c;它建立了一种通用语言&#xff0c;而这种语言可以…

5.MapReduce之Combiner-预聚合

目录 概述本地预计算 Combiner 意义实践前提代码日志观察 结束 概述 在 MR、Spark、Flink 中&#xff0c;常用的减少网络传输的手段。 通常在 Reducer 端合并&#xff0c;shuffle 的数据量比在 Mapper 端要大&#xff0c;根据业务情况及数据量极大时&#xff0c;将大幅度降低效…

rime中州韵小狼毫 汉语拼音输入方案

在word中&#xff0c;我们可以轻易的给汉字加上拼音&#xff0c;如下&#x1f447;&#xff1a; 但是&#xff0c;如何单独的输入拼音呢&#xff1f;例如输入 pīn yīn, 再如 zhōng guō。今天我们分享一个使用rime中州韵小狼毫须鼠管输入法配置的输入汉语拼音的输入方案。功…

上海AI实验室等开源,音频、音乐统一开发工具包Amphion

上海AI实验室、香港中文大学数据科学院、深圳大数据研究院联合开源了一个名为Amphion的音频、音乐和语音生成工具包。 Amphion可帮助开发人员研究文本生成音频、音乐等与音频相关的领域&#xff0c;可以在一个框架内完成&#xff0c;以解决生成模型黑箱、代码库分散、缺少评估…

【开源】基于JAVA+Vue+SpringBoot的考研专业课程管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 考研高校模块2.3 高校教师管理模块2.4 考研专业模块2.5 考研政策模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 考研高校表3.2.2 高校教师表3.2.3 考研专业表3.2.4 考研政策表 四、系统展示五、核…

面试题:说一下缓存穿透?缓存击穿?缓存雪崩?

文章目录 面试题1&#xff1a;怎么解决缓存穿透问题的&#xff1f;那我们怎样来解决这种缓存穿透问题呢&#xff1f;布隆过滤器的优缺点 面试题2&#xff1a;说一下缓存击穿吧&#xff0c;你们是怎么解决的&#xff1f;解决方案&#xff1a; 面试题3&#xff1a;那缓存雪崩说说…

【服务器数据恢复】服务器硬盘磁头损坏的数据恢复案例

服务器硬盘故障&#xff1a; 一台服务器上raid阵列上有两块硬盘出现故障&#xff0c;用户方已经将故障硬盘送到其他机构检测过&#xff0c;其中一块硬盘已经开盘&#xff0c;检测结果是盘片损伤严重&#xff1b;另一块硬盘尚未开盘&#xff0c;初步判断也存在硬件故障&#xff…

大数据技术原理与应用 期末复习 知识点全总结(林子雨版

目录 1.第一章 大数据概述&#xff1a;&#xff08;一&#xff09;三次信息化浪潮&#xff08;二&#xff09;人类社会数据产生方式的3个阶段&#xff08;三&#xff09;大数据的3个发展阶段&#xff08;四&#xff09;大数据4V概念&#xff08;五&#xff09;数据存储单位之间…

九、IndexedDB前端缓存

前言 在通才 3D 数字工厂项目中,由于场景文件(glb 资源文件)过大,并且每次加载页面时,glb 文件都会被重新加载,造成页面加载缓慢,最后通过保存生成 Blob 格式存储到 IndexedDB 中,增加文件缓存,减少资源重复加载。 为什么需要 IndexedDB 随着前端技术的发展和浏览器…

上门回收小程序开发,让回收更加简单

资源回收一直是当下深受大众关注的话题&#xff0c;如何做到资源不浪费&#xff0c;成为了大众要考虑的问题。在人们环保意识的加深下&#xff0c;回收行业也是获得了大众的关注&#xff0c;逐渐形成了一个新的商业模式。 随着互联网技术的发展&#xff0c;回收行业也更加方便…

中霖教育:CPA注册会计师报考注意事项有哪些?

在报考注册会计师时&#xff0c;以下这些注意事项你一定要了解! 1.CPA报考的条件 考生需要具备完全民事行为能力;具有高等专科以上学校毕业学历&#xff0c;或者具有会计或者相关专业中级以上技术职称。 2.专业阶段考试科目为&#xff1a; 《会计》、《审计》、《税法》、《…

HarmonyOS讲解并演示 animateTo 动画效果

本文 我们一起看一看动画 首先 harmonyos中的东西 其实就是通过改变 响应式数据的值 以及配合动画参数 即可完成 我们先来看 布局更新动画 中的 显示动画 简单说 触发事件 改变组件的位置信息 我们先编写代码如下 Entry Component struct Index {State itemAlign: Horizont…

【Maven】005-基于 IDEA 进行 Maven 依赖管理

【Maven】005-基于 IDEA 进行 Maven 依赖管理 文章目录 【Maven】005-基于 IDEA 进行 Maven 依赖管理一、Maven 依赖管理二、GAVP 再说明三、Maven 工程依赖管理配置1、依赖配置2、版本统一声明和使用3、依赖范围说明4、Maven工程依赖下载失败错误解决&#xff08;重点&#xf…

WAMP apache 无法启动(端口 80 未使用)

这段时间系统重装后&#xff0c;安装WAMP Server&#xff0c;装好后点击启动绿了下然后又变成了黄色&#xff0c;托盘图标无论是左键点击还是右键点击都没有反应&#xff0c;wampapache64服务也启动不起来&#xff0c;提示“windows不能在本地计算机启动wampapache”&#xff0…

Linux QT以太网配置及相关知识

Linux QT以太网配置及相关知识 平台和内容概述安装Qt Creator设计用户界面编辑源代码自定义LineEdit创建槽函数以太网逻辑功能实现静态配置ui逻辑:功能概述代码实现DNS退出程序输入框中的ip规范保存数据和读取数据构建文件编译运行平台注意点开机自动配置以太网总结平台和内容…

世界人口数据分析与探索

文章目录 世界人口数据集介绍数据集 1&#xff1a;世界国家统计数据&#xff1a;数据集 2&#xff1a;世界人口详细信息&#xff08;2023 年&#xff09;&#xff1a;数据集 3&#xff1a;按年份划分的世界人口&#xff08;1950-2023&#xff09;&#xff1a; 数据分析导入必要…