普中51单片机:数码管显示原理与实现详解(四)

在这里插入图片描述

文章目录

  • 引言
  • 数码管的结构
  • 数码管的工作原理
  • 静态数码管
    • 电路图
    • 开发板IO连接图
    • 代码演示
  • 动态数码管
    • 实现步骤
    • 数码管驱动方式
    • 电路图
    • 开发板IO连接图
    • 真值表
    • 代码演示1
    • 代码演示2
    • 代码演示3

引言

数码管(Seven-Segment Display)是一种常见的显示设备,广泛应用于电子时钟、计算器、家电和其他数字设备中。数码管由七个独立的LED段组成,排列成一个类似数字“8”的形状。通过控制这些LED段的开关状态,可以显示0到9的数字及一些字母和符号。同时也称为LED数码管。
在这里插入图片描述

数码管的结构

一个标准的七段数码管包括七个LED段,每个段用一个字母表示,从A到G。另外,有些数码管还包括一个小数点(DP),被称为八段数码管,用于显示小数或分隔不同的数字。

						  --A--			  --A--|     |		 |     |F     B		 F     B|     |		 |     |--G--			  --G--|     |		 |     |E     C		 E     C|     |		 |     |--D--			  --D-- • DP

数码管的工作原理

数码管的每个段实际上是一个独立的LED,通过控制各个LED的通断状态,可以组合成不同的字符。数码管通常有两种连接方式:共阳极和共阴极

  1. 共阳极数码管:所有的LED阳极(正极)连接在一起,通常接到电源正极。点亮某个段时,需将相应的段的阴极(负极)接地 GND。
  2. 共阴极数码管:所有的LED阴极(负极)连接在一起,通常接地。点亮某个段时,需将相应的段的阳极(正极)接电源正极。

请添加图片描述

静态数码管

静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持直到送入新字形码为止。

电路图

从资料中提供的电路图可知,此开发板静态数码管使用的是共阳极数码管,如果使用共阴数码管,为了不影响其他IO口的电流,要增加IO口的驱动电路,单片机主要是用来控制的,如果要驱动一些外部的设备,通常会使用专门的驱动电路,比如74HC245芯片,74HC573芯片。
在这里插入图片描述

开发板IO连接图

请添加图片描述

代码演示

控制静态数码管显示数字0,即让P0口端口输出数字0的段码0x3F(共阴,共阳极取反即可),其他数字可根据连接方式自行计算。

#include <REGX52.H>#define SMG_STATIC P0void main()
{SMG_STATIC = ~0x3f;while(1){}
}

动态数码管

动态数码管显示,也称为动态扫描显示,是通过快速轮流点亮各个位数码管来实现的。利用人眼的视觉暂留效应,使人感觉所有数码管同时显示不同的数字。

实现步骤

  1. 段选和位选:将所有位数码管的段选线并联在一起,通过位选控制哪一位数码管有效。
  2. 轮流显示:轮流向各个位数码管送出字型码和相应的位选信号。由于切换速度很快,人眼无法分辨出切换过程,从而感觉所有数码管同时显示。
  3. 消影处理:在切换位选信号之前,先将段选信号清零,防止残影现象。

数码管驱动方式

  1. 单片机直接扫描:硬件设备简单,但会消耗大量的单片机CPU时间。
  2. 专用驱动芯片:内部自带显存、扫描电路,单片机只需告诉它显示什么即可。如:TM1640芯片、74HC595

电路图

请添加图片描述
由电路图可知,该开发板的动态数码管是由两个4位一体数码管组成的,一共八个数码管,它们的公共端单独引出来,位选段全部并联在一起,动态进行显示,采用的是共阴极。

八个公共端同一个时刻,只有一个数码管可以点亮,因为位选段是并联在一起的,所以即使有多个公共端同一个时刻被点亮,数码管显示的数据也是相同的。可以利用人眼视觉暂留和余晖效应进行延时操作即可!

