普中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.mzph.cn/news/867654.shtml

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

相关文章

Java NIO:深入探索非阻塞I/O操作

Java NIO&#xff1a;深入探索非阻塞I/O操作 一、引言 随着网络应用的快速发展&#xff0c;对于高性能I/O操作的需求日益增加。传统的Java I/O模型基于流&#xff08;Stream&#xff09;进行数据传输&#xff0c;采用阻塞式&#xff08;Blocking&#xff09;方式&#xff0c;…

Visual studio 2023下使用 installer projects 打包C#程序并创建 CustomAction 类

Visual studio 2023下使用 installer projects 打包C#程序并创建 CustomAction 类 1 安装Visual studio 20203,并安装插件1.1 下载并安装 Visual Studio1.2 步骤二:安装 installer projects 扩展插件2 创建安装项目2.1 创建Windows安装项目2.2 新建应用程序安装文件夹2.3 添加…

sqlserver 当前时间

sqlserver 当前时间 在 SQL Server 中&#xff0c;获取当前时间有多种方法&#xff0c;以下是一些常用的方法&#xff1a; 使用 GETDATE() 函数&#xff1a; SELECT GETDATE() AS CurrentDateTime 如果你需要更精确的时间&#xff08;包括毫秒&#xff09;&#xff0c;可以使…

数据库SQL Server常用操作:增删改查

文章目录 SQL Server主要特点 常见数据库操作假设tmall_scapler_item_pk是一个主键约束临时表表的连接 SQL Server SQL Server 是由微软&#xff08;Microsoft&#xff09;公司开发的一个关系数据库管理系统&#xff08;RDBMS&#xff09;。它允许企业或组织存储、检索、修改和…

力扣刷题练习 七【34. 在排序数组中查找元素的第一个和最后一个位置】

前言 数组类型题目练习。 练习题 七【34. 在排序数组中查找元素的第一个和最后一个位置】 一、题目阅读 给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target&…

A Threat Actors 出售 18 万名 Shopify 用户信息

BreachForums 论坛成员最近发布了涉及 Shopify 的重大数据泄露事件。 据报道&#xff0c;属于近 180,000 名用户的敏感数据遭到泄露。 Shopify Inc. 是一家总部位于安大略省渥太华的加拿大公司。 开发和营销同名电子商务平台、Shopify POS 销售点系统以及专用于企业的营销工…

SQL脚本初始化数据

创建或选择某个数据库&#xff0c;运行窗口输入&#xff1a;source,再拖入文件&#xff0c;回车即可&#xff1b; 虽然也可以使用图形化工具初始化数据&#xff0c;但是他会有内存限制&#xff0c;也就是较大的sql文件不可以初始化&#xff0c;而运行窗口没有sql文件大小限制&…

本周23个Github有趣项目llama-agents等

23个Github有趣的项目、工具和库 1、Positron 下一代数据科学 IDE。 您使用 VS Code 进行数据科学&#xff08;Python 或 R&#xff09;&#xff0c;但希望它包含专用控制台、变量窗格、数据浏览器和其他用于特定数据工作的功能。您使用 Jupyterlab 进行数据科学&#xff08;…

python读取csv出错怎么解决

Python用pandas的read_csv函数读取csv文件。 首先&#xff0c;导入pandas包后&#xff0c;直接用read_csv函数读取报错OSError&#xff0c;如下&#xff1a; 解决方案是加上参数&#xff1a;enginepython。 运行之后没有报错&#xff0c;正在我欣喜之余&#xff0c;输出一下d…

数据结构第04节:数组

线性数据结构 - 数组 线性数据结构中的数组是一种基础且广泛使用的数据存储方式&#xff0c;它存储一系列相同类型的元素&#xff0c;这些元素在内存中连续存放。数组可以是静态的或动态的。 静态数组&#xff08;Static Arrays&#xff09; 静态数组在声明时需要指定大小&a…

如何度量信息的大小

信息这个词让我们感到熟悉而又陌生。熟悉是因为我们所处在一个信息时代&#xff0c;与生活密切相关的就有大量的各种信息&#xff0c;比如书籍、手机、电脑等。而陌生是因为很难精确说明信息是什么并且如何量化信息&#xff0c;比如“地球是圆的”一句话包含了多少信息呢&#…

Java:多态

文章目录 一、概念二、使用前提三、实例四、优缺点4.1 优点4.2 缺点 五、动态绑定和静态绑定5.1 动态绑定5.2 静态绑定 一、概念 多态是指类的多种形态&#xff0c;同一个接口&#xff0c;使用不同的实例而执行不同操作。 二、使用前提 有继承/实现关系有父类引用指向子类对象…

centos7部署mysql8.0

1.安装MySQL的话会和MariaDB的文件冲突&#xff0c;所以需要先卸载掉MariaDB。查看是否安装mariadb rpm -qa | grep mariadb 2. 卸载mariadb rpm -e --nodeps 查看到的文件名 3.下载MySQL安装包 MySQL官网下载地址: MySQL :: Download MySQL Community Serverhttps://dev.mys…

19.JWT

1►JWT博客推荐 阮老师讲得很好了&#xff0c;网址如下&#xff1a; http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html 2►ry是怎么践行JWT的呢&#xff1f; 问题一&#xff1a;不登录的时候有token吗&#xff1f; 答&#xff1a;没有&#xff0c;所…

[概念]探索AI与AIGC:从定义到应用场景

一、什么是人工智能&#xff08;AI&#xff09;&#xff1f; 人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;正成为科技革命和产业变革的核心推动力。AI是研究、开发用于模拟、延伸和扩展人类智能的理论、方法、技术及应用系统的新兴技术科学&#xf…

Uniapp的简要开发流程指南

Uniapp开发指南 简介 Uniapp 是由DCloud推出的一款基于Vue.js的多端开发框架&#xff0c;支持编译到iOS、Android、H5、以及各大小程序平台&#xff08;如微信小程序、支付宝小程序、百度小程序等&#xff09;。它使开发者可以通过一次编码&#xff0c;实现跨平台的应用发布&…

blender 纹理绘制-贴花方式

贴画绘制-1分钟blender_哔哩哔哩_bilibili小鸡老师的【Blender风格化角色入门教程】偏重雕刻建模https://www.cctalk.com/m/group/90420100小鸡老师最新的【风格化角色全流程进阶教程】偏重绑定。早鸟价进行中&#xff01;欢迎试听https://www.cctalk.com/m/group/90698829, 视…

[C++][CMake][嵌套的CMake]详细讲解

目录 0.前言 & 准备1.节点关系2.添加子目录3.解决问题1.根目录2.calc目录3.sort目录4.calc_test目录5.sort_test 4.注意 0.前言 & 准备 如果项目很大&#xff0c;或者项目中有很多的源码目录&#xff0c;在通过CMake管理项目的时候如果只使用一个CMakeLists.txt&#…

Splunk Enterprise 中的严重漏洞允许远程执行代码

Splunk 是搜索、监控和分析机器生成大数据的软件领先提供商&#xff0c;为其旗舰产品 Splunk Enterprise 发布了紧急安全更新。 这些更新解决了几个构成重大安全风险的关键漏洞&#xff0c;包括远程代码执行 (RCE) 的可能性。 受影响的版本包括 * 9.0.x、9.1.x 和 9.2.x&…

ARM架构和Intel x86架构

文章目录 1. 处理器架构 2. ARM架构 3. Intel x86架构 4. 架构对比 1. 处理器架构 处理器架构是指计算机处理器的设计和组织方式&#xff0c;它决定了处理器的性能、功耗和功能特性。处理器架构影响着从计算机系统的硬件设计到软件开发的各个方面。在现代计算技术中&#…