当前位置: 首页 >关注 > 正文

单片机入门之数码管显示

2023-06-26 17:57:20 来源:爱瑞单片机

在之前的文章中我们学习了单片机是如何点亮一盏LED灯,并且让LED灯玩出花样本章我们把前面所学习到的内容融合起来,实现如题数码管显示,数码显示的自然就是数字了,本章节目标 -- 数码管显示数字。

一、功能概述

数码管显示的单片机的基础功能,数码管具有动态显示,和静态显示两种状态,其显示的原理就是利用人眼睛的视觉暂留现象,通过控制单片机IO快速刷新数码管的显示内容,达到人们眼中所见的稳定不变的显示。


(资料图片)

二、显示原理

1.数码管通常有一位或多位一体,其中一位数码管中由8段LED灯组合而成,每段分别命名为a,b,c,d,e,f,g,dp,通过控制单片机的8个IO给这8个管脚施加不同的电压电位,就可以使其中的LED发光,从而组成不同的显示状态如0 ~ 9甚至是字母A~H都可以。

2.数码管由8个LED组成,将8个LED的其中一端并联到一起就形成了一个公共端,如果被并联的一端都是由LED的负极组成的话,那么这种数码管就称之为共阴极数码管,反之被并联的一端都是由LED的正极组成的话,这种数码管就称之为共阳极数码管。

3.多位一体数码管,多位一体数码管可以视作由多个一位数码管组成的数码管,通过高速扫描每一个位的端口,利用人眼的视觉暂留现象实现在人眼中多位同时显示的效果,这种方式称之为位选也叫位的选择。

三、电路连接

将一位数码管的a,b,c,d,e,f,g,dp端口分别与单片机的P00~P07相连,将数码管的公共端与电源地连接,这是个共阴极数码管,所以公共端是要连接到电源地的,那么这个数码管的驱动电位则为高电位驱动,单片机的IO输出高电位就能够点亮这个数码管。

四、程序设计

首先根据电路连接,P00~P07分别对应数码管的a,b,c,d,e,f,g,dp,即:

单片机I/O口数码管端口
P0.0a
P0.1b
P0.2c
P0.3d
P0.4e
P0.5f
P0.6g
P0.7dp

以共阴极数码管为例,根据共阴极数码管高电平点亮原则,可以以此计算出每个数字所代表的16进制位码。

首先数字0的位码应该怎么计算?这里我们首先就要看当数字0点亮时,数码管中应该是哪些LED段亮起哪些段是熄灭的:

根据以上两个例子,呢么是不是可以以此类推出剩下的数字码:

当然,不同的接法有不同的字码计算方法,不同的数码管的管脚排列也不一定相同,还要根据实际使用中来进行分辨和计算,本例中的字码如下:

数字0123456789
字码0xfc0x600xda0xf20x660xb60xbe0xe00xef0xf6

数码管从0-9顺序显示数字,功能实现代码:

include< reg52.h >#define uchar unsigned char#define uint unsigned intvoid delay(uint n) //定义延时函数{uint x,y;for(x = n;x >0;x--)for(y = 110;y >0;y--);}uchar code table[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xef,0xf6}; // 数字0-9void main(){P0=0xff;  //P0口初始化高电平,时数码管初始熄灭状态while(1){P0 = table[i];delay(1000);   //延时约1si++;if(i >9) i = 0; // 从0-9显示后,再从0开始}}

总结

总体而言实现一位数码管显示数字,并按一定的规律显示其内容,相对来说还是比较简单的,实际上还是上一章流水灯中所用到的知识,本章的重点还是在于理解数码管位码的计算提取,大家可以根据本章所学到的内容举一反三,下一章中我们将要进一步使用数码管实现更具有挑战性的效果。

标签:

返回顶部