51单片机驱动数码管的原理与方法

一.数码管分类

数码管分为动态数码管和静态数码管,如下图,可知,动态数码管的电路引脚连在一起,而静态数码管的电路引脚则分开连接,电路互相不影响,一个就占用了8个IO口,因此静态数码管集齐8个需要64个IO口,占用资源大,而动态数码管的引脚都连接在一起,所以无论多少个数码管都是8个IO口。

 二.数码管原理图和介绍

1.原理图:

2.原理图如何实现显示数字?

 COM为公共端,COM分为共阴极和共阳极,这里是普中51单片机上面的数码管是共阴极的,因此想让它显示出数字,COM端给低电平,abcdefg和dp给高电平,如果想让LED8这个数码管显示1,则公共端给0,adefg和dp给低电平,bc给高电平,则亮起1,问题来了,如何让com端显示低电平呢?这就关系到了一个译码器,数码管的公共端连接了一个译码器,如果想让第四个数码管(LED5)显示1,则LED5在译码器中对应Y4,Y4的左边有P22,P23,P24,则P24给1,P23给0,P22给0,二级制化十进制,421法,因此等于4,正好对应Y4的4,然后adefg和dp给低电平,bc给高电平,则亮起1,P07~P00分别给0000 0110,然后二级制化十六进制(8421法)就是0x06。

3.如何判断共阳极还是共阴极?

方法:将数码管插入面包板,用一根导线的一端接正极或者GND(假设接了正极),另一端接5V,然后用另一根导线的一端接数码管的任一脚,另一端接地。如果对应的引脚被点亮,则为共阳极,否则可能为共阴极。

若没有点亮则将数码管插入面包板,用一根导线的一端接正极或者GND(假设接了GND),另一端接5V,然后用另一根导线的一端接数码管的任一脚,另一端接地。如果对应的引脚被点亮,则为共阳极,否则可能为共阴极。

三.数码管实现代码

 

动态数码管是先从第一个数码管开始显示,到第二个数码管显示,依次往后显示 ,由于速度太快人的肉眼无法查看,则就像同时显示一样,此时会留下残影,数码管的过程是先位选在段选,只需要在段选后清0,就好像来到第二个数码管的时候,把第一个清0,什么也不显示,到第二个数码管时则会正常显示。

#include <REGX52.H>

//0-9
unsigned char Nixietable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

void Nixie(unsigned char Location,number)
{
		switch(Location)
		{
			case 1:P2_4=1;P2_3=1;P2_2=1;break;//Y7
			case 2:P2_4=1;P2_3=1;P2_2=0;break;//Y6
			case 3:P2_4=1;P2_3=0;P2_2=1;break;//Y5
			case 4:P2_4=1;P2_3=0;P2_2=0;break;//Y4
			case 5:P2_4=0;P2_3=1;P2_2=1;break;//Y3
			case 6:P2_4=0;P2_3=1;P2_2=0;break;//Y2
			case 7:P2_4=0;P2_3=0;P2_2=1;break;//Y1
			case 8:P2_4=0;P2_3=0;P2_2=0;break;//Y0
		}
		P0=Nixietable[number];
}

void main()
{
	Nixie(6,5);
	while(1)
	{
		
	}

}

物联沃分享整理
物联沃-IOTWORD物联网 » 51单片机驱动数码管的原理与方法

发表回复