亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tuner.c

?? 7寸TFT電視的源程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include "target.h"
#include "tuner.h"
#include "lcd.h"
extern unsigned int idata TimeMessage ;
#define MAX_FMSTATION_NO 		18
#define MAX_AMSTATION_NO 		6

#define USA_FM_MINFREQ 		8750
#define USA_FM_MAXFREQ 		10800
#define EUROPE_FM_MINFREQ 	8750
#define EUROPE_FM_MAXFREQ 	10800
#define JAPAN_FM_MINFREQ 		7600
#define JAPAN_FM_MAXFREQ 		9000

#define USA_AM_MINFREQ 		520
#define USA_AM_MAXFREQ 		1710
#define EUROPE_AM_MINFREQ 	522
#define EUROPE_AM_MAXFREQ 	1620
#define JAPAN_AM_MINFREQ 		531
#define JAPAN_AM_MAXFREQ 	1620

#ifdef __TUNER__
void GotoPreset(unsigned char);
//define the location of eeprom 
enum{
	ADDR_CURRENT_BAND = TUNER_EEPROM_ADDR_START,
	ADDR_CURRENT_FMFREQ,
	ADDR_CURRENT_AMFREQ = ADDR_CURRENT_FMFREQ + 2,
	ADDR_FMSTATION_START = ADDR_CURRENT_AMFREQ + 2,
	ADDR_AMSTATION_START = (ADDR_FMSTATION_START + MAX_FMSTATION_NO*2),
	ADDR_AMSTATION_END = (ADDR_AMSTATION_START + MAX_AMSTATION_NO*2)
};

extern unsigned char idata AudioToneMode;
 
unsigned int code DEFAULT_FMFREQ = USA_FM_MINFREQ; 
unsigned int code DEFAULT_AMFREQ = USA_AM_MINFREQ;
 
void FPOutChar(unsigned char i,unsigned char j);
enum{
	TUNER_MAIN_MODE,
	TUNER_SEEK_MODE
};

enum{
	DISPLAY_FREQ_MODE,
	DISPLAY_NAME_MODE,
	DISPLAY_PTY_MODE,
	DISPLAY_TEXT_MODE,
	DISPLAY_CT_MODE
};

typedef struct freq{
	unsigned short FmMax;
	unsigned short FmMin;
	unsigned char FmStep;

	unsigned short AmMax;
	unsigned short AmMin;
	unsigned char AmStep;
}FREQ;

FREQ code FreqArray[3]={
	{
		USA_FM_MAXFREQ,
		USA_FM_MINFREQ,
		10,//100khz
		
		USA_AM_MAXFREQ,
		USA_AM_MINFREQ,
		10//10khz
	},//USA 
	{
		EUROPE_FM_MAXFREQ,
		EUROPE_FM_MINFREQ,
		5,//50khz
		
		EUROPE_AM_MAXFREQ,
		EUROPE_AM_MINFREQ,
		9//9khz
	},//EUROPE
	{
		JAPAN_FM_MAXFREQ,
		JAPAN_FM_MINFREQ,
		10,//100khz
		
		JAPAN_AM_MAXFREQ,
		JAPAN_AM_MINFREQ,
		9//9khz
	}//JAPAN
};

 


//可供調用的顯示函數:
 

bit bIsStereo = 1;
bit bIsFm = 1;
bit bIsLocal = 1;
bit bIsUp = 0;
bit bIsAscan = 0;
bit bIsPscan = 0;
bit bPreset = 0;

//頻率變量
unsigned short idata FmFreq = 9710;
unsigned short idata AmFreq = 1280;
unsigned short idata CurrentFreq;
unsigned char idata TunerArea = AREA_USA;
unsigned char idata TunerBand = 1;

//臺號變量--0x00 表示沒有臺號
unsigned char idata FmPresetNo;
unsigned char idata AmPresetNo;

//收音模式變量
unsigned char idata TunerMode = TUNER_MAIN_MODE;

 

