Bootstrap

【C51】单片机与LED数码管的动态显示接口案例分析

    当显示位数较多时,静态显示所需的I/O口太多,这时常采用动态显示方式。动态显示方式是将所以LED数码管的段码端的相应段并接在一起,由一个8位I/O口控制,而各位显示位的公共端分别由I/O线控制,称为位选端。 

需求:运用51单片机实现8位8段数码管的动态数字显示,LE数码管的段选信号由51单片机的P0口控制,LED数码管的位选信号由51单片机P2口的低3位控制,8位LED数码管显示0-7这8个十进制数。

效果:

动态数码管

代码:

#include<reg52.h>
#define uchar unsigned char
uchar code  seg[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//定义了一个名为seg的数组,存储了共阴极数码管显示 0 - 9 数字所需的段码
uchar dis[8]={0,1,2,3,4,5,6,7}; //定义了一个名为dis的数组,可能用于选择数码管的位。这里初始化为 0 - 7

//.延时函数
void delayms(uchar ms)    		
{
  	uchar i;
  	while(ms--)
  	for(i=0;i<123;i++);
}

//主函数
void main(void)
{   
	unsigned char i;
   	while(1)
   	{  for (i=0;i<8;i++)
			{
     	 P0=seg[i];//将seg[i]赋值给P0口。这里P0口可能连接数码管的段选引脚,用于控制数码管显示的数字
			 P2=dis[i];//将dis[i]赋值给P2口。这里P2口可能连接数码管的位选引脚,用于选择要显示的数码管。
				delayms(3);
   	}
	}
}

;