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

📄 tuner.c

📁 此代码是LG tuner(模拟电视解调器)的51MCU驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
			}			
			
		if((AFC<3||AFC>0x0c)&&VIF_Level())
			{
				i = EAD_TV_START + ChannelNUM*CH_IN_EAD;
				//EEPROM_Wr_Byte(i,TV_CHDEF_STATE);
				EEPROM_Wr_Byte(i,PB>>8);
				EEPROM_Wr_Byte(i+1,PB&0xff);
				ChannelNUM++;
				EEPROM_Wr_Byte(EAD_TV_CHANNEL_SUM,ChannelNUM-1);
				EEPROM_Wr_Byte(EAD_TV_CHANNEL_CURRENT,ChannelNUM);
				PB+=60;
				break;
			}
		}
		Print_PLL(8, VIDEO_BAR_VStart+1, PB);
		Show_Menu();
		//Print_CH(24, 1, ChannelNUM);
		//PB+=60;
	}
	while(PB<=TV_BAND_VU_HLIMIT);

	EEPROM_Wr_Byte(EAD_TV_CHANNEL_CURRENT,0);
	EEPROM_Wr_Byte(EAD_TV_CHANNEL_LAST,0);
	if(ChannelNUM == 0)
		{
			GetBand(TV_BAND_VL_LLIMIT);
			Write_PLL(PLL_Band, TV_BAND_VL_LLIMIT);
			PB = TV_BAND_VL_LLIMIT;
			//EEPROM_Wr_Byte(EAD_TV_START,TV_CHDEF_STATE);
			EEPROM_Wr_Byte(EAD_TV_START,PB>>8);
			EEPROM_Wr_Byte(EAD_TV_START+1,PB&0xff);
			EEPROM_Wr_Byte(EAD_TV_CHANNEL_SUM,0);
		}
			
	i = EAD_TV_START ;
	Channel_WORD.CH_B[0] = EEPROM_Rd_Byte(i);
	Channel_WORD.CH_B[1] = EEPROM_Rd_Byte(i+1);
	GetBand(Channel_WORD.CH_W);
	Write_PLL(PLL_Band, Channel_WORD.CH_W);
	PB = Channel_WORD.CH_W;
	ResetOSD();
	//Print_CH(24, 1, 0);
	//if(bMute == 0)
		byM230_DA3 = EEPROM_Rd_Byte(EAD_VOL);
	
	Print_PLL(8, VIDEO_BAR_VStart+1, PB);
}
			
	
	
void Forward_50KHZ(BYTE n)
{
	PB+=n;
	GetBand(PB);
	Write_PLL(PLL_Band,PB);
	DelayTuner(5*n);
}

void Back_50KHZ(BYTE n)
{
	PB-=n;
	GetBand(PB);
	Write_PLL(PLL_Band,PB);
	DelayTuner(5*n);
}

void Get_HSYNC(void)
{
	if(byM230_HCNTH&0x80)
		H_Count = 0;
	else
		H_Count = (byM230_HCNTH&0x3f)*256+byM230_HCNTL;
}
	
void HSYNC_Range(void)		//Range is 12K~~18K
{
	NOSign = 1;
	Get_HSYNC();
	if(H_Count>0x1BC7&&H_Count<0x29AA)	//	if(H_Count>0x1000&&H_Count<0x4000)
		NOSign = 0;
}

void HSYNC_Range2(void)		//Range is 12K~~18K
{
	NOSign = 1;
	Get_HSYNC();
	if(H_Count>0x1f40&&H_Count<0x2155)	//	if(H_Count>0x1BC7&&H_Count<0x29AA)
		NOSign = 0;
}
	
void Tuner_ADC(void)
{
	IICRead(SlvTuner,0x00,1);
	TunerADC = IICBuf.ByteArray[0]&0x07;
}

BYTE Tuner_AFC(void)
{
	BYTE AFC;
	IICRead(TUNER_IF,0x00,1);
	AFC = (IICBuf.ByteArray[0]&0x1e)>>1;
	return	AFC;
}
	
BIT	VIF_Level(void)
{
	BIT VIF = 0;
	IICRead(TUNER_IF,0x00,1);
	if(IICBuf.ByteArray[0]&0x40)
		VIF = 1;
	return	VIF;
}

void Print_PLL(BYTE H_Start,BYTE C_Start,WORD pll)
{
	BYTE baiw,shiw,gew,value;
	WORD zhengshu;
	float xiaoshu,frf;
	frf = pll/20.0-PictureIF;
	zhengshu = (WORD)frf;
	xiaoshu = frf-zhengshu;
	
	baiw = zhengshu/100;
	shiw = (zhengshu%100)/10;
	gew = zhengshu%10;
	gotoxy(H_Start,C_Start);
	PrintChar(_f,red,0);
	PrintChar(_p,red,0);
	PrintChar(_COM,red,0);
	if(baiw>9)
		PrintChar(HexTab[baiw%10],red,0);
	else
		PrintChar(HexTab[baiw],red,0);
	
	PrintChar(HexTab[shiw],red,0);
	PrintChar(HexTab[gew],red,0);
	value=(BYTE)(xiaoshu*100);
	shiw = value/10;
	baiw = value%10;
	PrintChar(_DOT,red,0);
	PrintChar(HexTab[shiw],red,0);
	PrintChar(HexTab[baiw],red,0);
	PrintChar(__,red,0);
	PrintChar(_M,red,0);
	PrintChar(_H,red,0);
	PrintChar(_z,red,0);
	
}

void Print_CH(BYTE H_Start,BYTE C_Start,BYTE CH)
{	
	//BYTE i,j;
	gotoxy(H_Start,C_Start);
	PrintChar(_C, green, 0);
	PrintChar(_H, green, 0);
	PrintChar(_COM, green, 0);
	PrintDec(CH, green);
	/*i = CH/100;
	PrintChar(HexTab[i], green, 0);
	i = (CH-i*100)/10;
	j = CH%10;
	PrintChar(HexTab[i], green, 0);
	PrintChar(HexTab[j], green, 0);*/
}

void DelayTuner(BYTE n)
{
	BYTE i,j;
	i=n;
		do{
		j=50;
		do{
		SetWatchDog(4);
		ClearHVflag();//debug 搜台死机7.30
		}
		while(j--);
		i--;
		ClearHVflag();//debug 搜台死机7.30
		}
		while(i);
}  

void ClearHVflag(void)
{
	if(byM230_INTFLG!= 0)
		byM230_INTFLG = 0;
}

void Initial_EEPROM_PLL(void)	//initial CHANNEL eeprom 
{
	BYTE i;
	//WORD w_i;
	//w_i=EAD_TV_START;
		for(i=0;i<EEPROM_Rd_Byte(EAD_TV_CHANNEL_SUM);i++)//EEPROM_Rd_Byte(EAD_TV_CHANNEL_SUM)
			{
					EEPROM_Wr_Byte(EAD_TV_START+CH_IN_EAD*i, TV_BAND_VL_LLIMIT>>8);//initial CH eeprom
					EEPROM_Wr_Byte(EAD_TV_START+CH_IN_EAD*i+1, TV_BAND_VL_LLIMIT&0xff);			
			}


}

void CH_PLUS(void)
{

		BYTE i,CH;
		byM230_DA3 = 0;
		CH = EEPROM_Rd_Byte(EAD_TV_CHANNEL_CURRENT);
		EEPROM_Wr_Byte(EAD_TV_CHANNEL_LAST, CH);
		
		if(CH>=0&&CH<EEPROM_Rd_Byte(EAD_TV_CHANNEL_SUM))
			CH++;
		else
			CH = 0;
		EEPROM_Wr_Byte(EAD_TV_CHANNEL_CURRENT, CH);

		i = EAD_TV_START + CH*CH_IN_EAD;
		Channel_WORD.CH_B[0] = EEPROM_Rd_Byte(i);
		Channel_WORD.CH_B[1] = EEPROM_Rd_Byte(i+1);
		GetBand(Channel_WORD.CH_W);
		Write_PLL(PLL_Band, Channel_WORD.CH_W);
		PB = Channel_WORD.CH_W;
		ResetOSD();
		Print_CH(CH_HStart, CH_VStart, CH);
		//if(bMute)
			byM230_DA3 = EEPROM_Rd_Byte(EAD_VOL);
		Print_PLL(8, VIDEO_BAR_VStart+1, PB);

}

void CH_SUB(void)
{
		BYTE i,CH;
		byM230_DA3 = 0;
		CH = EEPROM_Rd_Byte(EAD_TV_CHANNEL_CURRENT);
		EEPROM_Wr_Byte(EAD_TV_CHANNEL_LAST, CH);
		if(CH>0&&CH<=EEPROM_Rd_Byte(EAD_TV_CHANNEL_SUM))
			CH--;	
		else
			CH = EEPROM_Rd_Byte(EAD_TV_CHANNEL_SUM);
		EEPROM_Wr_Byte(EAD_TV_CHANNEL_CURRENT, CH);

		i = EAD_TV_START + CH*CH_IN_EAD;
		Channel_WORD.CH_B[0] = EEPROM_Rd_Byte(i);
		Channel_WORD.CH_B[1] = EEPROM_Rd_Byte(i+1);
		GetBand(Channel_WORD.CH_W);
		Write_PLL(PLL_Band, Channel_WORD.CH_W);
		PB = Channel_WORD.CH_W;
		ResetOSD();
		Print_CH(CH_HStart, CH_VStart, CH);
		//if(bMute)
			byM230_DA3 = EEPROM_Rd_Byte(EAD_VOL);
		Print_PLL(8, VIDEO_BAR_VStart+1, PB);

}