//收音機顯示部分
void FpClearStr()
{
}
void FPOutChar(unsigned char i ,unsigned char j)
{
	i=i+j;
}
void FPDisplayIcon(unsigned int i ,unsigned char j)
{
	i=i;
    j=j;
}
void DisplayTunerCurrentFreq()
{
	unsigned char i;
	unsigned int uitemp;
	FpClearStr();
	FPDisplayIcon(FP_INFO_MHZ,0);
	FPDisplayIcon(FP_INFO_KHZ,0);
	FPDisplayIcon(FP_INFO_DX,0);
	FPDisplayIcon(FP_INFO_ST,0);
	FPDisplayIcon(FP_INFO_DOT_MIN2,0);

	if(bIsFm){
		FPDisplayIcon(FP_INFO_MHZ,1);
        FPDisplayIcon(FP_INFO_FM,1);
		FPDisplayIcon(FP_INFO_KHZ,0);
        FPDisplayIcon(FP_INFO_AM,0);
		

		 FPDisplayIcon(FP_INFO_DX,bIsLocal);
		
		FPDisplayIcon(FP_INFO_DOT_MIN2,1);
		
		FPOutChar(0,'F');
		FPOutChar(1,TunerBand+'0');

		if(bPreset){
			FPOutChar(2,'-');
			if(FmPresetNo<7) FPOutChar(3,FmPresetNo+'0');
			else if(FmPresetNo<13) FPOutChar(3,(FmPresetNo-6)+'0');
			else FPOutChar(3,(FmPresetNo-12)+'0');
		}

		uitemp = FmFreq;
		i = 9;
	}
	else{
		FPDisplayIcon(FP_INFO_MHZ,0);
        FPDisplayIcon(FP_INFO_FM,0);
		FPDisplayIcon(FP_INFO_AM,1);
		FPDisplayIcon(FP_INFO_KHZ,1);
		
		FPDisplayIcon(FP_INFO_DX,bIsLocal);
		
		FPOutChar(0,'A');
		FPOutChar(1,'1');

		if(bPreset){
			 FPOutChar(2,'-');
		 	FPOutChar(3,AmPresetNo+'0');
		}

		uitemp = AmFreq;
		i = 9;
	}

	ShowLcdHex(0x40,uitemp);
	ShowLcdString(0x50,"FREQ");
	while(uitemp){
		FPOutChar(i,(uitemp%10+'0'));
		i--;
		uitemp /= 10;
	}
}

#ifdef __RDS__
void DisplayCT()
{
}

void DisplayPTY()
{
}

#endif


void RedrawTuner()
{
#ifdef __RDS__
 
#else
	DisplayTunerCurrentFreq();
#endif
}

/*******************************************************************
	Tuner functions
*******************************************************************/
unsigned char GetCurrentStep()
{
	unsigned char ucstep;
	if(bIsFm)
		ucstep =  FreqArray[TunerArea].FmStep;
	else
		ucstep = FreqArray[TunerArea].AmStep;
	return ucstep;
}

/*******************************************************************
	Func:	freq+ step , and judge if it is larger than the max freq
	argu: 	
	return: 0 not over flow the max freq
			1 over flow max freq
			and modify the fmfreq and amfreq
*******************************************************************/
unsigned char IsFreqOverFlow()
{
	unsigned char result = 0;
	if(bIsFm){
		if( (FmFreq + FreqArray[TunerArea].FmStep) > FreqArray[TunerArea].FmMax ){
			result = 1;
		}
	}
	else{
		if( (AmFreq + FreqArray[TunerArea].AmStep) > FreqArray[TunerArea].AmMax ) {
			result = 1;
		}
	}
	return result;
}

/*******************************************************************
	Func:	freq+ step
	argu: 	
	return: none
*******************************************************************/
void FreqUp()
{
	if(bIsFm){
		FmFreq += FreqArray[TunerArea].FmStep;
		if(FmFreq > FreqArray[TunerArea].FmMax ) FmFreq = FreqArray[TunerArea].FmMin;
	}
	else{
		AmFreq += FreqArray[TunerArea].AmStep;
		if(AmFreq > FreqArray[TunerArea].AmMax ) AmFreq = FreqArray[TunerArea].AmMin;
	}
	bPreset = 0;
	GotoFreq();
	DisplayTunerCurrentFreq();
}

