51单片机(五).单片机输出电路的实践——数码管显示电路的设计

 

 

一.数码管显示电路51单片机(五).单片机输出电路的实践——数码管显示电路的设计_第1张图片设计
    
数码管分为共阴和共阳两种,一种是将LED内部所有的阳极连   到一起,并通过com端引出。共阴则反之。

51单片机(五).单片机输出电路的实践——数码管显示电路的设计_第2张图片

当锁存使能端为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。

 

 

51单片机(五).单片机输出电路的实践——数码管显示电路的设计_第3张图片

      数码管显示有静态显示和动态显示两种,静态显示即为对数码   管的每一段进行编码控制达到显示指定数字的目的。动态显示即   通过锁存的方法利用人的视觉暂留,通过有限的单片机IO口显示   更多的数码管。

如图,利用两个锁存器分别控制数码管的段选和位选,即利用了有限的IO口资源实现了控制多个数码管动态扫描显示的功能。

注:74HC573的D0-D7口分别接在单片机的IO口上。

 

 

二.单片机数码管显示代码

    1.单个数码管的显示

#include 
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uint j;
void delay(uint i)
{
	uint x,y;
	for(x=i;x>0;x--)
		for(y=110;y>0;y--);
}
main(void)
{
	P0=0x00;
	while(1)
	{
		for(j=0;j<8;j++)
		{
			P0=table[j];
			delay(500);
		}
	}
}

    2.多个数码管动态显示

#include 
#define uchar unsigned char
#define uint unsigned int
sbit DX=P2^6;//控制段选
sbit WX=P2^7;//控制位选
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};	//段选数据,显示数字0-9
uchar code table1[]={0xfe,0xfc,0xfb,0xf7,0xef,0xcf}; //位选数组对1到6六个数码管
uchar i,j;
void delay(uint i)
{
	uint x,y;
	for(x=i;x>0;x--)
		for(y=110;y>0;y--);
}
main(void)
{
	
	while(1)
	{
	   for(i=0;i<6;i++)
	   {
			DX=1;
			P0=table[i];
			DX=0;
	   		WX=1;
			P0=table1[i];
			WX=0;
			delay(1);
	   }
	}
}


3.代码的封装

void smDisplay(uchar a,uchar b)//a,b分别为段选和位选信号
{
    DX=1;
    P0=a;
    DX=0;
    WX=1;
    P0=b;
    WX=0;
}

三.  总结

      对于静态数码管显示电路的设计需要使用到STC89C52单片机的IO口输出功能,通过对数码管单个LED的点亮以达到我们要显示的数字或字母信息。
      而对于动态的数码管显示电路的设计则需要用到74HC573锁存器,在代码上也要做到一定的处理。

 

    

 

 

 

 

你可能感兴趣的:(单片机学习与开发)