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

📄 system_operation.c

📁 一款车载DVD的车机源程序(正在生成中的哦)
💻 C
📖 第 1 页 / 共 5 页
字号:
//	Disc_in_rom	DVD_DATA_OUT	DVD_CLK		CDC_BUS		DVD_SW		TOU_CLK		TOU_DO		TOU_IRQ
	PB_DDR = 0X14;
	PB_OR = 0X0c;
	PB_DR = 0X1F;
//	bit7			bit6				bit5			bit4				bit3			bit2				bit1				bit0
//	AT041_CS	AT041_SCK		AT041_SI		AT041_SO		TUN_ON		DVD_POWER_ON	TFT_KEY_AD1		TFT_KEY_AD2
	PC_DDR = 0XEc;
	PC_OR = 0XEc;
	PC_DR = 0XF0;
//	bit7				bit6				bit5					bit4				bit3			bit2			bit1			bit0
//	TV_ON			MOTOR_OPEN		MOTOR_CLOSE		BRAKE_CHCK		SW2			SW1			KEY_AD		TUN_SM
	PD_DDR = 0XE0;
	PD_OR = 0XE0;
	PD_DR = 0X0F;
//	bit7			bit6			bit5				bit4					bit3			bit2			bit1			bit0
//	TOU_DI		MUTE		TEL_MUTE		BACK_CON_MUTE		TUN_SD		TUN_SSTOP	TV_MUTE		HI_CON		 
	PE_DDR = 0Xd3;
	PE_OR = 0Xd2;
	PE_DR = 0X8d;
