/* * Button.c * * Created on: Jan 31, 2018 * Author: Administrator */ #include "Button.h" unsigned int Lin_switch_state; unsigned int Button_1_count,Button_2_count,Button_3_count,Button_4_count,Button_5_count; unsigned int Button_6_count,Button_7_count,Button_8_count,Button_9_count,Button_10_count,Button_11_count; unsigned char initflag[11]={1,1,1,1,1,1,1,1,1,1,1}; unsigned char button_stick=0; unsigned char lin_Signal_HORN; extern unsigned char Sig_LI0_MFL_ButtonRight_err,Sig_LI0_MFL_ButtonLeft_err; void Button_Scan(void) { unsigned char Lin_switch_state_Bit_Feed=0; button_stick = 0; //Left Button_detect((unsigned char)Button_SEEK_Add, &Button_4_count,&Lin_switch_state,21,&initflag[3]); Button_detect((unsigned char)Button_SEEK_Reduce,&Button_5_count,&Lin_switch_state,22,&initflag[4]); Button_detect((unsigned char)Button_V_Add, &Button_6_count,&Lin_switch_state,16,&initflag[5]); Button_detect((unsigned char)Button_V_Reduce, &Button_7_count,&Lin_switch_state,17,&initflag[6]); Button_detect((unsigned char)Button_MUTE, &Button_10_count,&Lin_switch_state,32,&initflag[9]); Sig_LI0_MFL_ButtonLeft_err = button_stick; button_stick = 0; //Right Button_detect((unsigned char)Button_SIRI, &Button_8_count,&Lin_switch_state,25,&initflag[7]); Button_detect((unsigned char)Button_PHONE, &Button_9_count,&Lin_switch_state,28,&initflag[8]); Button_detect((unsigned char)Button_UP, &Button_1_count,&Lin_switch_state,4,&initflag[0]); Button_detect((unsigned char)Button_DOWN, &Button_2_count,&Lin_switch_state,5,&initflag[1]); Button_detect((unsigned char)Button_OK, &Button_3_count,&Lin_switch_state,7,&initflag[2]); Sig_LI0_MFL_ButtonRight_err = button_stick; Lin_switch_state_Bit_Feed=Lin_switch_state_Bit(&Lin_switch_state); if(Lin_switch_state_Bit_Feed==0) { Sig_LI0_MFL_Tastencode_1=0; Sig_LI0_MFL_Tastencode_2=0; } Signal_HORN_detect(); } void Signal_HORN_detect(void) { if(!Signal_HORN) { Button_11_count++; if(Button_11_count>=3) { lin_Signal_HORN=1; } } else { Button_11_count=0; lin_Signal_HORN=0; } } void Button_detect(unsigned char Button_state,unsigned int *Button_delay_count, unsigned int *Lin_switch_state,unsigned char Lin_switch_data,unsigned char *initcode) { unsigned char Lin_switch_state_Bit_Feed=0; if(Button_state==0) { if(*initcode != 0)return; (*Button_delay_count)++; if(*Button_delay_count>=3 && *Button_delay_count<12000) { *Lin_switch_state|=1<<(Button_to_Bit(Lin_switch_data));//0X21 Lin_switch_state_Bit_Feed=Lin_switch_state_Bit(Lin_switch_state); if(Lin_switch_state_Bit_Feed==1) { Sig_LI0_MFL_Tastencode_1=Lin_switch_data; Sig_LI0_MFL_Tastencode_2=0; } else if(Lin_switch_state_Bit_Feed==2 && (Sig_LI0_MFL_Tastencode_1!=Lin_switch_data)&&(Sig_LI0_MFL_Tastencode_2==0)) { Sig_LI0_MFL_Tastencode_2=Lin_switch_data; } } if(*Button_delay_count>=12000) { *Button_delay_count = 12000; button_stick = 1; *Lin_switch_state&=~(1<<(Button_to_Bit(Lin_switch_data))); } } else { *Button_delay_count=0; *Lin_switch_state&=~(1<<(Button_to_Bit(Lin_switch_data))); *initcode = 0; } /* 为啥放在这? if(Button_to_Bit(Lin_switch_data)==9) { Lin_switch_state_Bit_Feed=Lin_switch_state_Bit(Lin_switch_state); if(Lin_switch_state_Bit_Feed==0) { Sig_LI0_MFL_Tastencode_1=0; Sig_LI0_MFL_Tastencode_2=0; } } */ } unsigned char Button_to_Bit(unsigned char Button_Sig) { if(Button_Sig==4) { return 0; } else if(Button_Sig==5) { return 1; } else if(Button_Sig==7) { return 2; } else if(Button_Sig==21) { return 3; } else if(Button_Sig==22) { return 4; } else if(Button_Sig==16) { return 5; } else if(Button_Sig==17) { return 6; } else if (Button_Sig==25) { return 7; } else if(Button_Sig==28) { return 8; } else if(Button_Sig==32) { return 9; } } unsigned char Lin_switch_state_Bit(unsigned int *Lin_switch_state) { unsigned char i,Switch_num=0; for(i=0;i<10;i++) { if(*Lin_switch_state&(1<