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

📄 control.c

📁 完整功放的控制程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/****========================== M62446 的程序 ==========================*****/
void mic_det(void)
{
  if (bc_mic==0) 			/* 有咪插入 */
  {
    if(b_mic==0)
    { 					/* 第一次 */
      b_mic=1;				/* 置有咪标志 */
      b_intmute=1;
      intmute=INTMUTE;			/* 设临时静音的保持时间 */
      
      /*par[0]=0x02;     			关MIC */
      b_mute=0;
      
      par[0]=0;
      par[1]=0; 
      par0_4=1;				/*cs接高电平*/
      send_62421(); 			/*KALA OK静音控制*/
      
      screen_num=20;			/*kala on*/
      input_data_scroll();
    }
  }
  else
  {
    if(b_mic)
    {
      b_mic=0;				/* 清咪标志 */
      switch(ton_num)
      {
      	case MIC1_F:
      	case MIC2_F:
      	case MTRE_F:
      	case MBASS_F:
      	case MECHO_F:
      	case DELAY_F:
      	  ton_num=VOL_F;
      	   break;
      	default:
      	   break;   
      }	
      par[0]=0x02;     			/*关MIC */
      par[1]=0; 
      par0_4=1;				/*cs接高电平*/
      send_62421(); 			/*KALA OK静音控制*/
      screen_num=21;			/*kala off*/
      input_data_scroll();
    }
  }
}

/******** 临时静音启动 *********/
void start_intmute(void)
{
  b_intmute=1;
  intmute=INTMUTE;		/* 设临时静音的保持时间 */
  m62446_mute();
}  

void m62446_mute(void)
{
  par[0]=0x82;		/* 关R,  10000010 */
  par[1]=0x85;		/* 关L,  10000101 */
  send_62446();
  par[0]=0x42;		/* 关SW, 01000010 */
  par[1]=0x85;		/* 关CEN,10000101 */
  send_62446();
  par[0]=0xc2;		/* 关SR, 11000010 */
  par[1]=0x85;		/* 关SL, 10000101 */
  send_62446();
}

/*==============各内部控制处理程序文件===================*/
sbit IBC_VOLA=0xb5;	/* P3.5 VOL+ 输入脚 */
sbit IBC_VOLS=0xa0;	/* P2.0 VOL- 输入脚 */

void read_lr_key(void)
{
	uchar key_val;
	bit bt1;
	bit bt2;

	IBC_VOLA=1;
	IBC_VOLS=1;
	key_val = 0;
	bt1=IBC_VOLA;
	bt2=IBC_VOLS;

	key_val=(((uchar)bt1)*2)+(uchar)bt2;

	if ((key_val<3)&&(key_val>0))
	{
		if (bkey_bnce)
		{
			bkey_bnce=0;
			if (key_val==2)			//1
				blrk_direct=0;		//L
			else
				blrk_direct=1;		//R
			if (lrk_del==0)
			{
				blrk_process=1;
				ad_delay=6;
			}
			else
				lrk_del--;
		}
		else
			bkey_bnce=1;
	}
	else
	{
		bkey_bnce=0;
		lrk_del=0;
	}
}

void  fresh_mvol(void)		/*主音量控制,由主程序调用*/
{
	if (b_rkey)
	{	 
		blrk_process=0;
		return;
	}	

	if (blrk_process)
	{
		blrk_process=0;
		lrk_del=2;
		b_mute=0;				/*取消静音标志*/	
		peng_flg=0;
		screen_num=0;
		test_c=0;

		if (blrk_direct)
	    {
			switch (ton_num)
			{
			case 1:
			   input_select(1);
			   break;
			case 2:
			   key_ch_mode(1);
			   break;
			case 3:
			   treble_add();
			   break;
			case 4:
			   bass_add();
			   break;
			case 5:
			   rkey_balan_r();
			   break;
			case 6:
			   cen_vol_add();
			   break;	 
			case 7:
			   sl_vol_add();
			   break;
			case 8:
			   sr_vol_add();
			   break; 
			case 9:
			   key_dsp(1);
			   break; 
			case 10:
			   mic1_vol_add();
			   break;
			case 11:
			   mic2_vol_add();
			   break;
			case 12:
			   mic_tre_add(); 
			   break;
			case 13:
			   mic_bass_add();
			   break;
			case 14:
			   mic_echo_add();
			   break;
			case 15:
			   mic_delay_add();
			break;
/*
			case DIM_F:
			   key_dim_add();
			   break;
*/      	
			case 16:
			   disp_add();
			   break;
			      
			default:
			if(master_val<80) master_val++;
			if(sl_val<80) sl_val++;
			if(sr_val<80) sr_val++;
			if(cen_val<80) cen_val++;
			string_num=5;		/*"mvol"*/
			ton_num=0;
			break; 
			}
		}
		else
		{
			switch (ton_num)
			{
			case 1:
			   input_select(0);
			   break;
			case 2:
			   key_ch_mode(0);
			   break;
			case 3:
			   treble_sub();
			   break;
			case 4:
			   bass_sub();
			   break;
			case 5:
				rkey_balan_l();
			    break;
			case 6:
			   cen_vol_sub();
			   break;	 
			case 7:
			   sl_vol_sub();
			   break;
			case 8:
			   sr_vol_sub();
			   break; 
			case 9:
			   key_dsp(0);
			   break; 
			case 10:
			   mic1_vol_sub();
			   break;
			case 11:
			   mic2_vol_sub();
			   break;
			case 12:
			   mic_tre_sub(); 
			   break;
			case 13:
			   mic_bass_sub();
			   break;
			case 14:
			   mic_echo_sub();
			   break;
			case 15:
				mic_delay_sub();
				break;
/*
			case DIM_F:
				key_dim_sub();
				break;
*/
			case 16:
				disp_sub();
				break;
			default:
				if(master_val!=0)  master_val--;
				if(sl_val!=0) sl_val--;
				if(sr_val!=0) sr_val--;
				if(cen_val!=0) cen_val--;
				string_num=5;			/* "mvol  " */
				ton_num=0;
			break; 
		  	}
		}
	
		if ((ton_num==1)||( ton_num==9))		//||( ton_num==16)
		{
			lrk_del=15;
		}
		else if ( ton_num==2)
		{		
			lrk_del=30;
		}
		else
		{
		    audio_ref();			/*主音量控制,KALA OK音量控制*/
	    	adj_display();
	    }
	}
}

