📄 tv.c.bak
字号:
//#define DEBUG_MSG
#include "target.h"
#include "fq1236.h"
#define MENU_MAX 5
#define STARTX 4
#define STARTY 3
#define VOL_LINE 8
#define COLOR1 0
#define COLOR2 4
enum{
TV_CURCHANNEL_ADDR = TV_EEPROM_ADDRESS_START,
TV_SKIP_ADDR_START
};
extern unsigned char idata CurTvChannel;
extern unsigned char volume;
extern unsigned char idata AudioToneMode;
extern unsigned char idata tunerbuf[6];
unsigned char SearchPLLlock(unsigned char *tunerData);
unsigned char idata currentx = 0;
unsigned char idata tvmode = TV_OFF;
unsigned char idata find;
unsigned char idata input = 0;
unsigned char idata FirstSearchChannel = 0;
bit bSkip;
bit bCurrentLock = 0;
unsigned char code TVMenu[MENU_MAX][13]={
"CHANNEL:",
"SKIP: ",
"BAND: ",
"FINE: 00",
"AUTO SEARCH:"
};
unsigned char code BandStr[][4]={
"VLF",
"VHF",
"UHF"
};
unsigned char GetBandIndex(unsigned char channel)
{
if(channel<7)
return 0;
else if(channel<14)
return 1;
else
return 2;
}
unsigned char GetSkipStatus(unsigned char channel)
{
unsigned char uctemp;
ReadEepromBytes(TV_SKIP_ADDR_START+channel,&uctemp,1);
return !(uctemp&0x80);
}
void SetSkip(unsigned char channel,unsigned char skip)
{
unsigned char uctemp;
ReadEepromBytes(TV_SKIP_ADDR_START+channel,&uctemp,1);
if(skip)
uctemp &= 0x7F;
else
uctemp |= 0x80;
WriteEepromBytes(TV_SKIP_ADDR_START+channel,&uctemp,1);
}
unsigned char GetFindNum(unsigned char channel)
{
unsigned char uctemp;
ReadEepromBytes(TV_SKIP_ADDR_START+channel,&uctemp,1);
uctemp &= 0x7F;
if(uctemp>40)
uctemp = 20;
return uctemp;
}
unsigned char GetNextChannel(unsigned char channel)
{
unsigned char i;
for(i=channel+1;i<=MAX_CHANNEL;i++){
if(!GetSkipStatus(i))
return i;
}
//
for(i=MIN_CHANNEL;i<channel;i++){
if(!GetSkipStatus(i))
return i;
}
return 0xff;
}
unsigned char GetPreChannel(unsigned char channel)
{
unsigned char i;
//not valid channel
if(channel<MIN_CHANNEL)
return 0xff;
for(i=channel-1;i>=MIN_CHANNEL;i--){
if(!GetSkipStatus(i))
return i;
}
//
for(i=MAX_CHANNEL;i>channel;i--){
if(!GetSkipStatus(i))
return i;
}
return 0xff;
}
void ShowTVNumber(unsigned char channel)
{
TVOutChar(19,0,'C',COLOR2);
TVOutChar(20,0,'H',COLOR2);
TVOutChar(22,0,channel/10+'0',COLOR2);
TVOutChar(23,0,channel%10+'0',COLOR2);
FPOutChar(7,CurTvChannel/10+'0');
FPOutChar(8,CurTvChannel%10+'0');
}
void ShowToneValue(unsigned char x,unsigned char y,unsigned char tone)
{
if(tone>11){
tone -= 12;
TVOutChar(x,y,'+',COLOR2);
}
else{
tone = 12-tone;
TVOutChar(x,y,'-',COLOR2);
}
TVOutChar(x+1,y,tone/10+'0',COLOR2);
TVOutChar(x+2,y,tone%10+'0',COLOR2);
// TVOutChar(x+3,y,'d',3);
// TVOutChar(x+4,y,'B',3);
}
void ShowTVInputNumber(unsigned char channel)
{
TVOutChar(22,0,channel/10+'0',COLOR2);
TVOutChar(23,0,'-',COLOR2);
}
void ShowTVBass(unsigned char ucval)
{
TVOutString(0,VOL_LINE,"Bass ",COLOR2);
ShowToneValue(12,VOL_LINE,ucval);
}
void ShowTVTreble(unsigned char ucval)
{
TVOutString(0,VOL_LINE,"Treble ",COLOR2);
ShowToneValue(12,VOL_LINE,ucval);
}
void ShowTVBalance(unsigned char ucval)
{
TVOutString(0,VOL_LINE,"Balance ",COLOR2);
ShowToneValue(12,VOL_LINE,ucval);
}
void ShowTVFade(unsigned char ucval)
{
TVOutString(0,VOL_LINE,"Fade ",COLOR2);
ShowToneValue(12,VOL_LINE,ucval);
}
void ShowMenuItem(unsigned char item,unsigned char focus)
{
unsigned char uctemp;
uctemp = focus?COLOR1:COLOR2;
TVOutString(STARTX,STARTY+item,TVMenu[item],uctemp);
if(focus){
TVOutChar(STARTX-2,STARTY+item,'>',COLOR2);
}
else{
TVOutChar(STARTX-2,STARTY+item,0xff,COLOR2);
}
switch(item){
case 0:
// uctemp = COLOR2;
TVOutChar(STARTX+10,STARTY,'C',uctemp);
TVOutChar(STARTX+11,STARTY,'H',uctemp);
TVOutChar(STARTX+13,STARTY,CurTvChannel/10+'0',uctemp);
TVOutChar(STARTX+14,STARTY,CurTvChannel%10+'0',uctemp);
break;
case 1:
bSkip = GetSkipStatus(CurTvChannel);
if(bSkip)
TVOutString(STARTX+10,STARTY+item,"ON ",uctemp);
else
TVOutString(STARTX+10,STARTY+item,"OFF",uctemp);
break;
case 2:
//draw band
uctemp = GetBandIndex(CurTvChannel);
TVOutString(STARTX+10,STARTY+2,BandStr[uctemp],COLOR2);
break;
case 3:
break;
case 4:
TVOutString(STARTX+13,STARTY+4,"OFF",uctemp);
break;
}
}
void ShowSearchBar(unsigned char channel)
{
unsigned char uctemp = GetBandIndex(channel);
unsigned char i;
TVOutString(0,7,"SEARCH",COLOR2);
TVOutString(8,7,BandStr[uctemp],COLOR2);
uctemp = channel/4;
for(i=0;i<uctemp;i++)
TVOutChar(i,VOL_LINE,1,COLOR2);
TVOutChar(uctemp,VOL_LINE,4,COLOR2);
for(i=uctemp+1;i<18;i++)
TVOutChar(i,VOL_LINE,1,COLOR2);
TVOutChar(20,VOL_LINE,channel/10+'0',COLOR2);
TVOutChar(21,VOL_LINE,channel%10+'0',COLOR2);
}
void ShowFindBar(unsigned char find)
{
unsigned char i;
TVOutString(8,7,"FINE",COLOR2);
for(i=0;i<21;i++)
TVOutChar(i,VOL_LINE,1,COLOR2);
if(find>18){
TVOutChar(find/2,VOL_LINE,4,COLOR2);
TVOutChar(21,VOL_LINE,'+',COLOR2);
TVOutChar(22,VOL_LINE,(find-18)/10+'0',COLOR2);
TVOutChar(23,VOL_LINE,(find-18)%10+'0',COLOR2);
}
else{
TVOutChar(find/2,VOL_LINE,4,COLOR2);
TVOutChar(21,VOL_LINE,'-',COLOR2);
TVOutChar(22,VOL_LINE,(18-find)/10+'0',COLOR2);
TVOutChar(23,VOL_LINE,(18-find)%10+'0',COLOR2);
}
}
void TVDisplayVol(unsigned char vol)
{
TVOutString(0,VOL_LINE,"volume ",COLOR2);
TVOutChar(12,VOL_LINE,vol/10+'0',COLOR2);
TVOutChar(13,VOL_LINE,vol%10+'0',COLOR2);
}
void TVMenuDraw()
{
unsigned char i;
for(i=0;i<5;i++)
ShowMenuItem(i,i==currentx);
}
void AutoCheckPllLock()
{
unsigned char ucSearch;
#ifdef DEBUG_MSG
#ifdef __EMULATOR_H__
static unsigned char count = 0;
#endif
#endif
if(tvmode!=TV_OFF)
return;
SetTvTunerFreqBuf(CurTvChannel);
//SetTvChannel(CurTvChannel);
ucSearch = SearchPLLlock(tunerbuf);
ShowLcdHex(0x40,ucSearch);
ShowLcdHex(0x42,count++);
if(bCurrentLock){
if(ucSearch){
SaveKeyToBuff(PLL_LOCK_KEY);
bCurrentLock = 0;
}
}
else{
if(ucSearch==0){
SaveKeyToBuff(PLL_LOCK_KEY);
bCurrentLock = 1;
}
}
}
void UpValueKey()
{
switch(currentx){
case 0:
if(CurTvChannel<MAX_CHANNEL)
CurTvChannel++;
else
CurTvChannel = MIN_CHANNEL;
ShowMenuItem(currentx,1);
SetTvChannel(CurTvChannel);
ShowMenuItem(1,0);
ShowMenuItem(2,0);
TvDelay();
TvDelay();
break;
case 1:
bSkip = GetSkipStatus(CurTvChannel);
SetSkip(CurTvChannel,!bSkip);
ShowMenuItem(currentx,1);
break;
case 3:
tvmode = TV_FIND;
CLearOsdScreen(bCurrentLock);
find = GetFindNum(CurTvChannel);
ShowFindBar(find);
break;
case 4:
tvmode = TV_SEARCH;
FirstSearchChannel = 0;
CurTvChannel = 2;
CLearOsdScreen(0);
SaveKeyToBuff(TV_CHECK_KEY);
break;
}
}
void DownValueKey()
{
switch(currentx){
case 0:
if(CurTvChannel>MIN_CHANNEL)
CurTvChannel--;
else
CurTvChannel = MAX_CHANNEL;
ShowMenuItem(currentx,1);
SetTvChannel(CurTvChannel);
ShowMenuItem(1,0);
ShowMenuItem(2,0);
break;
case 1:
bSkip = GetSkipStatus(CurTvChannel);
SetSkip(CurTvChannel,!bSkip);
ShowMenuItem(currentx,1);
break;
case 3:
break;
case 4:
break;
}
}
void TVMenuDealFunc(unsigned int key)
{
switch(key){
case DOWN_KEY:
ShowMenuItem(currentx,0);
switch(currentx){
case 0:
currentx = 1;
break;
case 1:
currentx = 4;
// currentx = 3;
break;
case 3:
currentx = 4;
break;
default:
currentx = 0;
break;
}
ShowMenuItem(currentx,1);
SetTimerFunc(TIME_5SEC,SETUP_KEY);
break;
case UP_KEY:
ShowMenuItem(currentx,0);
switch(currentx){
case 4:
currentx = 1;
// currentx = 3;
break;
case 3:
currentx = 1;
break;
case 0:
currentx = 4;
break;
default:
currentx = 0;
break;
}
ShowMenuItem(currentx,1);
SetTimerFunc(TIME_5SEC,SETUP_KEY);
break;
case LEFT_KEY:
DownValueKey();
SetTimerFunc(TIME_5SEC,SETUP_KEY);
break;
case RIGHT_KEY:
UpValueKey();
SetTimerFunc(TIME_5SEC,SETUP_KEY);
break;
case SETUP_KEY:
tvmode = TV_OFF;
CLearOsdScreen(bCurrentLock);
SetCrystal(bCurrentLock);
SaveKeyToBuff(REDRAW_KEY);
SetTimerFunc(0xffff,NULL_KEY);
break;
}
}
void TVSearchFunc(unsigned int key)
{
switch(key){
case LEFT_KEY:
tvmode = TV_OFF;
SaveKeyToBuff(REDRAW_KEY);
WriteEepromBytes(TV_CURCHANNEL_ADDR,&CurTvChannel,1);
break;
case TV_CHECK_KEY:
if(CurTvChannel > MAX_CHANNEL){
SaveKeyToBuff(LEFT_KEY);
SetTimerFunc(0,0);
MuteOff();/*andy*/
if(FirstSearchChannel)
CurTvChannel = FirstSearchChannel;
else
CurTvChannel = MIN_CHANNEL;
SetTvChannel(CurTvChannel);
}
else{
unsigned char ucSearch;
MuteOn();/*andy*/
SetTvChannel(CurTvChannel);
ShowSearchBar(CurTvChannel);
TvDelay();
ucSearch = SearchPLLlock(tunerbuf);
if(ucSearch){
ShowLcdString(0x10,"UNLOCK");
SetSkip(CurTvChannel,1);
// SaveKeyToBuff(TV_CHECK_KEY);
SetTimerFunc(TIME_250MS,TV_CHECK_KEY);
}
else{
ShowLcdString(0x10,"LOCK");
if(FirstSearchChannel==0)
FirstSearchChannel = CurTvChannel;
SetSkip(CurTvChannel,0);
SetTimerFunc(TIME_250MS,TV_CHECK_KEY);
}
CurTvChannel++;
}
break;
}
}
void TVFindFunc(unsigned int key)
{
switch(key){
case LEFT_KEY:
if(find>0){
find--;
ShowFindBar(find);
}
SetTimerFunc(TIME_5SEC,SETUP_KEY);
break;
case RIGHT_KEY:
if(find<40){
find++;
ShowFindBar(find);
}
SetTimerFunc(TIME_5SEC,SETUP_KEY);
break;
case SETUP_KEY:
default:
tvmode = TV_OFF;
CLearOsdScreen(bCurrentLock);
SetTvChannel(CurTvChannel);
SetTimerFunc(0xffff,NULL_KEY);
break;
}
}
void TVOffFunc(unsigned int key)
{
unsigned char uctemp;
//
if(AudioToneMode){
AudioToneDealFunc(key);
return;
}
switch(key){
case NUM0_KEY:
case NUM1_KEY:
case NUM2_KEY:
case NUM3_KEY:
case NUM4_KEY:
case NUM5_KEY:
case NUM6_KEY:
case NUM7_KEY:
case NUM8_KEY:
case NUM9_KEY:
input +=(key-NUM0_KEY);
if(input>=MIN_CHANNEL&&input<=MAX_CHANNEL){
CurTvChannel = input;
if(!bMuteOn)
PT2318MuteOn();
TvDelay();
SetTvChannel(CurTvChannel);
if(!bMuteOn)
TvDelay();
MuteOff();
}
ShowTVNumber(CurTvChannel);
input = 0;
break;
case NUM10_KEY:
if(input<(MAX_CHANNEL/10)*10)
input += 10;
else
input = 0;
ShowTVInputNumber(input);
SetTimerFunc(TIME_3SEC,REDRAW_KEY);
break;
case TONE_KEY:
AudioToneDealFunc(key);
break;
case MODE_KEY:
case MUTE_KEY:
case VERSION_KEY:
case TEST_LCD_KEY:
case BAND_KEY:
case POWER_KEY:
defDealKey(key);
break;
case VOL_UP_KEY:
case VOL_DOWN_KEY:
defDealKey(key);
TVDisplayVol(volume);
break;
case DOWN_KEY:
uctemp = GetPreChannel(CurTvChannel);
if(uctemp!=0xff){
if(!bMuteOn)
PT2318MuteOn();
TvDelay(); //andy 2004-6-9 20:08
CurTvChannel = uctemp;
SetTvChannel(uctemp);
ShowTVNumber(CurTvChannel);
WriteEepromBytes(TV_CURCHANNEL_ADDR,&CurTvChannel,1);
if(!bMuteOn)
TvDelay();
MuteOff();
}
}
break;
case UP_KEY:
uctemp = GetNextChannel(CurTvChannel);
if(uctemp!=0xff){
if(!bMuteOn)
PT2318MuteOn();
TvDelay();
CurTvChannel = uctemp;
SetTvChannel(uctemp);
ShowTVNumber(CurTvChannel);
WriteEepromBytes(TV_CURCHANNEL_ADDR,&CurTvChannel,1);
if(!bMuteOn)
TvDelay();
MuteOff();
}
break;
case SETUP_KEY:
tvmode = TV_MENU;
CLearOsdScreen(0);
currentx = 0;
SetCrystal(0);
TVMenuDraw();
SetTimerFunc(TIME_5SEC,SETUP_KEY);
break;
case REDRAW_KEY:
if(bNeedSaveTone){
bNeedSaveTone = 0;
SaveTone();
}
CLearOsdScreen(bCurrentLock);
FPOutString(0," ");
ShowTVNumber(CurTvChannel);
FPDisplayIcon(FP_INFO_TV,1);
break;
case INIT_KEY:
MuteOff();
ReadEepromBytes(TV_CURCHANNEL_ADDR,&CurTvChannel,1);
if((CurTvChannel<MIN_CHANNEL)||(CurTvChannel>MAX_CHANNEL))
CurTvChannel = MIN_CHANNEL;
iic_WriteByte(IF_ADDR,0x02,0x44);
SetTvChannel(CurTvChannel);
ShowTVNumber(CurTvChannel);
FPDisplayIcon(FP_INFO_TV,1);
break;
case DESIGNER_KEY:
TVOutString(0,1,"Designed by Andy.Jiang",COLOR2);
SetTimerFunc(TIME_10SEC,REDRAW_KEY);
break;
case PLL_LOCK_KEY:
SetCrystal(bCurrentLock);
break;
}
}
void TVFunc(unsigned int key,unsigned char *para)
{
// if(key == PLL_LOCK_KEY){
// SetCrystal(bCurrentLock);
// }
switch(tvmode){
case TV_OFF:
TVOffFunc(key);
break;
case TV_MENU:
TVMenuDealFunc(key);
break;
case TV_FIND:
TVFindFunc(key);
break;
case TV_SEARCH:
TVSearchFunc(key);
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -