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

📄 serial.c

📁 采用台湾MRT晶捷公司的MRT4方案的液晶电视的程序
💻 C
字号:
#include "serial.h"
#include <reg51.h>
#include "mascot.h"
#include <intrins.h> 
#include "osd.h"

#define SERIAL_BUF_LEN		13

extern unsigned char idata  buff[];
bit bit_serial_ok;
typedef struct { unsigned int x; unsigned int y; unsigned int Y; } MODE_XYY;
unsigned char code  gszRemoteOn[]		= { "F1;" };
unsigned char code  gszRemoteOff[]	= { "F0;" };
unsigned char code  gszHoldOn[]		= { "H1;" };
unsigned char code  gszHoldOff[]		= { "H0;" };
unsigned char code  gszTransferOn[]	= { "T1;" };
unsigned char code  gszTransferOff[]	= { "T0;" };
unsigned char code  gszCh9300K[]		= { "C5;" };
unsigned char code  gszCh6550K[]		= { "C6;" };
unsigned char code  gszCh5800K[]		= { "C7;" };
unsigned char code  gszGetMemory[]	= { "K;" };
unsigned char code  gszSetMode0[]		= { "M0;" };


extern bit bit_fac6550;
extern bit bit_fac9300;
extern bit bit_fac5800;
unsigned char serial_id;
unsigned char serial_skip;



