面向单片机编程(三)- 数码管显示

标签: 单片机 C51 数码管

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

面向单片机编程(三)- 数码管显示_第1张图片

功能概述

数码管显示的单片机的基础功能,数码管具有动态显示,和静态显示两种状态,其显示的原理就是利用人眼睛的视觉暂留现象,通过控制单片机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的正极组成的话,这种数码管就称之为共阳极数码管。

面向单片机编程(三)- 数码管显示_第2张图片

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

电路连接

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

                                 面向单片机编程(三)- 数码管显示_第3张图片

 

程序设计

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

面向单片机编程(三)- 数码管显示_第4张图片

 

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

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


面向单片机编程(三)- 数码管显示_第5张图片

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

面向单片机编程(三)- 数码管显示_第6张图片

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

 

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

include

#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开始

}

}

总结

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

你可能感兴趣的:(单片机,c语言,嵌入式硬件)