MCU-51:静态数码管显示

news2024/11/18 19:48:38

目录

  • 一、数码管介绍
    • 2.1 介绍
    • 2.2 数码管引脚定义
    • 2.3 原理图
  • 二、要用到的C语言知识
    • 2.1 数组
    • 2.2 子函数
  • 三、数码管显示
    • 3.1 单个数码管显示
    • 3.2 通过定位函数实现数码管显示
  • 四、动态数码管显示

一、数码管介绍

2.1 介绍

LED数码管:数码管是一种简单、廉价的显示器,是由多个发光二极管封装在一起组成“8”字型的器件
在这里插入图片描述

2.2 数码管引脚定义

单个引脚:
数码管分为共阳极连接和共阴极连接两种:
1,共阴极连接就是说3,8这一头连得是负极,所以在下面的那头给上高电平(即置1)就可以使二极管发光
2,共阳极连接就是说3,8这一头连得是正极,所以在下面的那头给上低电平(即置0)就可以使二极管发光
注意:在实际编写代码的时候这一点一定要搞清楚,或者进行实验后发现亮光的二极管的位置和预想的不对,那么对赋值的I/O口使用取反符号~也行
在这里插入图片描述
在这里插入图片描述
多个引脚管:
在这里插入图片描述

2.3 原理图

在这里插入图片描述

二、要用到的C语言知识

2.1 数组

把相同类型的一系列数据统一编制到某一个组别中,可以通过数组名+索引号简单快捷的操作大量数据

int x[3];			//定义一组变量(3个)
int x[]={1,2,3};	//定义一组变量并初始化
x[0] 		//引用数组的第0个变量
x[1] 		//引用数组的第1个变量
x[2]			//引用数组的第2个变量

2.2 子函数

将完成某一种功能的程序代码单独抽取出来形成一个模块,在其它函数中可随时调用此模块,以达到代码的复用和优化程序结构的目的

void Function(unsigned char x, y)
{
	
}

返回值 函数名(形参)
{
	函数体
}

三、数码管显示

3.1 单个数码管显示

第三个数码管显示6:
结合原理图可以看到要使得第三位显示为6
LED6对应Y5,Y5对应的二进制为101,要让低电平Y5通电
对应由高位到低位得

#include <REGX52.H>
void main()
{
	P2_4=1;
	P2_3=0;
	P2_2=1;
	P0=0x7D;
	while(1)
	{
	}
}

3.2 通过定位函数实现数码管显示

#include <REGX52.H>
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void Nixie(unsigned char Location,Number)
{
	switch(Location)
	{
		    case 1:P2_4=1;P2_3=1;P2_2=1;break;
			  case 2:P2_4=1;P2_3=1;P2_2=0;break;
				case 3:P2_4=1;P2_3=0;P2_2=1;break;
				case 4:P2_4=1;P2_3=0;P2_2=0;break;
				case 5:P2_4=0;P2_3=1;P2_2=1;break;
				case 6:P2_4=0;P2_3=1;P2_2=0;break;
				case 7:P2_4=0;P2_3=0;P2_2=1;break;
				case 8:P2_4=0;P2_3=0;P2_2=0;break;
	}
		P0=NixieTable[Number];
}
void main()
{
	Nixie(2,3);
	while(1)
	{
	}
}

四、动态数码管显示

学会设计静态数码管的显示后,我们可以在各个静态数码管显示之间加入延时函数,这样就能实现动态数码管的显示。根据以前的内容,我们先写一个简单的代码,来看看效果。

#include <REGX52.H>
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void Nixie(unsigned char Location,Number)
{
	switch(Location)
	{
		    case 1:P2_4=1;P2_3=1;P2_2=1;break;
			  case 2:P2_4=1;P2_3=1;P2_2=0;break;
				case 3:P2_4=1;P2_3=0;P2_2=1;break;
				case 4:P2_4=1;P2_3=0;P2_2=0;break;
				case 5:P2_4=0;P2_3=1;P2_2=1;break;
				case 6:P2_4=0;P2_3=1;P2_2=0;break;
				case 7:P2_4=0;P2_3=0;P2_2=1;break;
				case 8:P2_4=0;P2_3=0;P2_2=0;break;
	}
		P0=NixieTable[Number];
}
void delay(int i)
{
	while(i--);
}
void main()
{
	
	void delay(int i);
	while(1)
	{
		Nixie(1,2);
		delay(10000);
		Nixie(2,0);
		delay(10000);
		Nixie(3,2);
		delay(10000);
		Nixie(4,2);
		delay(10000);
		Nixie(5,1);
		delay(10000);
		Nixie(6,2);
		delay(10000);
		Nixie(7,2);
		delay(10000);
		Nixie(8,3);
		delay(10000);
		
	}
}

