⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 display.c

📁 一个ST7系列的车载dvd系统源代码
💻 C
字号:
/*********************************************************
	Project:		ST FST(TDA7540)
	File name:	DISPLAY.C
	Description:	
	Write/Modify:	Perry Liang
	Time:		2006-1-24- 15:32:09
*********************************************************/


#include "public.h"

#define NotShowPos	9
#define NotShowBit	7

const unsigned char ICON_POS[]=
{
	0,3,5,7,1,9,11,15,
	19,19,17,15,15,16,15,10,
	15,19,15,15,15,NotShowPos,NotShowPos,NotShowPos,
	16,16,16,16,16,16,16,NotShowPos,
	17,17,17,17,17,17,17,NotShowPos,
	18,18,18,18,18,18,18,NotShowPos
};
const unsigned char ICON_BIT[]=
{
	7,4,5,6,3,4,5,6,
	6,5,7,1,0,7,5,0,
	7,7,2,3,4,NotShowBit,NotShowBit,NotShowBit,
	0,1,2,3,4,5,6,NotShowBit,
	0,1,2,3,4,5,6,NotShowBit,
	0,1,2,3,4,5,6,NotShowBit,
};

const unsigned char DIGIT_POS[]=
{
	//ABCDEFGHIJKLMN
	//ABCDEFGKHIJM*L
	0,1,1,0,0,0,0,1,0,1,1,0,NotShowPos,1,
	2,3,3,2,2,2,2,3,2,2,3,2,NotShowPos,3,
	4,5,5,4,4,3,4,5,4,4,5,4,NotShowPos,4,
	6,7,7,6,5,5,6,7,6,6,6,6,NotShowPos,6,
	8,9,9,8,7,7,8,8,8,8,8,7,NotShowPos,8,
	10,11,11,10,9,9,10,10,9,10,10,9,NotShowPos,10,
	12,12,13,12,11,11,11,12,11,12,12,11,NotShowPos,12,
	14,14,14,13,13,13,13,14,13,14,14,13,NotShowPos,14,
	1,3,7,12,13,14,5,NotShowPos,NotShowPos,NotShowPos,NotShowPos,NotShowPos,NotShowPos,NotShowPos

};
const unsigned char DIGIT_BIT[]=
{
	//ABCDEFGKHIJM*L
	0,2,1,1,5,6,2,4,3,7,5,4,NotShowBit,6,
	1,3,2,2,6,7,3,5,4,0,6,5,NotShowBit,7,
	2,4,3,3,7,0,4,6,5,1,7,6,NotShowBit,0,
	3,5,4,4,0,1,5,7,6,2,0,7,NotShowBit,1,
	4,6,5,5,1,2,6,0,7,3,1,0,NotShowBit,2,
	5,7,6,6,2,3,7,1,0,4,2,1,NotShowBit,3,
	6,0,7,7,3,4,0,2,1,5,3,2,NotShowBit,4,
	7,1,0,0,4,5,1,3,2,6,4,3,NotShowBit,5,
	0,1,3,1,6,2,2,NotShowBit,NotShowBit,NotShowBit,NotShowBit,NotShowBit,NotShowBit,NotShowBit

};


//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//              -----A -----
//              |F  \I  |J  /K  |B
//              --G--   --H-- 
//              |E /L |M  \N  |C 
//              -----D------ 
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

