EBO-77/Sources/Button.c
2024-12-23 11:04:44 +08:00

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;
}