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

📄 t10a2_main.c

📁 AVR单片机基础程序实例! 十个程序源代码。
💻 C
📖 第 1 页 / 共 5 页
字号:
	
	if(ram[0]<10)ram[0]= 10;
	if(ram[0]>35)ram[0]=35;//音量不能过大
	for(j=0;j<10;j++)//检测读数
	{
		for(i=1;i<7;i++)
		{
			if(ram[10*j+i]>20)ram[10*j+i]=10;
		}
		if(ram[j*10+7]>11)ram[j*10+7]=5;//mode_select
		if(ram[j*10+8]>14)ram[j*10+8]=7;//bass
		if(ram[j*10+9]>14)ram[j*10+9]=7;//treable
		if(ram[j*10+10]==2)ram[j*10+10]=1;//附加,如果输出为耳机时转为2.1ch
		if(ram[j*10+10]>2)ram[j*10+10]=0;//output_state
	}
	if(input_select>12)input_select=0;//ram[101]
	if(pingduan>9)pingduan=0;//ram[102]
	if(theatre_mode>2)theatre_mode=0;//ram[103]
	if((tv_input_f>3)||(ht_input_f>3))//||(tv_input_select>6)||(tv_input_select<4)||(ht_input_select>3))//ram[104]ram[105]
	{
		tv_input_f=0;
		ht_input_f=0;
		tv_input_f|=BIT(TV_5CH1_ON);
		tv_input_f|=BIT(TV_COAXIAL_ON);
		ht_input_f|=BIT(HT_5CH1_ON);
		ht_input_f&=~BIT(HT_COAXIAL_ON);
		system_setup|=BIT(TONGBU_5CH1);/*要随时修改,跟上面一定要对应,和家庭影院对应*/
		system_setup&=~BIT(TONGBU_COAXIAL_ON);
		tv_input_select=6;
		ht_input_select=0;
	}
	if(ht_input_f&BIT(HT_5CH1_ON))
		{system_setup|=BIT(TONGBU_5CH1);}
	else	{system_setup&=~BIT(TONGBU_5CH1);}
	if(ht_input_f&BIT(HT_COAXIAL_ON))
		{system_setup|=BIT(TONGBU_COAXIAL_ON);}
	else	{system_setup&=~BIT(TONGBU_COAXIAL_ON);}
	
	cd_input_f=0;//ram[106]
	if(cd_input_select>6)cd_input_select=6;

	if(kalaok_mode>5)
	kalaok_mode=5;//karaok is user mode initialization	MIC模式没保?
	mic_select=0;
	if(mic_vol1<15)mic_vol1=20;
	if(mic_vol2<15)mic_vol2=20;
	if(mic_vol1>25)mic_vol1=20;
	if(mic_vol2>25)mic_vol2=20;
	if(mic_bass>8)mic_bass=4; /*用户模式*/
	if(mic_treble>8)mic_treble=4;
	if(mic_delay>16)mic_delay=8;
	if(mic_echo>12)mic_echo=6;//读EPPROM 判
	for(i=0;i<4;i++)
	{
		ram[114+i] = ram_2[i];//mic_bass=mic_bass_user;
	}

	for(j=0;j<6;j++)
	{
		for(i=1;i<7;i++)
		{
			if(ram_ht[j*9+i]>20)ram_ht[j*9+i]=10;
		}
		if(ram_ht[j*9+7]>14)ram_ht[j*9+7]=7;
		if(ram_ht[j*9+8]>14)ram_ht[j*9+8]=7;
		if(ram_ht[j*9+9]==2)ram_ht[j*9+9]=1;//附加,如果输出为耳机时转为2.1ch
		if(ram_ht[j*9+9]>2)ram_ht[j*9+9]=0;
	}
	if(mode_select_ht>5)
	{mode_select_ht=5;//家庭影院出厂值重写
		for(j=0;j<6;j++)
		{
			ram_ht[j*9+3]=ht_mode_parameter[j][0];
			ram_ht[j*9+4]=ht_mode_parameter[j][1];
			ram_ht[j*9+7]=ht_mode_parameter[j][2];
			ram_ht[j*9+8]=ht_mode_parameter[j][3];
		}
	}
	ram_cd[0]=0;
	for(i=1;i<7;i++)
	{
		if(ram_cd[i]>20)ram_cd[i]=10;
	}
	if(ram_cd[7]>14)ram_cd[7]=7;
	if(ram_cd[8]>14)ram_cd[8]=7;
	if(ram_cd[9]==2)ram_cd[9]=1;//附加,如果输出为耳机时转为2.1ch
	if(ram_cd[9]>2)ram_cd[9]=0;
	if(output_state_tv==2)output_state_tv=1;
	if(output_state_tv>2)output_state_tv=0;
	if(output_state_ht==2)output_state_ht=1;
	if(output_state_ht>2)output_state_ht=0;
	//if(mode_tv_flag>1)mode_tv_flag=0;
	//if(mode_tv_flag==1)bdata5_flag|=BIT(TV2_SINGLE);//电视影院,M MODE
	
	input_select_bak=input_select;
	/****************送初值,调试************************/
	ad_channel=2;