const unsigned int DIGIT_CODE[]=
{
	SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F,				    		// '0'
	SEG_B|SEG_C,								                    	// '1'
	SEG_A|SEG_B|SEG_D|SEG_E|SEG_G|SEG_H,				    		// '2'
	SEG_A|SEG_B|SEG_C|SEG_D|SEG_G|SEG_H,				    		// '3'
	SEG_B|SEG_C|SEG_F|SEG_G|SEG_H,					        		// '4'
	SEG_A|SEG_C|SEG_D|SEG_F|SEG_G|SEG_H,				    		// '5'
	SEG_A|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G|SEG_H,				// '6'
	SEG_A|SEG_B|SEG_C|SEG_F,						            		// '7'
	SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G|SEG_H,			// '8'
	SEG_A|SEG_B|SEG_C|SEG_D|SEG_F|SEG_G|SEG_H,				// '9'
	/* 10-31 */
	0,0,0,0,0,0,0,0,0,0,
	0,0,0,0,0,0,0,0,0,0,
	0,0,
	//32
	0x0000,								                                	// (Space)
	//SEG_A|SEG_I|SEG_K|SEG_M,					                		// '!'
	SEG_J|SEG_M|SEG_D,					                		// '!'
	SEG_B|SEG_J,								                    		// '"'
	SEG_D|SEG_E|SEG_F|SEG_J|SEG_G|SEG_H|SEG_M,					// '#'
	SEG_D|SEG_E|SEG_F|SEG_J|SEG_G|SEG_M,				    		// 'o'
	SEG_C|SEG_F|SEG_K|SEG_L,						            		// '%'
	SEG_A|SEG_C|SEG_D|SEG_E|SEG_I|SEG_K|SEG_G|SEG_N,  			// '&'
	SEG_K,									                        		// '''
	SEG_K|SEG_N,							                        		// '('
	SEG_I|SEG_L,								                    		// ')'
	SEG_I|SEG_J|SEG_K|SEG_G|SEG_H|SEG_L|SEG_M|SEG_N,			// '*'
	SEG_J|SEG_G|SEG_H|SEG_M,						            		// '+'
	SEG_L,									                        		// ','
	SEG_G|SEG_H,								                    	// '-'
	//SEG_M,									                        		// '.'
	SEG_N,									                        		// '.'
	SEG_K|SEG_L,								                    	// '/'
	SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F,				    		// '0'
	SEG_B|SEG_C,								                    	// '1'
	SEG_A|SEG_B|SEG_D|SEG_E|SEG_G|SEG_H,				    		// '2'
	SEG_A|SEG_B|SEG_C|SEG_D|SEG_G|SEG_H,				    		// '3'
	SEG_B|SEG_C|SEG_F|SEG_G|SEG_H,					        		// '4'
	SEG_A|SEG_C|SEG_D|SEG_F|SEG_G|SEG_H,				    		// '5'
	SEG_A|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G|SEG_H,				// '6'
	SEG_A|SEG_B|SEG_C|SEG_F,						            		// '7'
	SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G|SEG_H,			// '8'
	SEG_A|SEG_B|SEG_C|SEG_D|SEG_F|SEG_G|SEG_H,				// '9'
	SEG_J|SEG_M,								                    	// ':'
	SEG_J|SEG_L,								                    		// '//'
	SEG_K|SEG_N,								                    	// '<'
	SEG_D|SEG_G|SEG_H,							                		// '='
	SEG_I|SEG_L,								                    		// '>'
	SEG_A|SEG_B|SEG_F|SEG_H|SEG_M,					        		// '?'
	SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_G|SEG_M,				// '@'
	SEG_A|SEG_B|SEG_C|SEG_E|SEG_F|SEG_G|SEG_H,		    			// 'A'
	SEG_A|SEG_B|SEG_C|SEG_D|SEG_J|SEG_H|SEG_M,				// 'B'
	SEG_A|SEG_D|SEG_E|SEG_F,						            		// 'C'
	SEG_A|SEG_B|SEG_C|SEG_D|SEG_J|SEG_M,				    		// 'D'
	SEG_A|SEG_D|SEG_E|SEG_F|SEG_G|SEG_H,				    		// 'E'
	SEG_A|SEG_E|SEG_F|SEG_G|SEG_H,					        		// 'F'
	SEG_A|SEG_C|SEG_D|SEG_E|SEG_F|SEG_H,				    		// 'G'
	SEG_B|SEG_C|SEG_E|SEG_F|SEG_G|SEG_H,				    		// 'H'
	SEG_A|SEG_D|SEG_J|SEG_M,						            		// 'I'
	SEG_B|SEG_C|SEG_D|SEG_E,						            		// 'J'
	SEG_E|SEG_F|SEG_K|SEG_G|SEG_N,					        		// 'K'
	SEG_D|SEG_E|SEG_F,							                		// 'L'
	SEG_B|SEG_C|SEG_E|SEG_F|SEG_I|SEG_K,				    		// 'M'
	SEG_B|SEG_C|SEG_E|SEG_F|SEG_I|SEG_N,						// 'N'
	SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F,				    		// 'O'
	SEG_A|SEG_B|SEG_E|SEG_F|SEG_G|SEG_H,				    		// 'P'
	SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F|SEG_N,					// 'Q'
	SEG_A|SEG_B|SEG_E|SEG_F|SEG_G|SEG_H|SEG_N,					// 'R'
	SEG_A|SEG_C|SEG_D|SEG_I|SEG_H,						    		// 'S'
	SEG_A|SEG_J|SEG_M,							                		// 'T'
	SEG_B|SEG_C|SEG_D|SEG_E|SEG_F,					        		// 'U'
	SEG_E|SEG_F|SEG_K|SEG_L,						            		// 'V'
	SEG_B|SEG_C|SEG_E|SEG_F|SEG_L|SEG_N,				    		// 'W'
	SEG_I|SEG_K|SEG_L|SEG_N,						            		// 'X'
	SEG_B|SEG_C|SEG_D|SEG_F|SEG_G|SEG_H,						// 'Y'
	SEG_A|SEG_D|SEG_K|SEG_L,					                		// 'Z'
	0x0000,
	0x0000,
	0x0000,
	0x0000,
	SEG_D,														// '_'	
	SEG_K,														// '''
	SEG_A|SEG_B|SEG_C|SEG_E|SEG_F|SEG_G|SEG_H,		    			// 'A'
	SEG_A|SEG_B|SEG_C|SEG_D|SEG_J|SEG_H|SEG_M,				// 'B'
	SEG_A|SEG_D|SEG_E|SEG_F,						            		// 'C'
	SEG_A|SEG_B|SEG_C|SEG_D|SEG_J|SEG_M,				    		// 'D'
	SEG_A|SEG_D|SEG_E|SEG_F|SEG_G|SEG_H,				    		// 'E'
	SEG_A|SEG_E|SEG_F|SEG_G|SEG_H,					        		// 'F'
	SEG_A|SEG_C|SEG_D|SEG_E|SEG_F|SEG_H,				    		// 'G'
	SEG_B|SEG_C|SEG_E|SEG_F|SEG_G|SEG_H,				    		// 'H'
	SEG_A|SEG_D|SEG_J|SEG_M,						            		// 'I'
	SEG_B|SEG_C|SEG_D|SEG_E,						            		// 'J'
	SEG_E|SEG_F|SEG_K|SEG_G|SEG_N,					        		// 'K'
	SEG_D|SEG_E|SEG_F,							                		// 'L'
	SEG_B|SEG_C|SEG_E|SEG_F|SEG_I|SEG_K,				    		// 'M'
	SEG_B|SEG_C|SEG_E|SEG_F|SEG_I|SEG_N,						// 'N'
	SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F,				    		// 'O'
	SEG_A|SEG_B|SEG_E|SEG_F|SEG_G|SEG_H,				    		// 'P'
	SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F|SEG_N,					// 'Q'
	SEG_A|SEG_B|SEG_E|SEG_F|SEG_G|SEG_H|SEG_N,					// 'R'
	SEG_A|SEG_C|SEG_D|SEG_I|SEG_H,						    		// 'S'
	SEG_A|SEG_J|SEG_M,							                		// 'T'
	SEG_B|SEG_C|SEG_D|SEG_E|SEG_F,					        		// 'U'
	SEG_E|SEG_F|SEG_K|SEG_L,						            		// 'V'
	SEG_B|SEG_C|SEG_E|SEG_F|SEG_L|SEG_N,				    		// 'W'
	SEG_I|SEG_K|SEG_L|SEG_N,						            		// 'X'
	SEG_B|SEG_C|SEG_D|SEG_F|SEG_G|SEG_H,						// 'Y'
	SEG_A|SEG_D|SEG_K|SEG_L,					                		// 'Z'
};
/*********************************************
	Function:		DisplayInit
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:42:44
*********************************************/
void DisplayInit(void)
{
	unsigned char i;
	
	PD_LCDCE=1;//PC3--push-pull output
	PO_LCDCE=1;
	Pin_LCDCE=1;
	
	PD_LCDCLK=1;//PC3--push-pull output
	PO_LCDCLK=1;
	Pin_LCDCLK=1;
	
	PD_LCDDO=1;//PC5--push-pull output
	PO_LCDDO=1;
	Pin_LCDDO=1;
	
	PD_LCDINH=1;//PA4--push-pull output
	PO_LCDINH=1;
	Pin_LCDINH=1;
	
	for (i=0;i<20;i++)
	{
		DispBuff[i]=0;
	}
	DisplayClear(CLEARALL);

	/*DispNum[0]='T';
	DispNum[1]='E';
	DispNum[2]='S';
	DispNum[3]='T';
	DispNum[4]=1;
	DispNum[5]='2';
	DispNum[6]='O';
	DispNum[7]='K';
	DispNum[8]=1;
	F_DISP_MUTE=1;
	DisplayRefresh();*/
}


