2024-05-26 08:08:32 +08:00
|
|
|
|
|
|
|
#include "hwCtrl.h"
|
|
|
|
#include "r_cg_port.h"
|
|
|
|
#include "iodefine.h"
|
|
|
|
#include "PINdef.h"
|
|
|
|
#include "r_cg_adc.h"
|
2024-05-26 11:13:55 +08:00
|
|
|
static uint8_t keystate[SIG_NUM] = {0};
|
|
|
|
static uint8_t keyPressFlag[SIG_NUM] = {0};
|
|
|
|
static uint8_t keyReleaseFlag[SIG_NUM] = {0};
|
|
|
|
static uint16_t keydelay[SIG_NUM] = {0};
|
2024-05-26 08:08:32 +08:00
|
|
|
uint16_t g_adval[12];
|
|
|
|
|
|
|
|
#define KEY_DELAY_TIMES 20 //20Ms
|
|
|
|
void ClearKeyState(void)
|
|
|
|
{
|
|
|
|
uint8_t i;
|
2024-05-26 11:13:55 +08:00
|
|
|
for (i = 0; i < SIG_NUM; i++)
|
2024-05-26 08:08:32 +08:00
|
|
|
{
|
|
|
|
keystate[i] = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
void setKeyPressFlag(uint8_t id)
|
|
|
|
{
|
2024-05-26 11:13:55 +08:00
|
|
|
if (id < SIG_NUM)
|
2024-05-26 08:08:32 +08:00
|
|
|
{
|
|
|
|
keyPressFlag[id] = KEY_PRESSED;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
void setKeyReleaseFlag(uint8_t id)
|
|
|
|
{
|
2024-05-26 11:13:55 +08:00
|
|
|
|
|
|
|
if (id < SIG_NUM)
|
2024-05-26 08:08:32 +08:00
|
|
|
{
|
|
|
|
keyReleaseFlag[id] = KEY_PRESSED;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
uint8_t getKeyPressFlag(uint8_t id)
|
|
|
|
{
|
|
|
|
uint8_t retVal = KEY_NOPRESSED;
|
2024-05-26 11:13:55 +08:00
|
|
|
if (id < SIG_NUM)
|
2024-05-26 08:08:32 +08:00
|
|
|
{
|
|
|
|
retVal = keyPressFlag[id];
|
|
|
|
keyPressFlag[id] = KEY_NOPRESSED;
|
|
|
|
}
|
|
|
|
return retVal;
|
|
|
|
}
|
|
|
|
uint8_t getKeyReleaseFlag(uint8_t id)
|
|
|
|
{
|
|
|
|
uint8_t retVal = KEY_NOPRESSED;
|
2024-05-26 11:13:55 +08:00
|
|
|
if (id < SIG_NUM)
|
2024-05-26 08:08:32 +08:00
|
|
|
{
|
|
|
|
retVal = keyReleaseFlag[id];
|
|
|
|
keyReleaseFlag[id] = KEY_NOPRESSED;
|
|
|
|
}
|
|
|
|
return retVal;
|
|
|
|
}
|
|
|
|
|
2024-05-26 11:13:55 +08:00
|
|
|
void KeyScan(void)
|
2024-05-26 08:08:32 +08:00
|
|
|
{
|
2024-05-26 11:13:55 +08:00
|
|
|
uint8_t i,key,key_nopress;
|
|
|
|
key_nopress = 0;
|
|
|
|
for (i = 0; i < SIG_NUM; i++)
|
2024-05-26 08:08:32 +08:00
|
|
|
{
|
|
|
|
key = GetIOState(i);
|
2024-05-26 11:13:55 +08:00
|
|
|
if (key == KEY_PRESSED && keystate[i] == KEY_NOPRESSED)
|
2024-05-26 08:08:32 +08:00
|
|
|
{
|
|
|
|
keydelay[i]++;
|
|
|
|
if (keydelay[i] >= KEY_DELAY_TIMES)
|
|
|
|
{
|
|
|
|
keystate[i] = KEY_PRESSED;
|
2024-05-26 11:13:55 +08:00
|
|
|
setKeyPressFlag(i);
|
2024-05-26 08:08:32 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else if(key == KEY_NOPRESSED)
|
|
|
|
{
|
|
|
|
if (keydelay[i] > 0)
|
|
|
|
{
|
|
|
|
keydelay[i]--;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2024-05-26 11:13:55 +08:00
|
|
|
if (keystate[i] == KEY_PRESSED)
|
|
|
|
{
|
|
|
|
setKeyReleaseFlag(i);
|
|
|
|
}
|
2024-05-26 08:08:32 +08:00
|
|
|
keystate[i] = KEY_NOPRESSED;
|
2024-05-26 11:13:55 +08:00
|
|
|
key_nopress++;
|
2024-05-26 08:08:32 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2024-05-26 11:13:55 +08:00
|
|
|
if (key_nopress == 6)
|
|
|
|
{
|
|
|
|
//
|
|
|
|
}
|
2024-05-26 08:08:32 +08:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
uint8_t GetIOState(uint8_t keyno)
|
|
|
|
{
|
|
|
|
switch (keyno)
|
|
|
|
{
|
|
|
|
//KEY
|
2024-05-26 11:13:55 +08:00
|
|
|
case SIGID_SW_LOCK_IN:
|
|
|
|
return I_SW_LOCK_IN==0?1:0;
|
|
|
|
case SIGID_SW_L_IN:
|
|
|
|
return I_SW_L_IN==0?1:0;
|
2024-05-26 08:08:32 +08:00
|
|
|
default:
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t GetKeyState(uint8_t keyno)
|
|
|
|
{
|
2024-05-26 11:13:55 +08:00
|
|
|
if (keyno < SIG_NUM)
|
2024-05-26 08:08:32 +08:00
|
|
|
{
|
2024-05-26 11:13:55 +08:00
|
|
|
return keystate[keyno-1];
|
2024-05-26 08:08:32 +08:00
|
|
|
}
|
|
|
|
return KEY_NOPRESSED;
|
|
|
|
}
|
|
|
|
|
2024-05-26 11:13:55 +08:00
|
|
|
void BL_Ctrl(uint8_t bl_state)
|
|
|
|
{
|
|
|
|
if (bl_state != 0)
|
|
|
|
{
|
|
|
|
O_BL_CTRL = 1;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
O_BL_CTRL = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void IND_Ctrl(uint8_t ind_state)
|
|
|
|
{
|
|
|
|
switch (ind_state)
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
O_IND_CTRL = 0;
|
|
|
|
O_IND1_CTRL = 0;
|
|
|
|
O_IND2_CTRL = 0;
|
|
|
|
O_IND3_CTRL = 0;
|
|
|
|
O_IND4_CTRL = 0;
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
O_IND_CTRL = 1;
|
|
|
|
O_IND1_CTRL = 1;
|
|
|
|
O_IND2_CTRL = 0;
|
|
|
|
O_IND3_CTRL = 0;
|
|
|
|
O_IND4_CTRL = 0;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 2:
|
|
|
|
O_IND_CTRL = 1;
|
|
|
|
O_IND1_CTRL = 0;
|
|
|
|
O_IND2_CTRL = 1;
|
|
|
|
O_IND3_CTRL = 0;
|
|
|
|
O_IND4_CTRL = 0;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 3:
|
|
|
|
O_IND_CTRL = 1;
|
|
|
|
O_IND1_CTRL = 0;
|
|
|
|
O_IND2_CTRL = 0;
|
|
|
|
O_IND3_CTRL = 1;
|
|
|
|
O_IND4_CTRL = 0;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 4:
|
|
|
|
O_IND_CTRL = 1;
|
|
|
|
O_IND1_CTRL = 0;
|
|
|
|
O_IND2_CTRL = 0;
|
|
|
|
O_IND3_CTRL = 0;
|
|
|
|
O_IND4_CTRL = 1;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-05-26 08:08:32 +08:00
|
|
|
|
|
|
|
uint16_t getAdval(uint8_t ch)
|
|
|
|
{
|
2024-05-26 11:13:55 +08:00
|
|
|
if (ch < 12)
|
2024-05-26 08:08:32 +08:00
|
|
|
{
|
|
|
|
return g_adval[ch];
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void ad_handle(void)
|
|
|
|
{
|
2024-05-26 11:13:55 +08:00
|
|
|
switch (ADS)
|
2024-05-26 08:08:32 +08:00
|
|
|
{
|
2024-05-26 11:13:55 +08:00
|
|
|
case _00_AD_INPUT_CHANNEL_0:
|
|
|
|
R_ADC_Get_Result(g_adval);
|
|
|
|
ADS = _01_AD_INPUT_CHANNEL_1;
|
|
|
|
break;
|
|
|
|
case _01_AD_INPUT_CHANNEL_1:
|
|
|
|
R_ADC_Get_Result(g_adval+1);
|
|
|
|
ADS = _00_AD_INPUT_CHANNEL_0;
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
ADS = _00_AD_INPUT_CHANNEL_0;
|
|
|
|
break;
|
2024-05-26 08:08:32 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*****************diagnostic******************/
|
|
|
|
|
2024-05-26 11:13:55 +08:00
|
|
|
void getInputStatus(unsigned char* data)
|
|
|
|
{
|
|
|
|
data[0] = 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2024-05-26 08:08:32 +08:00
|
|
|
|