目录
一、数码管概述
(1)认识数码管
(2)数码管的工作原理
(3)LED数码管驱动方式-静态显示
二、数码管电路图
三、静态数码管显示例程
(1)例程1:数码管显示某一位(某一杠)。以点亮8段数码管最上面的横杠为例。
(2)例程2:数码管的8个段依次点亮(其他保持熄灭)
(3)例程3:数码管显示某一个数值。(本例以点亮8段数码管显示数组“1”为例)
(4)例程4:数码管依次显示0-9、-、全部熄灭,显示间隔为500MS;
一、数码管概述
(1)认识数码管
led数码管(LED Segment Displays)由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。这些段分别由字母a,b,cdefq,dp来表示:
(2)数码管的工作原理
当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的字样了。如:显示一个“2”字,那么应当是a亮b亮g亮e亮d亮f不亮c不亮dp不亮。小尺寸数码管的显示笔画常用一个发光二极管组成,而大尺寸的数码管由二个或多个发光二极管组成。发光二极管的阳极连接到一起连接到电源正极的称为共阳数码管,发光二极管的阴极连接到一起连接到电源负极的称为共阴数码管。常用LED数码管显示的数字和字符是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。(蓝桥杯单片机上使用的是:两个四位一体的共阳极数码管)
(3)LED数码管驱动方式-静态显示
- LED数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据LED数码管的驱动方式的不同,可以分为静态式和动态式两类。
- 静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/0端口多,如驱动5个数码管静态显示则需要5x8=40根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个,实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。
二、数码管电路图
(非实际,便于理解版本)
三、静态数码管显示例程
(1)例程1:数码管显示某一位(某一杠)。以点亮8段数码管最上面的横杠为例。
//头文件声明区域
#include <STC15F2K60S2.H>
//程序主体
void main()
{
P2 = 0XA0;P0 = OX00;P2 = 0X80;P0 = 0XFF;//初始化程序
P2 = 0XC0;P0 = 0X01;P2 = 0XFF;P0 = 0XFF;//打开第一个数码管程序
P0 = 0XFE;//1111 1110
while(1);
}
(2)例程2:数码管的8个段依次点亮(其他保持熄灭)
//头文件声明区域
#include <STC15F2K60S2.H>
#include<intrins.h>
//变量声明区域
unsigned char SEG = 0;
//函数定义区域
void Delay(unsigned int time) //@11.0592MHz
{
unsigned char i, j;
while(time--)
{
_nop_();
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
}
}
void SEG_Left(void)
{
for(SEG = 0;SEG < 8;SEG++)
{
P0 = ~(0x01<<i);
Delay(500);
}
}
//程序主体
void main()
{
P2 = 0XA0;P0 = OX00;P2 = 0X80;P0 = 0XFF;//初始化程序
P2 = 0XC0;P0 = 0X01;P2 = 0XFF;P0 = 0XFF;//打开第一个数码管程序
while(1)
{
SEG_Left();
}
}
(3)例程3:数码管显示某一个数值。(本例以点亮8段数码管显示数组“1”为例)
//头文件声明区域
#include <STC15F2K60S2.H>
//程序主体
void main()
{
P2 = 0XA0;P0 = OX00;P2 = 0X80;P0 = 0XFF;//初始化程序
P2 = 0XC0;P0 = 0X01;P2 = 0XFF;P0 = 0XFF;//打开第一个数码管程序
P0 = 0XF9;
while(1);
}
(4)例程4:数码管依次显示0-9、-、全部熄灭,显示间隔为500MS;
#include <STC15F2K60S2.H>
void main()
{
P2 = 0XA0;P0 = OX00;P2 = 0X80;P0 = 0XFF;//初始化程序
P2 = 0XC0;P0 = 0X01;P2 = 0XFF;P0 = 0XFF;//打开第一个数码管程序
while(1)
{
P0 = 0XC0; Delay(500);//0
P0 = 0XF9; Delay(500);//1
P0 = 0XA4; Delay(500);//2
P0 = 0XB0; Delay(500);//3
P0 = 0X99; Delay(500);//4
P0 = 0X92; Delay(500);//5
P0 = 0X82; Delay(500);//6
P0 = 0XF8; Delay(500);//7
P0 = 0X80; Delay(500);//8
P0 = 0X90; Delay(500);//9
P0 = 0XBF; Delay(500);//-
P0 = 0XFF; Delay(500);//全部熄灭
}
}