#define TunerBar_Degree			5
#define TunerBar_Length			16
#define TunerBar_Sum_Degree	(TunerBar_Degree*TunerBar_Length)



  void PrintTunerBar(BYTE Cstart, BYTE Rstart)
{
	BYTE color,full,i;
	WORD tempPB,sum_value,value;
	color = TUNER_BAR_Color;
	GetBand(PB);
	gotoxy(Cstart+5,Rstart-1);
	if(PLL_Band == VLF_BAND)
		{
			sum_value = TV_BAND_VL_HLIMIT-TV_BAND_VL_LLIMIT;
			tempPB = PB-TV_BAND_VL_LLIMIT;
			PrintChar(_V, TUNER_BAND_Color, 0);
			PrintChar(_H, TUNER_BAND_Color, 0);
			PrintChar(_F, TUNER_BAND_Color, 0);
			PrintChar(__, TUNER_BAND_Color, 0);
			PrintChar(_L, TUNER_BAND_Color, 0);
		}
	else if(PLL_Band == VHF_BAND)
		{
			sum_value = TV_BAND_VH_HLIMIT-TV_BAND_VH_LLIMIT;
			tempPB = PB-TV_BAND_VH_LLIMIT;
			PrintChar(_V, TUNER_BAND_Color, 0);
			PrintChar(_H, TUNER_BAND_Color, 0);
			PrintChar(_F, TUNER_BAND_Color, 0);
			PrintChar(__, TUNER_BAND_Color, 0);
			PrintChar(_H, TUNER_BAND_Color, 0);
		}
	else if(PLL_Band == UHF_BAND)
		{
			sum_value = TV_BAND_VU_HLIMIT-TV_BAND_VU_LLIMIT;
			tempPB = PB-TV_BAND_VU_LLIMIT;
				PrintChar(__, red, 0);
			PrintChar(_U, TUNER_BAND_Color, 0);
			PrintChar(_H, TUNER_BAND_Color, 0);
			PrintChar(_F, TUNER_BAND_Color, 0);
			PrintChar(__, TUNER_BAND_Color, 0);

		}
	else 
		return;
	
	value = ((float)tempPB/sum_value)*100;

	value = (TunerBar_Sum_Degree*value)/100;
	full = value/TunerBar_Degree;
	
	gotoxy(Cstart,Rstart);
	if(full>= TunerBar_Length)
		{
			for(i=0;i<TunerBar_Length;i++)
				PrintChar(_Tuner_BAR_FULL, color, 1);
			return;
		}

	 /* if( (value==0) && (full==0) )
	   {
	      for(i=0;i<TunerBar_Length;i++)
	      {
	         PrintChar(_Tuner_BAR_EMP, color, 1);
	      }
	      //PrintChar(_BAR_END,color, 0);
	      return;
	   }

	  for(i=0;i<TunerBar_Length;i++)
	   {
	      if(i<full)
	      {
	         PrintChar(_Tuner_BAR_FULL,color, 1);
	      }
	      else if(i==full)
	      {
	         PrintChar(TunerBar_Code[value%TunerBar_Degree],color, 1);
	      }
	      else
	      {
	         PrintChar(_Tuner_BAR_EMP,color, 1);
	      }
	  }*/
	if( value==0)
		for(i = 0;i<TunerBar_Length;i++)
			PrintChar(_Tuner_BAR_EMP, color, 1);
	   else
	   	{
			for(i = 0;i<full;i++)
			PrintChar(_Tuner_BAR_FULL, color, 1);
			PrintChar(TunerBar_Code[value%TunerBar_Degree], color, 1);
			for(i = full+1;i<TunerBar_Length;i++)
			PrintChar(_Tuner_BAR_EMP, color, 1);
	   	}
}


void Get_CH(BYTE CH)
{
	byM230_DA3 = 0;
	if(EEPROM_Rd_Byte(EAD_TV_CHANNEL_CURRENT) != EEPROM_Rd_Byte(EAD_TV_CHANNEL_LAST))
		EEPROM_Wr_Byte(EAD_TV_CHANNEL_LAST, EEPROM_Rd_Byte(EAD_TV_CHANNEL_CURRENT));
	EEPROM_Wr_Byte(EAD_TV_CHANNEL_CURRENT, CH);
	Channel_WORD.CH_B[0] = EEPROM_Rd_Byte(EAD_TV_START+CH*CH_IN_EAD);
	Channel_WORD.CH_B[1] = EEPROM_Rd_Byte(EAD_TV_START+CH*CH_IN_EAD+1);
	GetBand(Channel_WORD.CH_W);
	Write_PLL(PLL_Band, Channel_WORD.CH_W);
	PB = Channel_WORD.CH_W;
	ResetOSD();
	Print_CH(CH_HStart, CH_VStart, CH);
	//if(bMute)
		byM230_DA3 = EEPROM_Rd_Byte(EAD_VOL);
	Print_PLL(8, VIDEO_BAR_VStart+1, PB);
}

void SET_AUDIO(void)
{
	BYTE temp;
	SysFlag2 = EEPROM_Rd_Byte(EAD_SYS_FLAG2);
	temp = SysFlag2&0x03;
	IICBuf.ByteArray[0] = temp|0x0c;
	IICWrite(TUNER_IF,0x02, 1);
}

⌨️ 快捷键说明

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