STC 51单片机 多位数码管动态显示方法

数码管的静态显示和动态显示案例介绍 阅读详情
AI摘要

本文详细介绍了51单片机实现多位数码管动态显示的方法。首先讲解数码管显示原理,数码管由LED组合而成,通过点亮不同段实现不同数字显示。接着,针对资源限制,提出了动态显示技术,利用快速切换显示位来模拟静态效果。最后,给出了示例程序,通过逐位显示数字并结合延时函数实现动态显示,同时提供了共阳极和共阴极的数码管字型码表。

1.数码管显示原理

相比学习单片机的同学一定对显示器,屏幕如OLED,LCD并不陌生,而在这些显示器之前呢,最常见的就是数码管了,其实它就是由多个LED灯组合而成,没有什么神秘,如图所见a,b,c,d,e,f,g,dp和公共端COM,排列成8字。例如当我们需要显示数字 “1” 时,只点亮b和c即可,其他数字或符号同理。
一般分为共阳极和共阴极,如下图。
数码管原理结构

2.多位数码管动态显示

由于在实际使用中,我们发现想要显示的数字可能不止一个,且一位数码管显示就需要占用单片机端口I/O资源8个(不显示小数点 7个)要同时显示多位数字就要占用非常多的I/O资源,所以就有人想出了一种办法,那就是动态显示。也就是利用余辉效应 以很快的速度挨个显示每一位数字来欺骗人眼,看上去就像静态一样。前面我们知道了一位数码管的基本显示原理,那么多位也就不难了。下图为6位八段数码管,其6个公共端 在这里被称为位选端,其他八位(图中只用到7位,没小数点)共用一组I/O端口。当共用端有数据时,那一个位选接通则那个数码管显示对应数字。

6位八段数码管

3.示例程序

知道原理,那么代码是非常简单的了,这里举个小例子,。
这里采用模块化编程思想,将其和主函数分开写,以提高代码可读性,主程和延时不再赘述,文末会提供资料,限于积分不能下载的 可向我要。直接在主程序中调用函数即可,

#include "delay.h"

