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

📄 si4702.c

📁 这段代码是驱动SI4702收音IC
💻 C
📖 第 1 页 / 共 2 页
字号:
					g_Setting.GlobalFLAG.MuteFlag=0;
						SI4702_AutoChangeFreq(1);
					break;
				case KEY_NEXT:
					//case KEY_FF:
					g_Setting.GlobalFLAG.MuteFlag=0;
					g_Setting.GlobalFLAG.dispCHFlag=0;
					
					g_Setting.GlobalFLAG.MuteFlag=0;
						SI4702_ChangeCurFreq(1);
				
					break;
				case KEY_PREV:
					g_Setting.GlobalFLAG.MuteFlag=0;
					SI4702_ChangeCurFreq(0);
					break;
				case KEY_FF:
					g_Setting.GlobalFLAG.MuteFlag=0;
						SI4702_AutoChangeFreq(1);
					break;
				case KEY_FB:
					g_Setting.GlobalFLAG.MuteFlag=0;
						SI4702_AutoChangeFreq(0);
					break;
			/**
				case KEY_VOL_PLUS:
					case KEY_VOL_PLUS_LONG:
						g_Setting.Globalsystem1.vol_val=_0to14(g_Setting.Globalsystem1.vol_val, 0);
						SetVolume(g_Setting.Globalsystem1.vol_val);
						//Player_SendCmd(MPI_SETVOLUME,(UINT8)1);
						break;
				
					case KEY_VOL_MINUS:
					case KEY_VOL_MINUS_LONG:
						g_Setting.Globalsystem1.vol_val=_0to14(g_Setting.Globalsystem1.vol_val, 1);
						SetVolume(g_Setting.Globalsystem1.vol_val);
						//Player_SendCmd(MPI_SETVOLUME,(UINT8)-1);
						break;
				**/
					case KEY_BAND:
						Si4702_WriteChan(7);
					g_Setting.Globalsystem1.RadioBand++;
					if(g_Setting.Globalsystem1.RadioBand>3)
						g_Setting.Globalsystem1.RadioBand=1;
						Get_Chan(7);
						I2C_Write_8bitROG(EEprom_Adr, EEprom_RadioBand, g_Setting.Globalsystem1.RadioBand);//每改变一次波段就保存一次
					break;
					case KEY_M1_PLAY:
						g_Setting.GlobalFLAG.MuteFlag=0;
						 UITimeout_ResetTime();
					g_Setting.Globalsystem1.Radio_Chan=1;
					g_Setting.Globalsystem1.Dispstatus_fm=disp_Get_chan;
					Get_Chan(0);
					break;
				case KEY_M2_INT:
					g_Setting.GlobalFLAG.MuteFlag=0;
					 UITimeout_ResetTime();
					g_Setting.Globalsystem1.Radio_Chan=2;
					g_Setting.Globalsystem1.Dispstatus_fm=disp_Get_chan;
					Get_Chan(1);
					break;
				case KEY_M3_REPEAT:
					g_Setting.GlobalFLAG.MuteFlag=0;
					 UITimeout_ResetTime();
					g_Setting.Globalsystem1.Radio_Chan=3;
					g_Setting.Globalsystem1.Dispstatus_fm=disp_Get_chan;
					Get_Chan(2);
					break;
				case KEY_M4_RANDOM:
					g_Setting.GlobalFLAG.MuteFlag=0;
					 UITimeout_ResetTime();
					g_Setting.Globalsystem1.Radio_Chan=4;
					g_Setting.Globalsystem1.Dispstatus_fm=disp_Get_chan;
					Get_Chan(3);
					break;
				case KEY_M5_10PREV:
					g_Setting.GlobalFLAG.MuteFlag=0;
					 UITimeout_ResetTime();
					g_Setting.Globalsystem1.Radio_Chan=5;
					g_Setting.Globalsystem1.Dispstatus_fm=disp_Get_chan;
					Get_Chan(4);
					break;
				case KEY_M6_10NEXT:
					g_Setting.GlobalFLAG.MuteFlag=0;
					 UITimeout_ResetTime();
					g_Setting.Globalsystem1.Radio_Chan=6;
					g_Setting.Globalsystem1.Dispstatus_fm=disp_Get_chan;
					Get_Chan(5);
					break;
				case MSG_TASK_TIMEOUT_EXIT:
					g_Setting.Globalsystem1.Dispstatus_fm=disp_Freq;
					g_Setting.Globalsystem1.SETMODE=0;
					break;

				
				case KEY_M1_PLAY_LONG:
					g_Setting.GlobalFLAG.MuteFlag=0;
						g_Setting.Globalsystem1.Radio_Chan=1;
						g_Setting.Globalsystem1.Dispstatus_fm=disp_Get_chan;
						Si4702_WriteChan(0);
					break;
				case KEY_M2_INT_LONG:
					g_Setting.GlobalFLAG.MuteFlag=0;
						g_Setting.Globalsystem1.Radio_Chan=2;
						g_Setting.Globalsystem1.Dispstatus_fm=disp_Get_chan;
						Si4702_WriteChan(1);
					break;
				case KEY_M3_REPEAT_LONG:
					g_Setting.GlobalFLAG.MuteFlag=0;
						g_Setting.Globalsystem1.Radio_Chan=3;
						g_Setting.Globalsystem1.Dispstatus_fm=disp_Get_chan;
						Si4702_WriteChan(2);
					break;
				case KEY_M4_RANDOM_LONG:
					g_Setting.GlobalFLAG.MuteFlag=0;
						g_Setting.Globalsystem1.Radio_Chan=4;
						g_Setting.Globalsystem1.Dispstatus_fm=disp_Get_chan;
						Si4702_WriteChan(3);
					break;
				case KEY_M5_10PREV_LONG:
					g_Setting.GlobalFLAG.MuteFlag=0;
						g_Setting.Globalsystem1.Radio_Chan=5;
						g_Setting.Globalsystem1.Dispstatus_fm=disp_Get_chan;
						Si4702_WriteChan(4);
					break;
				case KEY_M6_10NEXT_LONG:
					g_Setting.GlobalFLAG.MuteFlag=0;
						g_Setting.Globalsystem1.Radio_Chan=6;
						g_Setting.Globalsystem1.Dispstatus_fm=disp_Get_chan;
						Si4702_WriteChan(5);
					break;
				case KEY_VOL_PLUS:
				case KEY_VOL_PLUS_LONG:
					UITimeout_ResetTime();
					g_Setting.GlobalFLAG.DispTimeFlag=0;
					g_Setting.GlobalFLAG.MuteFlag=0;
					g_Setting.Globalsystem1.Dispstatus_fm=disp_setmodeVol;
					switch(g_Setting.Globalsystem1.SETMODE)
						{
					case 0://volume
						//if(g_Setting.Globalsystem1.vol_val>0 && g_Setting.Globalsystem1.vol_val<32)
						ChangeVolume_New(1);
						break;
					case 1://bass
						//if(g_Setting.Globalsystem1.BASS_vol>0 & g_Setting.Globalsystem1.BASS_vol<14)
						g_Setting.Globalsystem1.BASS_vol=BASS_TRE_0to14(g_Setting.Globalsystem1.BASS_vol, 1);
						Modify_basstreble(0);
						break;
					case 2://tre
						//if(g_Setting.Globalsystem1.TRE_vol>0 && g_Setting.Globalsystem1.TRE_vol<14)
						g_Setting.Globalsystem1.TRE_vol=BASS_TRE_0to14(g_Setting.Globalsystem1.TRE_vol, 1);
						Modify_basstreble(1);
						break;
					case 3://bal
						//if(g_Setting.Globalsystem1.Balance>0 && g_Setting.Globalsystem1.Balance<14)
						g_Setting.Globalsystem1.Balance=BASS_TRE_0to14(g_Setting.Globalsystem1.Balance, 1);
						Modify_FAD_balance();
						break;
					case 4:
						//if(g_Setting.Globalsystem1.Front_round>0 && g_Setting.Globalsystem1.Front_round<14)
						g_Setting.Globalsystem1.Front_round=BASS_TRE_0to14(g_Setting.Globalsystem1.Front_round,1);
						Modify_FAD_balance();
						break;
					default:
						break;
						}
					break;
				case KEY_VOL_MINUS:
				case KEY_VOL_MINUS_LONG:
					UITimeout_ResetTime();
					g_Setting.GlobalFLAG.MuteFlag=0;
					g_Setting.GlobalFLAG.DispTimeFlag=0;
					g_Setting.Globalsystem1.Dispstatus_fm=disp_setmodeVol;
					switch(g_Setting.Globalsystem1.SETMODE)
						{
					case 0://volume
						if(g_Setting.Globalsystem1.vol_val>0 && g_Setting.Globalsystem1.vol_val<32)
						ChangeVolume_New(0);
						break;
					case 1://bass
						//if(g_Setting.Globalsystem1.BASS_vol>0 & g_Setting.Globalsystem1.BASS_vol<14)
						g_Setting.Globalsystem1.BASS_vol=BASS_TRE_0to14(g_Setting.Globalsystem1.BASS_vol, 0);
						Modify_basstreble(0);
						break;
					case 2://tre
						//if(g_Setting.Globalsystem1.TRE_vol>0 && g_Setting.Globalsystem1.TRE_vol<14)
						g_Setting.Globalsystem1.TRE_vol=BASS_TRE_0to14(g_Setting.Globalsystem1.TRE_vol, 0);
						Modify_basstreble(1);
						break;
					case 3://BAL
						//if(g_Setting.Globalsystem1.Balance>0 && g_Setting.Globalsystem1.Balance<14)
						g_Setting.Globalsystem1.Balance=BASS_TRE_0to14(g_Setting.Globalsystem1.Balance, 0);
						Modify_FAD_balance();
						break;
					case 4:
						//if(g_Setting.Globalsystem1.Front_round>0 && g_Setting.Globalsystem1.Front_round<14)
						g_Setting.Globalsystem1.Front_round=BASS_TRE_0to14(g_Setting.Globalsystem1.Front_round,0);
						Modify_FAD_balance();
						break;
					default:
						break;
						}
					
					break;
				case KEY_SET:
					UITimeout_ResetTime();
					g_Setting.GlobalFLAG.MuteFlag=0;
					g_Setting.Globalsystem1.Dispstatus_fm=disp_setmodeVol;
					g_Setting.Globalsystem1.SETMODE++;
					if(g_Setting.Globalsystem1.SETMODE>4)
						g_Setting.Globalsystem1.SETMODE=0;
					break;
				case KEY_CLK:
						g_Setting.GlobalFLAG.DispTimeFlag=~g_Setting.GlobalFLAG.DispTimeFlag;
					break;
				case KEY_CLK_LONG:
						SystemSetTime();
					break;
				case KEY_EQ:
					g_Setting.Globalsystem1.EQ++;
					if(g_Setting.Globalsystem1.EQ>4)
						g_Setting.Globalsystem1.EQ=0;
					SetEQ();
					//g_Setting.GlobalFLAG.LOUDFlag=~g_Setting.GlobalFLAG.LOUDFlag;
					//SelectINChannel(g_Setting.Globalsystem1.nTaskID);
					break;
				case KEY_EQ_LONG:
					g_Setting.GlobalFLAG.LOUDFlag=~g_Setting.GlobalFLAG.LOUDFlag;
					SelectINChannel(g_Setting.Globalsystem1.nTaskID);
					break;
				case KEY_MUTE:
					g_Setting.GlobalFLAG.MuteFlag=~g_Setting.GlobalFLAG.MuteFlag;
					break;
				case MSG_TASK_TIMEOUT_LOCK:
					g_Setting.GlobalDISP.STCHECKTIME++;
						g_Setting.GlobalFLAG.MuteFlashFlag=~g_Setting.GlobalFLAG.MuteFlashFlag;
						break;
					/**
				case KEY_POWER_OFF:
					DISP.disptime=20;
					DISP.KEYTIME++;
					if(DISP.KEYTIME==10)
						{
						BBPCALL();
						SYS.StandbyStatus=01;
						I2C_Write_8bitROG(EEprom_Adr, EEprom_stadby, SYS.StandbyStatus);
						delay_ms(20);
						SYS.nTaskID=TASK_STANDBY;
						DISP.KEYTIME=0;
						return SYS.nTaskID;
						}	
					break;
				
				
				
				case KEY_CLK_LONG:
					DISP.disptime=20;
					DISP.KEYTIME++;
					if(DISP.KEYTIME==10)
						{
						BBPCALL();
					SYS.DispTimeFlag=1;
					DISP.KEYTIME=0;
					SET_DS1302();
						}
					break;
				case KEY_SET_LONG:
					DISP.disptime=20;
					DISP.KEYTIME++;
					if(DISP.KEYTIME==10)
						{
						DISP.KEYTIME=0;
						BBPCALL();
						SYS.MuteFlag=0;
						SYS.LOUDFlag=~SYS.LOUDFlag;
						SelectINChannel(SYS.nTaskID);
						}
					break;
				
			
			
				case KEY_1_LONG:
					SYS.MuteFlag=0;
					DISP.disptime=20;
					DISP.KEYTIME++;
					if(DISP.KEYTIME==6)
						{
						BBPCALL();
						SYS.Radio_Chan=1;
						SYS.Dispstatus=disp_Write_Chan;
						Si4702_WriteChan(0);
						DISP.KEYTIME=0;
						}
					break;
				case KEY_2_LONG:
					SYS.MuteFlag=0;
					DISP.disptime=20;
					DISP.KEYTIME++;
					if(DISP.KEYTIME==8)
						{
						BBPCALL();
						SYS.Radio_Chan=2;
						SYS.Dispstatus=disp_Write_Chan;
						Si4702_WriteChan(1);
						DISP.KEYTIME=0;
						}
					break;
				case KEY_3_LONG:
					SYS.MuteFlag=0;
					DISP.disptime=20;
					DISP.KEYTIME++;
					if(DISP.KEYTIME==8)
						{
						BBPCALL();
						SYS.Radio_Chan=3;
						SYS.Dispstatus=disp_Write_Chan;
						Si4702_WriteChan(2);
						DISP.KEYTIME=0;
						}
					break;
				case KEY_4_LONG:
					SYS.MuteFlag=0;
					DISP.disptime=20;
					DISP.KEYTIME++;
					if(DISP.KEYTIME==8)
						{
						BBPCALL();
						SYS.Radio_Chan=4;
						SYS.Dispstatus=disp_Write_Chan;
						Si4702_WriteChan(3);
						DISP.KEYTIME=0;
						}
					break;
				case KEY_5_LONG:
					SYS.MuteFlag=0;
					DISP.disptime=20;
					DISP.KEYTIME++;
					if(DISP.KEYTIME==8)
						{
						BBPCALL();
						SYS.Radio_Chan=5;
						SYS.Dispstatus=disp_Write_Chan;
						Si4702_WriteChan(4);
						DISP.KEYTIME=0;
						}
					break;
				case KEY_MUTE:
					BBPCALL();
					SYS.MuteFlag=~SYS.MuteFlag;
					break;
					**/
				default:
					break;
			}
	if(g_Setting.GlobalFLAG.MuteFlag)
				{
			g_Setting.Globalsystem1.Dispstatus_fm=disp_mute;
				if(FristMuteFlag==0)
					{
					Mute_Enable();
					FristMuteFlag=1;
					FristDisMuteFlag=0;
					g_Setting.GlobalFLAG.DispTimeFlag=0;
					}
				}
			else 
				{
				if(FristDisMuteFlag==0)
					{
					g_Setting.Globalsystem1.Dispstatus_fm=disp_Freq;
					UI_FM(g_Setting.Globalsystem1.Dispstatus_fm);
					if(g_Setting.GlobalFLAG.ProgressivelyOKfLAG)
						Mute_Disable();
					FristDisMuteFlag=1;
					FristMuteFlag=0;
					g_Setting.GlobalFLAG.DispTimeFlag=0;
					}
				}
		UI_FM(g_Setting.Globalsystem1.Dispstatus_fm);
		
	
	if(g_Setting.GlobalDISP.disptime==0)
		{
		g_Setting.Globalsystem1.Dispstatus_fm=disp_Freq;
		}
	if(g_Setting.GlobalDISP.STCHECKTIME>2)//1400ms读一次SI4702
		{
		SI4702_Read();
		g_Setting.GlobalDISP.STCHECKTIME=0;
		if(Data_read[0] & 0x01)
			g_Setting.GlobalICON.Icon_ST=1;
		else
			g_Setting.GlobalICON.Icon_ST=0;
		}
	/**
		if(g_Setting.GlobalFLAG.MuteFlag)
				{
				g_Setting.GlobalDISP.disptime=20;
				g_Setting.Globalsystem1.SETMODE=0;
				.Icon_MUTE=1;
					SYS.Dispstatus=disp_setmodeVol;
				if(FristMuteFlag1==0)
					{
					Mute_Enable();
					FristMuteFlag1=1;
					FristDisMuteFlag1=0;
					SYS.DispTimeFlag=0;
					}
				}
			else 
				{
				if(FristDisMuteFlag1==0)
					{
					if(SYS.ProgressivelyOKfLAG)
						Mute_Disable();
					DISP.Icon_MUTE=0;
					FristDisMuteFlag1=1;
					FristMuteFlag1=0;
					SYS.DispTimeFlag=0;
				}
				}
				**/
	/**
	if(SYS.MediaPluINFlag)
		{
		SYS.nTaskID=TASK_MUSIC;
		return SYS.nTaskID;
		}
	if(SYS.DispMediaMode)
		TM1721_Write_All();
	else
		HT1621_Write_All();
		
		**/
		}
	return g_Setting.Globalsystem1.nTaskID;
	}

void Si4702_WriteChan(UINT8 iChan)
	{
	UINT8 Temp_Writedata;
	UINT8 Temp_EEprom1,Temp_EEprom2;
	Temp_Writedata=(g_Setting.Globalsystem1.g_CurFreq-875) & 0xFF;
	if(g_Setting.Globalsystem1.RadioBand==1)
		{
		Temp_EEprom1=EEprom_band1_CurFreq;
		Temp_EEprom2=EEprom_band1;
		}
	if(g_Setting.Globalsystem1.RadioBand==2)
		{
		Temp_EEprom1=EEprom_band2_CurFreq;
		Temp_EEprom2=EEprom_band2;
		}
	if(g_Setting.Globalsystem1.RadioBand==3)
		{
		Temp_EEprom1=EEprom_band3_CurFreq;
		Temp_EEprom2=EEprom_band3;
		}
	if(iChan==7)
		I2C_Write_8bitROG(EEprom_Adr, Temp_EEprom1, Temp_Writedata);
	else
		I2C_Write_8bitROG(EEprom_Adr, Temp_EEprom2+(iChan*2), Temp_Writedata);
	delay_ms(20);	
	}
/**
bit AutoChangeFreq(UINT8 Direct)
	{
		#define IIC_TRY_TIMES	500
		bit ChangeOK=FALSE;
		MSG		keymsg2;
		 UINT16 ix=0;
	//Hal_DisableAllInts();
	while(1)
		{
		FeedWDT(250, 20);
		Mute_Enable();
		if(Direct)
			SI4702_ChangeCurFreq(1);
		else
			SI4702_ChangeCurFreq(0);
		if((Data_read[0] & 0x10)==0)
			{
			if(Data_read[1]>0x13)
				{
				//Mute_Disable();
				//return 0;
				ChangeOK=1;
				}
			}
		DelayInMs(60);
		SYS.Dispstatus=disp_Freq;
		if(SYS.DispMediaMode)
			TM1721_Write_All();
		else
			HT1621_Write_All();
	keymsg2=GetMessage();
	if(SYS.DispMediaMode==2)
		{
		switch(keymsg2)
		{
		case KEY_NEXT:	
				ChangeOK=TRUE;
			break;
	
		case KEY_PREV:
			ChangeOK=TRUE;
			break;
		default:
			break;
	
		}
		}
	else
		{
		switch(keymsg2)
		{
		case KEY_NEXT:	
				ChangeOK=TRUE;
			break;
	
		case KEY_PREV:
			ChangeOK=TRUE;
			break;
		default:
			break;
		}
		}
	if ( (ChangeOK==1)|| (ix>IIC_TRY_TIMES)) //条件成立或超时退出
			{
			SET_SEEK_0;
			//I2C_WritePageDataEx(SI4702_adr, Data_writes, 2, 0, FALSE);
			IIC_SetRegs(SI4702_adr, Data_writes, 2);
			SYS.Dispstatus=disp_Freq;
			Mute_Disable();
			return TRUE;
			}
		else
			ix++;
		}
	}
	**/

