STC 51单片机 多位数码管动态显示方法

51单片机多位数码管动态显示方法

  • 1.数码管显示原理
  • 2.多位数码管动态显示
  • 3.示例程序
  • 3.结语

1.数码管显示原理

相比学习单片机的同学一定对显示器,屏幕如OLED,LCD并不陌生,而在这些显示器之前呢,最常见的就是数码管了,其实它就是由多个LED灯组合而成,没有什么神秘,如图所见a,b,c,d,e,f,g,dp和公共端COM,排列成8字。例如当我们需要显示数字 “1” 时,只点亮b和c即可,其他数字或符号同理。
一般分为共阳极和共阴极,如下图。
STC 51单片机 多位数码管动态显示方法_第1张图片

2.多位数码管动态显示

由于在实际使用中,我们发现想要显示的数字可能不止一个,且一位数码管显示就需要占用单片机端口I/O资源8个(不显示小数点 7个)要同时显示多位数字就要占用非常多的I/O资源,所以就有人想出了一种办法,那就是动态显示。也就是利用余辉效应 以很快的速度挨个显示每一位数字来欺骗人眼,看上去就像静态一样。前面我们知道了一位数码管的基本显示原理,那么多位也就不难了。下图为6位八段数码管,其6个公共端 在这里被称为位选端,其他八位(图中只用到7位,没小数点)共用一组I/O端口。当共用端有数据时,那一个位选接通则那个数码管显示对应数字。

STC 51单片机 多位数码管动态显示方法_第2张图片

3.示例程序

知道原理,那么代码是非常简单的了,这里举个小例子,。
这里采用模块化编程思想,将其和主函数分开写,以提高代码可读性,主程和延时不再赘述,文末会提供资料,限于积分不能下载的 可向我要。直接在主程序中调用函数即可,

#include "delay.h"

void delay_ms(uint i)
{
     uint j;
	 while(i--)
		for(j=120;j>0;j--);
}
/*  这里给出两中 参考码,方便取用
	unsigned char  shu1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};	//没有dp小数点
		//数字0-9的共阴极码表		0	-	9		-(下标10)
    unsigned char shu0[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
		//数字0-9的共阳极码表		0	-	9		-(下标10)
*/
uchar Code[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; 	
//显示段码 数码管字型  共阳极0-9
uchar wei[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};  
//6个 位选端 

/************************************************
 * 函数名: void Led_Code(Lint date)  
 * 功  能: 数码管显示函数 
 * 参  数: 无符号长整型,要显示的数字
 * 返回值: 无
 ***********************************************/
void Led_Code(Lint date) //显示函数
{	
	uint a,b,c,d,e,f;
	
  	a=date/1000/100;			//十万位
  	b=date%100000/10000;		//求万位
  	c=date%10000/1000;			//求千位
  	d=date%1000/100;			//求百位
	e=date%100/10;			  	//求十位
	f=date%10;			  		//求个位
	
	//计算好后,逐个显示 依次循环,如果对性能有要求可在初始化时计算,此处不再重复计算
      P2=0XFF;	//清除上次显示
	  P1=Code[a]; //十万位
	  P2=wei[0];
	  delay_ms(5);
	
	  P2=0XFF;  
      P1=Code[b];//万 位
	  P2=wei[1];
	  delay_ms(5);
	
	  P2=0XFF;  
   	  P1=Code[c];//千
	  P2=wei[2];
	  delay_ms(5);
		
	  P2=0XFF;  
      P1=Code[d];//百
	  P2=wei[3];
	  delay_ms(5); 
		
		P2=0XFF;  
      P1=Code[e];//十
	  P2=wei[4];
	  delay_ms(5); 
		
		P2=0XFF;  
      P1=Code[f];//个
	  P2=wei[5];
	  delay_ms(5); 
}

3.结语

STC51 数码管动态显示 包含proteus仿真源文件。源码文件仅供学习,如有错误还望指正。

你可能感兴趣的:(STC,51/52单片机,51单片机,单片机,嵌入式硬件)