📄 control.c
字号:
/****========================== 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 + -