数码管原理:
LED数码管是由多个发光二极管封装在一起组成一个“8”字型的器件,将8个LED的阴极连接在一起,或将8个LED的阳极连接在一起,即组成共阴极LED数码管和共阳极LED数码管。然后控制8 个LED的阳极(阴极)电位即可控制LED数码管显示的数字。
图1 LED数码管的内部结构图
如果想显示一个数字3:
共阴极:需要点亮a,b,g,c,d 即a,b,g,c,d端输出高电平,其余输出低电平;
共阳极:需要点亮a,b,g,c,d 即a,b,g,c,d端输出低电平,其余输出高电平;
文章下文将用共阴极数码管完成讲解,共阳极数码管读者可照共阳极数码管自行设计。
数码管内部连接原理
图2 51开发板上数码管内部连接图
从图中可以看出,一共有8个数码管,每个数码管的共阴极端都有一个端口引出,(图中标有LED的端口),一共8个,因此可用一个38译码器来控制哪个数码管共阴极为低电平,以此来控制是那个数码管被点亮,(38译码器的作用相当于扩展了51单品机的IO口)以上部分成为位选环节;然后P0口输出数据让被位选的数码管显示该数据表示的数字,让被位选的数码管显示数字的过程成为段选环节(即选择数码管上那一段亮)。
图3 138译码器内部原理图
图2中锁存器74HC245并未使用其锁存功能,仅为单片机端口减小负载而存在,因此可认为PO口即可控制段选信号。
静态数码管程序代码:
实验效果:静态数码管第一位显示数字0;
#include "reg52.h"
#define DIG P0 // 定义段选数据传送IO口
sbit LSA=P2^2; // 定义位选数据传送的3个IO口
sbit LSB=P2^3;
sbit LSC=P2^4;
unsigned char code DIG_CODE[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//定义0-16的段选数据放置该数组
void main()
{
LSA=0; //选择第一个数码管
LSB=0;
LSC=0;
while(1)
{
DIG=DIG_CODE[0]; //显示数字0
}
}