rs232.c

来自「采用台湾MRT晶捷公司的MRT4方案的液晶电视的程序」· C语言 代码 · 共 258 行

C
258
字号

#include <reg51.h>
#include <intrins.h>
#include <stdio.h>
#include "mascot.h"
#include "osd.h"
#include "global.h"


bit uartFlag = 0;
unsigned char data uartCnt;
unsigned char data uartBuff[8];

#if WINBOND_ISP

sfr CHPCON  	= 0xBF;		//programming control register
sfr CHPENR      = 0xF6;		//programming enable (#87,#59h)
sfr SFRCN       = 0xC7;		//programming mode

bit flag_LDROM = 0;

unsigned char code ID[] = {"MASCOT$"};
#endif

static void uart_isr(void) interrupt 4 
{
	uartCnt = 0;

#if WINBOND_ISP

	if(ISPFlag)
 	{
		while(RI)
		{
			uartBuff[0] = SBUF;
			RI = 0;
				
			if((uartBuff[0] == '$') && (uartCnt == 6))
			{
				flag_LDROM = 1;
				return;			
			}
			else if(uartBuff[0] != ID[uartCnt])
				return;	

			while(!RI);
			uartCnt++;
		}
	}
#endif // WINBOND_ISP
	while(RI)
	{
		uartBuff[uartCnt] = SBUF;
		RI = 0;

		if(uartCnt == 0)
		{
			if (SBUF != 'W')
				return;	
		}
		else if(uartCnt == 5)
		{
			if(SBUF != '0')
				return;			
		}		
		else if (uartCnt == 7)
		{
			uartFlag = 1;
			return;
		}		
		
		while(!RI);
		uartCnt++;
	}
}



void uartCommand(void)
{
	
	if (uartFlag)
	{
		uartFlag = 0;

		if (uartBuff[1] == '9' && uartBuff[2] == '8')
		{
			
			// put data to uartBuff[0]
			if(uartBuff[6] >= 0x30 && uartBuff[6] <= 0x39)
				uartBuff[0] = uartBuff[6] - 0x30;
			else if(uartBuff[6] >= 0x41 && uartBuff[6] <= 0x46)
				uartBuff[0] = uartBuff[6] - 0x37;
			
			uartBuff[0] = uartBuff[0] << 4;
		
			if(uartBuff[7] >= 0x30 && uartBuff[7] <= 0x39)
				uartBuff[0] += (uartBuff[7] - 0x30);
			else if(uartBuff[7] >= 0x41 && uartBuff[7] <= 0x46)
				uartBuff[0] += (uartBuff[7] - 0x37);				
			
			// RED
			if (uartBuff[3] == '0' && uartBuff[4] == '1')
			{
				eepData.userR = uartBuff[0];
				eepDataOut(EEPDATASTART+(&eepData.userR-&eepData),(unsigned char *)&eepData.userR, 1); 
				adjUser_R(0,HIDE);
				return;
			}	
			// GREEN
			else if (uartBuff[3] == '0' && uartBuff[4] == '4')
			{
				eepData.userG = uartBuff[0];
				eepDataOut(EEPDATASTART+(&eepData.userG-&eepData),(unsigned char *)&eepData.userG, 1); 
				adjUser_G(0,HIDE);
				return;				
			}
			// BLUE
			else if (uartBuff[3] == '0' && uartBuff[4] == '7')
			{
				eepData.userB = uartBuff[0];
				eepDataOut(EEPDATASTART+(&eepData.userB-&eepData),(unsigned char *)&eepData.userB, 1); 
				adjUser_B(0,HIDE);
				return;						
			}
			// CONTRAST
			else if (uartBuff[3] == '1' && uartBuff[4] == '4')
			{
				eepData.contrast = uartBuff[0];
				eepDataOut(EEPDATASTART+(&eepData.contrast-&eepData),(unsigned char *)&eepData.contrast, 1); 
				adjContrast(0,HIDE);
				return;						
			}
			// BLACK LEVEL
			else if (uartBuff[3] == '1' && uartBuff[4] == '5')
			{
				eepData.blacklevel = uartBuff[0];
				eepDataOut(EEPDATASTART+(&eepData.blacklevel-&eepData),(unsigned char *)&eepData.blacklevel, 1); 
				setBlackLevel();
				return;								
			}	
			// BRIGHTNESS			
			else if (uartBuff[3] == '1' && uartBuff[4] == '6')
			{
				eepData.brightness = uartBuff[0];
				eepDataOut(EEPDATASTART+(&eepData.brightness-&eepData),(unsigned char *)&eepData.brightness, 1); 
				adjBrightness(0,HIDE);
				return;								
			}
			// BACK LIGHT
			else if (uartBuff[3] == '1' && uartBuff[4] == '7')
			{
				eepData.brightness = uartBuff[0];
				eepDataOut(EEPDATASTART+(&eepData.brightness-&eepData),(unsigned char *)&eepData.brightness, 1); 
				adjBrightness(0,HIDE);
				return;						
			}				
		}
		else if (uartBuff[1] == 'A' && uartBuff[2] == '0')
		{
			// SAVE 7800
			if (uartBuff[3] == 'C' && uartBuff[4] == '1')
			{
       			eepData.colorPos = COLOR_7500;
       			eepDataOut(EEPDATASTART+(&eepData.colorPos-&eepData),(unsigned char *)&eepData.colorPos, 1); 				
       			eepData.color7500R = eepData.userR;
       			eepData.color7500G = eepData.userG;
       			eepData.color7500B = eepData.userB;
       			eepData.brightness75 = eepData.brightness;
       			eepData.contrast75 = eepData.contrast;
       			eepDataOut(EEPDATASTART+(&eepData.color7500R-&eepData),(unsigned char *)&eepData.color7500R, 5); 				
       			return;
			}	
			// SAVE 6500
			else if (uartBuff[3] == 'A' && uartBuff[4] == '5')
			{
       			eepData.colorPos = COLOR_6500;
       			eepDataOut(EEPDATASTART+(&eepData.colorPos-&eepData),(unsigned char *)&eepData.colorPos, 1); 								
       			eepData.color6500R = eepData.userR;
       			eepData.color6500G = eepData.userG;
       			eepData.color6500B = eepData.userB;
       			eepData.brightness65 = eepData.brightness;
       			eepData.contrast65 = eepData.contrast;       			
       			eepDataOut(EEPDATASTART+(&eepData.color6500R-&eepData),(unsigned char *)&eepData.color6500R, 5); 				
       			return;
			}		
			// RECALL 7800
			else if (uartBuff[3] == 'B' && uartBuff[4] == '9')
			{
       			eepData.colorPos = COLOR_7500;
       			eepDataOut(EEPDATASTART+(&eepData.colorPos-&eepData),(unsigned char *)&eepData.colorPos, 1); 				
				eepData.brightness = eepData.brightness75;
				eepData.contrast = eepData.contrast75;
				eepDataOut(EEPDATASTART+(&eepData.brightness-&eepData),(unsigned char *)&eepData.brightness, 2); 
				adjBrightness(0,HIDE);
				adjContrast(0,HIDE);  
				setColorTemp();  
				return;   					
			}		
			// RECALL 6500
			else if (uartBuff[3] == 'B' && uartBuff[4] == '6')
			{
       			eepData.colorPos = COLOR_6500;
       			eepDataOut(EEPDATASTART+(&eepData.colorPos-&eepData),(unsigned char *)&eepData.colorPos, 1); 				
				eepData.brightness = eepData.brightness65;
				eepData.contrast = eepData.contrast65;
				eepDataOut(EEPDATASTART+(&eepData.brightness-&eepData),(unsigned char *)&eepData.brightness, 2); 
				adjBrightness(0,HIDE);
				adjContrast(0,HIDE);		
				setColorTemp();	
				return;				 				
			}							
			// RESET
			else if (uartBuff[3] == 'B' && uartBuff[4] == '5')
			{
				if (FactoryFlag)
					ResetEEPROM(RSTCOLOR+RSTEEP+RSTUSER);
				else
					ResetEEPROM(RSTEEP+RSTUSER);
	
				getDefModeData();		//load from rom table
				updateModeData();		//save to eeprom	
				recall_set_ModeData();	//load from auto/table and set mode data
				setEepData();			//set common data
				return;			
			}				
		}
	}
}


#if WINBOND_ISP
void WinBondISP(void)
{
	if (flag_LDROM)
	{
		miscDelay(100);
		ET0 = 1;
		ES = 0;
		TI = 0;
		SBUF = 0x5b;
		while(TI);
		_nop_();
		CHPENR = 0x87;        	// write enable
		_nop_();
		CHPENR = 0x59;        	// write enable
		_nop_();
		CHPCON = 0x03;         	// bank=4k,flash mode
		_nop_();
		TL0 = 0x00;
		TH0 = 0x00;
		TR0 = 1;
		PCON |= 0x01;           // enter idle mode
		while(1);
	}	
	
}
#endif

⌨️ 快捷键说明

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