/*******************************************************************
	Func:	calculate the value of pcm 
			and write the value into ns81_reg[9]
	argu: 	FmFreq,AmFreq
	return: none
*******************************************************************/
void FreqDown()
{
	if(bIsFm){
		FmFreq -= FreqArray[TunerArea].FmStep;
		if(FmFreq < FreqArray[TunerArea].FmMin ) FmFreq = FreqArray[TunerArea].FmMax;
	}
	else{
		AmFreq -= FreqArray[TunerArea].AmStep;
		if(AmFreq < FreqArray[TunerArea].AmMin ) AmFreq = FreqArray[TunerArea].AmMax;
	}
	bPreset = 0;
	GotoFreq();
	DisplayTunerCurrentFreq();
}
/*******************************************************************
	Func:	stop seek and return to main mode
*******************************************************************/
void ReturntoMainMode()
{
	TunerMode = TUNER_MAIN_MODE;
	StopSeekStation();
	if(bIsAscan ) 
		GotoPreset(FmPresetNo);//return to the first station
	else{
		GotoFreq();
		DisplayTunerCurrentFreq();
	}
	SetTimerFunc(TIME_1SEC,SAVE_CURRENT_FREQ_KEY);
}

/*******************************************************************
	Func:	start seek and goto seek mode
*******************************************************************/
void GotoSeekMode()
{
	TunerMode = TUNER_SEEK_MODE;
	SetTimerFunc(TIME_50MS,SD_KEY);
	StartSeekStation();
}

/*******************************************************************
	Func:	save current freq and band value to eeprom
	argu: 	FmFreq,AmFreq,bIsFm
	return: none
*******************************************************************/
void SaveFreq()
{
	if(bIsFm){
		WriteEepromBytes(ADDR_CURRENT_FMFREQ,(unsigned char *)&FmFreq,2);
		CurrentFreq = FmFreq;
	}
	else{
		CurrentFreq = AmFreq;
		WriteEepromBytes(ADDR_CURRENT_AMFREQ,(unsigned char *)&AmFreq,2);
	}
	WriteEepromBytes(ADDR_CURRENT_BAND,&TunerBand,1);
}

/*******************************************************************
	Func:	recover current freq and band value from eeprom
	argu: none
	return : 	FmFreq,AmFreq,bIsFm
*******************************************************************/
void RecoverFreq()
{
	unsigned char idata i ;
	
	 
	if( i < 8 ){//write default values to eeprom 
		TunerBand = 1;
		bIsFm = 1;
		FmFreq = DEFAULT_FMFREQ ;
		AmFreq = DEFAULT_AMFREQ ;
		CurrentFreq = FmFreq;
		 
		WriteEepromBytes(ADDR_CURRENT_BAND, &TunerBand, 1);
		WriteEepromBytes(ADDR_CURRENT_FMFREQ, (unsigned char *)&DEFAULT_FMFREQ, 2);
		WriteEepromBytes(ADDR_CURRENT_AMFREQ, (unsigned char *)&DEFAULT_AMFREQ, 2);
		for(i=0; i<	MAX_FMSTATION_NO ; i++)
		{
			WriteEepromBytes(ADDR_FMSTATION_START+i*2,(unsigned char *)&DEFAULT_FMFREQ,2);
		}
		for(i=0; i<	MAX_AMSTATION_NO ; i++)
		{
			WriteEepromBytes(ADDR_AMSTATION_START+i*2,(unsigned char *)&DEFAULT_AMFREQ,2);
		}
	}
	else{
		ReadEepromBytes(ADDR_CURRENT_BAND,&TunerBand,1);
		if(TunerBand == 4){
			bIsFm = 0;
			ReadEepromBytes(ADDR_CURRENT_AMFREQ,(unsigned char *)&AmFreq,2);
			CurrentFreq = AmFreq;
		}
		else {
			bIsFm = 1;
			ReadEepromBytes(ADDR_CURRENT_FMFREQ,(unsigned char *)&FmFreq,2);
			CurrentFreq = FmFreq;
		}
	}
	Set_Band();
	GotoFreq();
	DisplayTunerCurrentFreq();
	SetTimerFunc(TIME_1SEC,SAVE_CURRENT_FREQ_KEY);	
}