MODE_XYY idata cm;
MODE_XYY idata sm;
void AutoColor(void)
{
	bit fL_ok, fx_ok, fy_ok;
 
	

	unsigned char tmp;

	fL_ok = fx_ok = fy_ok = 0;

	bit_serial_ok	= 0;
	serial_id		= 0;
	serial_skip 	= 0;

       // g_red = g_green = g_blue = 30;
					
            /*DisplaySerialData(OSD_R_xpos,OSD_R_ypos,eepData.colorCoolR);
		    DisplaySerialData(OSD_G_xpos,OSD_G_ypos,eepData.colorCoolG);
		    DisplaySerialData(OSD_B_xpos,OSD_B_ypos,eepData.colorCoolB);*/
        
	chroma_init();
	while(1)
	{
		 TI = 0; 
		if(!serial_getmem()) return;
	
		Str2Tmp(&sm);//sm
		
		if(sm.x >= 100 && sm.y >= 100) break;
		
		miscDelay(10);
	}
		serial_send(gszTransferOn);                 //T1
		serial_send(gszHoldOff);                    //H0
		
		DisplaySerialData(OSD_SM_x_xpos,OSD_SM_x_ypos,sm.x);
		DisplaySerialData(OSD_SM_y_xpos,OSD_SM_y_ypos,sm.y);
		DisplaySerialData(OSD_SM_Y_xpos,OSD_SM_Y_ypos,sm.Y);
			if(!serial_getmem()) return;
		while(1)
		{
		if(!serial_getmem()) return;
        //if(!serial_getmem()) return;
       
        Str2Tmp(&cm);//cm
        DisplaySerialData(OSD_CM_x_xpos,OSD_CM_x_ypos,cm.x);
		DisplaySerialData(OSD_CM_y_xpos,OSD_CM_y_ypos,cm.y);
		DisplaySerialData(OSD_CM_Y_xpos,OSD_CM_Y_ypos,cm.Y);
	    //serial_gettmp();
	        DisplaySerialData(OSD_R_xpos,OSD_R_ypos,eepData.colorCoolR);
		    DisplaySerialData(OSD_G_xpos,OSD_G_ypos,eepData.colorCoolG);
		    DisplaySerialData(OSD_B_xpos,OSD_B_ypos,eepData.colorCoolB);
		   
	   }//while
	/*while(1)
	{
		
		if(!serial_gettmp()) break;
	
		Str2Tmp(&cm);//cm

		DisplaySerialData(OSD_CM_x_xpos,OSD_CM_x_ypos,cm.x);
		DisplaySerialData(OSD_CM_y_xpos,OSD_CM_y_ypos,cm.y);
		DisplaySerialData(OSD_CM_Y_xpos,OSD_CM_Y_ypos,cm.Y);
		if (bit_fac6550)
		   { 
		    DisplaySerialData(OSD_R_xpos,OSD_R_ypos,eepData.colorCoolR);
		    DisplaySerialData(OSD_G_xpos,OSD_G_ypos,eepData.colorCoolG);
		    DisplaySerialData(OSD_B_xpos,OSD_B_ypos,eepData.colorCoolB);
		    }
        else
           { 
		    DisplaySerialData(OSD_R_xpos,OSD_R_ypos,eepData.colorNeutralR);
		    DisplaySerialData(OSD_G_xpos,OSD_G_ypos,eepData.colorNeutralG);
		    DisplaySerialData(OSD_B_xpos,OSD_B_ypos,eepData.colorNeutralB);
		    }
        		
		
		if(sm.Y > cm.Y)
		{
			if(sm.Y - cm.Y < 5) fL_ok = 1; else fL_ok = 0;
		}
		else
		{
			if(cm.Y - sm.Y < 5) fL_ok = 1; else
			{
				fL_ok = 0;
				
				if(cm.Y - sm.Y > 100)
				{
					//g_red = g_green = g_blue = 30;
					
					if (bit_fac6550)
					    {
					      setGammaR(eepData.colorCoolR);
					      setGammaG(eepData.colorCoolG);
					      setGammaB(eepData.colorCoolB);
					     }
					else
					     {
					      setGammaR(eepData.colorNeutralR);
					      setGammaG(eepData.colorNeutralG);
					      setGammaB(eepData.colorNeutralB);
					     }
					      
					
					continue;
				}
			}
		}
		if(fx_ok && fy_ok && fL_ok) break;
		
		if(sm.x > cm.x)
		{
		    if (bit_fac6550)
		     	{
		     		tmp = ((sm.x-cm.x+1)>>1) + eepData.colorCoolR;
			    if(eepData.colorCoolR > tmp) eepData.colorCoolR = 100; else eepData.colorCoolR = tmp;
		        }
		    else
		        {
		        	tmp = ((sm.x-cm.x+1)>>1) + eepData.colorNeutralR;
			    if(eepData.colorNeutralR > tmp) eepData.colorNeutralR= 100; else eepData.colorNeutralR = tmp;
		        }
		     
			if(sm.x - cm.x < 3) fx_ok = 1; else fx_ok = 0;
		}
		else
		{
		     if (bit_fac6550)
		     	{
		     		tmp = ((cm.x-sm.x+1)>>1);
			     if(eepData.colorCoolR > tmp) eepData.colorCoolR -= tmp; else eepData.colorCoolR = 0;
			    } 
			 else
			    {
			    	tmp = ((cm.x-sm.x+1)>>1);
			     if(eepData.colorNeutralR > tmp) eepData.colorNeutralR -= tmp; else eepData.colorNeutralR = 0;	
			    }	   

			if(cm.x - sm.x < 3) fx_ok = 1; else fx_ok = 0;
		}
		    if (bit_fac6550)
		        {
			    setGammaR(eepData.colorCoolR);
			    DisplaySerialData(OSD_CM_x_xpos,OSD_CM_x_ypos,eepData.colorCoolR);
			    }
			else 
			    {   
			    setGammaR(eepData.colorNeutralR);
			    DisplaySerialData(OSD_CM_x_xpos,OSD_CM_x_ypos,eepData.colorNeutralR);
		        }
		
		if(sm.y > cm.y)
		{
			 if (bit_fac6550)
		        {
		        tmp = ((sm.y-cm.y+1)>>1) + eepData.colorCoolG;
			
			    if(eepData.colorCoolG > tmp) eepData.colorCoolG = 100; else eepData.colorCoolG = tmp;	
		        }
		     else
		       {   
		        tmp = ((sm.y-cm.y+1)>>1) + eepData.colorNeutralG;
			
			    if(eepData.colorNeutralG > tmp) eepData.colorNeutralG = 100; else eepData.colorNeutralG = tmp;
			    }

			if(sm.y - cm.y < 3) fy_ok = 1; else fy_ok = 0;
		}
		else
		{
			if (bit_fac6550)
		        {
		         tmp = ((cm.y-sm.y+1)>>1);
			
			    if(eepData.colorCoolG > tmp) eepData.colorCoolG -= tmp; else eepData.colorCoolG = 0;
			    }
			else
			    {
		         tmp = ((cm.y-sm.y+1)>>1);
			
			     if(eepData.colorNeutralG > tmp) eepData.colorNeutralG -= tmp; else eepData.colorNeutralG = 0;
			     }
		    if(cm.y - sm.y < 3) fy_ok = 1; else fy_ok = 0;
		}
		if (bit_fac6550)
		   {
		    setGammaG(eepData.colorCoolG);
		    DisplaySerialData(OSD_CM_x_xpos,OSD_CM_x_ypos,eepData.colorCoolG);
		   }
	    else
	       {
		    setGammaG(eepData.colorNeutralG);
		    DisplaySerialData(OSD_CM_x_xpos,OSD_CM_x_ypos,eepData.colorNeutralG);
		   }
	    	   

		if((!fx_ok) || (!fy_ok)) continue;

       if(!fL_ok)
		{
			if(sm.Y > cm.Y)
			{
				if (bit_fac6550)
				   {
			     	tmp = ((sm.Y-cm.Y+7)>>3) + eepData.colorCoolB;
				
				    if(eepData.colorCoolB > tmp) eepData.colorCoolB = 100; else eepData.colorCoolB = tmp;
			        }
			    else
			       {
			     	tmp = ((sm.Y-cm.Y+7)>>3) + eepData.colorNeutralB;
				
				    if(eepData.colorNeutralB > tmp) eepData.colorNeutralB = 100; else eepData.colorNeutralB = tmp;
			        }
			    
			}
			else
			{
				if (bit_fac6550)
				   {
				    tmp =  ((cm.Y-sm.Y+3)>>2);
				
			    	if(eepData.colorCoolB > tmp) eepData.colorCoolB -= tmp; else eepData.colorCoolB = 0;
			        }
			    else
			       {
				    tmp =  ((cm.Y-sm.Y+3)>>2);
				
			    	if(eepData.colorNeutralB > tmp) eepData.colorNeutralB -= tmp; else eepData.colorNeutralB = 0;
			        }
			     
				
			}
			}
			if (bit_fac6550)
			   {
			    setGammaB(eepData.colorCoolB);
			    DisplaySerialData(OSD_CM_x_xpos,OSD_CM_x_ypos,eepData.colorCoolB);
			   }
		    else
		       {
			    setGammaB(eepData.colorNeutralB);
			    DisplaySerialData(OSD_CM_x_xpos,OSD_CM_x_ypos,eepData.colorNeutralB);
			   }
		    	    
		}	
		serial_send(gszRemoteOff);*/
		
		
		
		
		
		
		
		
	
	
}
void chroma_init()
{
	serial_send(gszRemoteOn);         //F1
	
	serial_send(gszTransferOff);      //T0

	serial_send(gszHoldOn);           //H1

	serial_send(gszSetMode0);         //M0

	if(bit_fac6550)                   
		serial_send(gszCh6550K);
	else if (bit_fac9300)    
		serial_send(gszCh9300K);
	else
		serial_send(gszCh5800K);
	 
}
void serial_send(unsigned char *buf)
{
	while(*buf)
	{
		SBUF = *buf;
	
		while(!TI); TI = 0;
		
		buf++;
		
		miscDelay(10);
	}
}
/****************************************************************************/
// serial_getmem
//
// Mark Lee 2000.9
/****************************************************************************/
bit serial_getmem(void)
{
	serial_send(gszGetMemory);

//18old;39new
	serial_skip =39; 
	
	serial_id = 0;
	
	bit_serial_ok = 0;

	return wait_serial();
}