动态数码管要搭配74H138模块74H245

  • 74H138:一种常用的 3 线到 8 线译码器芯片,主要用于地址解码、数据路由和逻辑控制。它可以将输入的三位二进制代码转换成八位的输出,常用于单片机系统中进行 I/O 扩展。即三个输入端操作8个输出端,具体操作方法可查看真值表。
    在这里插入图片描述

    • 输入端:A0、A1、A2 为三位二进制加权地址输入端口。
    • 输出端:Y0 至 Y7 为八个输出端口。
    • 使能端:E1 和 E2 为低有效,E3 为高有效。只有当 E1 和 E2 置低且 E3 置高时(默认),芯片才会工作
  • 74H245:一种常用的双向总线缓冲器芯片,防止信号干扰。可以将高电平信号转换为低电平信号,或将低电平信号转换为高电平信号,确保不同电平逻辑设备之间的兼容性。它能够隔离不同总线之间的电平差异和噪声干扰,确保数据的可靠传输。

开发板IO连接图

请添加图片描述

74H138的A0(A)与P22相连;A1(B)与P23相连;A2(C)与P24相连(真值表)

真值表

在这里插入图片描述
L表示0(低电平),H表示1(高电平)

代码演示1

根据真值表操作第五个LED数码管,显示数字6,Init_Port()函数用于操作操作真值表,为了方便对比,这里保留了静态数码管的代码。

#include <REGX52.H>#define SMG_STATIC P0void Init_Port()
{P2_2 = 0;P2_3 = 0;P2_4 = 1;
}void main()
{Init_Port();//显示LED数码管5SMG_STATIC = ~0x7d;P1 = 0x7d;while(1){}
}

代码演示2

动态数码管延时循环显示数字6,如果需要循环显示数字1到数字8,定义数组即可。

#include <REGX52.H>#define SMG_STATIC P0void DelayXms(unsigned int xms)	//@12.000MHz
{unsigned char data i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}
}void Init_Port(unsigned char Location)
{switch(Location){case 1:P2_2 = 0;P2_3 = 0;P2_4 = 0;break;case 2:P2_2 = 1;P2_3 = 0;P2_4 = 0;break;case 3:P2_2 = 0;P2_3 = 1;P2_4 = 0;break;case 4:P2_2 = 1;P2_3 = 1;P2_4 = 0;break;case 5:P2_2 = 0;P2_3 = 0;P2_4 = 1;break;case 6:P2_2 = 1;P2_3 = 0;P2_4 = 1;break;case 7:P2_2 = 0;P2_3 = 1;P2_4 = 1;break;case 8:P2_2 = 1;P2_3 = 1;P2_4 = 1;break;}
}void main()
{unsigned char i;SMG_STATIC = ~0x7d;while(1){for(i = 1; i <= 8;i++){Init_Port(i);P1 = 0x7d;DelayXms(1000);}}
}

代码演示3

利用余晖效应,动态持续的显示数字1到8,P1 = 0x00; 这一行用于消影。消影的作用是防止数码管显示的残影现象。具体来说,当你在多位数码管上显示不同的数字时,如果不及时清除前一个数字的显示,可能会出现残影,即前一个数字的部分段码仍然亮着,影响当前数字的显示效果。通过在每次显示完一个数字后,将 P1 置为 0x00,可以确保所有段码都熄灭,从而避免残影现象,确保每次显示的数字都是清晰且正确的。

