令51单片机上的数码管显示数据(共阳极)

玩过51的开发者们一定对这种板子很熟悉

 今天我们探讨如何让单片机右上角这个数码管显示数据呢?

根据各自不同厂商的单片机原理图,去寻找哪几个引脚是数码管位控制,我这个板子的数码管控制位是P10-P13,所以我在代码中要定义

 且要注意,我的单片机P00-P07是共阳数码管LCD数据并行总线。在代码中要注意赋值。

 至此,数码管显示函数就写好了,主函数中根据自己的需求进行定制设计。

注:数码管要显示小数点可以在对应位后加& 0x7f。共阴极数码管 对应位 | 0x80,可将dp位点亮。

秒表设计完整代码:

#include "reg52.h"
#include "intrins.h"
unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

sbit SMG_q = P1^0;	//¶¨ÒåÊýÂë¹ÜÑô¼¶¿ØÖƽţ¨Ç§Î»£©
sbit SMG_b = P1^1;	//¶¨ÒåÊýÂë¹ÜÑô¼¶¿ØÖƽţ¨°Ù룩
sbit SMG_s = P1^2;	//¶¨ÒåÊýÂë¹ÜÑô¼¶¿ØÖƽţ¨Ê®Î»£©
sbit SMG_g = P1^3;	//¶¨ÒåÊýÂë¹ÜÑô¼¶¿ØÖƽţ¨¸ö룩
sbit start=P3^7;
sbit stop=P3^6;
sbit over=P3^5;
sbit ming=P1^5;
unsigned char ldata=0000;	//±äÁ¿ÓÃ×÷0~99¼ÆÊý
void display(unsigned char da);//¶¨ÒåÏÔʾº¯Êý£¬²ÎÊýΪÏÔʾÄÚÈÝ£¬Ö»ÏÔʾÁ½Î»Êý
void delay(void); 
void Delay100ms()		//@12.000MHz
{
	unsigned char i, j;

	i = 195;
	j = 138;
	do
	{
		while (--j);
	} while (--i);
}
void Delay1000ms()		//@12.000MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 8;
	j = 154;
	k = 122;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

//Ö÷º¯Êý£¬CÓïÑÔµÄÈë¿Úº¯Êý:			
void main(void)  
{
	unsigned char i=0;		//×÷Ϊ²é±íµÄË÷ÒýºÅ
	//unsigned char ldata=0000;	//±äÁ¿ÓÃ×÷0~99¼ÆÊý
	unsigned int j;			//´Ë±äÁ¿×÷Ϊ¼ÆÊýÌø±äË¢ÐÂʱ¼ä
	while(1)
	{	
		j=200;			
		while(j--){		
			display(ldata);	
		}		
		if(ldata<600)
			ldata++;		//Ë¢ÐÂÍê³ÉÔ¼1Ã룬±äÁ¿×ö¼Ó¼ÆÊý
		else
			ldata=0;
		if (over==0){
			ming=0;
			ldata=0000;
			Delay100ms();
			ming=1;
			display(ldata);
			while(start==1)
		{
			display(ldata);
		}
		if(start==0){
				ming=0;
			Delay100ms();
			ming=1;
}
	}
	if(stop==0){
		ming=0;
		Delay100ms();
		ming=1;
		while(start==1){
			display(ldata);
	}
}
		if(start==0){
				ming=0;
		Delay100ms();
		ming=1;
}
}
}
}
//ÏÔʾº¯Êý£¬²ÎÊýΪÏÔʾÄÚÈÝ£¬Ö»ÏÔʾÁ½Î»Êý
void display(unsigned char da)
{
	SMG_g=0;			//Ñ¡Ôñ¸öλÊýÂë¹Ü
	P0=table[da%10];	//»ñÈ¡¸öλֵ£¬²é±íÊä³ö¶¨ÒåºÃµÄÊýÂë¹Ü¶ÎÖµÓëP0¿Ú£¬ÏÔʾÏàÓ¦µÄ0-9
	delay();			//ÑÓʱ
	P0=0XFF;			//Çå³ýÊýÂë¹ÜÏÔʾ£¬ÒòÊǹ²ÑôÐÍ£¬ËùÒÔ²»ÊÇ0
	SMG_g=1;			//¹Ø±Õ¸öλÊýÂë¹Ü
	
	SMG_s=0;			//Ñ¡ÔñʮλÊýÂë¹Ü
	P0=table[da/10%10]& 0x7f;	//»ñȡʮλֵ£¬²é±íÊä³ö¶¨ÒåºÃµÄÊýÂë¹Ü¶ÎÖµÓëP0¿Ú£¬ÏÔʾÏàÓ¦µÄ0-9
	delay();			//ÑÓʱ
	P0=0XFF;			//Çå³ýÊýÂë¹ÜÏÔʾ£¬ÒòÊǹ²ÑôÐÍ£¬ËùÒÔ²»ÊÇ0
	SMG_s=1;			//¹Ø±ÕʮλÊýÂë¹Ü
	
	SMG_b=0;			//Ñ¡Ôñ°ÙλÊýÂë¹Ü
	P0=table[da/100%10];	//»ñÈ¡°Ùλֵ£¬²é±íÊä³ö¶¨ÒåºÃµÄÊýÂë¹Ü¶ÎÖµÓëP0¿Ú£¬ÏÔʾÏàÓ¦µÄ0-9
	delay();			//ÑÓʱ
	P0=0XFF;			//Çå³ýÊýÂë¹ÜÏÔʾ£¬ÒòÊǹ²ÑôÐÍ£¬ËùÒÔ²»ÊÇ0
	SMG_b=1;			//¹Ø±Õ°ÙλÊýÂë¹Ü
	
	SMG_q=0;			//Ñ¡ÔñǧλÊýÂë¹Ü
	P0=table[da/1000];	//»ñȡǧλֵ£¬²é±íÊä³ö¶¨ÒåºÃµÄÊýÂë¹Ü¶ÎÖµÓëP0¿Ú£¬ÏÔʾÏàÓ¦µÄ0-9
	delay();			//ÑÓʱ
	P0=0XFF;			//Çå³ýÊýÂë¹ÜÏÔʾ£¬ÒòÊǹ²ÑôÐÍ£¬ËùÒÔ²»ÊÇ0
	SMG_q=1;			//¹Ø±ÕǧλÊýÂë¹Ü

}

//ÑÓʱ×Óº¯Êý,¶ÌÔÝÑÓʱ
void delay(void){		
	unsigned char i=10;
	while(i--);
}

猜你喜欢

转载自blog.csdn.net/weixin_62599865/article/details/130397202