172 lines
4.1 KiB
C
172 lines
4.1 KiB
C
/*
|
|
* 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<<i))
|
|
{
|
|
Switch_num++;
|
|
if(Switch_num==2)
|
|
{
|
|
return Switch_num;
|
|
}
|
|
}
|
|
}
|
|
return Switch_num;
|
|
}
|
|
|
|
|