#include <REGX52.H>#define SMG_STATIC P0//共阴极数码管显示 0~F 的段码数据
unsigned char gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void DelayXms(unsigned int xms)	//@12.000MHz
{unsigned char data i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}
}void Init_Port(unsigned char Location)
{switch(Location){case 1:P2_2 = 0;P2_3 = 0;P2_4 = 0;break;case 2:P2_2 = 1;P2_3 = 0;P2_4 = 0;break;case 3:P2_2 = 0;P2_3 = 1;P2_4 = 0;break;case 4:P2_2 = 1;P2_3 = 1;P2_4 = 0;break;case 5:P2_2 = 0;P2_3 = 0;P2_4 = 1;break;case 6:P2_2 = 1;P2_3 = 0;P2_4 = 1;break;case 7:P2_2 = 0;P2_3 = 1;P2_4 = 1;break;case 8:P2_2 = 1;P2_3 = 1;P2_4 = 1;break;}
}void main()
{unsigned char i;SMG_STATIC = ~0x7d;while(1){for(i = 1; i <= 8;i++){Init_Port(i);P1 = gsmg_code[i];DelayXms(1);P1 = 0x00;//消影}}
}

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

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

相关文章

C-11 三角剖分的调研

C-11 三角剖分算法 三角剖分就是将输入的多边形&#xff0c;分割成一系列互不重叠的三角形&#xff0c;其重要性就在这不多赘述。这个是一个别人总结的链接&#xff1a;http://vterrain.org/Implementation/Libs/triangulate.html 图片链接&#xff1a;http://www-cgrl.cs.m…

【笔记】在window上连接虚拟机中的redis

愚昧啊 困扰了我近两天的问题居然是因为是java代码写错地方了 在虚拟机中进入redis.conf文件 vim redis.conf /bind --斜杠搜索关键词 将值设置为 bind 0.0.0.0 保存 退出:wq 回到java中 添加redis依赖 刷新maven 就是在这一步出问题……………………………………自己在蓝…

新型水冷电阻设计-双面水冷电阻器

一款革命性的电阻器&#xff0c;专为低压和中压应用而设计&#xff0c;尤其是汽车、牵引或船舶系统中的恶劣条件。 EAK采用先进材料制造&#xff0c;采用专利设计&#xff0c;将电阻元件与水基冷却液封装并完全分离&#xff0c;为水冷应用提供模块化、轻量级、小容量、高功率解…

PYTHON自学笔记(一)vscode配置

安装python 自行官网下载 安装vscode 自行官网下载 环境变量设置 把python和scripts的文件路径&#xff0c;添加到环境变量的path中&#xff0c;如图&#xff1a; 此项不弄&#xff0c;在命令行模式中系统不会认为你装了python和pip&#xff0c;你的输入相关命令shell不会…

【Elasticsearch】Elasticsearch倒排索引详解

文章目录 &#x1f4d1;引言一、倒排索引简介二、倒排索引的基本结构三、Elasticsearch中的倒排索引3.1 索引和文档3.2 创建倒排索引3.3 倒排索引的存储结构3.4 词典和倒排列表的优化 四、倒排索引的查询过程4.1 过程4.2 示例 五、倒排索引的优缺点5.1 优点5.2 缺点 六、倒排索…

ComfyUI+MuseV+MuseTalk图片数字人

电脑配置 GPU12G&#xff0c;如果自己电脑配置不够&#xff0c;选择云gpu&#xff0c;我就是用的这个&#xff0c;自己电脑太老配置跟不上 环境&#xff1a; Python 3.11.8 torch 2.2.1 cuda_12.1 资源提供&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1_idZbF…

subset使用

在R语言中&#xff0c;subset()函数用于从数据框中选择满足特定条件的观测。其语法如下&#xff1a; subset(x, subset, select, drop FALSE) 参数说明&#xff1a; x&#xff1a;数据框或矩阵。 subset&#xff1a;逻辑条件&#xff0c;用于筛选满足特定条件的行。 select…

MySQL—统计函数和数学函数以及GROUP BY配合HAVING

合计/统计函数 count -- 演示 mysql 的统计函数的使用 -- 统计一个班级共有多少学生&#xff1f; SELECT COUNT(*) FROM student -- 统计数学成绩大于 90 的学生有多少个&#xff1f; SELECT COUNT(*) FROM student WHERE math > 90 -- 统计总分大于 250 的人数有多少&…

axios和Mybatis

除了get和post方法还有其他的方法&#xff1a; 发送 PUT 请求 发送 PUT 请求通常用于更新服务器上的资源。 const updateData {title: foo updated,body: bar updated,userId: 1 };axios.put(https://jsonplaceholder.typicode.com/posts/1, updateData).then(function (res…

麦蕊智数,,另外一个提供免费的股票数据API,可以通过其提供的接口获取实时和历史的股票数据。

麦蕊智数&#xff0c;&#xff0c;提供免费的股票数据API&#xff0c;可以通过其提供的接口获取实时和历史的股票数据。 API接口&#xff1a;http://api.mairui.club/hslt/new/您的licence 备用接口&#xff1a;http://api1.mairui.club/hslt/new/您的licence 请求频率&#x…

Node.js_fs模块

文件删除 文件重命名和移动&#xff08;本质都是修改路径&#xff09; 文件夹操作 创建文件夹(mkdir) 读取文件夹(readdir) &#xff08;打印出来是该文件夹下名称的数组形式&#xff09; 读取当前的文件夹(readdir) 删除文件夹 &#xff08;rmdir&#xff09; 查看资源状态…

Golang | Leetcode Golang题解之第222题完全二叉树的节点个数

题目&#xff1a; 题解&#xff1a; func countNodes(root *TreeNode) int {if root nil {return 0}level : 0for node : root; node.Left ! nil; node node.Left {level}return sort.Search(1<<(level1), func(k int) bool {if k < 1<<level {return false}…

Apache Seata新特性支持 -- undo_log压缩

本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 Apache Seata新特性支持 – undo_log压缩 Seata新特性支持 – undo_log压缩 现状 & 痛点…

线程池理解及7个参数

定义理解 线程池其实是一种池化的技术实现&#xff0c;池化技术的核心思想就是实现资源的复用&#xff0c;避免资源的重复创建和销毁带来的性能开销。线程池可以管理一堆线程&#xff0c;让线程执行完任务之后不进行销毁&#xff0c;而是继续去处理其它线程已经提交的任务。 …

20、matlab信号波形生成:狄利克雷函数、高斯脉冲和高斯脉冲序列

1、名词说明 狄利克雷函数&#xff08;Dirac Delta Function&#xff09; 狄利克雷函数&#xff0c;也称为单位冲激函数或δ函数&#xff0c;是一个在数学和信号处理中常用的特殊函数。狄利克雷函数通常用符号δ(t)表示&#xff0c;其定义为&#xff1a; δ(t) { ∞, t 0{…

RabbitMq - Java客户端基础【简单案例 +Work模型】

目录 1、前置知识 1.1、AMQP怎么理解 1.2、Spring AMQP是什么 1.3、为什么要了解Spring-AMQP&#xff1f; 2、使用Spring-AMQP实现一个发消息案例 3、Work模型 问题&#xff1a; 优化&#xff1a; 小结&#xff1a;Work模型的使用&#xff1a; 1、前置知识 1.1、AMQP怎…

简介空间复杂度

我们承接上一篇博客。我们写了时间复杂度之后&#xff0c;我们就要来介绍一下另一个相关复杂度了。空间复杂度。我觉得大家应该对空间复杂度认识可能比较少一些。我就是这样&#xff0c;我很少看见题目中有明确要求过空间复杂度的。但确实有这个是我们不可忽视的&#xff0c;所…

ID3算法决策树

步骤&#xff1a; 先计算出信息量&#xff1b;信息熵&#xff1b;信息增量&#xff1b; 再比较信息增量的大小&#xff0c;确定分类依据。 信息量&#xff1a; 信息熵&#xff1a; 信息增益&#xff1a;

Beats:使用 Filebeat 从 Python 应用程序中提取日志

本指南演示了如何从 Python 应用程序中提取日志并将其安全地传送到 Elasticsearch Service 部署中。你将设置 Filebeat 来监控具有标准 Elastic Common Schema (ECS) 格式字段的 JSON 结构日志文件&#xff0c;然后你将在 Kibana 中查看日志事件发生的实时可视化。虽然此示例使…

Nginx:location配置模块的用法

运维系列 Nginx&#xff1a;location配置模块的用法 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.c…