数码管介绍

1. 数码管简介

数码管:也称为LED数码管,基本单元是发光二极管(LED)。分为七段数码管和八段数码管(多一个小数点DP)。
- 共阳数码管:所有LED的阳极连接到一起形成一个公共阳极接VCC,单片机需要控制某段LED的阴极为低电平时,相应led就会点亮
- 共阴数码管:所有LED的阴极连接到一起形成一个公共阴极接GND,单片机需要控制某段LED的阳极为高电平,相应LED会点亮。:单片机上IO口的电压不足以驱动数码管的led,因此共阴数码管的阳极一般并不直接连到单片机的IO上,而是中间再接一个电源。
数码管介绍_第1张图片

动态数码管:两个或两个以上单个数码管并列在一起形成的多位数码管,内部分为公共端和段码端。多位数码管上的所有数码管在同一时刻现实的数字是一样的,因为它们共用段选线,而在极短的时间内通过“位选”不同的数码管显示不同的数字,从视觉上实现了多个数码管在同一时间的动态显示不同数字。

  • 公共端:各个数码管相互独立,负责控制多位数码管中具体哪个数码管工作
  • 段码端:各个数码管共用用七段/八段的段选线

2. 原理图分析

静态数码管:静态化数码管是共阳数码管,可以直接通过单片机输出低电平来控制对应的数码管led是否亮
数码管介绍_第2张图片

动态数码管:动态化数码管是共阴数码管,通过单片机控制段线实现控制数码管的显示具体数字,通过单片机控制位线实现控制具体哪个数码管显示
数码管介绍_第3张图片

74138译码器:默认状态输出的8个IO口(Yn)都是高电平,通过3个输入IO口(A、B 、C)组成的8种状态,实现对8个输出IO口(Yn)具体哪个IO口输出低电平
数码管介绍_第4张图片

3. 代码编写

共阳数码管码表
数码管介绍_第5张图片
静态数码表

uunsigned char val[16] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e};
void delay()
{
	int i = 100, j = 100;
	while(i--)
	{
		while(j--)
		{}
	}
}

void main(void)
{
	while (1)
	{
		for(int i=0; i<15; i++)
		{
			P0 = val[i];
			delay();
		}
	}
}

共阴数码管码表
数码管介绍_第6张图片
动态数码表

unsigned char led_select[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char bit_select[8] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};
void delay()
{
	int i = 2, j = 100;
	while(i--)
	{
		while(j--)
		{}
	}
}
void main(void)
{
	while (1)
	{
		for(int i=0; i<8; i++)
		{
			P2 = bit_select[i];	//位选
			P0 = val[i];		//段选
			delay();
			P0 = 0x0;			//清空两个段选数字之间的影响
		}
	}
}

38译码器真值表
数码管介绍_第7张图片

unsigned char led_select[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay()
{
	int i = 2, j = 100;
	while(i--)
	{
		while(j--)
		{}
	}
}
void main(void)
{
	while (1)
	{
		for(int i=0; i<8; i++)
		{
			P2 = i;				//通过译码器位选
			P0 = val[i];		//段选
			delay();
			P0 = 0x0;			//清空两个段选数字之间的影响
		}
	}
}

你可能感兴趣的:(嵌入式硬件)