void SavePreset(unsigned char presetno)
{
	unsigned int uitemp;
	unsigned char address;

	if(bIsFm){
		if( presetno > MAX_FMSTATION_NO) return;
		address = (presetno-1)*2 + ADDR_FMSTATION_START;
		uitemp = FmFreq;
	}
	else{
		if( presetno > MAX_AMSTATION_NO) return;
		address = (presetno-1)*2 + ADDR_AMSTATION_START;
		uitemp = AmFreq;
	}

	WriteEepromBytes(address,(unsigned char *)&uitemp,2);
	bPreset = 1;
}

void GotoPreset(unsigned char presetno)
{
	unsigned int uitemp;
	unsigned char address;
	bPreset = 1;
	if(bIsFm){
		if( presetno > MAX_FMSTATION_NO) return;
		address = (presetno-1)*2 + ADDR_FMSTATION_START;
	}
	else{
		if( presetno > MAX_AMSTATION_NO) return;
		address = (presetno-1)*2 + ADDR_AMSTATION_START;
	}

    ReadEepromBytes(address,(unsigned char *)&uitemp,2);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久人人97超碰com| 亚洲一区二区三区四区不卡| 欧美日韩国产区一| 9色porny自拍视频一区二区| 免费av成人在线| 午夜精品国产更新| 丝袜诱惑制服诱惑色一区在线观看| 中文字幕一区不卡| 国产精品久久久久久久久搜平片| 国产精品污网站| 18欧美亚洲精品| 国产乱子轮精品视频| 日韩精品乱码免费| 色88888久久久久久影院野外| 色悠悠久久综合| 88在线观看91蜜桃国自产| 欧美一区二区三区视频免费| 中文欧美字幕免费| 石原莉奈在线亚洲三区| 欧美亚洲国产一区在线观看网站| 欧美精品在线视频| 精品久久久久一区二区国产| 久久综合九色综合欧美就去吻| 国产日产欧美一区二区视频| 亚洲天堂a在线| 首页国产欧美久久| 欧美亚洲国产一区二区三区| 亚洲蜜臀av乱码久久精品| 午夜精品福利在线| 欧美久久久久久久久中文字幕| 亚洲综合在线观看视频| 久久精品国产网站| 成人国产一区二区三区精品| 欧美性猛交xxxxxxxx| 亚洲特黄一级片| 91蜜桃婷婷狠狠久久综合9色| 欧美日韩亚洲综合一区二区三区| 精品福利二区三区| 亚洲欧美日韩电影| 91麻豆精东视频| 中文字幕佐山爱一区二区免费| 99这里都是精品| 亚洲免费观看高清完整版在线观看| 99视频精品全部免费在线| 国产精品电影一区二区三区| 91视频观看视频| 亚洲中国最大av网站| 欧美日韩国产免费一区二区| 偷拍自拍另类欧美| 欧美刺激脚交jootjob| 国产精品综合在线视频| 国产精品成人在线观看| 91国产免费观看| 五月天欧美精品| 久久综合久久鬼色中文字| 成人精品一区二区三区中文字幕| 91精品欧美一区二区三区综合在| 久久精品国产久精国产| 久久精品免费在线观看| 精品一区二区三区久久| 91麻豆精品国产91久久久 | 夜夜操天天操亚洲| 91精品国产福利| 国产成人综合自拍| 亚洲精品在线观看视频| www.视频一区| 天天综合天天做天天综合| 久久天堂av综合合色蜜桃网| 91亚洲男人天堂| 麻豆精品一区二区综合av| 欧美久久一二区| 国产麻豆91精品| 亚洲精品你懂的| 一本一道波多野结衣一区二区| 亚洲成人av福利| 欧美日韩aaaaaa| 粉嫩一区二区三区性色av| 亚洲精品在线观看网站| 色激情天天射综合网| 久久er99精品| 亚洲国产精品天堂| 欧洲一区在线电影| 亚洲不卡在线观看| 亚洲国产成人自拍| 99视频精品在线| 韩国欧美国产1区| 日本一区二区成人在线| 这里是久久伊人| 91在线观看成人| 国产呦精品一区二区三区网站| 亚洲综合无码一区二区| 中文字幕欧美国产| 日韩你懂的电影在线观看| 国产在线观看一区二区| 日本系列欧美系列| 国产日韩欧美综合一区| 欧美精品丝袜久久久中文字幕| av福利精品导航| 国产成人综合亚洲网站| 六月丁香婷婷色狠狠久久| 一区二区三区中文字幕电影| 国产精品美女久久久久久2018| 日韩一区二区三区免费看 | 亚洲视频一二三| 久久久久久日产精品| 日韩视频免费观看高清完整版在线观看 | 亚洲精品五月天| 国产精品久久久久永久免费观看 | 日本一区二区三区在线观看| 日韩亚洲欧美综合| 欧美人xxxx| 欧美唯美清纯偷拍| 欧美在线|欧美| 欧美性高清videossexo| 欧美视频在线播放| 欧美日韩一区二区在线观看| 欧美一区二区三区四区五区| 欧美日韩一区精品| 欧美亚洲国产一区在线观看网站| 色综合咪咪久久| 日本国产一区二区| 欧美亚洲综合网| 欧美在线免费观看亚洲| 欧美日韩国产综合一区二区三区 | 依依成人精品视频| 一区二区三区影院| 亚洲mv大片欧洲mv大片精品| 五月婷婷久久丁香| 久久精品国产第一区二区三区 | 亚洲一区二区三区在线播放| 亚洲国产美女搞黄色| 日日夜夜精品视频免费| 麻豆91精品91久久久的内涵| 韩国精品久久久| 成人国产视频在线观看| 在线亚洲精品福利网址导航| 在线视频欧美精品| 9191久久久久久久久久久| 亚洲精品一区二区三区蜜桃下载 | 日韩一区二区免费视频| 精品国产乱码久久久久久免费 | 这里只有精品视频在线观看| 日韩欧美亚洲一区二区| 久久久久久久久岛国免费| 国产精品不卡在线| 午夜精品久久久| 国产一区中文字幕| 91欧美激情一区二区三区成人| 欧美日韩mp4| 国产午夜亚洲精品羞羞网站| 尤物av一区二区| 秋霞电影一区二区| 东方欧美亚洲色图在线| 欧美在线高清视频| 久久先锋影音av| 亚洲国产一区二区三区| 国产精品自在在线| 欧美日精品一区视频| 久久免费美女视频| 亚洲成在人线在线播放| 国产成人久久精品77777最新版本| 色乱码一区二区三区88| 精品国产凹凸成av人导航| 一区二区三区四区中文字幕| 国产在线国偷精品产拍免费yy| 欧美性xxxxxxxx| 国产女人18毛片水真多成人如厕| 亚洲电影你懂得| 成人av电影免费在线播放| 91精品国产综合久久福利| 亚洲视频精选在线| 精品亚洲成a人在线观看| 日韩精品一区二| 亚洲成人自拍偷拍| 成人激情午夜影院| 精品国产乱码久久久久久夜甘婷婷 | 一区二区三区在线观看欧美| 九九精品视频在线看| 欧美三级日韩三级| 国产精品电影院| 国产一区二区调教| 91精品国产综合久久久久久| 亚洲黄网站在线观看| 国产激情精品久久久第一区二区| 欧美猛男超大videosgay| 亚洲欧美激情一区二区| 岛国精品在线播放| 久久久www成人免费毛片麻豆| 秋霞电影一区二区| 欧美日韩高清一区二区不卡| 亚洲人一二三区| 成人黄色电影在线| 国产日产欧美一区二区三区 | 亚洲成人www| 欧美影视一区在线| 一区二区在线免费观看| 91在线免费播放| 亚洲精品菠萝久久久久久久| 国产99久久久国产精品潘金| 久久综合九色综合欧美就去吻|