void Progressively_Volume(UINT8 Volumetemp)
	{
	if(g_Setting.GlobalFLAG.FristIn)
		{
		Vtemp=0;
		SetVolume(Vtemp);
		if(g_Setting.Globalsystem1.nTaskID==TASK_FM)
			{
			Data_writes[7] |=Vtemp;
			I2C_WritePageDataEx(SI4702_adr, Data_writes, 8, 0, FALSE);
			//IIC_SetRegs(SI4702_adr, Data_writes, 8);
			}
		muteOFF();
		}

	VolumeCountTemp=100;
	if(Vtemp<Volumetemp)
		{
		if((++VolumeCount)%VolumeCountTemp== 0)
			{
			Vtemp++;
			SetVolume(Vtemp);
			VolumeCount=1;
			if(g_Setting.Globalsystem1.nTaskID==TASK_FM && (Vtemp<16))
				{
				Data_writes[7] |=Vtemp;
				//IIC_SetRegs(SI4702_adr, Data_writes, 8);
				I2C_WritePageDataEx(SI4702_adr, Data_writes, 8, 0, FALSE);
				}
			//if(Vtemp>3)
			//	muteOFF();
			}
		}
	else
		{
			if(g_Setting.Globalsystem1.nTaskID==TASK_FM && RadioTempFlag)
				{
				Data_writes[7] |=0x0f;
				//IIC_SetRegs(SI4702_adr, Data_writes, 8);
				I2C_WritePageDataEx(SI4702_adr, Data_writes, 8, 0, FALSE);
				RadioTempFlag=FALSE;
				}
			g_Setting.GlobalFLAG.ProgressivelyOKfLAG=1;
		}
		
	g_Setting.GlobalFLAG.FristIn=FALSE;
	}

⌨️ 快捷键说明

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