/*********************************************
	Function:		DisplayMain
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:42:42
*********************************************/
void DisplayMain(void)
{
	unsigned char i;
	
	for(i=0;i<6;i++)
	{
		if(UIcon[i].byte!=BcIcon[i])
		{
			F_DispRefresh=1;
			BcIcon[i]=UIcon[i].byte;
		}
	}
	
	if(F_DispRefresh)
	{
		F_DispRefresh=0;
		DisplayNumber();
		DisplayIcon();
		DisplaySentData();
	}
	if(System.DispMode.Current==DISPMODE_CD||System.AccMode==ACCMODE_ACCONINIT||System.AccMode==ACCMODE_ACCOFFINIT)
		Animation(ANIMATION_RUN);

}

/*********************************************
	Function:		DisplayRefresh
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:42:41
*********************************************/
void DisplayRefresh(void)
{
	F_DispRefresh=1;
}

/*********************************************
	Function:		DisplayClear
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:42:40
*********************************************/
void DisplayClear(unsigned char mode)
{
	unsigned char i;
	switch(mode)
	{
		case CLEARICON:
			for (i=0;i<6;i++)
			{
				UIcon[i].byte=0;
				BcIcon[i]=0;
			}
			break;
		case CLEARNUM:
			for (i=0;i<9;i++)
			{
				DispNum[i]=' ';
			}
			break;
		case CLEARNUM8:
			for (i=0;i<8;i++)
			{
				DispNum[i]=' ';
			}
			break;
		case CLEARNUM9:
			for (i=8;i<9;i++)
			{
				DispNum[i]=' ';
			}
			break;
		case CLEARALL:
			for (i=0;i<6;i++)
			{
				UIcon[i].byte=0;
				BcIcon[i]=0;
			}
			for (i=0;i<9;i++)
			{
				DispNum[i]=' ';
			}
			break;
	}
	DisplayRefresh();
}