/****************************************************************************/
// Str2Tmp
//
// Mark Lee 1999.5
/****************************************************************************/
void Str2Tmp(MODE_XYY *mx)
{
	unsigned char i;

	unsigned char *buf = buff;

	mx->x = 0;
	mx->y = 0;
	mx->Y = 0;

	if(*buf < '0' || *buf > '9') buf++;
	
	for(i=0; i<4; i++)
	{
		if(*buf < '0' || *buf > '9') { buf++; break; }
		
		mx->x = mx->x * 10 + (*buf++ - '0');
	}
	for(i=0; i<4; i++)
	{
		if(*buf < '0' || *buf > '9') { buf++; break; }

		mx->y = mx->y * 10 + (*buf++ - '0');
	}
	for(i=0; i<3; i++)
	{
		if(*buf < '0' || *buf > '9') { buf++; break; }

		mx->Y = mx->Y * 10 + (*buf++ - '0');
	}
	if(*buf >= '0' && *buf <= '9') mx->Y = mx->Y * 10 + (*buf - '0');
}

/****************************************************************************/
// wait_serial
//
// Mark Lee 2000.9
/****************************************************************************/
bit wait_serial()
{
	while(1)
	{
		if(bit_serial_ok) break;

		if(!POWER_BUT_PIN) { while(!POWER_BUT_PIN); return 0; }
	}
	bit_serial_ok = 0;
	
	return 1;
}

/****************************************************************************/
// serial_int -- Serial port interrupt function
//
// Mark Lee 1999.5
/****************************************************************************/
void serial_int(void) interrupt 4
{

	
	if(RI)
	{
		buff[serial_id] = SBUF;
		
		RI = 0;

		if(serial_skip) serial_skip--;
		else
		{
			if(buff[serial_id] == 0x0d)
			{
				bit_serial_ok = 1;
			
				buff[serial_id] = 0;

				serial_id = 0;
			}
			else if(++serial_id >= SERIAL_BUF_LEN) serial_id = 0;
		}
	}
	
}

#undef sm_x  
#undef sm_y  
#undef sm_Y  

⌨️ 快捷键说明

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