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

📄 audio.c

📁 以ST公司CPU为核心的彩色电视机的完整源程序。
💻 C
📖 第 1 页 / 共 2 页
字号:
				i = i | 0x04;
				write_eeprom(j,i);
			}
	 	if (!(display_request_flags & MUTE_DISPLAY))
		 		write_nicam(0x0E, 0x24);


		break;

		case 5:/* NICAM_LL1*/
		 	write_nicam(0x0E, 0xA8);
			force_stereo_standard();

			write_nicam(0x18, 0x2E);
			write_nicam(0x11, 0x91);/* AGC switched OFF*/
			write_nicam(0x12, 0x20);/* AGC switched OFF*/
			millisecond_delay(160);
			write_SWD_control();
			if (!(tuning_flags & TUNING_REQUEST))
			{
				j = EEPROM_START_NICAM_STANDARD + (channel-1);
				i = read_eeprom(EEPROM_START_NICAM_STANDARD + (channel-1));
				i = i & 0x80;
				i = i | 0x05;
				write_eeprom(j,i);
			}
	 	if (!(display_request_flags & MUTE_DISPLAY))
		 		write_nicam(0x0E, 0x28);


			break;

		case 6:/* ZWEITON BG*/
		 	write_nicam(0x0E, 0xA2);/* TO force Zweiton we need to force mono for 
											   some time */

#ifdef AUTO_ZWEITON
			force_stereo_standard();
#else			
			write_nicam(0x08, 0x00);
			millisecond_delay(10);
		 	write_nicam(0x0E, 0xA0); 
			user_flags = user_flags & ~MONO_FLAG;
			write_nicam(0x18, 0x0E);
			write_nicam(0x01, 0x80);/* Reset lock detectors*/
#endif

			millisecond_delay(500);
			millisecond_delay(500);
			millisecond_delay(500);
			write_zweiton_SWD_control();
			if (!(tuning_flags & TUNING_REQUEST))
			{
				j = EEPROM_START_NICAM_STANDARD + (channel-1);
				i = read_eeprom(EEPROM_START_NICAM_STANDARD + (channel-1));
				i = i & 0x80;
				i = i | 0x06;
				write_eeprom(j,i);
			}
	 	if (!(display_request_flags & MUTE_DISPLAY))
		{
		 		write_nicam(0x0E, 0x22);
#ifndef AUTO_ZWEITON
		 		write_nicam(0x08, 0x20);
#endif
		}

			break;

		case 7:/* ZWEITON DK*/
			configure_zweiton_DK();

			write_nicam(0x01, 0x80);/* Reset lock detectors*/
			millisecond_delay(500);
			millisecond_delay(500);
			millisecond_delay(500);
			write_zweiton_SWD_control();
			if (!(tuning_flags & TUNING_REQUEST))
			{
				j = EEPROM_START_NICAM_STANDARD + (channel-1);
				i = read_eeprom(EEPROM_START_NICAM_STANDARD + (channel-1));
				i = i & 0x80;
				i = i | 0x07;
				write_eeprom(j,i);
			}
	 	if (!(display_request_flags & MUTE_DISPLAY))
		{
		 		write_nicam(0x0E, 0x20);
		 		write_nicam(0x08, 0x20);
		}
			break;

#ifdef FM_WIDE

		case 8: /* FM MONO DK-WIDE */

		write_nicam(0x0E, 0x98);/* same as L*/
		write_nicam(0x0E, 0x90);		
		write_nicam(0x18, 0x1E);/* Wide mode */		
		write_nicam(0x39, 0x0C);/* Freq 6.5 Mhz*/		
		write_nicam(0x3A, 0xB4);		
		write_nicam(0x3B, 0x2C);		
		write_nicam(0x3C, 0x0A);		
		write_nicam(0x02, 0x14);/* As deviation wide FM prescaler level at -12dB*/		
		write_nicam(0x04, 0x00);		

		for (i = 0x31 , j = 0; i<= 0x38; i++, j++)
			{
			 	write_nicam(i, FM_MONO_WIDE_DATA[j]);
			}


			if (!(tuning_flags & TUNING_REQUEST))
			{
				j = EEPROM_START_NICAM_STANDARD + (channel-1);
				i = read_eeprom(EEPROM_START_NICAM_STANDARD + (channel-1));
				i = i & 0x80;
				i = i | 0x08;
				write_eeprom(j,i);
			}
	 	if (!(display_request_flags & MUTE_DISPLAY))
		{
		 		write_nicam(0x0E, 0x40); /* MONO overwrite */
		 		write_nicam(0x08, 0x20);
		}

		break;

