?? mcu.c
字號:
#include "8051.H"
#include "STDIO.H"
#include "RAM.H"
#include "MCU.H"
#include "MyDef.H"
#include "IIC.H"
#include "F63XREG.H"
#include "F63XDEF.H"
#include "UserAdj.H"
#include "Scaler.H"
#include "rom_map.h"
#include "AutoAdj.H"
#include "OSD.H"
#include "OSD_TAB.H"
#include "MODEHANDLE.H"
//#include "dvKeypad.h"
#include "PANEL.H"
extern WarmUp();
void InitMCU(void)
{
Byte xdata *Addr;
Byte i;
Addr = 0xf000;
for(i=0; i<0x23; i++){
*Addr++ = McuRegTab[i];
}
// set timer 0
SCON = 0x52;
TMOD = 0x22; //timer0 /timer1 8 bits auto reload
// TMOD = 0x21; //timer0 16 bits/timer1 8 bits auto reload
PCON = 0x80;
// timer0 8 bits auto reload
TL0 = -200;
TH0 =-200;
// TL0 = 256-(CPU_CLK/1000*100/12000); //time base 100us
// TH0 = 256-(CPU_CLK/1000*100/12000);
// timer0 16 bits
// TL0 = (65536-CPU_CLK/1200)%256; //time base 10ms
// TH0 = (65536-CPU_CLK/1200)/256;
// For 12.000 MHz
TL1 = 256-(2*CPU_CLK/384/9600);
TH1 = 256-(2*CPU_CLK/384/9600);
// For 14.318 MHz
//TL1 = 256-(2*CPU_CLK/384/4800);
//TH1 = 256-(2*CPU_CLK/384/4800);
TR0 = 1; //start timer0
TR1 = 1; //start timer1
// set interrupt
EX1 = 1; //enable External interrupt1
ET0 = 1; //enable timer0 interrupt
EA = 1; //enable all interrupt
T0_INT_CNT = 0;
T0_10ms_Cnt = 0;
Sleep(50);
}
void Timer0(void) interrupt 1 using 2
{
#if 1 //Used mode2--auto reload
if(++T0_INT_CNT >= 10){
T0_INT_CNT = 0;
if(Timer_1ms != 0) // 1ms
Timer_1ms--;
if(++T0_1ms_Cnt >= 10){ // 10ms
CLRWDT = 0x55;
T0_1ms_Cnt = 0;
if(++T0_10ms_Cnt >= 100){//--1s
T0_10ms_Cnt = 0;
if(BackLightTimerEn){
if(BackLightTimer < 360000000)
BackLightTimer += 1;
else
BackLightTimer = 0;
}
}
if(OsdTimer > 0)
OsdTimer--;
if(LocalTimer > 0)
LocalTimer--;
if(PowerTimer > 0)
PowerTimer--;
if(RepeatTimer > 0)
RepeatTimer--;
if(DDCTimer > 0)
DDCTimer--;
if(SaveTimer > 0)
SaveTimer--;
if(VideoTimer > 0)
VideoTimer--;
if(BurnInTimer > 0)
BurnInTimer--;
if(MuteTimer > 0)
MuteTimer--;
}
}
#else //Used mode1--16 bits counter
TL0 = (65536-CPU_CLK/1200)%256; //time base 10ms
TH0 = (65536-CPU_CLK/1200)/256;
CLRWDT = 0x55;
if(++T0_10ms_Cnt >= 100){
T0_10ms_Cnt = 0;
if(BackLightTimerEn){
if(BackLightTimer < 360000000)
BackLightTimer += 1;
else
BackLightTimer = 0;
}
}
if(OsdTimer > 0)
OsdTimer--;
if(LocalTimer > 0)
LocalTimer--;
if(RepeatTimer > 0)
RepeatTimer--;
if(PowerTimer > 0)
PowerTimer--;
if(DDCTimer > 0)
DDCTimer--;
if(SaveTimer > 0)
SaveTimer--;
if(VideoTimer > 0)
VideoTimer--;
if(BurnInTimer > 0)
BurnInTimer--;
if(MuteTimer > 0)
MuteTimer--;
#endif
}
void Sleep(Word T)
{
Timer_1ms = T; /* timeout n ms */
while(Timer_1ms != 0){
}
// Word i,j;
// for(j=0;j<T;j++)
// for(i=0;i<23*(CPU_CLK/20000000);i++)
// CLRWDT=0x55;
}
void WaitSetup(unsigned short time)
{
LocalTimer = time; /* timeout n 10ms */
while(LocalTimer != 0){
if(FuncBuf[pVIDEOSOURCE] <= 1) //jacky20040324
CheckModeChange();
}
}
Byte GetKey()
{
Byte i,KeyTemp,KeyTemp2;
i = 0;
while(i < 10)
{
KeyTemp = 0;
if(!(PTA_REG & PA0))
KeyTemp = vkSOURCE;
if(!(PTD_REG & PD2))
KeyTemp |= vkMENU;
if(!(PTD_REG & PD0))
KeyTemp |= vkAUTO;
if(!(PTC_REG & PC6))
KeyTemp |= vkPOWER;
if(!(PTB_REG & PB1))
KeyTemp |= vkVALUP;
if(!(PTB_REG & PB0))
KeyTemp |= vkVADOWN;
if(!(PTC_REG & PC6))
KeyTemp |= vkPOWER;
if(KeyTemp != KeyTemp2)
{
KeyTemp2 = KeyTemp;
i = 0;
}
i++;
}
return KeyTemp;
}
void ScanKeyPad(void) //2003/5/19 alvin
{
Byte KeyTemp;
KeyTemp = GetKey();
if(PrevKey!=KeyTemp)
{
KeyLock = 0;
ChangeKey = 1; //change key
if(PrevKey == vkSOURCE && KeyTemp == 0 && KeyRepeatCnt < 10){
PrevKey = KeyTemp;
KeyBuffer = vkSOURCE;
KeyRepeatCnt = 0;
OsdTimer = FuncBuf[pOSDTIMER] * 100;
//OsdTimer = 3 * 100;
}
else if(KeyTemp == vkSOURCE){
PrevKey = KeyTemp;
KeyBuffer = 0;
//OsdTimer = 3 * 100;
}
else{
PrevKey = KeyTemp;
KeyBuffer = KeyTemp;
KeyRepeatCnt = 0;
OsdTimer = FuncBuf[pOSDTIMER] * 100;
}
RepeatTimer = KeyHoldTime;
}
else
{
KeyBuffer = 0; //the other key
if((RepeatTimer == 0))//&& MenuPtr.Menu > 0)
{
switch(KeyTemp)
{
case vkSOURCE:
if(KeyRepeatCnt < 10){
KeyBuffer = KeyTemp;
RepeatTimer = 30;//KeyMenuTime;
if(!KeyLock)
KeyRepeatCnt = 10;
else
KeyRepeatCnt += 1;
}
OsdTimer = FuncBuf[pOSDTIMER] * 100;
break;
// case vkLEFT:
case vkMENU:
if(!KeyLock)
KeyBuffer = KeyTemp;
RepeatTimer = KeyMenuTime;
OsdTimer = FuncBuf[pOSDTIMER] * 100;
break;
case vkVADOWN:
case vkVALUP:
if(!KeyLock)
KeyBuffer = KeyTemp;
RepeatTimer = KeyRepeatTime;
OsdTimer = FuncBuf[pOSDTIMER] * 100;
break;
// case (vkMENU|vkLEFT|vkVALUP):
// if(!KeyLock)
// KeyBuffer = KeyTemp;
// break;
};
}
}
}
void KeyProcess(void)
{
Byte code MaxItemsTab[]={7,2,4,9,6,5,7,MAX_FACT_ITEM};
Byte temp;
ScanKeyPad();
if(OsdLock && KeyBuffer != (vkMENU|vkLEFT|vkVALUP))
KeyBuffer = 0;
// if((KeyRepeatCnt == 1) && KeyBuffer == vkSOURCE))
// KeyBuffer == 0;
// if(PowerDown && KeyBuffer != 0) //power down press any key
// if(KeyBuffer != vkPOWER)
// WarmUp();
if((VideoMute && FuncBuf[pVIDEOSOURCE]<3) || (FuncBuf[pVIDEOSOURCE]>2 && !VideoOK))
{
switch(KeyBuffer)
{
case vkPOWER:
case vkMENU|vkLEFT|vkPOWER: //burn in
break;
default:
KeyBuffer = 0;
break;
};
}
if(OutOfRange != 0 && KeyBuffer != vkPOWER)
KeyBuffer = 0;
temp = MenuPtr.Page;
if(MenuPtr.Menu == 2)
temp = 7;
MaxItem = MaxItemsTab[temp];
if(FuncBuf[pVIDEOSOURCE]==1 && temp == 0)//for DVI MenuPtr.Page = 0
MaxItem = 3;
else if(FuncBuf[pVIDEOSOURCE]>1 && temp == 0)//for CAVS and S-Video MenuPtr.Page = 0
MaxItem = 5;
if(!Saa7114En && temp == 5)
MaxItem = 2;
if(MenuPtr.Level == 1) //for level1 menu
BackPtr = MenuPtr.Ptr;
else if(MenuPtr.Level == 2)
BackPtr = 0;
if(MenuPtr.Menu == 0)
{
switch(KeyBuffer) //open main menu
{
case vkSOURCE:
if(!FactMode){
if(KeyRepeatCnt == 0){
MenuPtr.Menu = 5;
MenuPtr.Page = 5;
MenuPtr.Ptr = FuncBuf[pVIDEOSOURCE];
MenuPtr.Level = 1;
MenuPtr.Op = oUPDATEALL;
KeyLock = 1;
}
else if(KeyRepeatCnt == 10){
MenuPtr.Menu = 4;
MenuPtr.Level = 0;
MenuPtr.Op = oUPDATEALL;
KeyLock = 1;
OsdTimer = 3 * 100;
}
}
return;
break;
case vkMENU:
if(!FactMode){
MenuPtr.Menu = 1;
MenuPtr.Ptr = 0;
}
else{
MenuPtr.Menu = 2;
MenuPtr.Ptr = 3;
FuncBuf[pCOLORTEMP] = 2;
LoadColor(FuncBuf[pCOLORTEMP]);
SetContrast();
}
MenuPtr.Page = 0;
MenuPtr.Level = 0;
MenuPtr.Op = oUPDATEALL;
KeyLock = 1;
return;
break;
case vkVALUP:
if(!FactMode){
MenuPtr.Menu = 3;
MenuPtr.Page = 0;
MenuPtr.Ptr = 0;
MenuPtr.Level = 1;
MenuPtr.Op = oUPDATEALL;
KeyLock = 1;
}
return;
break;
case vkVADOWN:
if(!FactMode){
MenuPtr.Menu = 3;
MenuPtr.Page = 0;
MenuPtr.Ptr = 1;
MenuPtr.Level = 1;
MenuPtr.Op = oUPDATEALL;
KeyLock = 1;
}
return;
break;
};
}
switch(KeyBuffer)
{
case vkMENU:
if(MenuPtr.Menu == 2)
{
if(MenuPtr.Level == 0)
{
MenuPtr.Level= 1;
MenuPtr.Op = oENTER;
}
else if(MenuPtr.Level == 1)
{
MenuPtr.Level= 0;
MenuPtr.Ptr = BackPtr;
MenuPtr.Op = oENTER;
}
}
else if(MenuPtr.Menu == 5)
{
if(MenuPtr.Level == 0)
{
MenuPtr.Level= 1;
MenuPtr.Op = oENTER;
if(MenuPtr.Page == 5)
MenuPtr.Ptr = FuncBuf[pVIDEOSOURCE];
}
else if(MenuPtr.Level == 1)
{
MenuPtr.Ptr++;
if(MenuPtr.Ptr >= MaxItem)
MenuPtr.Ptr = 0;
MenuPtr.Op = oINCFUNC;
}
}
else if((MenuPtr.Menu > 0)&&(MenuPtr.Menu < 4))
{
if(MenuPtr.Level == 0)
{
MenuPtr.Level= 1;
MenuPtr.Op = oENTER;
if(MenuPtr.Page == 2)
MenuPtr.Ptr = FuncBuf[pCOLORTEMP];
else if(MenuPtr.Page == 3)
MenuPtr.Ptr = FuncBuf[pLANGUAGE];
else if(MenuPtr.Page == 5)
MenuPtr.Ptr = FuncBuf[pVIDEOSOURCE];
else
MenuPtr.Ptr = 0;
}
else if(MenuPtr.Level == 1)
{
if(MenuPtr.Menu == 3){
if(!FactMode){
if(MenuPtr.Ptr == 0)
MenuPtr.Ptr = 1;
else
MenuPtr.Ptr = 0;
MenuPtr.Op = oINCFUNC;
}
}
else{
if((MenuPtr.Page == 3)||(MenuPtr.Page == 2))
{
MenuPtr.Ptr++;
if(MenuPtr.Ptr >= MaxItem)
MenuPtr.Ptr = 0;
MenuPtr.Op = oINCVAL;
}
else
{
MenuPtr.Ptr++;
if(MenuPtr.Ptr >= MaxItem)
MenuPtr.Ptr = 0;
MenuPtr.Op = oINCFUNC;
}
}
}
else if(MenuPtr.Level == 2)
{
MenuPtr.Ptr++;
if(MenuPtr.Ptr >= 7)
MenuPtr.Ptr = 4;
MenuPtr.Op = oINCFUNC;
}
}
KeyLock = 1;
break;
case vkVALUP:
if(((MenuPtr.Menu > 0)&&(MenuPtr.Menu < 4)) || (MenuPtr.Menu == 5)){
if(MenuPtr.Level == 0)
{
if(MenuPtr.Menu == 2)
{
MenuPtr.Ptr++;
if(MenuPtr.Ptr >= MaxItem)
MenuPtr.Ptr = 0;
MenuPtr.Op = oINCFUNC;
}
else
{
MenuPtr.Page++;
if(MenuPtr.Page >= MAX_PAGE)
MenuPtr.Page = 0;
MenuPtr.Op = oINCPAGE;
KeyLock = 1;
}
}
else
{
if(MenuPtr.Page == 5)
MenuPtr.Op = oUPDATE;
else if(MenuPtr.Page == 2)
{
if((MenuPtr.Level == 1)&&(FuncBuf[pCOLORTEMP] == 3))
{
MenuPtr.Level= 2;
MenuPtr.Op = oUPDATE;
MenuPtr.Ptr = 4;
}
else if(MenuPtr.Level == 2)
MenuPtr.Op = oINCVAL;
}
else if(MenuPtr.Page != 3)
MenuPtr.Op = oINCVAL;
}
}
break;
case vkVADOWN:
if(((MenuPtr.Menu > 0)&&(MenuPtr.Menu < 4)) || (MenuPtr.Menu == 5)){
if(MenuPtr.Level == 0)
{
if(MenuPtr.Menu == 2)
{
if(MenuPtr.Ptr==0)
MenuPtr.Ptr = MaxItem;
MenuPtr.Ptr--;
MenuPtr.Op = oDECFUNC;
}
else
{
if(MenuPtr.Page==0)
MenuPtr.Page = MAX_PAGE;
MenuPtr.Page--;
MenuPtr.Op = oDECPAGE;
KeyLock = 1;
}
}
else{
if(MenuPtr.Page == 5)
MenuPtr.Op = oUPDATE;
else if(MenuPtr.Page == 2)
{
if((MenuPtr.Level == 1)&&(FuncBuf[pCOLORTEMP] == 3))
{
MenuPtr.Level= 2;
MenuPtr.Op = oUPDATE;
MenuPtr.Ptr = 4;
}
else if(MenuPtr.Level == 2)
MenuPtr.Op = oDECVAL;
}
else if(MenuPtr.Page != 3)
MenuPtr.Op = oDECVAL;
}
}
break;
case vkAUTO:
if(MenuPtr.Menu == 0 && SyncMode != 3 && !FactMode)
if(FuncBuf[pVIDEOSOURCE] == 0)
{
KeyLock = 1;
ShowMessage(MSG_AUTOTUNE);
AutoTune();
}
if(MenuPtr.Level == 0 || MenuPtr.Menu == 3 || MenuPtr.Menu == 4 || MenuPtr.Menu == 5)
Osd_Off();
else
{// Jacky 1021
if(MenuPtr.Level == 2){
MenuPtr.Level = 1;
MenuPtr.Ptr = FuncBuf[pCOLORTEMP];
MenuPtr.Op = oUPDATEALL;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -