51单片机数码管显示+proteus仿真

七段数码管是一种常用的数字显示元件,可以用来显示数字0~F及相关符号,它具有功耗低、亮度高、寿命长、尺寸小等许多优点,在家电及工业控制中应用广泛。
外形
由7个条状的发光二极管排列而成,可实现数字“0~F”及少量字符的显示。为了显示小数点,增加了1个点状发光二极管,因此数码管实际由8个LED组成,分别命名为“a、b、c、d、e、f、g、dp”
51单片机数码管显示+proteus仿真_第1张图片显示原理
数码管分为共阴和共阳两种,共阳型阳极为公共端,多位数码段动态显示时作为位选,阴极为段选(位选即为哪一位显示,段选即为这一位显示什么(字形)),共阴相反。
比如:显示“0”:共阳极数码管的段选编码应为:11000000B(即C0H);
。。。。。。。共阴极数码管的段选编码应为:00111111B(即3FH)51单片机数码管显示+proteus仿真_第2张图片
1.静态显示方式 公共端接相应高低点电平(共阳\共阴),段选断接单片机I/O口,输出需要显示段码,比较简单。
2.动态显示是将所有数码管的8个段选码“a、b、c、d、e、f、g、dp”的同名端连在一起,另外为每个数码管的公共端增加位选通控制电路,位选通由各自独立的I/O线控制。
例子:六位共阳数码管,动态显示一行数据,自左向右依次显示65432151单片机数码管显示+proteus仿真_第3张图片/**************************************************************************************

*	                         数码管动态显示							  *
*	现象:自左向右依次显示654321																		  
***************************************************************************************/

#include "reg52.h"			 

unsigned char code duan[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

unsigned char code wei[]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//共阴数码管段选表


/*******************************************************************************
* 函数名         : delay
*函数作用      : 延时一段时间
*******************************************************************************/
void delay(unsigned int i)
{
	while(i--);	
}

/*******************************************************************************
* 函数名       : DigDisplay
* 函数作用	   :数码管显示
*******************************************************************************/
void DigDisplay()
{
	char i;
	for(i=6;i>0;i--)
	{
		P2=~wei[i];  //仿真图用的共阳数码管,把共阴段选表取反
		P0=duan[i];
		delay(100);
		
		
	}
}

/*******************************************************************************
* 函数名       : main
* 主函数
*******************************************************************************/
void main()
{	
	while(1)
	{	
		DigDisplay();  //调用数码管显示函数
	}		
}

你可能感兴趣的:(51单片机数码管显示+proteus仿真)