//	bit7			bit6			bit5				bit4			bit3			bit2			bit1		bit0
//	SEL_2533_1	SEL2533_2	BACK_CAR		DVD_IR		VIDEO_ID	ACC_ID		BELL		IR
	PF_DDR = 0Xd2;
	PF_OR = 0Xc3;
	PF_DR = 0X30;					//Power on enable the bell sometime
}
/******************************************************
Function:All IO as input
******************************************************/
void ACC_off_setting_IO(void)
{
//	bit7			bit6			bit5			bit4					bit3			bit2			bit1			bit0
//	SCL			SDA			POWER_ON	TFT_POWER_ON		PLL_CE		PLL_DI		PLL_DO		PLL_CL
	PA_DDR = 0X30;
	PA_OR = 0X30;
	PA_DR = 0;//0Xc0;
//	bit7			bit6				bit5			bit4			bit3			bit2			bit1			bit0
//	Disc_in_rom	DVD_DATA_OUT	DVD_CLK		CDC_BUS		DVD_SW		TOU_CLK		TOU_DO		TOU_IRQ
	PB_DDR = 0;//0X88;
	PB_OR = 0;//0X88;
	PB_DR = 0;//0X88;
//	bit7			bit6				bit5			bit4				bit3			bit2				bit1				bit0
//	AT041_CS	AT041_SCK		AT041_SI		AT041_SO		TUN_ON		DVD_POWER_ON	TFT_KEY_AD1		TFT_KEY_AD2
	PC_DDR = 0X04;
	PC_OR = 0X04;
	PC_DR = 0;//0X00;
//	bit7				bit6				bit5					bit4				bit3			bit2			bit1			bit0
//	TV_ON			MOTOR_OPEN		MOTOR_CLOSE		BRAKE_CHCK		SW2			SW1			KEY_AD		TUN_SM
	PD_DDR = 0X80;
	PD_OR = 0X80;
	PD_DR = 0;//0X6C;
//	bit7			bit6			bit5				bit4					bit3			bit2			bit1			bit0
//	TOU_DI		MUTE		TEL_MUTE		BACK_CON_MUTE		TUN_SD		TUN_SSTOP	TV_MUTE		HI_CON		 
	PE_DDR = 0X41;
	PE_OR = 0X41;
	PE_DR = 0X01;
//	bit7			bit6			bit5				bit4			bit3			bit2			bit1		bit0
//	SEL_2533_1	SEL2533_2	BACK_CAR		DVD_IR		VIDEO_ID	ACC_ID		BELL		IR
	PF_DDR = 0x10;//0XC0;
	PF_OR = 0x10;//0XC0;
	PF_DR = 0x10;//0XC0;					//Power on enable the bell sometime
}
/*****************************************************************
Function:Init each process,such csp/video switch/TV tuner/Radio tuner and so on
*******************************************************************/
void Init_each_process(void)
{
	unsigned char i;
	//	asm	sim							//Disable all interrupt
	Bell_cnt = 50;					//Enable the bell 0.5s	0.5s = 10ms * 50
	SPI1_CR = 0;          			/* Disable SPI */
	SCI_SCCR2 = 0;        			/* Disable SCI */
	ADC_CR = 0x00;        			/* ADC Off */
	ISPR0=0xCF;
	TIM2_CR1 = 0;  					/* disable Timer 2 */ 
	//TIM2_CR2 = 0x08; 
	TIM1_CR2 = 0x08;                /* Clock divided by 8 */
	TIM1_CR1 = 0x40;                /* Output Compare Int Enable */
	//------Init CSP----------
	Total_volume = 15;
	Bass_volume = 10;
	Treble_volume = 7;
	LF_volume = 14;
	RF_volume = 14;
	LR_volume = 14;
	RR_volume = 14;
	//-------Init T100 video setting
	Contrast_volume =13;
	Brightness_volume =13;
	Chroma_volume =13;
	//------Init BACK_CAR flag---------
	if(!ValBit(PF_DR,BACK_CAR))
		ClrBit(System_flag3,BACK_CAR_on_flag);	//If low then first time power on then will in back car mode
	//------Init telephone flag---------
	if(ValBit(PE_DR,TEL_MUTE))
		SetBit(System_flag3,Telephone_on_flag);
	else
		ClrBit(System_flag3,Telephone_on_flag);
	//------Init BRAKE_CHCK flag------
	if(ValBit(PD_DR,BRAKE_CHCK))
		SetBit(System_flag3,BRAKE_CHCK_normal_flag);
	else
		ClrBit(System_flag3,BRAKE_CHCK_normal_flag);
	//------Init TV tuner---------
	for(i=0;i<50;i++)
		TV_frequence_list[i] = VLF_MIN_FPC;
	//------Init Radio tuner-------
	for(i=0;i<30;i++)
		FM_frequence_list[i] = 8750;
	for(i=0;i<30;i++)
		AM_frequence_list[i] = AMFREQ_MIN;
	SetBit(Radio_tuner_flag,AutoSearchOK_flag);
	//------Init the DVD command------------
	SetBit(System_flag4,DVD_play_pause_flag);
	//------Init CDC-----------------------
	
	//------Init video switch--------
	//------Init bell ---------------
	SetBit(System_flag2,Bell_on_flag);
	SetBit(System_flag,bSearchDir);
	System_mode = Radio_mode;
	EICR = 0x98;
	asm	rim;
	
}
/*--------------------------------------------------------------------------
Routine : Detect_key
Input   : 
Output  : Code_number
Description 
        - Detect key function by ADC
--------------------------------------------------------------------------*/
void Detect_key(void)
{
	unsigned char Key_volume,i;
	unsigned char Key_code_buffer[5];
	unsigned char Key_code= 0x44;
	unsigned char Store_keep_key_code;
	for(i=0;i<5;i++)	/*One detect key will do 5 time ADC*/
		{
		/*Selection the analog input to convert >AIN13(PC1);CH3 CH2 CH1 CH0:1 1 0 1*/
		Select_ADC_channel(13);
		/*Start to convert*/
		SetBit(ADC_CR,5);
		/*Wait the EOC bit beto 1 then the convert complete*/
		while(!ValBit(ADC_CR,7))
			asm	nop;
		/*Finish convert then read the ADCDRH and the ADCDRL register to comparison
	  	what key function had press on*/
		Key_volume = ADC_DR;
		Store_keep_key_code = Keep_key_code;
		if(Key_volume >=0xe5 && Key_volume<=0xff)
			{
			Key_code = 0xff;		/*No key press on*/
			Keep_key_code = No_key_on;
			}	//8 is mean 0.15V

		#ifdef Quest_500_a4
		if(Key_volume>=23-8 && Key_volume<23+8)			/*The volume is 23*/
			Key_code = Key_power;			
		if(Key_volume>=45-8 && Key_volume<=45+8)			/*The volume is 45*/
			Key_code = Key_DVD;
		if(Key_volume>=71-8 && Key_volume<=71+8)			/*The volume is 71*/
			Key_code = Key_TV;	
		if(Key_volume>=92-8 && Key_volume<=92+8)			/*The volume is 95*/
			Key_code = Key_FM;	
		if(Key_volume>=116-8 && Key_volume<=116+8)		/*The vloume is 118*/
			Key_code = Key_AM;	
		if(Key_volume>=138-8 && Key_volume<=138+8)		/*The volume is 141*/
			Key_code = Key_CDC;
		if(Key_volume>=163-8 && Key_volume<=163+8)		/*The volume is 166*/
			Key_code = Key_open;
		#else
		if(Key_volume>=23-8 && Key_volume<23+8)			/*The volume is 23*/
			Key_code = Key_power;			
		if(Key_volume>=45-8 && Key_volume<=45+8)			/*The volume is 45*/
			Key_code = Key_jump_back;
		if(Key_volume>=71-8 && Key_volume<=71+8)			/*The volume is 71*/
			Key_code = Key_jump_front;	
		if(Key_volume>=95-8 && Key_volume<=95+8)			/*The volume is 95*/
			Key_code = Key_vol_up;	
		if(Key_volume>=118-8 && Key_volume<=118+8)		/*The vloume is 118*/
			Key_code = Key_vol_down;	
		if(Key_volume>=141-8 && Key_volume<=141+8)		/*The volume is 141*/
			Key_code = Key_mute;
		if(Key_volume>=166-8 && Key_volume<=166+8)		/*The volume is 166*/
			Key_code = Key_open;
		#endif
		
		if(Key_code == No_key_on)	/*When no key1 press on then detect the key2*/
			{
			/*Selection the analog input to convert >AIN12(PC0);CH3 CH2 CH1 CH0:1 1 0 0*/
			Select_ADC_channel(12);
			/*Start to convert*/
			SetBit(ADC_CR,5);
			/*Wait the EOC bit beto 1 then the convert complete*/
			while(!ValBit(ADC_CR,7))
				asm	nop;
			/*Finish convert then read the ADCDRH and the ADCDRL register to comparison
	  		what key function had press on*/
			Key_volume = ADC_DR;
			
			if(Key_volume >=0xc0 && Key_volume<=0xff)
				{
				Key_code = 0xff;		/*No key press on*/
				Keep_key_code = No_key_on;
				}
			else
				Keep_key_code = Store_keep_key_code;
			
			#ifdef Quest_500_a4
			if(Key_volume>=23-8 && Key_volume<=23+8)			/*The volume is 23*/
				Key_code = Key_jump_front;
			if(Key_volume>=45-8 && Key_volume<=45+8)			/*The volume is 45*/
				Key_code = Key_jump_back;
			if(Key_volume>=71-8 && Key_volume<=71+8)			/*The volume is 71*/
				Key_code = Key_stop;
			if(Key_volume>=92-8 && Key_volume<=92+8)			/*The volume is 95*/
				Key_code = Key_play_pause;
			if(Key_volume>=116-8 && Key_volume<=116+8)		/*The volume is 118*/
				Key_code = Key_mute;
			if(Key_volume>=138-8 && Key_volume<=138+8)		/*The volume is 139*/
				Key_code = Key_vol_down;
			if(Key_volume>=163-8 && Key_volume<=163+8)		/*The volume is 139*/
				Key_code = Key_vol_up;
			#else
			if(Key_volume>=23-8 && Key_volume<=23+8)			/*The volume is 23*/
				Key_code = Key_menu;
			if(Key_volume>=45-8 && Key_volume<=45+8)			/*The volume is 45*/
				Key_code = Key_slow_back;
			if(Key_volume>=71-8 && Key_volume<=71+8)			/*The volume is 71*/
				Key_code = Key_fast_front;
			if(Key_volume>=95-8 && Key_volume<=95+8)			/*The volume is 95*/
				Key_code = Key_mode;
			if(Key_volume>=118-8 && Key_volume<=118+8)		/*The volume is 118*/
				Key_code = Key_time;
			if(Key_volume>=139-8 && Key_volume<=139+8)		/*The volume is 139*/
				Key_code = Key_play_pause;
			#endif
			
			}
		Key_code_buffer[i] = Key_code;
		WAIT_100us();
		}
	if(((Key_code_buffer[0] == Key_code_buffer[1]) &&(( Key_code_buffer[2] == Key_code_buffer[3]) && Key_code_buffer[4])) &&
		((Key_code_buffer[0] != 0xff && Key_code_buffer[1] != 0xff) && (Key_code_buffer[2] != 0xff && Key_code_buffer[3] != 0xff))) 
		{
		Code_number = Key_code_buffer[3];
		switch(Code_number)	/*Check the key is the short key or the long key*/
			{
			case Key_power:
			case Key_jump_back:
			case Key_jump_front:
			case Key_vol_up:
			case Key_vol_down:
			case Key_mode:
			case Key_menu:

			case Key_DVD:
			case Key_TV:
			case Key_FM:
			case Key_AM:
			case Key_CDC:
			case Key_stop:
				ClrBit(System_flag4,Long_key_flag);
				break;	/*These are the short key no need detect long time*/
			case Key_mute:
			case Key_open:
			case Key_slow_back:
			case Key_fast_front:
			case Key_time:
			case Key_play_pause:
				if(!ValBit(System_flag4,Long_key_flag))
					Key_delay = 100; 
				SetBit(System_flag4,Long_key_flag);
				break;		/*These are the long key need to detect long time*/
			}
		if(!ValBit(System_flag4,Long_key_flag))	//Short key
			{
			if(Keep_key_code == Code_number)	//The key keep press on
				{
				if(Code_number == Key_vol_up || Code_number == Key_vol_down)	//Process the volume up/volume down key
					{
					if(Volume_key_delay == 0)
						{
						SetBit(System_flag,Key_flag);
						Volume_key_delay = Volume_key_delay_time;
						}
					}
				else
					ClrBit(System_flag,Key_flag);
				}
			else
				{
				SetBit(System_flag,Key_flag);
				}
			return;
			}
		if(ValBit(System_flag4,Long_key_flag))
			Long_key_time++;
		}
	else
		{
		if(ValBit(System_flag4,Long_key_flag) && Long_key_time >= 1)
			{
			ClrBit(System_flag4,Long_key_flag);
			Long_key_time = 0x00;
			if(!ValBit(System_flag4,Active_long_key_flag))
				SetBit(System_flag,Key_flag);
			else
				ClrBit(System_flag,Key_flag);
			ClrBit(System_flag4,Active_long_key_flag);
			}
		else
			ClrBit(System_flag,Key_flag);	/*No key press on*/
		}
	if(ValBit(System_flag4,Long_key_flag) && Key_delay == 0x00)	/*Finish counter time*/
		{
		if(Long_key_time >= 20)
			{
			SetBit(System_flag4,Active_long_key_flag);
			switch(Code_number)
				{
				case Key_mute: Code_number = Long_key_mute; break;
				case Key_open: Code_number = Long_key_open; break;
				case Key_slow_back: Code_number = Long_key_slow_back; break;
				case Key_fast_front: Code_number = Long_key_fast_front; break;
				case Key_time: Code_number = Long_time_key; break;
				case Key_play_pause: Code_number = Long_key_play_pause; break;
				}
			Long_key_time = 0x00;	/*Next time keep check the long press key*/
			Key_delay = 100;	/*1s for detect the long key register counter*/
			ClrBit(System_flag4,Long_key_flag);
			if(Keep_key_code != Code_number)
				SetBit(System_flag,Key_flag);
			else 
				ClrBit(System_flag,Key_flag);
			}
		}
}

