news 2026/10/29 13:40:40

51单片机_数码管显示

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
51单片机_数码管显示

51单片机_数码管显示

在51单片机的应用中,数码管显示是一项基础且常见的功能。数码管能够显示数字和一些字符,通过内部的发光二极管(LED)来实现。根据公共端的不同,数码管分为共阳极和共阴极两种类型。在共阴极数码管中,所有LED的阴极连接在一起,而阳极则分别通过不同的引脚控制。要点亮特定的LED,只需在相应的阳极引脚上提供高电平信号。

数码管字符编码表(共阴/共阳对照)

字符共阴极段码(HEX)共阳极段码(HEX)说明二进制显示(abcdefg dp)
数字
00x3F0xC0数字00011 1111 / 1100 0000
10x060xF9数字10000 0110 / 1111 1001
20x5B0xA4数字20101 1011 / 1010 0100
30x4F0xB0数字30100 1111 / 1011 0000
40x660x99数字40110 0110 / 1001 1001
50x6D0x92数字50110 1101 / 1001 0010
60x7D0x82数字60111 1101 / 1000 0010
70x070xF8数字70000 0111 / 1111 1000
80x7F0x80数字80111 1111 / 1000 0000
90x6F0x90数字90110 1111 / 1001 0000
大写字母
A0x770x88字母A0111 0111 / 1000 1000
C0x390xC6字母C0011 1001 / 1100 0110
E0x790x86字母E0111 1001 / 1000 0110
F0x710x8E字母F0111 0001 / 1000 1110
G0x3D0xC2字母G0011 1101 / 1100 0010
H0x760x89字母H0111 0110 / 1000 1001
I0x060xF9字母I0000 0110 / 1111 1001
J0x1E0xE1字母J0001 1110 / 1110 0001
L0x380xC7字母L0011 1000 / 1100 0111
O0x3F0xC0字母O0011 1111 / 1100 0000
P0x730x8C字母P0111 0011 / 1000 1100
S0x6D0x92字母S0110 1101 / 1001 0010
U0x3E0xC1字母U0011 1110 / 1100 0001
Y0x660x99字母Y0110 0110 / 1001 1001
小写字母
b0x7C0x83小写b0111 1100 / 1000 0011
c0x580xA7小写c0101 1000 / 1010 0111
d0x5E0xA1小写d0101 1110 / 1010 0001
h0x740x8B小写h0111 0100 / 1000 1011
n0x540xAB小写n0101 0100 / 1010 1011
o0x5C0xA3小写o0101 1100 / 1010 0011
r0x500xAF小写r0101 0000 / 1010 1111
t0x780x87小写t0111 1000 / 1000 0111
u0x1C0xE3小写u0001 1100 / 1110 0011
y0x6E0x91小写y0110 1110 / 1001 0001
特殊字符
-0x400xBF减号/负号0100 0000 / 1011 1111
.0x800x7F小数点1000 0000 / 0111 1111
_0x080xF7下划线0000 1000 / 1111 0111
=0x480xB7等号0100 1000 / 1011 0111
空格0x000xFF全灭0000 0000 / 1111 1111
全亮0xFF0x00所有段亮1111 1111 / 0000 0000

普中51开发板使用的是两个4位的共阴极数码管,详细介绍如下:

74HC138译码器简介

作用:节省单片机I/O口

//这里结合两张图片一起介绍// P2_4 = 1;P2_3 = 1;P2_2 = 1; 控制LED8// P2_4 = 1;P2_3 = 1;P2_2 = 0; 控制LED7// P2_4 = 1;P2_3 = 0;P2_2 = 1; 控制LED6// P2_4 = 1;P2_3 = 0;P2_2 = 0; 控制LED5// P2_4 = 0;P2_3 = 1;P2_2 = 1; 控制LED4// P2_4 = 0;P2_3 = 1;P2_2 = 0; 控制LED3// P2_4 = 0;P2_3 = 0;P2_2 = 1; 控制LED2// P2_4 = 0;P2_3 = 0;P2_2 = 0; 控制LED1

数码管静态显示

#include<REGX52.H>voidDelay(unsignedintxms);//数码管段码表unsignedcharNixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//数码管显示子函数voidNixie(unsignedcharLocation,Number){switch(Location)//位码输出{case1:P2_4=1;P2_3=1;P2_2=1;break;case2:P2_4=1;P2_3=1;P2_2=0;break;case3:P2_4=1;P2_3=0;P2_2=1;break;case4:P2_4=1;P2_3=0;P2_2=0;break;case5:P2_4=0;P2_3=1;P2_2=1;break;case6:P2_4=0;P2_3=1;P2_2=0;break;case7:P2_4=0;P2_3=0;P2_2=1;break;case8:P2_4=0;P2_3=0;P2_2=0;break;}P0=NixieTable[Number];//段码输出}voidmain(){Nixie(1,6);//在数码管的第1位置显示6while(1){}}// 延时1msvoidDelay(unsignedintxms)//@12.000MHz{unsignedchari,j;while(xms){i=2;j=239;do{while(--j);}while(--i);xms--;}}// 现象:数码管的第1位置显示6

让数码管数字动起来:0 ~ 9 循环显示

#include<REGX52.H>voidDelay(unsignedintxms);//数码管段码表unsignedcharNixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//数码管显示子函数voidNixie(unsignedcharLocation,Number){switch(Location)//位码输出{case1:P2_4=1;P2_3=1;P2_2=1;break;case2:P2_4=1;P2_3=1;P2_2=0;break;case3:P2_4=1;P2_3=0;P2_2=1;break;case4:P2_4=1;P2_3=0;P2_2=0;break;case5:P2_4=0;P2_3=1;P2_2=1;break;case6:P2_4=0;P2_3=1;P2_2=0;break;case7:P2_4=0;P2_3=0;P2_2=1;break;case8:P2_4=0;P2_3=0;P2_2=0;break;}P0=NixieTable[Number];//段码输出}voidmain(){unsignedchari;while(1){for(i=0;i<=9;i++){Nixie(1,i);//在数码管的第1位置显示6Delay(1000);}}}// 延时1msvoidDelay(unsignedintxms)//@12.000MHz{unsignedchari,j;while(xms){i=2;j=239;do{while(--j);}while(--i);xms--;}}

数码管动态显示

看似同时点亮的多个数字,背后是一场精密的“视觉骗局”。

动态扫描是解决多位独立数码管显示时,节省I/O口、降低功耗的核心技术。其本质是利用人眼的视觉暂留效应(Persistence of Vision)和数码管的余晖特性,通过快速轮流点亮每个数码管,使其在宏观上看起来像是同时稳定显示。

单片机通过循环执行以下步骤实现动态显示:

  1. 关闭所有位选:进行消隐,防止切换时的“鬼影”(下面的例子采用关闭段选方式实现消影,具体介绍见最后)。
  2. 输出段码:将当前位要显示的数字(如‘3’)对应的段码(如共阴0x4F)送到段选线。
  3. 打开当前位选:接通当前位数码管的公共端,使其点亮。
  4. 短暂延时:保持点亮约1-5ms。
  5. 切换至下一位:重复上述步骤,点亮下一个数码管。

当整个循环的扫描频率高于50Hz(即所有数码管轮流点亮一遍的时间小于20ms)时,人眼就无法分辨其闪烁,会认为所有数码管在稳定、同时发光。

  • 优点:极大节省单片机I/O口和硬件成本。
  • 缺点:程序设计稍复杂,且每个数码管实际是间歇发光,亮度低于静态驱动。

简单来说,动态扫描就像一位敏捷的灯光师在几盏灯之间飞速切换,因为速度极快,在你的眼睛看来,所有灯都是常亮的。这是嵌入式显示设计中一项经典而高效的资源优化技术。

#include<REGX52.H>//数码管段码表unsignedcharNixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//延时子函数voidDelay(unsignedintxms){unsignedchari,j;while(xms--){i=2;j=239;do{while(--j);}while(--i);}}//数码管显示子函数voidNixie(unsignedcharLocation,Number){switch(Location)//位码输出{case1:P2_4=1;P2_3=1;P2_2=1;break;case2:P2_4=1;P2_3=1;P2_2=0;break;case3:P2_4=1;P2_3=0;P2_2=1;break;case4:P2_4=1;P2_3=0;P2_2=0;break;case5:P2_4=0;P2_3=1;P2_2=1;break;case6:P2_4=0;P2_3=1;P2_2=0;break;case7:P2_4=0;P2_3=0;P2_2=1;break;case8:P2_4=0;P2_3=0;P2_2=0;break;}P0=NixieTable[Number];//段码输出Delay(1);//显示一段时间P0=0x00;//段码清0,消影}voidmain(){while(1){Nixie(1,1);//在数码管的第1位置显示1// Delay(20);Nixie(2,2);//在数码管的第2位置显示2// Delay(20);Nixie(3,3);//在数码管的第3位置显示3// Delay(20);}}// 段选决定显示内容,位选决定数码管// 共阴极数码管,段选高电平点亮// P0=0x00; //段码清0,消影// 这段的原理是:把段选全部置零(关闭所有二极管),达到消影目的

