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 + -
显示快捷键?