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

📄 lcd_driver.c

📁 这是我根据PT6554的datasheet时序要求规范,自己编写的LCD驱动源代码.用51单片机做汽车音响的朋友可以参考引用,编译用 Keil 进行
💻 C
字号:
 /*******************首行标志****************************
	filename = LCD_SENT.INC 
; USED LCD =GDE1039, Drive IC=PT6554
; 	 main_prog   segment code;PROGRAMMER: MOCHAOWU
      	;Used IC=SM8958A,sp5767 2007,1,3
	;This Project Include Radio_SM8958A.c &	 usb_mp3.inc
	; RADIO_COMMUNICATE.C & LCD_SENT.INC & Usbradio_int.inc
*****************************************************/

//-------------------------
#define uchar  unsigned char
#define ulong  unsigned long
#define uint  unsigned int
#define BYTE  unsigned char
void write6554Data(unsigned char data SEND_BYTE);
void write6554Data1(unsigned char data SEND_BYTE);
extern	void led( ulong tdwVCO);
extern	unsigned char code fourth_12th_8table[];
void	rd_frequency_fm_address(void);
void READ6554(void);
#ifndef __have9014__
#define __have9014__
#endif


//---------------------------------------------
void sendDataTo6554(void){
unsigned char data	SEND_BYTE;
volatile	bit bittmp;
	bittmp=EA;
	EA = 0; 	

#ifdef __have9014__
	DSP_CLK	= 0; //	;;__/---|WHEN CLK IS TERMINATED AT HIGH LEVEL
	DSP_CE	= 0; //	;;__/---|
	DSP_DI_OUT = 0; //	;;____/---
	DSP_DO_IN  = 1; //
#else
	DSP_CLK	= 1; //	;;__/---|WHEN CLK IS TERMINATED AT HIGH LEVEL
	DSP_CE	= 1; //	;;__/---|
	DSP_DI_OUT = 1; //	;;____/---
	DSP_DO_IN  = 0; //
#endif
//**************************(1)**********************************************
	for(i=0;i<7;i++){
	TRANS_BUF[i] = 0x00;
}
	TRANS_BUF[0] = DSP_BUF[0];
	TRANS_BUF[1] = DSP_BUF[1];

	for(i=1;i<5;i++)
	{
	SEND_BYTE = DSP_BUF[i+1];
	TRANS_BUF[i] |=	((SEND_BYTE<<4) & 0xf0);
	TRANS_BUF[i+1] |=	((SEND_BYTE>>4) & 0x0f);//just s0s1=00 in TRANS_BUF[5]
     }
	TRANS_BUF[5] |= PT6554SLEEP;	//b7b6 is sleep function

//	SEND_BYTE = DSP_BUF[3];
//	TRANS_BUF[2] |=	((SEND_BYTE<<4) & 0xf0);
//	TRANS_BUF[3] |=	((SEND_BYTE>>4) & 0x0f);

//	for(i=0;i<6;i++){
//	TRANS_BUF[i] = DSP_BUF[i];
//}
//	TRANS_BUF[5] &= 0x0f; //s0s1=00
//dir	DR	SC	P1P0	k1k0
//00   0	0	00	01	 = 0X01
	TRANS_BUF[6] = 0x01; //k1k0=01,p0p1=00,sc=0,dr=0,dire=00

	SEND_BYTE = 0x42;
#ifdef __have9014__
       	DSP_CE  = 1; //  send 8 clock= P0^5;//CE: Chip enable
#else
       	DSP_CE  = 0; //  send 8 clock= P0^5;//CE: Chip enable
#endif
	write6554Data(SEND_BYTE);
#ifdef __have9014__
	DSP_CE	= 0; //	;;__/---CASE 2: CLK IS TERMINATED AT “HIGH” LEVEL
	DSP_DO_IN  = 0; //	
#else
	DSP_CE	= 1; //	;;__/---CASE 2: CLK IS TERMINATED AT “HIGH” LEVEL
	DSP_DO_IN  = 1; //	
#endif
//==============================================================
for (jj=0;jj<7;jj++){
	SEND_BYTE = TRANS_BUF[jj];
	write6554Data(SEND_BYTE);
}
#ifdef __have9014__
	DSP_CE	= 1; //	;;__/---CASE 2: CLK IS TERMINATED AT “HIGH” LEVEL
	DSP_DO_IN  = 1; //
#else
	DSP_CE	= 0; //	;;__/---CASE 2: CLK IS TERMINATED AT “HIGH” LEVEL
	DSP_DO_IN  = 0; //
#endif
//*******************************(2)******************************************
	EA=bittmp;

for (i=0;i<5;i++){
	TRANS_BUF[i] = DSP_BUF[i+6];
}
	SEND_BYTE = 0X42;
	bittmp=EA;
	EA = 0; 	
#ifdef __have9014__
       	DSP_CE  = 1; //  send 8 clock= P0^5;//CE: Chip enable
#else
       	DSP_CE  = 0; //  send 8 clock= P0^5;//CE: Chip enable
#endif
	write6554Data(SEND_BYTE);
#ifdef __have9014__
	DSP_CE	= 0; //	;;__/---CASE 2: CLK IS TERMINATED AT “HIGH” LEVEL
	DSP_DO_IN  = 0; //	
#else
	DSP_CE	= 1; //	;;__/---CASE 2: CLK IS TERMINATED AT “HIGH” LEVEL
	DSP_DO_IN  = 1; //	
#endif
//==============================================================
for (jj=0;jj<5;jj++){
	SEND_BYTE = TRANS_BUF[jj];
	write6554Data(SEND_BYTE);
}
	SEND_BYTE = 0x00;
	write6554Data(SEND_BYTE);
	SEND_BYTE = 0x80;
	write6554Data(SEND_BYTE);
#ifdef __have9014__
	DSP_CE	= 1; //	;;__/---CASE 2: CLK IS TERMINATED AT “HIGH” LEVEL
	DSP_DO_IN  = 1; //
#else
	DSP_CE	= 0; //	;;__/---CASE 2: CLK IS TERMINATED AT “HIGH” LEVEL
	DSP_DO_IN  = 0; //
#endif
//*********************************(3)***************************************
	EA=bittmp;
//for (i=0;i<5;i++)
//{
//	TRANS_BUF[i] = DSP_BUF[i+12];
//}
	for(i=0;i<7;i++){
	TRANS_BUF[i] = 0x00;
}
	TRANS_BUF[0] = DSP_BUF[11];
	TRANS_BUF[1] = DSP_BUF[12];
	SEND_BYTE = DSP_BUF[13];
	TRANS_BUF[1] |=	((SEND_BYTE<<4) & 0xf0);
	TRANS_BUF[2] |=	((SEND_BYTE>>4) & 0x0f);
	bittmp=EA;
	EA = 0; 	

	SEND_BYTE = 0X42;
#ifdef __have9014__
       	DSP_CE  = 1; //  send 8 clock= P0^5;//CE: Chip enable
#else
       	DSP_CE  = 0; //  send 8 clock= P0^5;//CE: Chip enable
#endif
	write6554Data(SEND_BYTE);
#ifdef __have9014__
	DSP_CE	= 0; //	;;__/---CASE 2: CLK IS TERMINATED AT “HIGH” LEVEL
	DSP_DO_IN  = 0; //	
#else
	DSP_CE	= 1; //	;;__/---CASE 2: CLK IS TERMINATED AT “HIGH” LEVEL
	DSP_DO_IN  = 1; //	
#endif
//==============================================================
for (jj=0;jj<5;jj++)
{
	SEND_BYTE = TRANS_BUF[jj];
	write6554Data(SEND_BYTE);
}
	SEND_BYTE = 0x00;
	write6554Data(SEND_BYTE);
	SEND_BYTE = 0x40;
	write6554Data(SEND_BYTE);
#ifdef __have9014__
	DSP_CE	= 1; //	;;__/---CASE 2: CLK IS TERMINATED AT “HIGH” LEVEL
	DSP_DO_IN  = 1; //
#else
	DSP_CE	= 0; //	;;__/---CASE 2: CLK IS TERMINATED AT “HIGH” LEVEL
	DSP_DO_IN  = 0; //
#endif
//*********************************(4)***************************************
	EA=bittmp;

//for (i=0;i<5;i++){
//	TRANS_BUF[i] = DSP_BUF[i+12]
//}
	SEND_BYTE = 0X42;
	bittmp=EA;
	EA = 0; 	
#ifdef __have9014__
       	DSP_CE  = 1; //  send 8 clock= P0^5;//CE: Chip enable
#else
       	DSP_CE  = 0; //  send 8 clock= P0^5;//CE: Chip enable
#endif
	write6554Data(SEND_BYTE);
#ifdef __have9014__
	DSP_CE	= 0; //	;;__/---CASE 2: CLK IS TERMINATED AT “HIGH” LEVEL
	DSP_DO_IN  = 0; //	
#else
	DSP_CE	= 1; //	;;__/---CASE 2: CLK IS TERMINATED AT “HIGH” LEVEL
	DSP_DO_IN  = 1; //	
#endif

//==============================================================
for (jj=0;jj<6;jj++)
{
//	SEND_BYTE = TRANS_BUF[jj];
	SEND_BYTE = 0x00;
	write6554Data(SEND_BYTE);
}
	SEND_BYTE = 0xc0;
	write6554Data(SEND_BYTE);
#ifdef __have9014__
	DSP_CE	= 1; //	;;__/---CASE 2: CLK IS TERMINATED AT “HIGH” LEVEL
	DSP_DO_IN  = 1; //
#else
	DSP_CE	= 0; //	;;__/---CASE 2: CLK IS TERMINATED AT “HIGH” LEVEL
	DSP_DO_IN  = 0; //
#endif
	EA=bittmp;

} //sendDataTo6554(void)	
//=====================================================
//void write6554address(unsigned char SENDBYTE){
//	for(i=0;i<8;i++) {
//		 DSP_CLK = 0;
//		SENDBYTE=SENDBYTE>>1;
//		DSP_DI_OUT=(bit)(SENDBYTE&0x01);
//		iic_delay();
//		 DSP_CLK = 1;
// 		iic_delay();
//	}
//}
//=====================================================
void write6554Data(unsigned char data	SEND_BYTE){
	for(i=0;i<8;i++)
	 {
#ifdef __have9014__
		 DSP_CLK = 1;
		DSP_DI_OUT=~(bit)(SEND_BYTE&0x01);
#else
		 DSP_CLK = 0;
		DSP_DI_OUT=(bit)(SEND_BYTE&0x01);
#endif
//		iic_delay();
		_nop_();
		_nop_();
		_nop_();
#ifdef __have9014__
		 DSP_CLK = 0;
#else
		 DSP_CLK = 1;
#endif
 //		iic_delay();
		_nop_();
		_nop_();
		_nop_();
		SEND_BYTE=SEND_BYTE>>1;
	}	
}
//=====================================================
void write6554Data1(unsigned char data	SEND_BYTE){
	for(i=0;i<8;i++)
	 {
#ifdef __have9014__
		 DSP_CLK = 1;
		DSP_DI_OUT=~(bit)(SEND_BYTE&0x01);
#else
		 DSP_CLK = 0;
		DSP_DI_OUT=(bit)(SEND_BYTE&0x01);
#endif
//		iic_delay();
		_nop_();
		_nop_();
		_nop_();
#ifdef __have9014__
		 DSP_CLK = 0;
#else
		 DSP_CLK = 1;
#endif
// 		iic_delay();
		_nop_();
		_nop_();
		_nop_();
		SEND_BYTE=SEND_BYTE>>1;
	}	
}