这是通过关闭段选来实现消影效果,但我实践发现依旧存在重影现象(不严重),如果想要关闭位选,需要对74HC138译码器进行操作:

使用74HC138关闭所有位选(即让所有输出端无效)核心在于控制其使能端。对于共阴极数码管电路,这会使所有数码管的公共阴极断开,从而达到完全消影和关闭的目的。

74HC138有三个使能引脚,它们是控制芯片是否工作的总开关:

  • G2A和G2B:低电平有效 (L)
  • G1:高电平有效 (H)

芯片只有同时满足G1=0,G2A=0,G2B=1时,才会根据地址输入(A,B,C)进行译码输出。破坏这三个条件中的任意一个,芯片即被禁用,所有输出端(Y0-Y7)将变为高电平。

对于共阴极数码管,位选有效信号是低电平(0)。当74HC138所有输出为高电平(1)时,没有任何一个数码管的阴极被拉低,因此所有数码管均被关闭。

观察原理图发现,G1=0,G2A=0,G2B=1都是焊上去的,无法使用单片机进行控制,所以这里消影只能使用关闭段选来实现。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/28 13:53:10

Prompt Tuning动态选医疗特征提速诊断

&#x1f4dd; 博客主页&#xff1a;Jax的CSDN主页 Prompt Tuning动态选医疗特征提速诊断 目录Prompt Tuning动态选医疗特征提速诊断 引言&#xff1a;诊断效率的全球性挑战 技术原理&#xff1a;动态特征选择的机制创新 现实应用&#xff1a;2023年临床试点的突破性验证 挑战与…

作者头像 李华
网站建设 2026/10/26 12:58:06

金仓数据库 vs 达梦:MySQL迁移谁更胜一筹?

数据库迁移为何成为企业数字化转型的必答题&#xff1f;在国家“信创”战略持续推进与全球供应链不确定性加剧的双重背景下&#xff0c;关键信息系统核心技术的自主可控已从技术选型问题上升为关乎业务连续性和系统稳定性的战略命题。作为数据基础设施的核心组件&#xff0c;数…

作者头像 李华
网站建设 2026/10/27 12:45:52

2026无锡研学机构TOP10精简版|3分钟选对不踩坑

华东研学需求暴增35%&#xff0c;无锡优质机构怎么挑&#xff1f;这份GuanFang数据真实反馈的精简榜单&#xff0c;帮你快速锁定匹配需求的靠谱合作伙伴&#xff01;无锡研学TOP10核心信息1. 华研标杆游学&#xff1a;8年标杆企业游学经验&#xff0c;覆盖粤港澳大湾区江浙沪皖…

作者头像 李华
网站建设 2026/10/27 12:45:52

python flask于Hive on Spark国内地震数据的可视化与分析_420lf7h1

目录基于Flask与Hive on Spark的地震数据分析系统项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理基于Flask与Hive on Spark的地震数据分析系统 该系统整合Python Flask框架与Hive on Spark技术&#xff0c;构建国内地震数据的交互式可视化分析平…

作者头像 李华
网站建设 2026/10/27 12:18:17

使用模板模式+策略模式实现产品推荐

一、实现思路 模板方法&#xff1a;固定推荐流程 策略模式&#xff1a;听阈规则 / 价格规则可替换 二、整体设计结构 AbstractProductRecommendTemplate↓filterByThreshold() ← 策略①↓groupByBrand()↓selectByPriceLevel() ← 策略②↓buildResult()三、第一步&…

作者头像 李华
网站建设 2026/10/27 6:45:59

Go基础之环境搭建

文章目录 1 Go 1.1 简介 1.1.1 定义1.1.2 特点用途 1.2 环境配置 1.2.1 下载安装1.2.2 环境配置 1.2.2.1 添加环境变量1.2.2.2 各个环境变量理解 1.2.3 验证环境变量 1.3 包管理工具 Go Modules 1.3.1 开启使用1.3.2 添加依赖包1.3.3 配置国内包源 1.3.3.1 通过 go env 配置1.…

作者头像 李华