通过以上代码,我们虽然看到了数码管动态显示,但是大家也可以看到数码管有残影现象
我们先来解释一下残影出现的原因。
多个数码管显示时中间如果没有延时,那么单片机执行的操作应该是 位选->段选->位选->段选->位选…… 而单片机执行速度非常快,上一次的段选还没有结束,位选的数据已经传了进去,这样下一个数码管就有可能显示出上一个数码管的数字。
这些内容在数电中被称为“竞争与冒险”
解决这样的问题,我们需要在段选结束之后对数码管清零,在Nixie函数后加上延时和清零的语句即可。清零就是防止段选还没结束,位选的数据就传到了下一个数码管。延时是防止数码管还没显示完就被清零,导致显示的非常暗。

void Nixie(unsigned char Location,Number)
{
	switch(Location)
	{
		    case 1:P2_4=1;P2_3=1;P2_2=1;break;
			  case 2:P2_4=1;P2_3=1;P2_2=0;break;
				case 3:P2_4=1;P2_3=0;P2_2=1;break;
				case 4:P2_4=1;P2_3=0;P2_2=0;break;
				case 5:P2_4=0;P2_3=1;P2_2=1;break;
				case 6:P2_4=0;P2_3=1;P2_2=0;break;
				case 7:P2_4=0;P2_3=0;P2_2=1;break;
				case 8:P2_4=0;P2_3=0;P2_2=0;break;
	}
		P0=NixieTable[Number];
	delay(1);
	P0=0x00;
}

烧录进去 你会发现残影就没了

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

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

相关文章

Word表格常见设置汇总

Word表格常见设置汇总 总结一些Word中常用的关于表格的设置问题。 文章目录1.居中设置2.隔页显示表格首行设置3.边框边线粗细及显示设置4.表格斜线设置5.单元格合并与拆分设置1.居中设置 全选要居中显示部分→布局→选择居中类型。 2.隔页显示表格首行设置 选择表格→表格属性→…

idea插件之自动生成时序图(Sequence Diagram)

前言 小伙们&#xff0c;你们有没有发现&#xff0c;身边经常有这样一些人&#xff0c;看着平时没怎么干活&#xff0c;到关键时候需要展示工作成果&#xff0c;会发现这些人也有工作成果&#xff0c;甚至比辛苦在干的人可能还要多一些。按常理推测&#xff0c;这绝对不是一件科…

【小程序】案例 - 本地生活(首页)

1. 首页效果以及实现步骤 新建项目并梳理项目结构 配置导航栏效果 配置 tabBar 效果 实现轮播图效果 实现九宫格效果 实现图片布局 2. 接口地址 获取轮播图数据列表的接口 【GET】 https://www.escook.cn/slides 获取九宫格数据列表的接口 【GET】 https://www.esco…

XXE工具——XXEinjection安装与使用

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是XXE工具——XXEinjection安装与使用。 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&#xff01; 再次强调&#xff1…

直播推流神器 Kplayer 手把手教你在B站7*24h全天直播

开始前的准备工作 Linux服务器 (1)KPlayer目前仅支持Linux环境并需要满足x86_64(amd64)与aarch64(arm64)CPU架构的硬件环境上运行&#xff0c;我们已经将相关依赖库静态链接至主程序中&#xff0c;这意味着你不需要额外的安装任何的第三方库来支持KPlayer的运行。 在后续的迭代…

【数据预处理】基于Pandas的数据预处理技术【前七个任务】

文章目录一.需求分析二.需求解决2.1 本次实验以california_housing加州房价数据集为例&#xff0c;下载数据集2.2 查看数据集的描述、特征及目标数据名称、数据条数、特征数量2.3 将数据读入pandas的DataFrame并转存到csv文件2.4 查看数据集各个特征的类型以及是否有空值2.5 对…

五年经验的前端社招被问:CPU 和 GPU 有什么区别?

CPU 和 GPU 的设计目标和整体架构的区别分析&#xff0c;并在全文最后使用通俗的例子做比喻帮助理解。 首先来看 CPU 和 GPU 的百科解释&#xff1a; CPU&#xff08;Central ProcessingUnit&#xff0c;中央处理器&#xff09;&#xff1a;功能主要是解释计算机指令以及处理计…

【工作流Activiti7】2、Activiti7 与 Spring Boot 及 Spring Security 整合

1. 前言 其实&#xff0c;选择用Activiti7没别的原因&#xff0c;就是因为穷。但凡是有钱&#xff0c;谁还用开源版的啊&#xff0c;当然是用商业版啦。国外的工作流引擎没有考虑中国的实际情况&#xff0c;很多像回退、委派、撤销等等功能都没有&#xff0c;所以最省事的还是…

若依前后端分离框架去掉首页 登录后跳转至动态路由的第一个路由

若依前后端分离框架去掉首页 登录后跳转至动态路由的第一个路由若依框架VUE前端界面&#xff0c;登录后默认跳转至动态路由第一路由&#xff08;第一个子菜单&#xff09;一、登录后跳转第一路由界面二、设置路由的首页路径&#xff0c;方便后续的获取三、点击若依的logo跳转的…

字符串函数(4)--strtok函数和strerror函数

1.strtok函数 — 分割字符串函数 2.strerror函数 — 错误报告函数 1.strstok函数的用法 char* strtok(char* str, const char* delimiters);直接看函数的声明&#xff1a; 参数1&#xff1a;要切割的地址&#xff0c;参数2&#xff1a;切割时的标记物 注意&#xff1a;strt…

单链表的python实现

首先说下线性表&#xff0c;线性表是一种最基本&#xff0c;最简单的数据结构&#xff0c;通俗点讲就是一维的存储数据的结构。 线性表分为顺序表和链接表&#xff1a; 顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素&#xff0c;称为线性表的顺序存储结构或…

Nginx安装配置及vue项目部署【Centos7】

Background 网上好多都是源码安装&#xff0c;各种编译环境安装配置&#xff0c;感觉太麻烦了&#xff0c;这里直接下载一个rpm包就行了&#xff0c;离线安装也方便。 1、nginx rpm包下载 选择你要使用的版本下载。 nginx官方下载地址&#xff1a;http://nginx.org/packages/ce…

垃圾回收机制

1.什么场景下该使用什么垃圾回收策略&#xff1f; (1).对内存要求苛刻的场景 想办法提高对象的回收效率&#xff0c;尽可能的多回收一些对象&#xff0c;腾出更多内存 (2).在CPU使用率较高的情况下 降低高并发时垃圾回收频率&#xff0c;让CPU更多地去执行业务而不是垃圾回收 …

一文搞懂 Redis 架构演化之路

现如今 Redis 变得越来越流行&#xff0c;几乎在很多项目中都要被用到&#xff0c;不知道你在使用 Redis 时&#xff0c;有没有思考过&#xff0c;Redis 到底是如何稳定、高性能地提供服务的&#xff1f; 我使用 Redis 的场景很简单&#xff0c;只使用单机版 Redis 会有什么问…

vite + react +typescript 环境搭建,小白入门级教程

目录前言1. 使用 vite 创建 react 项目1. npm / yarn 命令初始化2. 输入项目名称3. 选择框架4. 选择 Js / Ts5. 项目创建完成6. 启动项目2. 规范项目目录3. 使用 react-router-dom 路由1. 使用 npm / yarn 命令下载2. 更改 react-router-dom 版本1. 通过 npm 命令降低版本2. 手…

rabbitmq基础5——集群节点类型、集群节点基础运维,集群管理命令,API接口工具

文章目录一、集群节点类型1.1 内存节点1.2 磁盘节点二、集群基础运维2.1 剔除单个节点2.1.1 集群正常踢出正常节点2.1.2 服务器异常宕机踢出节点2.1.3 集群正常重置并踢出节点2.2 集群节点版本升级2.3 集群某单节点故障恢复2.3.1 机器硬件故障2.3.2 机器掉电2.3.3 网络故障2.3.…

Android ShapeableImageView使用

ShapeableImageView使用使用 导包 implementation com.google.android.material:material:1.4.0属性 属性描述shapeAppearance样式shapeAppearanceOverlay样式&#xff0c;叠加层strokeWidth描边宽度strokeColor描边颜色 样式 名称属性值描述cornerFamilyrounded圆角cut裁剪…

学习记录-mybatis+vue+elementUi实现品牌查询

和以往不同的是&#xff0c;这一次使用了vue和axios来接收后端传过来的参数&#xff0c;并且新建了impl文件来继承service层的接口。该过程实现一共分为4步骤 步骤一 ①mapper mapper 写mapper接口 其实就是写SQL语句了&#xff0c;第一步就是写SQL。这里使用的是注解开发&…

程序员危机如何化解?

很多人认为程序员一定要干到管理层&#xff0c;才会有继续走下去的希望&#xff0c;而踏实做技术的程序员&#xff0c;只会面临淘汰。事实真是如此吗&#xff1f; △ 截图来源脉脉&#xff0c;如侵删 先不说结论&#xff0c;我们一起先看看网友们的看法&#xff1a; △ 截…

报表控件Stimulsoft v2023.1全新发布 | 附免费下载试用

Stimulsoft Ultimate 宣布发布新版本2023.1&#xff01;在最新版本中添加了对Razor Pages的支持、新的数据监视器可视化工具、为PHP和Blazor平台更新了组件,欢迎下载试用&#xff01; Stimulsoft Ultimate官方正版下载 Razor Pages 在 2023.1.1 版中&#xff0c;我们添加了对…