04 51单片机之数码管显示

文章目录

  • 1、前言
  • 2、数码管
  • 3、单个数码管引脚定义
    • 3-1、单个共阴极
    • 3-2、单个共阳极
    • 3-3、单个数码管引脚定义
  • 4、四位一体数码管引脚定义
    • 4-1、四位一体共阴极数码管
    • 4-2、四位一体共阳极数码管
    • 4-3、四位一体数码管引脚定义
  • 5、数码管原理图
  • 6、C51数组(补充知识点)
  • 7、C51子函数(补充知识点)
  • 8、静态数码管显示
    • 8-1、基础版本
    • 8-2、数码管段码表
    • 8-3、静态数码管显示Plus
    • 8-4、实验现象
  • 9、动态数码管显示
    • 9-1、基础版本
    • 9-2、实验现象
    • 9-3、动态数码管显示(消影)
    • 9-4、实验现象
  • 10、数码管驱动方式


1、前言

在前面的文章中介绍了51单片机之独立按键控制LED状态,今天介绍单片机的数码管,下面将介绍数码管的显示其中包含了动态数码管静态数码管两种。


2、数码管

数码管其实就是由多个发光二极管封装在一起组成“8”字型的器件当分别点亮这些发光二极管时就可以组成不同的数字显示出来。
在这里插入图片描述

Figure1. 数码管

3、单个数码管引脚定义

3-1、单个共阴极

所有LED的阴极连接在一起,通过控制阳极的高电平来点亮对应的段
在这里插入图片描述

Figure2. 单个共阴极数码管

3-2、单个共阳极

所有LED的阳极连接在一起,通过控制阴极的低电平来点亮对应的段

在这里插入图片描述

Figure3. 单个共阳极数码管

3-3、单个数码管引脚定义

数码管通常由7个或8个LED组成,分别对应数字0到9和英文字母A到F等字符的显示方式。每个LED可以看作是一个“像素”,通过点亮不同的LED组合,可以展示不同的字符或图形。

在这里插入图片描述

Figure4. 单个数码管引脚定义

4、四位一体数码管引脚定义

4-1、四位一体共阴极数码管

在这里插入图片描述

Figure5. 四位一体共阴极数码管

4-2、四位一体共阳极数码管

在这里插入图片描述

Figure6. 四位一体共阳极数码管

4-3、四位一体数码管引脚定义

在这里插入图片描述

Figure7. 四位一体数码管引脚定义

举例说明:假设四位一体数码管需要显示数字为()()(1)(),则在Figure6. 四位一体共阴极数码管途中,将DIG3设置为低电平(置0),DIG1、DIG2、DIG4为高点平(置1);然后引脚7、4设置为高点平(置1),其余引脚(11、2、1、10、5、3)设置为低电平(置0)


5、数码管原理图

从下图可以知道8个数码管通过了一个74HC245芯片单片机的P00-P07相连接。74HC138译码器通过P22-P24输出的相对于的电平选择控制哪个具体的数码管。由于3-8译码器是输出低电平有效,则原理图中的四位一体数码管是共阴极连接。74HC245芯片主要是用于数据缓冲功能,其中DIR表述传输方向,若是高电平,则是将Ax的数据传输给Bx;否则,则是将Bx的数据传输给Ax。OE表示使能引脚(低电平有效)。

在这里插入图片描述

Figure8. 数码管原理图

Table1. 3-8译码器输出表(低有效)
C(P2_4)B(P2_3)A(P2_2)YLED
000Y0LED0
001Y1LED1
010Y2LED2
011Y3LED3
100Y4LED4
101Y5LED5
110Y6LED6
111Y7LED7

6、C51数组(补充知识点)

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

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

引用×[3]时,数组会越界。读出的数值不确定,应避免这种操作。


7、C51子函数(补充知识点)

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

void Function(unsigned char x, y)
{}
返回值函数名(形参)
{函数体
}

8、静态数码管显示

8-1、基础版本

在这里插入图片描述

Figure9. 数码管显示数字程序One

#include <REGX52.H>void main()
{unsigned int i = 0;/* Select LED6 to light up. set /Y5. */P2_2 = 1;P2_3 = 0;P2_4 = 1;/* Control LED6 show number(6), set a,c,d,e,f,g. */P0 = 0x7D;while(1){}
}

注意:让LED6的数码管显示数字6,则需要点亮a,c,d,e,f,g等六个端口,则如下图所示:
在这里插入图片描述