/****** 临时静音延时处理 *******/
void intmute_do(void)
{
  if (b_intmute)
  {
    if (intmute!=0) intmute--;
    else
    {
      b_intmute=0;
      audio_ref();
    }
  }
}


/**** 声音音量、音调等参数刷新输出处理 *****/
void audio_ref(void)
{
  if (b_mute==0)
  {
    if (b_intmute==0) 
    {
     audio_m62446_do();  /* 音频的音量、音调数据有效输出处理(IC: M62446) */
     if(b_mic) m62421_do();
    } 
  }
}


/***** 静音62446******/
void mute_enable(void)
{
  m62446_mute();	

/*  par[0]=0x02;     	关MIC */
  par[0]=0;
  par[1]=0; 

  par0_4=1;		/*cs接高电平*/
      
  send_62421(); 	/*KALA OK静音控制*/
}



/*** 把分开的电平数据合成M62446格式的输出数据 ##### ***/
void m62446_chval(void)
{ /* 参数: PAR		高, 反db数(R,SW,SR)
           PAR+01H	低, 反db数(L,C ,SL)
     返回: PAR		高位数据
           PAR+01H	低位数据 **/
  
  union {uint word;
           struct {uchar hi; uchar lo;} bytes;
        } temp;
  
  uchar i;
  
  for (i=7; i!=0; i--)
  {
    temp.word=temp.word<<1;
    if (par0_0) temp.bytes.lo|=0x01;
    else temp.bytes.lo&=0xfe;
    par[0]=par[0]>>1;
  }
 
  for (i=7; i!=0; i--)
  {
    temp.word=temp.word<<1;
    if (par1_0) temp.bytes.lo|=0x01;
    else temp.bytes.lo&=0xfe;
    par[1]=par[1]>>1;
  }

  par[0]=temp.bytes.hi;		/* 高位数据 */
  par[1]=temp.bytes.lo;	        /* 低位数据 */
}





/**************** 音频的音量、音调数据输出控制(IC: M62446) ****************/
void audio_m62446_do(void)
{
  uchar x;
  uchar y;
  uchar z;
  /**********************/
  /********  音量处理 *************************/
  if (balan_val<=9)
  {
    x=9-balan_val;			/* L的衰减dB数 */
    x=x*9;
    if(x>80) x=80;
    if (master_val>x) y=master_val-x;	/* 得L的dB数->y */
    else y=0;
    z=master_val;
  }
  else
  {
    x=balan_val-9;			/* R的衰减dB数 */
    x=x*9;
    if(x>80) x=80;
    if (master_val>x) z=master_val-x;	/* 得R的dB数->z */
    else z=0;
    y=master_val;
  }
  par[1]=80-vol_tab[y];			/* L反db数, 既值越大, 声越小(-80db为最小声) */
  par[0]=80-vol_tab[z];			/* R反db数, 既值越大, 声越小(-80db为最小声) */
  m62446_chval();			/* 格式数据 */
  par0_7=1; par0_6=0;
  send_62446();

  x=mic_echo_tab[mecho_val];		 /*MIC2 db数 */
  
  par[0]=80-x;
  if ((ch_att==C2_CH)&&(dsp_att==DSP_NO)&&(input_att!=INPUT_AC3)) par[1]=80;	/* 关闭CEN声道 */
  else par[1]=80-vol_tab[cen_val];       /* cen反db数 */
  m62446_chval();		 	 /* 格式数据 */
  par0_7=0; par0_6=1;
  send_62446();

  if (((ch_att==C2_CH)||(ch_att==C3_CH))&&(dsp_att==DSP_NO)&&(input_att!=INPUT_AC3))
  {
    par[0]=80; 				/* 关闭SR声道 */
    par[1]=80; 				/* 关闭SL声道 */
  }
 else 				  	/* cen反db数 */
  {
    par[0]=80-vol_tab[sr_val];		/* SR反db数 */
    par[1]=80-vol_tab[sl_val];		/* SL反db数 */  
  }
  m62446_chval();			/* 格式数据 */
  par0_7=1; par0_6=1;
  send_62446();

  /********  音调处理 *************************/
  tre_bass_do();

}

⌨️ 快捷键说明

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