51单片机之数码管静态显示,锁存器的使用
2019-09-26 本文已影响0人
David_Rao
八段数码管显示原理
八段数码管由8颗LED组成,根据LED的接法,数码管可分为共阴极和共阳极
共阴极是指每一颗LED的阴极都接在低电平0V上
共阳极是指每一颗LED的阳极都接在高电平5V上
对于共阴极数码管,单片机“控制”LED的阳极。想要谋颗LED亮,单片机就应该给对应LED的支路送高电平。
对于共阳极数码管,单片机“控制”LED的阴极。想要谋颗LED亮,单片机就应该给对应LED的支路送低电平。
锁存器的使用
为什么要用锁存器?你想,一个数码管就对应8个IO口。但是如果要用好多个数码管呢?单片机的引脚根本不够用。
先放上原理图(相同的标号代表是连在一起的,即电位相同。如红色圈中的D0电位都是相同的)
P27高电位,锁存器的“锁”打开,新数据传进去
P27低电位,锁存器的“锁”锁住,新数据传不进去,依然输出旧的数据
下面的芯片使用方法相同
位选,段选
比如要第三个数码管的a段亮起来
位选WE3=0,段选A=1,就能形成如图回路
如果位选WE3=1,WE4=0,段选A=1,就能形成如图回路
#include <reg52.h>
sbit DU = P2^6; //数码管段选
sbit WE = P2^7; //数码管位选
void delay(unsigned int z)
{
unsigned int x, y;
for(x = z; x > 0; x--)
for(y = 114; y >0; y--);
}
//第一个数码管显示1
void main()
{
P0 = 0xff; //1111 1111不选择任何一个数码管
WE = 1; //打开位选
P0 = 0XFE; //1111 1110 即WE1 = 0
WE = 0; //锁住位选数据,即保持1111 1110
//这样之后单片机P0数据的改变不会影响位选数据
DU = 1; //打开段选
P0 = 0x06; //这里虽然改变了P0,但不影响位选,因为位选关闭了。
DU = 0; //锁住段选数据
delay(5); //别切换太快了
}