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

📄 t10a2_other_disp.c

📁 AVR单片机基础程序实例! 十个程序源代码。
💻 C
📖 第 1 页 / 共 3 页
字号:
#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"
uchar digital_coding_format_1;
uchar digital_signal_x_x_1;
void twi_receive_data_disposal(void)
{
	uchar temp,temp1,temp2,temp3;
	temp=receive_number_single[0];
	temp1=temp;
	temp>>=4;
	temp1&=0x0f;
	temp2=receive_number_single[1];
	temp3=temp2;
	temp2>>=4;
	temp3&=0x0f;
	if(!(cd_input_f&BIT(USB_INSERT_F)))//USB拔出,需按左键 改
	{
		if((input_select==7)||(input_select==8)||(input_select==9)) //有的有音量渐降,有的没,输入通道切换标志无
		{bdata4_flag|=BIT(TUICHU_ANJIAN_F);  //改 可能与827d重复
			bdata3_flag&=~BIT(USB_CARD_PLAYER_F);//新加,待确?			osd_byte[0]=0;
			osd_byte[1]=0;
			remote_usbcard_on_disposal_1();	//2007/4/8
		}
	}
	if(!(cd_input_f&BIT(CARD_INSERT_F)))
	{
		if((input_select==10)||(input_select==11)||(input_select==12))
		{bdata4_flag|=BIT(TUICHU_ANJIAN_F);  //改 可能与827d重复
			bdata3_flag&=~BIT(USB_CARD_PLAYER_F);//新加,待确?			osd_byte[0]=0;
			osd_byte[1]=0;
			remote_usbcard_on_disposal_1();	//2007/4/8
		}
	}
	if(bdata4_flag&BIT(RECEIVE_8X_DATA_F))
	{bdata4_flag&=~BIT(RECEIVE_8X_DATA_F);
		if((receive_data_8x[0]==0x81)&&(receive_data_8x[1]==0x7e))
		{menu_address=0;
			bdata3_flag&=~BIT(MENU_OPEN_F);
			osd_byte[0]=0;//送菜单//OSD初始化完成//这里只送了电视影院,待确?			osd_byte[1]=0;
			remote_usbcard_on_disposal_1();
		}
		else if((receive_data_8x[0]==0x80)&&(receive_data_8x[1]==0x7f))//播放无文件,需按左键退出
		{
			if(bdata3_flag&BIT(USB_CARD_PLAYER_F))//在不播放USB,CARD 文件不接收退出健
			bdata4_flag|=BIT(TUICHU_ANJIAN_F);
		}//进入USB CARD无文件,自动退出,发送命令在退出键中处理
		else if((receive_data_8x[0]==0x82)&&(receive_data_8x[1]==0x7d))//直接退出,无需按左键
		{//从USB CARD 中退出, 这个不需要按退出键
			bdata3_flag&=~BIT(MENU_OPEN_F);
			menu_address=0;
			osd_byte[0]=0;
			osd_byte[1]=0;
			state_reg=0x17;
			osd_tiaoshi_display();//删
			display_init();
			remote_usbcard_on_disposal_1();
			bdata3_flag&=~BIT(USB_CARD_PLAYER_F);//	清此标志位
		}
		else if((receive_data_8x[0]==0x83)&&(receive_data_8x[1]==0x7c))	//此操作同?		{
		{
			bdata4_flag&=~BIT(EDITOR_ADD_F);
			//从编辑中退出再次启动解码板
			if(input_select==0)
			{
				//还要切光纤
				bdata3_flag|=BIT(DECODER_START);
				video_select=1;
				video_disposal();
			}
			else if(input_select==1)
			{//切同轴
				bdata3_flag|=BIT(DECODER_START);
				video_select=1;
				video_disposal();
			}
			else if(input_select==4)
			{//切同轴
				bdata3_flag|=BIT(DECODER_START);
				video_select=3;
				video_disposal();
			}
			else 	asm("nop");
			if(theatre_mode==0)//2007/5/17
				video_select=3;//新加视频切换
			else if(theatre_mode==1)
				video_select=1;
			else
				video_select=2;
			video_disposal();
			
			bdata3_flag&=~BIT(MENU_OPEN_F);
			menu_address=0;
			osd_byte[0]=0;
			osd_byte[1]=0;

			state_reg=0x17;	//删
			osd_tiaoshi_display();//删
			display_init();
			remote_usbcard_on_disposal_1();
			bdata3_flag&=~BIT(USB_CARD_PLAYER_F);
			I2C_counter=3;
			//remote_usbcard_on_disposal_1();
		}
		else 	asm("nop");
	}
	if(bdata4_flag&BIT(NUMBER_SINGLE_F))//数码信号处理,暂时关闭,可在解码通道打开
	{
		bdata4_flag&=~BIT(NUMBER_SINGLE_F);
		if(bdata3_flag&BIT(DIGITAL_SIGNAL_ON))
		{
			sampling_class=temp1;//采样率 32khz,44.1khz,48khz,64khz,88.2khz,96khz
			if((temp2==2)||(temp2==7))
			{
				digital_signal_x_x=temp2;//bbbb 1+1,1/0,2/0,3/0,2/1,2/2,3/1,3/2,3/3
				digital_coding_format=temp3;//ac3,dts,pcm,hdcd
				if(digital_signal_x_x_bak!=temp2)//防止重复发
				{digital_signal_x_x_bak=temp2;
					output_disposal();
					
				}
			
			}
			if((menu_address==0x00)&&(!(bdata3_flag&BIT(STATIC_STATE_F)))&&(!(PINC&BIT(CHECK_SINGLE)))&&(digital_coding_format_1!=digital_coding_format||digital_signal_x_x_1!=digital_signal_x_x))
			{
				if((input_select==0)||(input_select==1)||(input_select==4))
				{
					digital_coding_format_1=digital_coding_format;
					digital_signal_x_x_1=digital_signal_x_x;				
					state_reg=0x30;
					display_init();
//					write_data_display(0,2,blank);
					write_data_display(2,6,digital_coding_format_display[digital_coding_format]);
					write_yigezi_display(6,50);
					write_data_display(7,10,digital_signal_x_x_display[digital_signal_x_x]);
//					write_data_display(10,13,blank);
				
					//王明文添加
					//VFD_Variable = digital_coding_format;
					//Display_Proc(StreamFormat_DisMode);
				}
			}
		}
		else    {//无数字信号
			state_reg=0x30;
			display_init();
			write_data_display(0,13,no_signal_display);
		}
	}
}