Figure10. 数码管显示数字设置

8-2、数码管段码表

Table2. 数码管段码表(0~F)
数字abcdefgdp段码
0111111000x3F
1011000000x06
2110110100x5B
3111100100x4F
4011001100x66
5101101100x6D
6101111100x7D
7111000000x07
8111111100x7F
9111101100x6F
A111011100x77
B001111100x7C
C100111000x39
D011110100x5E
E100111100x79
F100011100x71
None000000000x00

8-3、静态数码管显示Plus

在这里插入图片描述

Figure11. 数码管显示数字程序Plus

#include <REGX52.H>unsigned char NixieTable[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};void Nixie(unsigned char Location, Number)
{switch (Location){case 1: P2_4 = 1; P2_3 = 1; P2_2 = 1; break; // LED8case 2: P2_4 = 1; P2_3 = 1; P2_2 = 0; break; // LED7case 3: P2_4 = 1; P2_3 = 0; P2_2 = 1; break; // LED6case 4: P2_4 = 1; P2_3 = 0; P2_2 = 0; break; // LED5case 5: P2_4 = 0; P2_3 = 1; P2_2 = 1; break; // LED4case 6: P2_4 = 0; P2_3 = 1; P2_2 = 0; break; // LED3case 7: P2_4 = 0; P2_3 = 0; P2_2 = 1; break; // LED2case 8: P2_4 = 0; P2_3 = 0; P2_2 = 0; break; // LED1}P0 = NixieTable[Number];
}void main()
{Nixie(2,4);while(1){}}

8-4、实验现象

在这里插入图片描述

Figure12. 数码管显示数字2(LED7)

9、动态数码管显示

9-1、基础版本

在这里插入图片描述

Figure13. 数码管动态显示数字程序

#include <REGX52.H>unsigned char NixieTable[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};void DelayMs(unsigned int xms)		//@12.000MHz
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
}void Nixie(unsigned char Location, Number)
{switch (Location){case 1: P2_4 = 1; P2_3 = 1; P2_2 = 1; break; // LED8case 2: P2_4 = 1; P2_3 = 1; P2_2 = 0; break; // LED7case 3: P2_4 = 1; P2_3 = 0; P2_2 = 1; break; // LED6case 4: P2_4 = 1; P2_3 = 0; P2_2 = 0; break; // LED5case 5: P2_4 = 0; P2_3 = 1; P2_2 = 1; break; // LED4case 6: P2_4 = 0; P2_3 = 1; P2_2 = 0; break; // LED3case 7: P2_4 = 0; P2_3 = 0; P2_2 = 1; break; // LED2case 8: P2_4 = 0; P2_3 = 0; P2_2 = 0; break; // LED1}P0 = NixieTable[Number];
}void main()
{unsigned int i;while(1){for(i = 1; i <= 8; i++){Nixie(i,i+1);DelayMs(i);}		}
}

9-2、实验现象

动态数码管显示


9-3、动态数码管显示(消影)

在这里插入图片描述

Figure14. 数码管动态显示数字程序(消影)

#include <REGX52.H>unsigned char NixieTable[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};void DelayMs(unsigned int xms)		//@12.000MHz
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
}void Nixie(unsigned char Location, Number)
{switch (Location){case 1: P2_4 = 1; P2_3 = 1; P2_2 = 1; break; // LED8case 2: P2_4 = 1; P2_3 = 1; P2_2 = 0; break; // LED7case 3: P2_4 = 1; P2_3 = 0; P2_2 = 1; break; // LED6case 4: P2_4 = 1; P2_3 = 0; P2_2 = 0; break; // LED5case 5: P2_4 = 0; P2_3 = 1; P2_2 = 1; break; // LED4case 6: P2_4 = 0; P2_3 = 1; P2_2 = 0; break; // LED3case 7: P2_4 = 0; P2_3 = 0; P2_2 = 1; break; // LED2case 8: P2_4 = 0; P2_3 = 0; P2_2 = 0; break; // LED1}P0 = NixieTable[Number];DelayMs(1);P0 = 0x00;
}void main()
{unsigned int i;while(1){for(i = 1; i <= 8; i++){Nixie(i,i+1);DelayMs(i);}		}
}

9-4、实验现象

动态数码管显示(消影)


10、数码管驱动方式

  1. 单片机直接扫描:硬件设备简单,但会耗费大量的单片机CPU时间。
  2. 专用驱动芯片:内部自带显存、扫描电路,单片机只需告诉它显示什么即可。
    在这里插入图片描述
Figure15. 数码管专用驱动芯片

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

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

相关文章

【LLM】OpenRouter调用Anthropic Claude上下文缓存处理

背景 在使用OpenRouter调用Anthropic Claude大模型时&#xff0c;部分模型支持上下文缓存功能。当缓存命中时&#xff0c;调用成本会显著降低。虽然像DeepSeek这类模型自带上下文缓存机制&#xff0c;但本文主要针对构建Agent场景下&#xff0c;需要多次调用Anthropic Claude时…

【C++】第十七节—二叉搜索树(概念+性能分析+增删查+实现+使用场景)

好久不见&#xff0c;我是云边有个稻草人 《C》本文所属专栏—持续更新中—欢迎订阅 目录 一、二叉搜索树的概念 二、二叉搜索树的性能分析 三、二叉搜索树的插入 SearchBinaryTree.h test.cpp 四、⼆叉搜索树的查找 【只有一个3】 【有多个3】 五、⼆叉搜索树的删除…

Redis都有哪些数据结构,使用场景与原理解析

✅ String&#xff1a;字符串&#xff08;最常用、最简单的类型&#xff09;&#x1f4cc; 应用场景&#xff1a;计数器&#xff08;如&#xff1a;页面浏览量、点赞数、转发数等&#xff09;缓存单个值&#xff08;如&#xff1a;token、验证码、用户昵称&#xff09;分布式锁…

将EXCEL或者CSV转换为键值对形式的Markdown文件

# 创建命令行参数解析器parser argparse.ArgumentParser(description将 CSV 或 Excel 文件转换为带标头的 Markdown 格式)# 必需参数parser.add_argument(input_file, help输入文件路径 (CSV 或 Excel))parser.add_argument(output_file, help输出 Markdown 文件路径)# 可选参…

MySQL 配置性能优化实操指南:分版本5.7和8.0适配方案

在 MySQL 性能优化中&#xff0c;不同版本的特性差异会直接影响优化效果。本文基于 MySQL 5.7 和 8.0 两个主流版本&#xff0c;通过版本适配的配置代码、场景举例和通俗解释&#xff0c;让优化方案更精准落地。一、硬件与系统配置优化&#xff08;基础层优化&#xff09;1. 服…

【STM32实践篇】:串口通信

文章目录1. 串行通信与并行通信2. 异步通信与同步通信3. 单工&#xff0c;半双工和全双工通信4. 通信速率和接口标准5. USART 结构框图6. 串口电路6.1 串口之间的连接6.2 串口与 RS232 的转换和连接6.3 串口与 RS485 的转换和连接6.4 串口与 USB 的转换和连接7. USART 字符说明…

Trae IDE评测体验:通过 MCP Server - Figma AI Bridge 一键将 Figma 转为前端代码

Trae IDE评测体验&#xff1a;通过 MCP Server - Figma AI Bridge 一键将 Figma 转为前端代码 在现代前端开发中&#xff0c;从设计稿到可用页面的交付往往需要大量重复劳动&#xff1a;切图、手写样式、布局调整……而借助 MCP Server - Figma AI Bridge&#xff0c;我们可以…

文献阅读 250715-Atmospheric rivers cause warm winters and extreme heat events

Atmospheric rivers cause warm winters and extreme heat events 来自 <Atmospheric rivers cause warm winters and extreme heat events | Nature> ## Abstract: Definition: Atmospheric rivers (ARs) are narrow regions of intense water vapour transport in the …

线上协同办公时代:以开源AI大模型等工具培养网感,拥抱职业变革

摘要&#xff1a;在提倡线上协同办公的时代背景下&#xff0c;职场人需迅速提升工作能力以适应职业变革。培养网感成为时代所需&#xff0c;它为快速连接时代奠定基础。本文深入探讨了开源AI大模型、AI智能名片、S2B2C商城小程序源码等工具在培养网感过程中的重要作用&#xff…

Netty网络聊天室及扩展序列化算法

一、前言Netty是一个基于Java的高性能、事件驱动的网络应用框架&#xff0c;广泛应用于各种网络通信场景。本文将介绍如何使用Netty构建一个简单的网络聊天室&#xff0c;并扩展序列化算法来提高数据传输效率和灵活性。二、Netty网络聊天室的实现1. 项目结构我们将使用Maven构建…

基于单片机金沙河粮仓环境监测系统设计与实现

摘 要 本文围绕基于单片机的金沙河粮仓环境监测系统展开设计与实现研究。系统以单片机为核心&#xff0c;集成 DHT11、MQ - 135 等传感器&#xff0c;可实时精准监测粮仓温湿度、气体成分等关键环境参数。借助 LoRa、ESP8266 实现数据的可靠传输与远程通信 &#xff0c;OLED 屏…

如何解决Android Studio安装时无法下载SDK的问题(Windows、Linux、Mac解决方案大全)

如何解决Android Studio安装时无法下载SDK的问题&#xff08;Windows、Linux、Mac解决方案大全&#xff09; 前言 对于全栈开发者而言&#xff0c;安装 Android Studio 是迈向 Android 开发的第一步&#xff0c;但在 Windows、Linux、macOS 等不同平台上&#xff0c;经常会遇…

SQL Server从入门到项目实践(超值版)读书笔记 21

9.5 数据的内连接查询连接是关系数据库模型的主要特点&#xff0c;连接查询是关系数据库中最主要的查询&#xff0c;主要包括内连接、外连接等。内连接查询操作列出与连接条件匹配的数据行&#xff0c;它使用比较运算符比较被链接列的列值。具体语法格式如下&#xff1a;SELECT…

瑞芯微7月17日举办开发者大会,多款AIoT新品发布,触觉智能RK方案商报导

瑞芯微第九届开发者大会RKDC 2025将有多款新品发布。 据瑞芯微电子Rockchip此前宣布&#xff1a;该企业的本年度开发者大会RKDC 2025将于7月17~18日在福建福州海峡国际会展中心举行。本次瑞芯微开发者大会以“AIoT模型创新重做产品”为主题&#xff0c;关注传统IoT功能设备向场…

Eureka+Ribbon实现服务注册与发现

目录 一、相关文章 二、兼容说明 三、服务注册 四、服务发现 一、相关文章 基础工程&#xff1a;gradle7.6.1springboot3.2.4创建微服务工程-CSDN博客 Eureka服务端启动&#xff1a;https://blog.csdn.net/cherishSpring/article/details/149473554 Ribbon负载均衡&#…

数据库、HTML

一、数据库 数据库文件与普通文件区别: 普通文件对数据管理(增删改查)效率低2.数据库对数据管理效率高&#xff0c;使用方便 常用数据库: 1.关系型数据库: 将复杂的数据结构简化为二维表格形式 大型:0racle、DB2 中型:MySq1、sQLServer 小型:Sqlite 2.非关系型数据库以键值对…

RCE随笔(1)

哪些是可以执行代码执行&#xff1a;php代码。eval如&#xff1a;eval:<?php eval($_post[key]);eval&#xff1a;php中不被叫做函数叫动态执行命令assert&#xff1a;执行函数call_user_func_array<?php call_user_func_array(assert,array($_REQUEST[shu]));传入xxs-…

FPGA——ZYNQ7020学习日记(PS端)4(开始PS控制VGA显示)

1.DMA 我们的整体VGA显示分为几步&#xff1a;比如先导入VIDEO TIMING CONTROL来做对输入数据的时序“对齐”&#xff0c;这里开源骚客写的很详细&#xff0c;先用了一个虚拟IO&#xff08;VIO)来作为输入&#xff0c;导入了一个简单的RTL模块&#xff08;当VTL的使能信号有效…

AGX Xavier 搭建360环视教程【补充一:鱼眼去畸变(Fisheye Undistortion)】

对每路帧做鱼眼去畸变除了用cv::cuda::remap是否有更好的办法呢&#xff1f;确实 cv::cuda::remap 不是唯一可选项&#xff0c;甚至未必是最高效或最适合实际业务量级的方案。&#x1f3af; 1️⃣ 去畸变的原理鱼眼相机&#xff08;或者大广角相机&#xff09;会把直线拉弯&…

tomato靶机练习

下载完靶机后&#xff0c;直接运行&#xff0c;选择安装路径后将虚拟机的网络设置为nat模式&#xff0c;设置完成后重启虚拟机扫描同一网段&#xff0c;查找主机&#xff0c;这里我们使用kali的nmap&#xff0c;既能找到主机&#xff0c;也能查看开启的端口依次尝试&#xff0c…