#ifndef __KEY_H
#define __KEY_H
#include "system.h"
#define KEY_MaxNum 12
#define KEY_P1 PBin(12)
#define KEY_P2 PBin(13)
#define KEY_P3 PBin(14)
#define KEY_P4 PBin(15)
#define KEY_P5 PCin(6)
#define KEY_P6 PCin(7)
#define KEY_P7 PCin(8)
#define KEY_P8 PCin(9)
#define KEY_P9 PAin(8)
#define KEY_P10 PAin(11)
#define KEY_P11 PAin(12)
#define KEY_P12 PBin(3)
struct KEY_Parameter
{
void (*KEY_ShortPressEXE)(void);
void (*KEY_PressForALongTimeEXE)(void);
void (*PressMediumBriefly)(void);
void (*PressMediumForALongTime)(void);
void (*Read_IO_Higt)(void);
void (*Read_IO_Low)(void);
unsigned long (*KEY_StateEXE)(void);
u32 KeyTime;
u32 keyLongTime;
u32 keyMinTime;
};
void Sys_KEY_INI(void);
void Sys_KEY_EXE(void);
#endif
#include "key.h"
struct KEY_Parameter KEY_Data[KEY_MaxNum];
void TX_ReceiveEnabled(void)
{
TX_PTT=1;
}
void TX_CanSendTo(void)
{
TX_PTT=0;
}
void TX_volumeAdjustment_Z(void)
{
if(System_Variables.VOLUME<7)
System_Variables.VOLUME++;
}
void TX_volumeAdjustment_F(void)
{
if(System_Variables.VOLUME>0)
System_Variables.VOLUME--;
}
unsigned long Key_StateP1(void)
{
return KEY_P1;
}
unsigned long Key_StateP2(void)
{
return KEY_P2;
}
unsigned long Key_StateP3(void)
{
return KEY_P3;
}
unsigned long Key_StateP4(void)
{
return KEY_P4;
}
unsigned long Key_StateP5(void)
{
return KEY_P5;
}
unsigned long Key_StateP6(void)
{
return KEY_P6;
}
unsigned long Key_StateP7(void)
{
return KEY_P7;
}
unsigned long Key_StateP8(void)
{
return KEY_P8;
}
unsigned long Key_StateP9(void)
{
return KEY_P9;
}
unsigned long Key_StateP10(void)
{
return KEY_P10;
}
unsigned long Key_StateP11(void)
{
return KEY_P11;
}
unsigned long Key_StateP12(void)
{
return KEY_P12;
}
void Sys_KEY_INI(void)
{
u32 i;
GPIO_InitTypeDef GPIO_InitStructure;
for(i=0;i<KEY_MaxNum;i++)
{
KEY_Data[i].KEY_ShortPressEXE=NULL;
KEY_Data[i].KEY_PressForALongTimeEXE=NULL;
KEY_Data[i].PressMediumBriefly=NULL;
KEY_Data[i].PressMediumForALongTime=NULL;
KEY_Data[i].KEY_StateEXE=NULL;
KEY_Data[i].Read_IO_Higt=NULL;
KEY_Data[i].Read_IO_Low=NULL;
KEY_Data[i].KeyTime=0;
KEY_Data[i].keyLongTime=1000;
KEY_Data[i].keyMinTime=10;
}
KEY_Data[0].KEY_StateEXE=Key_StateP1;
KEY_Data[1].KEY_StateEXE=Key_StateP2;
KEY_Data[2].KEY_StateEXE=Key_StateP3;
KEY_Data[2].KEY_ShortPressEXE=TX_volumeAdjustment_Z;
KEY_Data[3].KEY_StateEXE=Key_StateP4;
KEY_Data[4].KEY_StateEXE=Key_StateP5;
KEY_Data[5].KEY_StateEXE=Key_StateP6;
KEY_Data[6].KEY_StateEXE=Key_StateP7;
KEY_Data[6].PressMediumBriefly=TX_CanSendTo;
KEY_Data[6].PressMediumForALongTime=TX_CanSendTo;
KEY_Data[6].KEY_ShortPressEXE=TX_ReceiveEnabled;
KEY_Data[6].KEY_PressForALongTimeEXE=TX_ReceiveEnabled;
KEY_Data[7].KEY_StateEXE=Key_StateP8;
KEY_Data[8].KEY_StateEXE=Key_StateP9;
KEY_Data[9].KEY_StateEXE=Key_StateP10;
KEY_Data[10].KEY_StateEXE=Key_StateP11;
KEY_Data[10].KEY_ShortPressEXE=TX_volumeAdjustment_F;
KEY_Data[11].KEY_StateEXE=Key_StateP12;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 |GPIO_Pin_11 |GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_Init(GPIOA, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 |GPIO_Pin_12 |GPIO_Pin_13 |GPIO_Pin_14 |GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_Init(GPIOB, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 |GPIO_Pin_7 |GPIO_Pin_8 |GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void Sys_KEY_EXE(void)
{
uint32_t i;
for(i=0;i<KEY_MaxNum;i++)
{
if(KEY_Data[i].KEY_StateEXE!=NULL)
{
if(KEY_Data[i].KEY_StateEXE())
{
if(KEY_Data[i].Read_IO_Higt!=NULL)
{
KEY_Data[i].Read_IO_Higt();
return;
}
if(KEY_Data[i].KeyTime>KEY_Data[i].keyLongTime)
{
if(KEY_Data[i].KEY_PressForALongTimeEXE!=NULL)
KEY_Data[i].KEY_PressForALongTimeEXE();
}else if(KEY_Data[i].KeyTime>KEY_Data[i].keyMinTime)
{
if(KEY_Data[i].KEY_ShortPressEXE!=NULL)
KEY_Data[i].KEY_ShortPressEXE();
}
KEY_Data[i].KeyTime=0;
}
else
{
if(KEY_Data[i].Read_IO_Low!=NULL)
{
KEY_Data[i].Read_IO_Low();
return;
}
KEY_Data[i].KeyTime++;
if(KEY_Data[i].KeyTime>KEY_Data[i].keyLongTime)
{
if(KEY_Data[i].PressMediumForALongTime!=NULL)
KEY_Data[i].PressMediumForALongTime();
}else if(KEY_Data[i].KeyTime>KEY_Data[i].keyMinTime)
{
if(KEY_Data[i].PressMediumBriefly!=NULL)
KEY_Data[i].PressMediumBriefly();
}
}
}
}
}