/*********************************************
	Function:		DisplayIcon
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:42:38
*********************************************/
void DisplayIcon(void)
{
	unsigned char i,j,test;
	for(i=0;i<6;i++)
	{
		for(j=0,test=1;j<8;j++,test<<=1)
		{
			if(UIcon[i].byte & test)
				DispBuff[ICON_POS[i*8+j]] |= (0x01<<(ICON_BIT[i*8+j]));
			else
				DispBuff[ICON_POS[i*8+j]] &= (~(0x01<<(ICON_BIT[i*8+j])));
		}
	}
	
}

/*********************************************
	Function:		DisplayNumber
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:42:36
*********************************************/
void DisplayNumber(void)
{
	unsigned char i,j;
	unsigned int dispmask,test;
	for(i=0;i<9;i++)
	{
		dispmask=DIGIT_CODE[DispNum[i]];
		for(j=0,test=1;j<14;j++,test<<=1)
		{
			if(dispmask & test)
				DispBuff[DIGIT_POS[i*14+j]] |= (0x01<<(DIGIT_BIT[i*14+j]));
			else
				DispBuff[DIGIT_POS[i*14+j]] &= (~(0x01<<(DIGIT_BIT[i*14+j])));
		}
	}
}



/*********************************************
	Function:		DisplaySentData
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:42:34
*********************************************/
void DisplaySentData(void)
{
	unsigned char i;
	Pin_LCDCE=0;
	Pin_LCDCLK=0;
	DisplaySentByte(0x82);
	M_WAIT;
	Pin_LCDCE=1;
	for (i=0;i<20;i++)
	{
		DisplaySentByte(DispBuff[i]);
	}
	Pin_LCDCE=0;
}

/*********************************************
	Function:		DisplaySentByte
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:42:33
*********************************************/
void DisplaySentByte(unsigned char bytedata)
{
	unsigned char i,test;
	for(i=0,test=0x80;i<8;i++,test>>=1)
	{
		Pin_LCDCLK=0;
		if(bytedata&test)
			Pin_LCDDO=1;
		else
			Pin_LCDDO=0;
		M_WAIT;
		Pin_LCDCLK=1;
	}
	Pin_LCDCLK=0;
}



/*********************************************
	Function:		DisplayTimer100ms
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:42:32
*********************************************/
void DisplayTimer100ms(void)
{
       if(AniTimer>0)AniTimer--;
}


unsigned char ReturnDispNum(unsigned int inputnum,unsigned int pos)
{
	return((inputnum/pos)%10+'0');
}

void PrintAnimation(unsigned char *p)
{
	unsigned char i;
	for(i=0;;i++,p++)
	{
		AniBuff[i]=*p;
		if(*p==0)break;
	}
}

void Animation(unsigned char mode,unsigned char *p,unsigned char bgtime)
{
	unsigned char i,temp;
	switch(mode)
	{
		case 0://run
			if(!F_DispAnimation)
				break;
			if(AniTimer>0)
				break;
			//AniTimer=3;
			AniTimer=6;
				
			for(i=0,temp=0;i<8;i++)
			{
				if(*PAni)
				{
					DispNum[i]=*PAni;
				}
				else
				{
					DispNum[i]=' ';
					temp=1;
				}
				PAni++;
			}
			if(temp)
			{
				PAni=PAni-AniPos-8;
				AniPos=0;
				AniTimer=AniBeginTime;
				AniCounter++;
			}
			else
			{
				if(AniPos==0)
					AniTimer=AniBeginTime;
				PAni-=7;
				AniPos++;
			}
			F_DispRefresh=1;
			break;
		case 1://start
			PAni=p;
			AniPos=0;
			AniBeginTime=bgtime;
			AniCounter=0;
			F_DispAnimation=1;
			break;
		case 2://stop
			F_DispAnimation=0;
			break;
	}
	
}

void BackupIconBuffer(void)
{
	//F_DISP_BC_MP3 =F_DISP_MP3;
	//F_DISP_BC_FOLDER=F_DISP_BC_FOLDER;		
	//F_DISP_BC_TAPE=F_DISP_BC_TAPE;		
	//F_DISP_BC_ST=F_DISP_ST;	
	F_DISP_BC_LOC=F_DISP_LOC;		
	F_DISP_BC_DSP=F_DISP_DSP;			
	F_DISP_BC_CLASSIC=F_DISP_CLASSIC;		
	F_DISP_BC_POP=F_DISP_POP;			
	F_DISP_BC_ROCK=F_DISP_ROCK;		
	F_DISP_BC_LOUD=F_DISP_LOUD;
	F_DISP_BC_AF=F_DISP_AF;			
	F_DISP_BC_TA=F_DISP_TA;			
	F_DISP_BC_TP=F_DISP_TP;			
	F_DISP_BC_PTY=F_DISP_PTY;			
	F_DISP_BC_EON=	F_DISP_EON;		
	F_DISP_BC_REG=	F_DISP_REG;
	F_DISP_BC_P=F_DISP_P;	
	F_DISP_BC_MP3=F_DISP_MP3;
	F_DISP_BC_TAPE=F_DISP_TAPE;
	F_DISP_BC_CD=F_DISP_CD	;			
	F_DISP_BC_CD1=F_DISP_CD1;			
	F_DISP_BC_CD2=F_DISP_CD2;				
	F_DISP_BC_CD3=F_DISP_CD3;				
	
	VOLBcIcon1.byte=UIcon[3].byte;
	VOLBcIcon2.byte=UIcon[5].byte;
	SpectrumBcIcon.byte=UIcon[4].byte;	
	DisplayClear(CLEARICON);

}

void ResetIconBuffer(void)
{

	F_DISP_LOC=F_DISP_BC_LOC;		
	F_DISP_DSP=F_DISP_BC_DSP;			
	F_DISP_CLASSIC=F_DISP_BC_CLASSIC;		
	F_DISP_POP=F_DISP_BC_POP;			
	F_DISP_ROCK=F_DISP_BC_ROCK;		
	F_DISP_LOUD=F_DISP_BC_LOUD;
	F_DISP_AF=F_DISP_BC_AF;			
	F_DISP_TA=F_DISP_BC_TA;			
	F_DISP_TP=F_DISP_BC_TP;			
	F_DISP_PTY=F_DISP_BC_PTY;			
	F_DISP_EON=	F_DISP_BC_EON;		
	F_DISP_REG=	F_DISP_BC_REG;
	F_DISP_P=F_DISP_BC_P;	
	F_DISP_MP3=F_DISP_BC_MP3;
	F_DISP_TAPE=F_DISP_BC_TAPE;
	F_DISP_CD=F_DISP_BC_CD	;			
	F_DISP_CD1=F_DISP_BC_CD1;			
	F_DISP_CD2=F_DISP_BC_CD2;				
	F_DISP_CD3=F_DISP_BC_CD3;				
	
	UIcon[3].byte=VOLBcIcon1.byte;
	UIcon[5].byte=VOLBcIcon2.byte;
	UIcon[4].byte=SpectrumBcIcon.byte;	

	DisplayRefresh();

}
/*********************************************************
				File End
*********************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -