⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tunner.c

📁 SANYO LC72131D+ LA1823
💻 C
字号:
#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;//清 点 
	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;//有问题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;//频率小数点之前数
		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;//显示第几个台
		temp2 = tunner_ST / 10;  
		}
	else if(flag_Num10)
		{
		temp1 = NULL_char;//按10+时不显示低位
		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()//手动送频率
	{
	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--)//步进频率 
		{		
		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)//打开静音
						{
						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;
	}

⌨️ 快捷键说明

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