Make the digital tube on the 51 microcontroller display data (common anode)

Developers who have played 51 must be familiar with this board

 Today we discuss how to make the digital tube in the upper right corner of the microcontroller display data?

According to the schematic diagrams of single-chip microcomputers from different manufacturers, find out which pins are controlled by the digital tube position. The digital tube control bits of my board are P10-P13, so I need to define in the code

 And it should be noted that my single-chip microcomputer P00-P07 is a common anode digital tube LCD data parallel bus. Be careful with assignments in your code.

 So far, the digital tube display function has been written, and the main function is customized according to your needs.

Note: To display the decimal point on the digital tube, you can add & 0x7f after the corresponding digit. The corresponding bit of the common cathode digital tube is | 0x80, which can light up the dp bit.

Stopwatch design complete code:

#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--);
}

Guess you like

Origin blog.csdn.net/weixin_62599865/article/details/130397202