void delay_ms(uint i)
{
     uint j;
	 while(i--)
		for(j=120;j>0;j--);
}
/*  这里给出两中 参考码,方便取用
	unsigned char  shu1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};	//没有dp小数点
		//数字0-9的共阴极码表		0	-	9		-(下标10)
    unsigned char shu0[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
		//数字0-9的共阳极码表		0	-	9		-(下标10)
*/
uchar Code[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; 	
//显示段码 数码管字型  共阳极0-9
uchar wei[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};  
//6个 位选端 

/************************************************
 * 函数名: void Led_Code(Lint date)  
 * 功  能: 数码管显示函数 
 * 参  数: 无符号长整型,要显示的数字
 * 返回值: 无
 ***********************************************/
void Led_Code(Lint date) //显示函数
{	
	uint a,b,c,d,e,f;
	
  	a=date/1000/100;			//十万位
  	b=date%100000/10000;		//求万位
  	c=date%10000/1000;			//求千位
  	d=date%1000/100;			//求百位
	e=date%100/10;			  	//求十位
	f=date%10;			  		//求个位
	
	//计算好后,逐个显示 依次循环,如果对性能有要求可在初始化时计算,此处不再重复计算
      P2=0XFF;	//清除上次显示
	  P1=Code[a]; //十万位
	  P2=wei[0];
	  delay_ms(5);
	
	  P2=0XFF;  
      P1=Code[b];//万 位
	  P2=wei[1];
	  delay_ms(5);
	
	  P2=0XFF;  
   	  P1=Code[c];//千
	  P2=wei[2];
	  delay_ms(5);
		
	  P2=0XFF;  
      P1=Code[d];//百
	  P2=wei[3];
	  delay_ms(5); 
		
		P2=0XFF;  
      P1=Code[e];//十
	  P2=wei[4];
	  delay_ms(5); 
		
		P2=0XFF;  
      P1=Code[f];//个
	  P2=wei[5];
	  delay_ms(5); 
}

3.结语

STC51 数码管动态显示 包含proteus仿真源文件。源码文件仅供学习,如有错误还望指正。

STC 51单片机 多位数码管动态显示:从原理到实战的优化技巧 本文详细解析了STC 51单片机驱动多位数码管动态显示的原理与优化技巧,涵盖硬件电路设计、软件编程及工程化实战案例。通过分时复用和视觉暂留效应实现稳定显示,并分享定时器中断、显示缓冲区等进阶优化方法,帮助开发者解决亮度不均、鬼影等常见问题。 阅读详情

相关推荐

【51单片机】蜂鸣器实验和动态数码管实验

蜂鸣器实验和动态数码管实验

mhyasadj的博客 2376

单片机-如何让数码管动态显示

数码管由8个端 或者7个端组成的发光二极管 多一个段是一个点,他可以组成小数点一个数码管封装 10个引脚段选 就是 数码管各个发光二极管显示的段 组成的字位选 就是 公共端引出的引脚,选择哪个数码管来显示。

m0_68021259的博客 4327

基于51单片机的简单计时时钟

当多位一体时,它们内部的公共端是独立的,而负责显示什么数字的段线 (a-dp)全部是连接在一起的,独立的公共端可以控制多位一体中的哪一位数码 管点亮,而连接在一起的段线可以控制这个能点亮数码管亮什么数字,通常我们把公共端叫做“位选线”,连接在一起的段线叫做“段选线”,有了这两个线后, 通过单片机及外部驱动电路就可以控制任意的数码管显示任意的数字了。实现被选中时分秒的闪烁。(4)按下按键SW1,在模式间切换,当切换到调整时间模式,数码管显示自动停止刷新时间,对应的时,分,秒开始以1秒的频率闪烁。

qq_49572460的博客 3249

数码管显示(超基础)

本篇文章将系统对基础元件数码管进行介绍,具体包括数码管结构、分类、相关显示模块三个方面。

LIN___IT的博客 1万+

51单片机数码管静态与动态显示原理、代码实现与避坑指南

在嵌入式系统与单片机开发中,I/O口资源管理是核心基础。数码管作为经典的人机交互显示器件,其驱动方式直接体现了对单片机I/O资源的利用效率。静态显示原理直观,每位数码管独占I/O口,编程简单且显示稳定无闪烁,但需要消耗大量引脚,在驱动多位数码管时面临资源瓶颈。动态显示则基于分时复用原理,利用人眼视觉暂留效应,通过快速循环扫描多位数码管来节省I/O口,是解决资源矛盾的关键技术。其技术价值在于以时间换空间,显著提升了单片机系统的显示扩展能力,广泛应用于电子时钟、仪表盘等需要多位数码显示的场合。然而,动态扫描易引

weixin_30376509的博客 335

单片机驱动8位共阴数码管显示示例

在嵌入式系统中,使用单片机来驱动数码管是一项常见的任务。本文将介绍如何使用单片机和MACX7219驱动芯片来显示8位共阴数码管的示例。通过按照上述步骤连接硬件并使用提供的代码,您应该能够成功驱动8位共阴数码管并显示数字。根据您的需求,您可以进一步修改代码以实现更多功能,例如显示不同的字符、实现计数器等。您可以根据自己使用的单片机类型和开发环境进行相应的修改。在代码中,我们首先定义了MACX7219芯片的引脚连接,并定义了要显示的数字的字节表示。函数用于将指定的数字显示在数码管上,其中。

DevCyberX的博客 709

8086汇编程序:多位数码管动态扫描显示2023

设计8255A 与多位共阴极数码管接口电路,实现在四位LED共阴极数码管上显示数字2023

weixin_63135906的博客 3482

多位数码管

1.Proteus 8 仿真器2.keil 5 编辑器。

爱吃编程的苦 978

STC 51单片机62—— Proteus仿真多位数码管稳定显示 不抖动

STC 51单片机62—— Proteus仿真多位数码管稳定显示 不抖动

fengyuzhe13的专栏 1288

51单片机入门 - 驱动多位数码管

使用扫描的方法同时点亮多位数码管

Slightwind's Blog 2662

51单片机数码管动态显示工程实践与重影消除

数码管动态显示是嵌入式系统中典型的时序敏感型人机交互技术,其原理基于视觉暂留效应与分时复用机制。核心在于通过精确控制位选与段选信号的切换时序,在有限IO资源下实现多位数字的稳定呈现。技术价值体现在低硬件成本、高可扩展性及对MCU资源的极致优化;典型应用场景包括工业仪表、家电面板、教学实验平台等。实际开发中,共阴极数码管驱动、51单片机P0/P2端口特性、段码查表、显存管理及‘关-开’位选时序(即重影消除关键)构成完整技术链。本文聚焦于该技术在传统8051架构下的落地细节与工程约束。

weixin_42174098的博客 33

51单片机(1)

常见的 51 单片机芯片如 STC89C52RC,采用 DIP40 封装(双列直插式,40 个引脚),相同网络编号的引脚在实际电路中彼此互通,可减少复杂连线。1980 年,Intel 公司推出 MCS-51 系列单片机(首款为 8051 型号),标志着单片机从微控制器(MCU)向通用计算领域的拓展。51 单片机通常配套 4 位共阴极数码管,每个数码管可独立显示 0-9 等数值,但受硬件电路设计限制,同一时刻只能有一个数码管被点亮,需通过动态显示技术实现多位数 “同时亮” 的效果。

CQ_YM的博客 1025

STC 51单片机数码管动态显示技术实战

STC 51单片机作为经典微控制器系列之一,在工业控制、家用电器以及教学等领域有着广泛的应用。其具有成本低廉、编程简单、性能稳定等特点,深受工程师和爱好者的喜爱。51单片机基于经典的Intel 8051架构,拥有丰富的外围接口和较强的处理能力,使得其在处理简单的嵌入式系统任务时游刃有余。

weixin_31315007的博客 873

基于51单片机的简易计算器多位数码管显示proteus仿真设计

本设计基于STC89C51/52(与AT89S51/52、AT89C51/52通用)。设计一个简易计算器,能够进行最多八位数的加、减、乘、除连续运算。采用4*4的矩形按键,通过八位数码管显示输入数字和结果。

m0_65812036的博客 1159

3位6脚数码管驱动实战:STC51+74HC595动态扫描显示

在单片机显示驱动设计中,数码管是最基础也最常用的输出设备。传统多位七段数码管需要大量IO引脚,而3位6脚数码管通过内部复用与串行扩展,仅需少数几根引脚即可完成三位数字显示。本文以STC51单片机为例,讲解基于74HC595的数码管驱动原理,涵盖共阳极段码表、动态扫描刷新机制、串行移位时序等核心知识点,并给出完整的Keil工程源码与硬件连线方法。无论你是做仪表、计时器还是嵌入式小面板,掌握这种节省IO的驱动方式,都能在资源受限的MCU上轻松实现高质量显示。通过合理设置扫描周期和消隐时序,还能有效消除残影、提升

weixin_29170327的博客 241

CANoe信号波形分析保姆级教程:Graphic窗口从配置到实战避坑

本文详细解析了CANoe的Graphic窗口在信号波形分析中的高效配置与实战应用技巧。从信号显示模式选择、测量光标进阶操作到信号分组策略,提供工程化解决方案,帮助工程师快速定位总线信号异常,提升汽车电子开发与测试效率。

weixin_29279047的博客 265

proteus环境下AT89C51控制多位数码管全面讲解

深入讲解如何在proteus数码管仿真环境中利用AT89C51实现多位数码管动态显示,涵盖电路设计与程序优化技巧,帮助掌握proteus数码管应用核心要点。

weixin_28931507的博客 340

Dify + Oracle + MCP:轻松构建 RAG 应用与Oracle MCP Agent

通过一个实践案例,展示如何使用 Oracle 23ai 数据库、Dify、Oracle SQLcl MCP 从零开始构建一个功能完备的 RAG 应用,以及通过 Agent 与 SQLcl MCP Server 实现 Oracle 数据访问。

Rambo zheng的博客 2499

江协科技51单片机学习- p11 静态数码管显示

本文是根据哔哩哔哩网站上“江协科技51单片机”视频的学习笔记,在这里会记录下江协科技51单片机开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了江协科技51单片机教学视频和链接中的内容。在淘宝上购买了江协科技51单片机开发板套件(普中科技STC51单片机A2型号),就上在上一篇博文里说的自己计划学习下江协科技51单片机开发教程,通过STC51单片机这种MCU这种贴近于裸机的开发来增加对于系统硬件层面知识的了解和掌握。

小狗爱吃黄桃罐头的博客 1214

sldd数据字典导出为excel

sldd导出为excel

zpfjf的博客 2237

交叉编译Qt6.5.3(RK3568开发板)

注意,如果使用其它版本的交叉编译器的话,请确保你的交叉编译器能够支持 C++17标准。为确保后续交叉编译没问题,需要确保开发板使用的GLIBC版本不小于2.34版本。到 linaro 网站上下载交叉编译工具,我下载的是 gcc-linaro-11.3.1-2022.06-x86_64_aarch64-linux-gnu.tar.xz。安装 CMake ,最低要求3.16版本,如果要静态编译,需要3.21及以上版本。我使用的3.27版本。:指定为最后交叉编译后的Qt6.5.3库的安装目录。

m0_46309425的博客 5100

51单片机按键输入多位数_单片机GPIO概念

概念GPIO(general purpose intput output)是通用输入输出端口的简称,可以通过软件来控制其输入和输出。51 单片机芯片的 GPIO 引脚与外部设备连接起来,从而实现与外部通讯、 控制以及数据采集的功能。过 GPIO 最简单的应用还属点亮 LED 灯了,只需通过软件控制 GPIO 输出高低电平即可。当然GPIO 还可以作为输入控制,比如在引脚上接入一个按键,通过电平的高...

weixin_35064596的博客 590

STM32(HAL库)软件IIC驱动OLED

本文通过STM32F103C8T6单片机(HAL库)通过软件IIC方式对OLED进行驱动。

weixin_44597885的博客 9755
上一篇: STC52单片机 第三个定时器 定时器2详解
下一篇: STC 定时器/计数器2 操作详解 (基于STC89C52RC参考文档)
Guard_Byte
博客等级 码龄5年 599粉丝 15原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Guard_Byte

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值