#endif

#endif

	}			
}

/***********************************************************************************************/
#ifdef FM_WIDE
const unsigned char FM_MONO_WIDE_DATA[] =
{
	0x00,
	0x01,
	0x01,
	0xFC,
	0x08,
	0xFB,
	0xF8,
	0x4A,
};	

#endif


#endif



/*****************************************************************************
INPUTS     : Current volume
OUTPUTS    : Volume + 1
             MUTE_DISPLAY - Unmute volume
             see update_volume
DESCRIPTION: This function increments the user volume up to the maximum and
             disable user mute if active.
*****************************************************************************/
void volume_up(void)
{
#ifdef NICAM
	if (pwmout < MAXIMUM_VOLUME)
		pwmout++;
#else
	if (volume < MAXIMUM_VOLUME)
		volume++;
#endif
	update_volume();
}

/*****************************************************************************
INPUTS     : Current volume
OUTPUTS    : Volume - 1
             see update_volume
DESCRIPTION: This function decrements the user volume down to the minimum.
*****************************************************************************/
void volume_down(void)
{
#ifdef NICAM
	if (pwmout > 0)
		pwmout--;

#else
	if (volume > 0)
		volume--;
#endif

	update_volume();
}

/*****************************************************************************
INPUTS     : VOLUME - New volume
OUTPUTS    : VOLUME_DISPLAY - Enable volume display
             REFRESH_DISPLAY - Refresh the display if volume already displayed
             see write_video
             see update_user_mute
DESCRIPTION: This function updates the volume register (AUDIO processor)
             and update user mute (enable/disable).
             Do not save the new volume in the EEPROM so as to resore
             factory volume after power-on.
*****************************************************************************/
void update_volume(void)
{
    /* Update volume register */
	display_request_flags = display_request_flags & ~MUTE_DISPLAY;
#ifdef NICAM
	write_nicam(0x00, pwmout);

#else
	write_video_eeprom_data(VOLUME, ((0x3F-volume)*2));

#endif
	/* Enable volume display and refresh the display */
	display_request_flags = display_request_flags | COMMERCIAL_DISPLAY | REFRESH_DISPLAY;
	
	/* Set volume time-out */
	slow_timers[COMMERCIAL_TIMER] = VOLUME_TIME_OUT;
	update_user_mute();
}

/*****************************************************************************
INPUTS     : none
OUTPUTS    : MUTE_DISPLAY - Toggled
             see update_user_mute
DESCRIPTION: This function toggles the user mute.
*****************************************************************************/
void toggle_mute(void)
{
	display_request_flags = display_request_flags ^ MUTE_DISPLAY;
	update_user_mute();
}

/*****************************************************************************
INPUTS     : MUTE_DISPLAY - Set if user mute active
             video_status - Check if a video signal has been detected
OUTPUTS    : MUTE - Set to mute audio
             see write_video
DESCRIPTION: This function updates the mute register (video processor).
             Do not save the mute flag in the EEPROM so as to restore unmute
             state after power-on.
*****************************************************************************/
void update_user_mute(void)
{  
	/* Allow to unmute if a valid signal has been detected */
	unsigned char i,j;
	if (!(tv_flags & ENABLE_POWER))
	return;

	read_video_new();
	i = read_data[0] & 0x08;
	if (i == 0x08)			 /* Unmute only if IDENT is high */
	{
		j = misc3 & 0x04;
		if (j ==0)
					write_video_ram_data(BLUE_SCREEN, 0x00);    
		if ((tuning_flags & AUTOPROG_REQUEST) || (tuning_flags & AUTOSEARCH_REQUEST) 
		    || (tuning_state != STOP_TUNING)||(source_flags&AV_REQUEST));
	  else
		{
		 	if (display_request_flags & MUTE_DISPLAY)
			{
				mute_audio();
			}

			else	
			{
				if(source == TUNER)
				{

			#ifdef NICAM
				if (!(tuning_flags & TUNING_REQUEST))
				{
					write_video_ram_data(MAIN_AUDIO_OUT, 0x00);    
					read_status = read_nicam(0x0E);
					read_status = read_status & ~0x80;
					write_nicam(0x0E, read_status);
					read_status = read_status & 0x0f;
					if(read_status == 0) /* Manual mode */
					{
						if (stereo_std ==8)
						write_nicam(0x08, 0x20);
						else
						{
							if(user_flags & MONO_FLAG)
								write_nicam(0x08, 0x10);
							else
							{
								write_nicam(0x08, 0x20);
								write_zweiton_SWD_control(); 
							}
						}
					}	 
#ifdef FM_WIDE						
					if ((!(user_flags & FORCED_NICAM_FLAG)) && (stereo_std != 8))
#else
					if (!(user_flags & FORCED_NICAM_FLAG))
#endif
					{
						if (stereo_std == 1)
						{
							force_mono_standard();
						}

						else
						{	
							i = read_nicam(0x0D);
							i = i & 0x8E;
							j = read_nicam(0x0C);
							j = j & 0x04;
							k = read_nicam(0x0A);
							if ( j == 0x04) /* If ZWEITON DETECTED */
								force_stereo_standard();									
							else
							{
								if(( i == 0x80 ) || (i == 0x82) || (i == 0x84))
								{
								if (k <5)
									force_stereo_standard();									

								if (k >50)
									force_mono_standard();

								}
								else
								{						
								force_mono_standard();
								}
							}
						}
					}
				}
			#else
					write_video_ram_data(MAIN_AUDIO_OUT, 0x00);    

			#endif

				}
				else
				{
					write_video_ram_data(MAIN_AUDIO_OUT, 0x01);    
				}
			}
		}
 	}
	else
	{
		mute_audio();
		j = misc3 & 0x04;
		if (j ==0)
		{
	  		if ((tuning_flags & AUTOPROG_REQUEST) || (tuning_flags & AUTOSEARCH_REQUEST))
			{
/*				write_video_ram_data(MUTE_CVBS, 0x00);  	*/
				write_video_ram_data(BLUE_SCREEN, 0x00);    
/*				video[0x09] = video[0x09] |(0x40);
				write_video(0x09,video[0x09]);*/
			}
			else
			{
				if (display_request_flags &  SERVICE_DISPLAY)
				return;
/*				write_video_ram_data(MUTE_CVBS, 0x20);  */
				write_video_ram_data(BLUE_SCREEN, 0x80);    
//				video[0x09] = video[0x09] & ~(0x40);
//				write_video(0x09,video[0x09]);
			}
		}
	} 	

}	

/*****************************************************************************
INPUTS     : none
OUTPUTS    : 
DESCRIPTION: 
*****************************************************************************/
void store_autocolor_sound(void)
{
	unsigned char i,j,k;
	unsigned int m;
//feman this function may be optimize 00/3/17

		write_video_ram_data(SOUND_STANDARD,0x00);	/* 6.5mhz select */
		millisecond_delay(3);
		i=check_sound_level();
      	k=AUDIO_DK;/* 6.5 MHZ Selected */
	
		write_video_ram_data(SOUND_STANDARD,0x02);	/* 6.0mhz select */
		millisecond_delay(3);
		j=check_sound_level();
		if(i<j)
		{
      	k=AUDIO_I;/* 6.0 MHZ Selected */
			i=j;
		}
	
		write_video_ram_data(SOUND_STANDARD,0x04);	/* 5.5mhz select */
        millisecond_delay(3);
		j=check_sound_level();
		if(i<j)
			{
			k=AUDIO_BG;/* 5.5 MHZ Selected */
		    i=j;
		    }

		write_video_ram_data(SOUND_STANDARD,0x06);	/* 4.5mhz select */
        millisecond_delay(3);
		j=check_sound_level();
		if(i<j)
			{
			k=AUDIO_MN;/* 4.5 MHZ Selected */
		    i=j;
		    }

		k = 0xA0 | k ;
		m = EEPROM_START_CHANNEL_MEMORY + (((channel -1)*3) + SETTINGS);
		write_eeprom(m ,k);
}



/*****************************************************************************
INPUTS     : none
OUTPUTS    : 
DESCRIPTION: 
*****************************************************************************/
unsigned char check_sound_level(void)
{
	unsigned char i;
	
	read_video_new();
	i=read_data[2] & 0x38;

	if(i==0x20)
		i=8;
	else if(i==0x28)
		i=7;
	else if(i==0x38)
		i=6;
	else if(i==0x30)
		i=5;
	else if(i==0x10)
		i=4;
	else if(i==0x18)
		i=3;
	else if(i==0x08)
		i=2;
	else if(i==0x00)
		i=1;

	return i;

}

⌨️ 快捷键说明

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