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

📄 t10a2_drive.c

📁 AVR单片机基础程序实例! 十个程序源代码。
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -