📄 t10a2_drive.c
字号:
#include <iom64.h>
#include <inavr.h>
#include <ioavr.h>
#define uchar unsigned char
#define uint unsigned int
#include "T10A2_flash_extern.H"
#include "T10A2_extern_data.H"
void delay_1us(void)
{asm("nop");}
void delay_us(uint i)
{
do
{
delay_1us();
}
while(--i>0);
}
void delay_ms(uint j)
{
do
{
delay_us(250); //1000
}while(--j>0);
}
/****************************************************
函 数 名:SendData_R2S15902()
功 能:R2S15902送数,送四组数据
说 明:include(volume,tone,input_select
****************************************************/
void SendData_R2S15902(uchar temp_r2s,uchar number_r2s)
{
for(;number_r2s!=0;number_r2s--)
{
PORTC&=~BIT(CLK_R2S);
if(temp_r2s&0x80)
PORTC|=BIT(DTA_R2S);
else PORTC&=~BIT(DTA_R2S);
temp_r2s<<=1;
delay_us(5);
PORTC|=BIT(CLK_R2S);
delay_us(6);
PORTC&=~BIT(DTA_R2S);
delay_us(4);
}
}
void sendbit_r2s15902(uchar temp_bit)
{
PORTC&=~BIT(CLK_R2S);
if(temp_bit==1)
PORTC|=BIT(DTA_R2S);
else
PORTC&=~BIT(DTA_R2S);
PORTC|=BIT(CLK_R2S);
delay_us(6);
PORTC|=BIT(DTA_R2S);
delay_us(6);
PORTC&=~BIT(CLK_R2S);
delay_us(6);
PORTC&=~BIT(DTA_R2S);
}
void sendbyte1_r2s15902(void)//input_select+tone
{
uchar i;
uchar tempbyte_r2s15;
SendData_R2S15902(r2s15_input_select,3);
//if ((theatre_mode == 0) && (input_select == 6) && (ram[10*pingduan+7]>5))
// {
// tempbyte_r2s15=(r2s15_d3a_d8a|0x04);
// }
// else
// {
if(bdata1_flag&BIT(SELECT_MULTI))
tempbyte_r2s15=(r2s15_d3a_d8a|0x04);
else tempbyte_r2s15=r2s15_d3a_d8a;
// }
SendData_R2S15902(tempbyte_r2s15,6);
if(bdata7_flag&BIT(ai_on)) //AI打开
{
switch(theatre_mode)//bass
{
case 0:
i=((60-ram[0])/15)*2;
i+=ram[10*pingduan+8];
if(i>14)i=14;
tempbyte_r2s15=tone_tab[i];
break;
case 1:
i=((60-ram[0])/15)*2;
i+=ram_ht[9*mode_select_ht+7];
if(i>14)i=14;
tempbyte_r2s15=tone_tab[i];
break;
case 2:
i=((60-ram[0])/15)*2;
i+=ram_cd[7];
if(i>14)i=14;
tempbyte_r2s15=tone_tab[i];
break;
default:
break;
}
}
else
{
switch(theatre_mode)//bass
{
case 0:
tempbyte_r2s15=tone_tab[ram[10*pingduan+8]];
break;
case 1:
tempbyte_r2s15=tone_tab[ram_ht[9*mode_select_ht+7]];
break;
case 2:
tempbyte_r2s15=tone_tab[ram_cd[7]];
break;
default:
break;
}
}
SendData_R2S15902(tempbyte_r2s15,4);
if(bdata7_flag&BIT(ai_on))
{
switch(theatre_mode)///treble
{
case 0:
i=((60-ram[0])/15)*2;
i+=ram[10*pingduan+9];
if(i>14)i=14;
tempbyte_r2s15=tone_tab[i];
break;
case 1:
i=((60-ram[0])/15)*2;
i+=ram_ht[9*mode_select_ht+8];
if(i>14)i=14;
tempbyte_r2s15=tone_tab[i];
break;
case 2:
i=((60-ram[0])/15)*2;
i+=ram_cd[8];
if(i>14)i=14;
tempbyte_r2s15=tone_tab[i];
break;
default:
break;
}
}
else
{
switch(theatre_mode)//treble
{
case 0:
tempbyte_r2s15=tone_tab[ram[10*pingduan+9]];
break;
case 1:
tempbyte_r2s15=tone_tab[ram_ht[9*mode_select_ht+8]];
break;
case 2:
tempbyte_r2s15=tone_tab[ram_cd[8]];
break;
default:
break;
}
}
SendData_R2S15902(tempbyte_r2s15,4);
/*if(bdata1_flag&BIT(SELECT_MULTI))
tempbyte_r2s15=(r2s15_d17a_d23|0x80);
else tempbyte_r2s15=r2s15_d17a_d23;*/
tempbyte_r2s15=r2s15_d17a_d23;
//新加
if(input_select==3)//((input_select==6)&&(bdata5_flag&BIT(TV2_SINGLE)))
tempbyte_r2s15&=0x7f;
if((input_select==6)&&(ram[10*pingduan+7]<6))
tempbyte_r2s15&=0x7f;
if ((theatre_mode == 0) && (input_select == 6) && (ram[10*pingduan+7]>5))
{
tempbyte_r2s15=(r2s15_d3a_d8a|0x80);
}
SendData_R2S15902(tempbyte_r2s15,6);//最后一位要锁?
sendbit_r2s15902(0);
}
void sendbyte2_r2s15902(void)//fl,fr_vol
{
uchar temp;
uchar tablevol;
SendData_R2S15902(Gain_controlf,3);
if(fl_vol_bak < (AutoFit_Volume+fvol))
{
tablevol=0;
}
else
{
tablevol = fl_vol_bak - AutoFit_Volume - fvol;
}
temp=volume_tab[tablevol];
SendData_R2S15902(temp,7);
SendData_R2S15902(Gain_controlf,3);
if(fr_vol_bak < (AutoFit_Volume+fvol))
{
tablevol=0;
}
else
{
tablevol = fr_vol_bak - AutoFit_Volume - fvol;
}
temp=volume_tab[tablevol];
// temp=volume_tab[fr_vol_bak];
SendData_R2S15902(temp,7);
SendData_R2S15902(0x10,3);
sendbit_r2s15902(1);
}
void sendbyte3_r2s15902(void)//cen,sw_vol
{
uchar temp;
uchar tablevol;
SendData_R2S15902(Gain_controlc,3);
if(ce_vol_bak < (AutoFit_Volume+svol))
{
tablevol=0;
}
else
{
tablevol = ce_vol_bak - AutoFit_Volume - svol;
}
temp=volume_tab[tablevol];
// temp=volume_tab[ce_vol_bak];
SendData_R2S15902(temp,7);
SendData_R2S15902(Gain_controlsw,3);
temp=volume_tab[sw_vol_bak];
SendData_R2S15902(temp,7);
SendData_R2S15902(0x20,3);
sendbit_r2s15902(0);
}
void sendbyte4_r2s15902(void)//sl,sr_vol
{
uchar temp;
uchar tablevol;
SendData_R2S15902(Gain_controls,3);
if(sl_vol_bak < (AutoFit_Volume+svol))
{
tablevol=0;
}
else
{
tablevol = sl_vol_bak - AutoFit_Volume - svol;
}
temp=volume_tab[tablevol];
// temp=volume_tab[sl_vol_bak];
SendData_R2S15902(temp,7);
SendData_R2S15902(Gain_controls,3);
if(sr_vol_bak < (AutoFit_Volume+svol))
{
tablevol=0;
}
else
{
tablevol = sr_vol_bak - AutoFit_Volume - svol;
}
temp=volume_tab[tablevol];
// temp=volume_tab[sr_vol_bak];
SendData_R2S15902(temp,7);
SendData_R2S15902(0x30,3);
sendbit_r2s15902(1);
}
void STR(void)
{
PORTE|=BIT(SCL_6931_2313);//SCL_6931_2313=1
PORTE|=BIT(SDA_6931_2313);
delay_1us();
PORTE&=~BIT(SDA_6931_2313);;
delay_1us();
PORTE&=~BIT(SCL_6931_2313);
}
void STOP(void)
{
PORTE&=~BIT(SCL_6931_2313);
PORTE&=~BIT(SDA_6931_2313);
delay_1us();
PORTE|=BIT(SCL_6931_2313);
delay_1us();
PORTE|=BIT(SDA_6931_2313);
}
void write_2313_byte(uchar s)
{
uchar i=8;
do
{
i--;
if(s&0x80)
PORTE|=BIT(SDA_6931_2313);
else
PORTE&=~BIT(SDA_6931_2313);
s<<=1;
PORTE|=BIT(SCL_6931_2313);
delay_1us();
PORTE&=~BIT(SCL_6931_2313);
delay_1us();
}while(i>0);
// PORTE|=BIT(SDA_6931_2313);
PORTE|=BIT(SCL_6931_2313);
delay_1us();
// PORTE&=~BIT(SCL_6931_2313);
// while(PORTE&BIT(SDA_6931_2313)){};
PORTE&=~BIT(SCL_6931_2313);
}
void write_2313_page(void)
{
uchar temp;
STR();
write_2313_byte(PT2313_BYTE0);
write_2313_byte(PT2313_BYTE1);
/*temp=volume_2313[mic_vol1]|PT2313_BYTE2;
write_2313_byte(temp);
temp=volume_2313[mic_vol2]|PT2313_BYTE3;
write_2313_byte(temp);
temp=volume_2313[mic_vol1]|PT2313_BYTE4;
write_2313_byte(temp);
temp=volume_2313[mic_vol2]|PT2313_BYTE5;
write_2313_byte(temp);*/
temp=volume_2313[mic_vol1]|PT2313_BYTE2;//将MIC1,MIC2音量反过来
write_2313_byte(temp);
temp=volume_2313[mic_vol2]|PT2313_BYTE3;
write_2313_byte(temp);
temp=volume_2313[mic_vol1]|PT2313_BYTE4;
write_2313_byte(temp);
temp=volume_2313[mic_vol2]|PT2313_BYTE5;
write_2313_byte(temp);
temp=audio_switch_table[mic_echo]|PT2313_BYTE6;////Audio Switch and gain 修改,mic_echo为0时6931需静音,
// if(bdata2_flag&BIT(LOUDNESS_F))
// temp&=0xfb;
// else temp|=0x04;
write_2313_byte(temp);
temp=tone_tab_2313[mic_bass]|PT2313_BYTE7;
write_2313_byte(temp);
temp=tone_tab_2313[mic_treble]|PT2313_BYTE8;
write_2313_byte(temp);
STOP();
}
void write_mic_delay(void)
{
uint Data_Temp = 0x00;
uchar i;
Data_Temp = delay_table[mic_delay];
CLR_BIT(PORTA,ECHO_STB);
SET_BIT(PORTA,ECHO_SCL);
for(i=0;i<10;i++)
{
CLR_BIT(PORTE,SDA_6931_2313);
SET_BIT(PORTA,ECHO_SCL);
if (Data_Temp&0x0001)
{
SET_BIT(PORTE,SDA_6931_2313);
}
Data_Temp >>= 1;
CLR_BIT(PORTA,ECHO_SCL);
NOP();
NOP();
NOP();
}
SET_BIT(PORTA,ECHO_STB);
SET_BIT(PORTA,ECHO_SCL);
}
void vol_max(void)//取音量最大下降次数
{
uchar i;
for(i=0;i<6;i++)
{
if(vol_down_time<ram_1[i])
vol_down_time=ram_1[i];
}
}
/********************音量处理子程序****************************/
void tv_vol_disposal(void)//处理TV模式 音量
{
uchar j=0;
do
{
if(ram[0]+ram[10*pingduan+j+1]<10)
{
ram[10*pingduan+j+1]=10-ram[0];
bdata2_flag|=BIT(VOL_CHANGE_F);//音量改变标志
}
if(ram_1[j]<(ram[0]+ram[10*pingduan+j+1]-10))
{
ram_1[j]+=1;
if(ram_1[j]>70)ram_1[j]=70;
bdata2_flag|=BIT(VOL_CHANGE_F);
}
if(ram_1[j]>(ram[0]+ram[10*pingduan+j+1]-10))
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -