?? tunner.c
字號(hào):
#include "tunner.h"
#include "pt6312.h"
#include "remote.h"
bit flag_Num10;
bit flag_FM; //=1; is FM
bit flag_FM_STEREO; //=0; is mono
//=1; is stereo
//bit _bStereo_enable;
bit _bStopAutoSearch; //=0;
//=1; stop the auto search
bit flag_autosearch;
uchar _back_Station;
unsigned int tunner_freq;
extern uchar mem_station;
uchar _current_STATION;
void tunner_freqVFD(void)
{
uchar jj;
uchar tunner_freq_bcdH; //tunner_freq's decimal high 2bits bcd
uchar tunner_freq_bcdL; //tunner freq's decimal low 2bits bcd
uchar tunner_ST;
uchar temp2,temp1;
int temp;
grid_dat4 &= 0xbf;//清AM
grid_dat5 &= 0xbf;//清fm
grid_dat3 &= 0xbf;//清 點(diǎn)
grid_dat1 &= 0x9f;//清kHZ,MHZ
if(tuner_mem == 1)
{grid_dat2 |=0x40;}//MEM
else
{grid_dat2 &=0xbf;}
grid_dat6 &= 0xbf;//清ST
if(!flag_FM)
{
grid_dat5|= 0x40;
grid_dat1 |= 0x20;
#ifdef AM_step9K
temp = 9*(tunner_freq-108)+522;
tunner_freq_bcdH = (uchar)(temp/100);
tunner_freq_bcdL = (uchar)(temp%100);
#else
tunner_freq_bcdH = (uchar) 52+(tunner_freq-97);
tunner_freq_bcdL = 0;
#endif
temp2 = A_char;
if(tuner_mem == 1)
{
tunner_ST = (mem_station -58)/2;//118
}
else
{
tunner_ST = (_current_STATION-58)/2;//有問(wèn)題118
}
}
else
{
if(flag_FM_STEREO)
{
grid_dat6 |= 0x40;
}
grid_dat4|= 0x40;
grid_dat1|= 0x40;
grid_dat3|= 0x40;
temp2 = F_char;
tunner_freq_bcdH = (tunner_freq/2-107)/10;//頻率小數(shù)點(diǎn)之前數(shù)
tunner_freq_bcdL = (uchar) (tunner_freq*5-1070 - tunner_freq_bcdH*100);//取MHZ后兩位——X100
if(tuner_mem == 1)
{tunner_ST = mem_station/2+1;}
else
{tunner_ST = _current_STATION/2+1;}
}
temp1 = M_char;
jj = tunner_freq_bcdH/100;
tunner_freq_bcdH -= jj*100;
pt6312_writeNum(Num_pos1,tunner_freq_bcdL%10);//0x0f
pt6312_writeNum(Num_pos2,tunner_freq_bcdL/10);//0x12
if((tunner_freq_bcdH > 9)||(jj != 0))
{
pt6312_writeNum(Num_pos4,tunner_freq_bcdH/10);//0x18
}
else
{pt6312_writeNum(Num_pos4, NULL_char);}
pt6312_writeNum(Num_pos3,tunner_freq_bcdH%10); //0x15
if(jj != 0)//最高位100M
{pt6312_writeNum(Num_pos5,1);} //0x1b
else
{
pt6312_writeNum(Num_pos5,NULL_char);
}
pt6312_Draw();
if(fg_station||_bInAutoSearch)
{
temp1 = tunner_ST % 10;//顯示第幾個(gè)臺(tái)
temp2 = tunner_ST / 10;
}
else if(flag_Num10)
{
temp1 = NULL_char;//按10+時(shí)不顯示低位
temp2 = _back_Station/10;//高位
}
pt6312_writeNum(Num_pos7,temp2);//0x21
pt6312_writeNum(Num_pos6,temp1);//0x1e
}
void delay12ms()
{
uchar i,j;
uchar key_temp=0;
#ifdef OSC_12M
for(i = 8; i!= 0; i--)
#else
for(i = 3;i != 0;i--)
#endif
{
for(j = 250;j != 0;j--)//250
{
_nop_();
#ifdef OSC_12M
_nop_();
#endif
}
}
key_temp = pt6312_key_scan();
if(IR_isOK)
{
key_temp = remote_buffer;
}
if((key_temp==REM_BACKWARD)||(key_temp==REM_FORWARD))//方向左右鍵,停止搜索
{
flag_upsearch = flag_downsearch = 0;
_bStopAutoSearch = 1;
flag_autosearch = 0;
}
}
void tunner_senddata(uchar _dat)
{
uchar i;
ACC=_dat;
for(i=8;i>0;i--)
{
tunner_DI=ACC0;
tunner_CLK=0;
tunner_CLK=1;
ACC>>=1;
}
}
void tunner_senddatas(unsigned int _dat)
{
uchar i;
unsigned int _send=0x01;
if(!flag_FM) {_dat<<=4;}
for(i=16;i>0;i--)
{
if((_dat & _send)!=0)
{
tunner_DI=1;
}
else
{
tunner_DI=0;
}
tunner_CLK=0;
tunner_CLK=1;
_send<<=1;
}
}
void tunner_MODE0(uchar _dat)
{
tunner_CLK = 1;
tunner_CE = 0;
tunner_senddata(WRITE_MODE0);
tunner_CE = 1;
tunner_senddatas(tunner_freq);
tunner_senddata(_dat);
tunner_CE=0;
tunner_DO=1;
}
void tunner_MODE1(uchar _dat1,uchar _dat2)
{
tunner_CLK = 1;
tunner_CE = 0;
tunner_senddata(WRITE_MODE1);
tunner_CE=1;
tunner_senddata(_dat1);
tunner_senddata(MODE1_SECONDDATA);
tunner_senddata(_dat2);
tunner_CE=0;
tunner_DO=1;
}
long tunner_READMODE(void)
{
uchar i;
unsigned long _if_count;
_if_count = 0;
tunner_CLK = 1;
tunner_CE = 0;
tunner_senddata(READMODE);
tunner_CE=1;
tunner_DO = 1;
tunner_CLK = 0;
tunner_CLK = 1;
for(i = 3; i != 0; i--)
{
tunner_CLK = 0;
tunner_CLK = 1;
}
for(i=20;i!=0;i--)
{
tunner_CLK = 0;
tunner_CLK = 1;
_if_count <<= 1;
if(tunner_DO) {_if_count |= 0x01;}
}
tunner_CE = 0;
tunner_DO = 1;
return(_if_count);// & 0x000fffff);
}
void tunner_Set()//手動(dòng)送頻率
{
if(flag_FM)
{
//timer_8ms = 0;
tunner_MODE0(FM_RESETIF);
if(flag_FM_STEREO)
{
tunner_MODE1(FM_MUTE_OFF | FM_STEREO_CMD, FM_DELAY_TIME);
}
else
{
tunner_MODE1(FM_MUTE_OFF | FM_MONO_CMD, FM_DELAY_TIME);
}
}
else
{
tunner_MODE0(AM_RESETIF);
tunner_MODE1(AM_MUTE_OFF/*|FM_MONO_CMD*/, AM_DELAY_TIME);//tunner_delaytime);
}
}
void tunner_AutoSearch(bit direction)
{
long temp;
uchar loop_count;
uchar i;
uchar tunner_mute_on;
uchar tunner_mute_off;
uchar tunner_delaytime;
uchar reset_if;
uchar start_if;
uchar tunner_delaytime_div;
//if(flag_mute) return;
tunner_mute_on = FM_MUTE_ON;
tunner_mute_off = FM_MUTE_OFF;
tunner_delaytime = FM_DELAY_TIME;
loop_count = (FM_TOP_FREQ-FM_BOT_FREQ)/*FM_STEP*/;
reset_if = FM_RESETIF;
start_if = FM_STARTIF;
tunner_delaytime_div = FM_DELAY_TIME_DIV;
if(!flag_FM)
{
tunner_mute_on = AM_MUTE_ON;
tunner_mute_off = AM_MUTE_OFF;
tunner_delaytime = AM_DELAY_TIME;
loop_count = (AM_TOP_FREQ-AM_BOT_FREQ)/*AM_STEP*/;
reset_if = AM_RESETIF;
start_if = AM_STARTIF;
tunner_delaytime_div=AM_DELAY_TIME_DIV;
}
_bInAutoSearch=1;
for(;loop_count>0;loop_count--)//步進(jìn)頻率
{
if(direction)
{
tunner_freq++;//=2;
if(!flag_FM)
{
if(tunner_freq > AM_TOP_FREQ)
{tunner_freq=AM_BOT_FREQ;
if(flag_autosearch)
{_bStopAutoSearch=1;
_bInAutoSearch=flag_autosearch=0;
return;
}
}
}
else
{
if(tunner_freq > FM_TOP_FREQ)
{tunner_freq=FM_BOT_FREQ;
if(flag_autosearch)
{_bStopAutoSearch=1;
_bInAutoSearch=flag_autosearch=0;
return;
}
}
}
}
else
{
tunner_freq--;//=2;
if(!flag_FM)
{
if(tunner_freq<AM_BOT_FREQ) {tunner_freq=AM_TOP_FREQ;}
}
else
{
if(tunner_freq<FM_BOT_FREQ) {tunner_freq=FM_TOP_FREQ;}
}
}
tunner_MODE0(reset_if);
tunner_MODE1(tunner_mute_on|FM_MONO_CMD,tunner_delaytime);
tunner_MODE0(start_if);
tunner_MODE1(tunner_mute_on|FM_MONO_CMD,tunner_delaytime);
tunner_freqVFD();
for(i = 0; i < 10; i ++)
{
delay12ms();
}
temp = tunner_READMODE();//讀中頻
if(!_bStopAutoSearch)//搜索中
{
if((temp > TUNNER_IF_LOW_LIMIT)&&(temp < TUNNER_IF_HIGH_LIMIT))
{
tunner_MODE0(reset_if);
tunner_MODE1(tunner_mute_on|FM_MONO_CMD,tunner_delaytime);
tunner_MODE0(start_if);
tunner_MODE1(tunner_mute_on|FM_MONO_CMD,tunner_delaytime);
for(i = 0; i < 10; i ++)
{
delay12ms();
}
temp = tunner_READMODE();
if((temp >= TUNNER_IF_LOW_LIMIT)&&(temp <= TUNNER_IF_HIGH_LIMIT))
{
if(flag_FM_STEREO)//打開(kāi)靜音
{
tunner_MODE1(tunner_mute_off|FM_STEREO_CMD, tunner_delaytime);
}
else
{
tunner_MODE1(tunner_mute_off|FM_MONO_CMD, tunner_delaytime);
}
_bInAutoSearch = 0;
_bStopAutoSearch = 0;
return;
}
}
}
else
{
if(flag_FM_STEREO)
{
tunner_MODE1(tunner_mute_off|FM_STEREO_CMD, tunner_delaytime);
}
else
{
tunner_MODE1(tunner_mute_off|FM_MONO_CMD, tunner_delaytime);
}
_bInAutoSearch = 0;
_bStopAutoSearch = 0;
return;
}
}
_bInAutoSearch=0;
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -