一.数码管显示原理
依靠点亮内部发光二极管来发光,数码管内部电路如图a,一位数码管的引脚是10个,显示一个8需要7个小段,还有一个小数点,所以其内部有8个小的发光二极管,最后还有一个公共端,这个公共端又有共阴极和共阳极之分,下面对这两种数码管原理做以介绍。
1.共阴极数码管
“共阴”顾名思义是8个二极管的阴极全部连接在一起如图b,而他们的阳极是独立的。电路连接时,只要给数码管的任意一个阳极加高电平,对应这个数码管就亮了,例如想显示“8”,并且把与下角小数点也点亮,则给8个阳极全通高电平即可。
2。共阳极数码管
数码管所有阳极连接在一起如图c,公共端接的事高电平,想让哪个数码管亮就给那个阴极送个低电平即可,此时显示数字的编码与共阴极编码相反。
数码管静态显示
通常我们把公共端叫做“位选线”,把连接在一起的线段叫“段选线”。
在点亮数码管之前,先介绍下74HC573锁存器。
锁存器:把数据输入端与输出端进行隔离或者连接。
输出口Q要想输出高低电平OE脚必须接地。
当LE脚为高电平时,输出端Q随输入端D的变化而变化;
当LE脚为低电平时,输出端Q数据保存不变,输入端D数据变化不会改变Q的数据。
假如我们给输入端(与P0口直接相连)送一个0x06的值,LE为高时,锁存器两端就连接起来了,输出端也会输出0x06。如果P0口需要输送其他值时,只需将LE脚接个低电平,锁存器两端就断开了。当OE脚接高电平时,不论输入什么都不会输出,此时是一个高阻态的状态。
Ok,接下来上代码,让数码管上显示一个“1”。
#include<reg51.h>
sbit dula=P2^6; //申明U1锁存器的锁存端
sbit wela=P2^7; //申明U2锁存器的锁存端
void main()
{
wela=1; //打开U2锁存器
P0=0xFE; //送入位选信号
wela=0; //关闭U2锁存器
dula=1; //打开U1锁存器
P0=0x06; //送入段选信号
dula=0; //关闭U1锁存器
}
U1锁存器控制数码管显示的内容,U2锁存器控制哪一个数码管显示。
数码管动态显示
所谓动态显示,就是轮流向数码管送字形码和相应的位选。下面用代码来详细说一下,现象是第一个数码管显示1,时间为0.5s,然后关闭它,接着第二个数码管显示2,时间也为0.5s。
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
void delayms(uint xms) // 延迟函数
{
Uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void main()
{
dula=1;
P0=0x06;
dula=0;
P0=0xff; //送位选数据前关闭所有显示,防止造成混乱
wela=1;
P0=0xfe; //第一个数码管亮
wela=0;
delayms(500);
dula=1;
P0=0x5b;
dula=0;
P0=0xff; //送位选数据前关闭所有显示,防止造成混乱
wela=1;
P0=0xfd; //第二个数码管亮
wela=0;
delayms(500);
}