//	AD_select_channel();
	/**************************************************/
	/***************************************************/
	PORTA&=~BIT(MUTE_KARAOK); //静KARAOK

	
	for(j=0;j<6;j++)//开机MUTE
	{
		ram_1[j]=0;
	}
	bdata7_flag&=~BIT(decode_mute);	//2007/05/28 上电清DECODE_MUTE
	touch_cm6930_line=0x00;
	bdata7_flag&=~BIT(mode_adj_f);
	//bdata7_flag&=~BIT(mute_off_f);
	bdata0_flag|=BIT(VOL_UP_FLAG);//VOL_UP_FLAG=1;
	bdata0_flag&=~BIT(VOL_DOWN_FLAG);//	VOL_DOWN_FLAG=0;
	input_select_disposal();
	//sendbyte1_r2s15902();
	sendbyte2_r2s15902();
	sendbyte3_r2s15902();
	sendbyte4_r2s15902();
	//bdata1_flag|=BIT(CHANNLE_2AND5_F);//调试用,改为5.1CH
	bdata0_flag|=BIT(CHECK_SINGLE_ALLOW);//CHECK_SINGLE_ALLOW=1; 允许检测信号
	pinpu_class=0x00; //屏谱种类
	display_state=1;
	ADCSRA|=BIT(ADSC);//起动一次AD转换
	bdata0_flag&=~BIT(RUN_F);//测试时开机
	bdata2_flag|=BIT(STANDBY_F);//待机打开
	bdata2_flag&=~BIT(TURN_ON_F);//TURN_ON_F=0
	//watchdog_init();
	standby_led=0x40;
	SEI();
	video_select=2;
	video_disposal();	
	/******************最近新加******************/
	//bdata4_flag|=BIT(DISPLAY_SLOW_F);//暂屏蔽慢显
	//write_data_display(0,13,&long_avlight[13]);//暂屏蔽慢显

	disp_line=41;//新  2007/4/1
	delay_ms(2000);
	
	Initial_ATA_2508();
	
	delay_ms(2000);
	
	while(1)
	{
		if(remote_counter>10) //10ms
		{
			first_int_f=0;
			remote_data=0;
			remote_data1=0;
			remote_bit=0;
		}
		//WDTCR|=0x18;/*关闭看门狗*/
		//WDTCR&=~BIT(WDE);
		if(remote_continue_f==1)//检测是否放开按键,如果放开remote_cnt>250,就清remote_data2bak中的内容
		{
			if(remote_counter>100)//100ms不按清0
			{
				remote_continue_f=0;
				remote_counter=0;
				remote_counter1=0;
				remote_data2bak=0;
				remote_bit=0;
				if (remote_data2 == 0)
				{
					remote_data2 = 0xff;
					Flg_Standby_SW = 0;	
				}
				Flg_Standby_SW1 = 0;
			}
		}
		//WDTCR=0x0f;
		if(counter_10ms>=5)
		{
			counter_10ms=0;
			counter_50ms++;
		
		}
		if(counter_50ms>=2)
		{
			LED_Flash_Timer1 = 1;

			counter_50ms=0;
			counter_100ms++;
			counter_100ms1++;
			time_flag|=BIT(FLAG_100MS);	//100ms标志位

			if (remote_data2 == 0 && (remote_continue_f == 1) && (Flg_Standby_SW == 1))
			{
				Standby_SW_Timer++;
			}
			else
			{
				Standby_SW_Timer = 0;
			}
		}
		if(counter_100ms1>=2)
		{
			counter_100ms1=0;
			time_flag|=BIT(FLAG_200MS);
		}
		if(counter_100ms>=5)
		{
			counter_100ms=0;
			counter_500ms_new++;
			time_flag|=BIT(FLAG_500MS);			
		}
		if(counter_500ms_new>=2)
		{
			counter_500ms_new=0;
			time_flag|=BIT(FLAG_1S);
		}
		if(!(bdata0_flag&BIT(RUN_F)))//RUN_F=0
		{
			if(!(bdata2_flag&BIT(TURN_ON_F)))//TURN_ON_F=0;
			{
				if(remote_data2==0x00)  //
				{				
					if (Standby_SW_Timer > 25)			//关电源
					{
						PORTD|=BIT(STANDBY_SWITCH);				
					}
					else if (Flg_Standby_SW == 0)
					{					
						input_select=input_select_bak;
						if(input_select<4)
						ht_input_select=input_select;
						else if(input_select<7)
						tv_input_select=input_select;
						//else if(input_select<10)
						//{if(!(cd_input_f&BIT(USB_INSERT_F)))input_select=0;}
						//else if(input_select<13)
						//{if(!(cd_input_f&BIT(CARD_INSERT_F)))input_select=0;}
						else    //asm("nop");
						{
							input_select=0;
							ht_input_select=0;
						}
						input_select_disposal();
						turn_on_init();
						Flg_Standby_SW1 = 1;	
					}					
				}
				
				if(time_flag&BIT(FLAG_10MS))//FLAG_10MS 处理
				{
					time_flag&=~BIT(FLAG_10MS);
					counter_karaok_10ms++;
					if(bdata3_flag&BIT(OK1_INSERT_FLAG))
					{
						if(!(PINF&BIT(MICIN_1)))no_ok1single_counter++;//ok 拔出
						if((no_ok1single_counter>15)&&(counter_karaok_10ms<20))//新加ok检测,待修改
						{
							bdata3_flag&=~BIT(OK1_INSERT_FLAG);
							MIC_Signal_OK = 0;
							no_ok1single_counter=0;

							//王明文添加
							state_counter=6;
							Disp_Type = MIC_1;
							VFD_Variable = MIC_Pullout;
							Display_Proc(MIC_Connect_DisMode);
							Flg_MIC_Disp = 1;							
						}
					}
					else	
					{
						if(PINF&BIT(MICIN_1))ok1_single_counter++;//KARA OK检测放到外面处理
						if((ok1_single_counter>15)&&(counter_karaok_10ms<20))//新加ok检测,待修改
								{
										bdata3_flag|=BIT(OK1_INSERT_FLAG);
				//						bdata7_flag&=~BIT(decode_mute);
										ok1_single_counter=0;	//MIC1 INSERT
										
										//王明文添加
										state_counter=6;
										Disp_Type = MIC_1;
										VFD_Variable = MIC_Insert;
										Display_Proc(MIC_Connect_DisMode);
										Flg_MIC_Disp = 1;
							}
					}
					if(bdata3_flag&BIT(OK1_INSERT_FLAG) && MIC_Signal_OK == 0)
					{
							MIC_Signal_OK = 1;
						//	input_select=0;
						input_select=input_select_bak;
						if(input_select<4)
						ht_input_select=input_select;
						else if(input_select<7)
						tv_input_select=input_select;
						//else if(input_select<10)
						//{if(!(cd_input_f&BIT(USB_INSERT_F)))input_select=0;}
						//else if(input_select<13)
						//{if(!(cd_input_f&BIT(CARD_INSERT_F)))input_select=0;}
						else    //asm("nop");
						{
							input_select=0;
							ht_input_select=0;
						}
							input_select_disposal();
							//write_data_display(0,13,mic_insert_display);
							turn_on_init();
					}
				
					if(counter_karaok_10ms>=20)
					{
						counter_karaok_10ms=0;
						no_ok1single_counter=0;
						ok1_single_counter=0;
					}
				}
				
			}
			else //TURN_ON_F=1;
			{
				//PORTC&=~BIT(POWER_DECODER);
				//PORTC|=BIT(POWER_DECODER);	////解码板打开
				
				/************************开机,继电器开关打开**************************/
				if(counter_500ms==0)
				{
					if(theatre_mode==0)//视频处理还得改
					video_select=3;
					else if(theatre_mode==1)
					video_select=1;
					else
					video_select=2;
					video_disposal();//新加					
					remote_data2=0xff;//附加清零
					anjian=0xff;//附加
					ad_channel=2;//屏谱老是没了,重新开机时再送一次.
		//			AD_select_channel();//新加
					output_disposal();	/*开机暂放在这*/
					bdata0_flag|=BIT(RUN_F);//测试时开机
					bdata2_flag&=~BIT(STANDBY_F);//待机打开
				//	PORTD&=~BIT(STANDBY_SWITCH);//继电器开机			
				//	delay_ms(10);	
					if(bdata3_flag&BIT(OK1_INSERT_FLAG))
					{PORTA|=BIT(MUTE_KARAOK);//打开OK
					write_2313_page();/*kalaok 音量,EQ*///插入OK马上?
					write_mic_delay();//
					
					MIC_Signal_OK = 1;
					}
					delay_us(5);
					
					bdata7_flag&=~BIT(adj_5_2);			
					touch_cm6930_line=0x00;
					//TWCR= 0x45; //enable twi
					menu_address=0;//改
					bdata3_flag&=~BIT(MENU_OPEN_F);
					osd_byte[0]=0;
					osd_byte[1]=0;
					static_counter_10ms=0;//新加
					static_state_counter=0;
					//state_counter=0;//新加,一进run,马上显示屏谱
					/*if(input_select>6)
					{remote_data2=0x27;
					}*/
					bdata3_flag&=~BIT(USB_CARD_PLAYER_F);
				}
			}
			if(time_flag&BIT(FLAG_1S))
			{
				time_flag&=~BIT(FLAG_1S);
				counter_1s_standbyled++;
				if(counter_1s_standbyled>1)
				{counter_1s_standbyled=0;
					if(standby_led!=0)
					standby_led=0;
					else	standby_led=0x40;
				}
				counter_1s_poweroff++;
				if(counter_1s_poweroff>600)
				{
					PORTD|=BIT(STANDBY_SWITCH);
				}				
			}
			if(time_flag&BIT(FLAG_500MS))//FLAG_500MS
			{
				time_flag&=~BIT(FLAG_500MS);
				
				Temperature_Detect();
				
				if(state_counter>0)//状态定时
					{state_counter--;}
				else
				{
					if (Disp_Register != 0)
					{
						Disp_Register = 0;
					}
				}
				if(counter_500ms>0)counter_500ms--;
				//修改 手动关机之后,检测是否无信号,是,转入自动开机状态
				if(bdata0_flag&BIT(STANDBY_SINGLECHECK_F))//&&(cd_input_f==0))//有USB,卡时不进入.
				{
					if(cd_input_f==0)//改
					{
						single_1s_counter++;
						if(!(PINC&BIT(CHECK_SINGLE)))
						counter_1s_check++;//有信号加一
						if(single_1s_counter>=121)
						{
							single_1s_counter=0;
							counter_1s_check=0;
						}
						if((single_1s_counter>=120)&&(counter_1s_check<50))	//一分钟,可能要修改数值
						{
							bdata0_flag|=BIT(CHECK_SINGLE_ALLOW);//check_single_allow=1;//允许自动开机
							bdata0_flag&=~BIT(STANDBY_SINGLECHECK_F);//standby_singlecheck_f=0;
						}
					}

				}
			}
			if(time_flag&BIT(FLAG_200MS))
			{
				time_flag&=~BIT(FLAG_200MS);
			}
			if(time_flag&BIT(FLAG_100MS))//FLAG_100MS 处理
			{
				time_flag&=~BIT(FLAG_100MS);
				if(bdata7_flag&BIT(mute_off_f))
				{
					if (touch_flag & BIT(Temperature95))
					{
						PORTD|=BIT(STANDBY_SWITCH);
					}

					//王明文添加
					CLEAR_VFD();
					VFD_Display_Mode = Initial_DisMode;					
					//Flg_Standby_SW = 0;
					
					PORTC&=~BIT(POWER_DECODER);
					PORTC|=BIT(STANDBY);
					counter_1s_poweroff=0x00;
					data_4094&=~BIT(led_green);
					data_4094&=~BIT(led_blue);
					write4094(data_4094);
					bdata7_flag&=~BIT(mute_off_f);
				}	
				//WDR();
				//WDTCR=0x18;/*关闭看门狗*/
				//WDTCR=0x00;
				if(touch_flag&BIT(CONTINUE_F))//按键连续500ms之后,才清0,有效
				{
					if((touch_value_bak==0)||(touch_value_bak==1))	//可以在这里做去抖动,长按,或按键松才进行操作
					{
						touch_counter1++;
						if(touch_counter1>4)
						{
							touch_value_bak=0xff;
							touch_counter1=5;
						}
					}
				}
				if(bdata2_flag&BIT(TURN_ON_F))
				{
					//if(disp_line<40)//40
					//{write_data_display_1(0,13,&disp_buffer[disp_line]);}//流动
					if((disp_line==12)||(disp_line==25)||(disp_line==38))counter0_100ms=5;//12,25,39
					if(disp_line<41)//41
					{
						if((disp_line==13)||(disp_line==26)||(disp_line==39))
						{
							if(counter0_100ms==0)
							disp_line+=1;
						}
						else
						disp_line+=1;
					}
					if(counter0_100ms>0)counter0_100ms--;
				}
				//WDTCR=0x0f;
			}
			if(time_flag&BIT(FLAG_5MS))//FLAG_100MS 处理
			{
				time_flag&=~BIT(FLAG_5MS);			


					if(!(bdata2_flag&BIT(TURN_ON_F)))//TURN_ON_F=0;如果遥控按键按下则不进
					{		

⌨️ 快捷键说明

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