void Select_ADC_channel(unsigned char Channel)
{
	ADC_CR = ADC_CR & 0XF0;
	ADC_CR = ADC_CR |Channel;
}
/******************************************************************
Function:First time power on to wait unchain the stby state
*******************************************************************/
void First_wait_unchain_stby(void)
{	
	unsigned char i;
	unsigned char Temp_buff[4]= {0};
	//SetBit(System_flag,IR_flag);
	//IR_Code_number = Remote_power;
	while((!ValBit(System_flag,IR_flag) ||IR_Code_number != Remote_power) &&(!ValBit(System_flag,Key_flag) || Code_number != Key_power ))
	{
		if(ValBit(PF_DR,ACC_ID))	/*Check ACC*/
			/*Sleep mode*/
			{
			System_mute_on();
			Close_TV_tuner_power;
			Close_Radio_tuner_power;
			Close_DVD_5v_power;
			Close_system_9v_5v_DVD12v_power;
			Close_TFT_12v_power;
			Close_TFT_high_power;
			
			ClrBit(System_flag,ACC_on_flag);
			ACC_off_setting_IO();
			
			SetBit(MCCSR,1);
			SetBit(MCCSR,2);
			SetBit(MCCSR,3);
			asm	HALT;	//Into halt mode
			}
		else
			{
			Init_IO_port();
			Detect_key();
			}
		}
	//Now unchain stby state
	ClrBit(System_flag,IR_flag);
	ClrBit(System_flag,Key_flag);
	SetBit(System_flag,ACC_on_flag);
	Set_bell_sound_time(10);
	System_mute_on();
	//-------Open TFT 12v power--------
	Open_TFT_12v_power;
	Close_TFT_high_power;
	//-------Open system 9v/5v/DVD12v----
	Open_system_9v_5v_DVD12v_power;
	//-------Open the Radio tuner power----
	Open_Radio_tuner_power;
	WAIT_100ms();
	//--------Init the clock-------
	PCF8563_Init();	//It's power is open in all mode
	Time_hour=0;
	Time_Minute= 0;
	g_clock_adjust = CLOCK_ADJUST_IN_HOUR;
	Write_time(Time_hour);
	g_clock_adjust = CLOCK_ADJUST_IN_MINUTE;
	Write_time(Time_Minute);
	SetBit(System_flag1,Time_on_flag);
	//------Check the Chinese english system---------
	AT45DB041B_ContinuousArrayRead(1000,0,Temp_buff,4);
	if(Temp_buff[0] == 0xc0 && Temp_buff[1] == 0xd0 && Temp_buff[2] == 0xe0)
		{
		if(Temp_buff[3] == Chinese_system || Temp_buff[3] == English_system)
			Chinese_english_system = Temp_buff[3];
		else
			Chinese_english_system = English_system;
		}
	else
		{
		Chinese_english_system = English_system;
		}
	AT45DB041B_BufferToMainMemoryPageProgramWithBuilt_inErase(1,500,0,Temp_buff,4);
	//-------Init CDC------------------
	//Send_command_to_CDC(C_CHECK);
	//-------Init csp-------------------
	Init_csp();
	Select_audio_input_source(Radio_tuner_source);
	Disable_loudness_off();
	Select_audio_input_gain(Audio_input_gain_0db);
	Audio_bass_control();
	Audio_treble_control();
	//Audio_total_volume_control();
	Audio_LF_speaker_volume_control();
	Audio_RF_speaker_volume_control();
	Audio_LR_speaker_volume_control();
	Audio_RR_speaker_volume_control();
	//----------------------------------
	Send_command_to_touch_panel();
	//--------Init T100-------------------
	//Open_TFT_high_power;
	ClosePanel();
	InitTW101();
	TconInit();
	ClosePanel();
	OSDDisable();
	LoadGammaTable(0);

⌨️ 快捷键说明

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