单片机入门之数码管显示

控制/MCU

1814人已加入

描述

在之前的文章中我们学习了单片机是如何点亮一盏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的正极组成的话,这种数码管就称之为共阳极数码管。

led灯

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

三、电路连接

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

led灯

四、程序设计

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

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

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

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

led灯

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

led灯

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

数字 0 1 2 3 4 5 6 7 8 9
字码 0xfc 0x60 0xda 0xf2 0x66 0xb6 0xbe 0xe0 0xef 0xf6

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

include< reg52.h >

#define uchar unsigned char

#define uint unsigned int

void 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-9

void main()

{

P0=0xff;  //P0口初始化高电平,时数码管初始熄灭状态

while(1)

{

P0 = table[i];

delay(1000);   //延时约1s

i++;

if(i >9) i = 0; // 从0-9显示后,再从0开始

}

}

总结

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

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分