单片机数码管动态显示

ops/2025/1/24 6:23:41/

在学习 51 单片机的过程中,数码管动态显示是一个非常基础且重要的知识点。通过数码管,我们可以直观地展示数字、字符等信息,在很多电子设备中都有广泛应用,比如电子时钟、数字万用表等。本文将详细介绍 51 单片机数码管动态显示的原理及代码实现。

一、数码管动态显示原理

数码管是由多个发光二极管组成,根据显示段数不同,常见的有七段数码管和八段数码管(多了一个小数点)。以共阴极数码管为例,它的内部所有发光二极管的阴极连接在一起,当某个段的阳极接高电平时,对应的段就会点亮。

动态显示是利用人眼的视觉暂留效应,通过快速轮流点亮各个数码管,只要扫描速度足够快,人眼看起来就像所有数码管在同时显示。例如,我们有 4 个数码管,依次给每个数码管发送显示数据并点亮,然后快速切换到下一个数码管,循环这个过程。

二、硬件连接

假设我们使用的 51 单片机为 STC89C51,数码管为共阴极。将 P0 口连接到数码管的段选端,用于控制显示的内容;P2 口连接到数码管的位选端,用于选择要点亮的数码管。

#include <REGX51.H>unsigned char duanxuan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};void delay(unsigned int t)
{unsigned char i;while(t--){for(i=0;i<120;i++);}
}void fun1(unsigned char loc,num)
{switch(loc){case 1:P2_2=1;P2_3=1;P2_4=1;break;case 2:P2_2=0;P2_3=1;P2_4=1;break;case 3:P2_2=1;P2_3=0;P2_4=1;break;case 4:P2_2=0;P2_3=0;P2_4=1;break;case 5:P2_2=1;P2_3=1;P2_4=0;break;case 6:P2_2=0;P2_3=1;P2_4=0;break;case 7:P2_2=1;P2_3=0;P2_4=0;break;case 8:P2_2=0;P2_3=0;P2_4=0;break;}P0=duanxuan[num];
}void main()
{while(1){fun1(1,1);delay(500);fun1(2,2);delay(500);fun1(3,3);delay(500);}
}

四、总结

通过上述代码和原理介绍,我们成功实现了 51 单片机数码管的动态显示。动态显示节省了硬件资源,通过软件编程实现了多个数码管的显示功能。在实际应用中,还可以根据需求扩展显示内容,比如显示字母、符号等,只需修改段选码表即可。希望本文能帮助你更好地理解和掌握 51 单片机数码管动态显示技术。

 


http://www.ppmy.cn/ops/152667.html

相关文章

算法题之栈与队列:理论基础与常用操作接口

栈与队列 &#xff08;1&#xff09;理论基础 栈&#xff1a;先进后出的数据结构 队列&#xff1a;先进先出的数据结构 栈提供push 和 pop 等等接口&#xff0c;所有元素必须符合先进后出规则&#xff0c;所以栈不提供走访功能&#xff0c;也不提供迭代器(iterator)。 不像是…

【时时三省】(C语言基础)格式化输入输出函数

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 格式化输出函数 他需要用到fprintf 示例&#xff1a; 把一个格式化的数据如果写到文件里面 格式化输入函数 它需要用到fscanf函数 示例&#xff1a;

202112 青少年软件编程等级考试C/C++ 二级真题答案及解析(电子学会)

第 1 题 统计指定范围里的数 给定一个数的序列S,以及一个区间[L, R], 求序列中介于该区间的数的个数,即序列中大于等于L且小于等于R的数的个数。 时间限制:1000 内存限制:65536 输入 第一行1个整数n、,分别表示序列的长度。(0 < n ≤ 10000) 第二行n个正整数,表…

Kotlin 2.1.0 入门教程(八)

Lambda 表达式和匿名函数 Lambda 表达式和匿名函数是函数字面量。 函数字面量是未声明但立即作为表达式传递的函数。考虑以下示例&#xff1a; max(strings, { a, b -> a.length < b.length })函数 max 是一个高阶函数&#xff0c;因为它将函数值作为其第二个参数。这…

docker 安装 redis 详解

在平常的开发工作中&#xff0c;我们经常会用到 redis&#xff0c;那么 docker 下应该如何安装 redis 呢&#xff1f;简单来说&#xff1a;第一步&#xff1a;拉取redis镜像&#xff1b;第二步&#xff1a;设置 redis.conf 配置文件&#xff1b;第三步&#xff1a;编写 docker-…

C++函数——fill

在C中&#xff0c;std::fill 是标准库提供的一个算法适用于几乎所有类型的容器&#xff0c;只要这些容器支持迭代器操作。具体来说&#xff0c;std::fill 的适用性取决于容器是否提供了满足其要求的迭代器类型&#xff0c;用于将指定范围内的所有元素设置为某个特定值。它是一个…

【Java-数据结构】Java 链表面试题上 “最后一公里”:解决复杂链表问题的致胜法宝

我的个人主页 我的专栏&#xff1a;Java-数据结构&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;点赞❤ 收藏❤ 引言&#xff1a; Java链表&#xff0c;看似简单的链式结构&#xff0c;却蕴含着诸多有趣的特性与奥秘&#xff0c;等待我们去挖掘。它就像一…

(4)ACS控制器Buffer程序记录与解析-PEG功能程序

一、pandas是什么&#xff1f; 示例&#xff1a;pandas 是基于NumPy 的一种工具&#xff0c;该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.程序 代码如下&#xff08;示例&#xff09;&#xff1a; ASSIGNPEG(0),4,0 ASSIGNPOUTS(0),0,0 ENABLE 0 ACC(0)10000 …