uchar key_cm6930(void)
{
	uchar	cm_key; //=0;
	//start_cm6930();
	//write_cm6930(0xb0);
	//delay_1us();
	//cm_key=read_cm6930();
	//delay_1us();
	//stop_cm6930();
	cm_key = Read_ATA_2508_KeyCode();
	return(cm_key);
}

__flash unsigned char Init_Data_Alpha[13] =
{
	0x03,	// Feature Select,APIS-2 default value = 0
	0x5A,	// ALPHA0 , default value = 8
	0x08,	// 0x10,	// ALPHA1 , default value = 8 ATA2508DPI7 FamilyUser’s Manual V1.4ATA2508-User’s Manual 97/103
	0x08,	// 0x12,	// ALPHA2 , default value = 8
	0x08,	// 0x10,	// ALPHA3 , default value = 8
	0x08,	// ALPHA4 , default value = 8
	0x5A,	// ALPHA5 , default value = 8
	0x5A,	// ALPHA6 , default value = 8
	0x5A,	// ALPHA7 , default value = 8
	0x08,	// ALPHA8 , default value = 8
	0x06,	// ALPHA9 , default value = 8
	0x5A,	// ALPHA10 , default value = 8
	0x5A 	// ALPHA11 , default value = 8
};
__flash unsigned char Init_Data_Burst[50] =
{
	0x04,	// BETA , default value = 4
	0x27,	// AIC_WAIT , default value = 39
	0x41,	//0x41,	// REF_DELAY , default value = 0
	0x02,	// HYSTERESIS0 , default value = 1
	0x02,	// HYSTERESIS1 , default value = 1
	0x02,	// HYSTERESIS2 , default value = 1
	0x02,	// HYSTERESIS3 , default value = 1
	0x02,	// HYSTERESIS4 , default value = 1
	0x02,	// HYSTERESIS5 , default value = 1
	0x02,	// HYSTERESIS6 , default value = 1
	0x02,	// HYSTERESIS7 , default value = 1
	0x02,	// HYSTERESIS8 , default value = 1
	0x02,	// HYSTERESIS9 , default value = 1
	0x02,	// HYSTERESIS10 , default value = 1
	0x02,	// HYSTERESIS11 , default value = 1
	0xAA,	// STRENGTH_THRESHOLD0, default value = 1
	0xAA,	// STRENGTH_THRESHOLD1, default value = 1
	0xAA,	// STRENGTH_THRESHOLD2, default value = 1
	0xAA,	// STRENGTH_THRESHOLD3, default value = 1
	0xAA,	// STRENGTH_THRESHOLD4, default value = 1
	0xAA,	// STRENGTH_THRESHOLD5, default value = 1
	0xAA,	// STRENGTH_THRESHOLD6, default value = 1
	0xAA,	// STRENGTH_THRESHOLD7, default value = 1ATA2508DPI7 FamilyUser’s Manual V1.4ATA2508-User’s Manual 98/103
	0xAA,	// STRENGTH_THRESHOLD8, default value = 1
	0xAA,	// STRENGTH_THRESHOLD9, default value = 1
	0xAA,	// STRENGTH_THRESHOLD10, default value = 1
	0xAA,	// STRENGTH_THRESHOLD11, default value = 1
	0x0F,	// Sampling Interval, default value = 3
	0xB9,	// INTEGRATION TIME, default value = 15
	0x0F,	// IDLE TIME, default value = 15
	0x00,	// SIF_SETUP(RESERVED), default value = 0
	0x01,	// MODE , default value = 1
	0xff,	// GPIO_REG_L , default value = 0
	0xff,	// GPIO_REG_H , default value = 0
	0x41,	// GPIO_CONFIGURATION_L, default value = 0
	0x01,	// GPIO_CONFIGURATION_H, default value = 0
	0x41,	// GPIO_DIR_L , default value = 0
	0x01,	// GPIO_DIR_H , default value = 0
	0x04,	// CONTROL , default value = 4
	0x18,	// INT_MASK , default value = 0
	0x00,	// INT_CLEAR , default value = 0
	0xFF,	// INT_edge , default value = 0xff
	0x03,	// CONTROL_2 , default value = 0
	0xFF,	// BEEP_TIME , default value = 0,
	0xC8,	// BEEP_FREQUENCY , default value = 0,
	0x30,	// CALIBRATION INTERVAL , default value = 0x3C
	0x00,	// EINT_ENABLE , default value = 0
	0x00,	// EINT_POL , default value = 0
	0x00,	// FILTER_PERIOD , default value = 0
	0x00,	// FILTER_THRESHOLD , default value = 0
};



void ATA_2508Start()
{
	DDRE|=BIT(CM6930_DTA);
	DDRE|=BIT(CM6930_CLK);
	PORTE|=BIT(CM6930_DTA);
	delay_us(5);
	PORTE|=BIT(CM6930_CLK);
	delay_us(5);
	PORTE&=~BIT(CM6930_DTA);
	delay_us(5);
	PORTE&=~BIT(CM6930_CLK);
	delay_us(5);
}

/******************************************************************************/
void ATA_2508Stop()
{
	PORTE&=~BIT(CM6930_CLK);
	delay_us(5);
	DDRE|=BIT(CM6930_DTA);
	delay_us(5);
	PORTE&=~BIT(CM6930_DTA);
	delay_us(5);

	PORTE|=BIT(CM6930_CLK);
	delay_us(5);

	PORTE|=BIT(CM6930_DTA);
	delay_us(5);
}

/******************************************************************************/
void ATA_2508Ack()
{
	DDRE|=BIT(CM6930_DTA);
	delay_us(5);
	PORTE&=~BIT(CM6930_DTA);
	delay_us(5);
	PORTE|=BIT(CM6930_CLK);
	delay_us(5);

	PORTE&=~BIT(CM6930_CLK);
	delay_us(5);

	PORTE|=BIT(CM6930_DTA);
	delay_us(5);
}

/******************************************************************************/
void ATA_2508NoAck()
{
	DDRE|=BIT(CM6930_DTA);
	delay_us(5);
	PORTE|=BIT(CM6930_DTA);
	delay_us(5);
	PORTE|=BIT(CM6930_CLK);
	delay_us(5);

	PORTE&=~BIT(CM6930_CLK);
	delay_us(5);
}

/******************************************************************************/
uchar ATA_2508TestAck()
{
	uchar ErrorBit;

	DDRE|=BIT(CM6930_DTA);
	delay_us(5);
	PORTE|=BIT(CM6930_DTA);

	delay_us(5);

	DDRE&=~BIT(CM6930_DTA);
	delay_us(5);


	PORTE|=BIT(CM6930_CLK);
	delay_us(5);
	
	
	if (TEST_BIT(PINE,CM6930_DTA))
	{
		ErrorBit = 1;
	}
	else
	{
		ErrorBit = 0;
	}
	delay_us(5);

	PORTE&=~BIT(CM6930_CLK);
	return(ErrorBit);
}

/******************************************************************************/
void ATA_2508Write8Bit(uchar input)
{
	uchar temp;
	
	DDRE|=BIT(CM6930_DTA);
	delay_us(5);

	for (temp=8; temp!=0; temp--)
	{
		if (input & 0x80)
		{			
			PORTE|=BIT(CM6930_DTA);
		}
		else
		{
			PORTE&=~BIT(CM6930_DTA);
		}
		delay_us(5);

		PORTE|=BIT(CM6930_CLK);
		delay_us(5);

		input=input<<1;
		PORTE&=~BIT(CM6930_CLK);
		delay_us(5);
	}
}

/******************************************************************************/
void WriteATA_2508(uchar __flash *Wdata,uint RomAddress,uchar number)
{
	uchar num;

	ATA_2508Start();
	ATA_2508Write8Bit(0xB0);
	ATA_2508TestAck();
	ATA_2508Write8Bit(RomAddress);
	ATA_2508TestAck();
	
	for (num=0;num<number;num++)
	{
		ATA_2508Write8Bit(*Wdata);
		ATA_2508TestAck();
		Wdata++;
	}

	ATA_2508Stop();
}


/******************************************************************************/
uchar ATA_2508Read8Bit()
{
	uchar temp,rbyte=0;

	DDRE&=~BIT(CM6930_DTA);
	delay_us(5);

	for (temp=8; temp!=0; temp--)
	{
		PORTE|=BIT(CM6930_CLK);
		delay_us(5);

		rbyte=rbyte<<1;
		
		if (TEST_BIT(PINE,CM6930_DTA))
		{
			rbyte++;
		}
		
		PORTE&=~BIT(CM6930_CLK);
		delay_us(5);
	}
	return(rbyte);
}

/******************************************************************************/
void ReadATA_2508(uchar *RamAddress,uint RomAddress,uchar bytes)
{
	ATA_2508Start();
	ATA_2508Write8Bit(0xB0);
	ATA_2508TestAck();

	ATA_2508Write8Bit(RomAddress);

	ATA_2508TestAck();

	ATA_2508Start();
	ATA_2508Write8Bit(0xB1);
	ATA_2508TestAck();

	while (bytes!=1)
	{
		*RamAddress = ATA_2508Read8Bit();
		//ATA_2508TestAck();
		ATA_2508Ack();
		RamAddress++;
		bytes--;
	}
	*RamAddress = ATA_2508Read8Bit();
	ATA_2508NoAck();
	ATA_2508Stop();
}

/******************************************************************************/
/*	Function:	初始化ATA_2508
/*	Input:		none
/*	Output:		返回按键值
/******************************************************************************/
void Initial_ATA_2508()
{
	// ATA2508 INIT process.... // Disable INT that connected to ATA2508.s TINT.
	// Set APIS Mode...
	delay_us(2000);
	WriteATA_2508(Init_Data_Alpha,Feature_Select_Addr,13);
	WriteATA_2508(Init_Data_Burst,BETA_Addr,50);	
	// wait for 1 ms // to activate all the new settings, give a WARM RESET.
	delay_us(1000);
	WriteATA_2508(Init_Data_Burst,Warm_Reset_Addr,1); 	//随便写个值
	// wait for 1 ~ 10 ms. // Enable INT that connected to ATA2508.s TINT.
	delay_us(2000);
}


/******************************************************************************/
/*	Function:	读取触摸按键码
/*	Input:		none
/*	Output:		返回按键值
/******************************************************************************/
uchar Read_ATA_2508_KeyCode()
{
	uchar ATA_Key_Code;
	ReadATA_2508(ATA2508Rev.ATA_2508_Buffer,0x75,2);
	switch(ATA2508Rev.ATA_2508_Code)
	{
		case 0x0008:
			ATA_Key_Code = 0x20;
			break;
		case 0x0004:
			ATA_Key_Code = 0xe0;
			break;
		case 0x0002:
			ATA_Key_Code = 0x60;
			break;
		case 0x0010:
			ATA_Key_Code = 0xa0;
			break;
		case 0x0100:
			ATA_Key_Code = 0x40;
			break;
		case 0x0200:
			ATA_Key_Code = 0x80;
			break;	
		default:
			ATA_Key_Code = 0x00;
			break;			
	}


	//ReadATA_2508(Read_ATA_2508_Data,0x50,12);

	if (ATA_Key_Code != 0x00)
	{		
		return(ATA_Key_Code);
	}
	
	ReadATA_2508(ATA2508Rev.ATA_2508_Buffer,0x7A,2);	//读按键
	
	switch(ATA2508Rev.ATA_2508_Code)
	{
		case 0x0101:
			ATA_Key_Code = 0x10;
			break;
		case 0x0041:
			ATA_Key_Code = 0x90;
			break;
		case 0x0140:
			ATA_Key_Code = 0xc0;
			break;
		default:
			ATA_Key_Code = 0x00;
			break;		
	}
	
	return(ATA_Key_Code);
}

void tv_pingdian_disposal(void)
{
	vol_max();
	bdata0_flag|=BIT(VOL_DOWN_FLAG);//VOL_DOWN_FLAG=1;//音量慢降
	bdata1_flag|=BIT(PINDIAN_F);//pindian_f=1;

	display_state=1;
//	write_data_display(0,13,blank);
	disp_line=0;
	output_disposal();	//可这里会送state_counter=6;
	state_counter=11;
	sendbyte1_r2s15902();

	if((input_select==6)&&(ram[10*pingduan+7]>5))
	{		
		//王明文添加
		Disp_Type = TV_Mode;
		VFD_Variable = ram[10*pingduan+7] + 6;
		Display_Proc(HT_TV_Mode_DisMode);
	}
	else
	{
		Disp_Type = TV_Mode;
		VFD_Variable = ram[10*pingduan+7];

⌨️ 快捷键说明

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