//=====================================================
void	radio_freq_fm_display(void){
	//	BYTE	pll_love; 
		unsigned int pll_love;
		unsigned long DSP_Frequency;
         unsigned char SendErr=0;
//		 radio_read();  //get_frequency
//		led(frequency);	//get bcd code for freq.
	     SendErr = radio_read_M() ;    // 读取搜索结果 

		//if(radio_read()){    
    	//	get_pll();
		//}

	//	PT6554_8GDE1039(tbFreq4); 
	//	PT6554_9GDE1039(tbFreq3); 
	//	PT6554_10GDE1039(tbFreq2); 
	//	PT6554_11GDE1039(tbFreq1); 
	   if(SendErr == 0){
    frequency += 50;
	frequency /= 100;
	frequency *= 100;
		DSP_Frequency = frequency;
		DSP_Frequency /= 100;
		PT6554_11GDE1039(DSP_Frequency%10); 
		DSP_Frequency /= 10;
		PT6554_10GDE1039(DSP_Frequency%10); 
		DSP_Frequency /= 10;
		PT6554_9GDE1039(DSP_Frequency%10); 
		DSP_Frequency /= 10;
		if((DSP_Frequency%10) != 0){
		PT6554_8GDE1039(DSP_Frequency%10); 
		 }else{PT6554_8GDE1039(0x0a); }
		 }
//		sendDataTo6554();
		/*
		if(KEY_NUMBER){
		pll_love = SearchStation[(KEY_NUMBER-1)];	//pll;
		PT6554_8GDE1039(pll_love%10); //
		pll_love /= 10;
		PT6554_7GDE1039(pll_love%10); //
		pll_love /= 10;
		PT6554_6GDE1039(pll_love%10); //
		pll_love /= 10;
		PT6554_5GDE1039(pll_love%10); //
		pll_love /= 10;
		PT6554_4GDE1039(pll_love%10); //
		}
		*/
	   	DSP_BUF[9] &= 0x7f;		  // no colen
		DSP_BUF[10] |= 0x80;	  // light a dot
	   	DSP_BUF[11] &= 0x7f;		  // no letter 5
		DSP_BUF[12] |= 0x04;	  // 0x02;// MHz

}
//=====================================================
void	radio_fm1_display(void){
		PT6554_1GDE1039(0x00); //F(M)
		PT6554_2GDE1039(0x02); //(F)M
		PT6554_3GDE1039(0x00); //1
		PT6554_4GDE1039(0x0a); //
}
//===================================================== 
void	rd_control_key_number(void){
		if(KEY_VALUE == 0x00){
			bKEY_VALUE_longflag = 0;
		 	if((B_TUNER_DURING_MOR_FLAGON == 0)&&(bMEMORYKEY_SHORT_flag == 1)){
			bMEMORYKEY_SHORT_flag = 0;

			DELAY_5S = 0x0F0;		
			MAIN_FUNCT1_0XFC = 0x01;
				PWM_INIT();
				
				}else{
				B_TUNER_DURING_MOR_FLAGON = 0;
				bMEMORYKEY_SHORT_flag = 0;
				DELAY_5S = 0x0F0;
					}
		}
		else if(KEY_BACK != 0x00){
//			if(KEY_COUNTER >= 0x32){
	if((bKEY_VALUE_longflag == 1)&&(KEY_COUNTER == 0x00)){
				 	if(!B_TUNER_DURING_MOR_FLAGON){
				 	B_TUNER_DURING_MOR_FLAGON = 1;
				 //do long key...
				bMEMORYKEY_SHORT_flag = 0;
				 if((MAIN_FUNCT1_0XFC != 0x02)&&(MAIN_FUNCT1_0XFC != 0x03)&&(MAIN_FUNCT1_0XFC != 0x05))
				     {
					PWM_INIT();
					
	  				MAIN_FUNCT1_0XFC = 0x02;
					  }
					}
		      }
		}else{
	if(MAIN_FUNCT1_0XFC == 0x10){
#if 1

	  	MAIN_FUNCT1_0XFC = 0x0;
		PWR_MUTE = 0;
		bKEY_VALUE_longflag = 0;
		B_TUNER_DURING_MOR_FLAGON = 1;
#endif
		}else{
			bMEMORYKEY_SHORT_flag = 1;
			if(bKEY_VALUE_longflag == 0){
			bKEY_VALUE_longflag = 1;
			KEY_COUNTER = 0x064;	//0x0d;
							}
			}
			}
} 
//===================================================== 
void	rd_frequency_fm_address(void){

}
//===================================================== 
void READ6554(void){
unsigned char data	SEND_BYTE;

#ifdef __have9014__
       	DSP_CE  = 1; //  send 8 clock= P0^5;//CE: Chip enable
#else
       	DSP_CE  = 0; //  send 8 clock= P0^5;//CE: Chip enable
#endif
	SEND_BYTE = 0x43;	//
	write6554Data(SEND_BYTE);
#ifdef __have9014__
	DSP_CE	= 0; //	;;__/---CASE 2: CLK IS TERMINATED AT “HIGH” LEVEL
	DSP_DO_IN  = 0; //	
#else
	DSP_CE	= 1; //	;;__/---CASE 2: CLK IS TERMINATED AT “HIGH” LEVEL
	DSP_DO_IN  = 1; //	
#endif



}

⌨️ 快捷键说明

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