242 lines
4.2 KiB
C
242 lines
4.2 KiB
C
|
|
#include "hwCtrl.h"
|
|
#include "r_cg_port.h"
|
|
#include "iodefine.h"
|
|
#include "PINdef.h"
|
|
#include "r_cg_adc.h"
|
|
|
|
|
|
|
|
|
|
static uint8_t keystate[KEY_NUM] = {0};
|
|
static uint8_t keyPressFlag[KEY_NUM] = {0};
|
|
static uint8_t keyReleaseFlag[KEY_NUM] = {0};
|
|
static uint16_t keydelay[KEY_NUM] = {0};
|
|
extern uint16_t g_adval[AD_ST_NUM];
|
|
|
|
#define KEY_DELAY_TIMES 20 //20Ms
|
|
void ClearKeyState(void)
|
|
{
|
|
uint8_t i;
|
|
for (i = 0; i < KEY_NUM; i++)
|
|
{
|
|
keystate[i] = 0;
|
|
}
|
|
}
|
|
void setKeyPressFlag(uint8_t id)
|
|
{
|
|
if (id < KEY_NUM)
|
|
{
|
|
keyPressFlag[id] = KEY_PRESSED;
|
|
}
|
|
}
|
|
void setKeyReleaseFlag(uint8_t id)
|
|
{
|
|
|
|
if (id < KEY_NUM)
|
|
{
|
|
keyReleaseFlag[id] = KEY_PRESSED;
|
|
}
|
|
}
|
|
uint8_t getKeyPressFlag(uint8_t id)
|
|
{
|
|
uint8_t retVal = KEY_NOPRESSED;
|
|
if (id < KEY_NUM)
|
|
{
|
|
retVal = keyPressFlag[id];
|
|
keyPressFlag[id] = KEY_NOPRESSED;
|
|
}
|
|
return retVal;
|
|
}
|
|
uint8_t getKeyReleaseFlag(uint8_t id)
|
|
{
|
|
uint8_t retVal = KEY_NOPRESSED;
|
|
if (id < KEY_NUM)
|
|
{
|
|
retVal = keyReleaseFlag[id];
|
|
keyReleaseFlag[id] = KEY_NOPRESSED;
|
|
}
|
|
return retVal;
|
|
}
|
|
|
|
|
|
extern unsigned char keybyte1,keybyte2;
|
|
void KeyScan(void)
|
|
{
|
|
uint8_t i,key,key_nopress;
|
|
key_nopress = 0;
|
|
for (i = 0; i < KEY_NUM; i++)
|
|
{
|
|
key = GetSigState(i);
|
|
if (key == KEY_PRESSED && keystate[i] == KEY_NOPRESSED)
|
|
{
|
|
keydelay[i]++;
|
|
if (keydelay[i] >= KEY_DELAY_TIMES)
|
|
{
|
|
keystate[i] = KEY_PRESSED;
|
|
setKeyPressFlag(i);
|
|
}
|
|
}
|
|
else if(key == KEY_NOPRESSED)
|
|
{
|
|
if (keydelay[i] > 0)
|
|
{
|
|
keydelay[i]--;
|
|
}
|
|
else
|
|
{
|
|
if (keystate[i] == KEY_PRESSED)
|
|
{
|
|
setKeyReleaseFlag(i);
|
|
}
|
|
keystate[i] = KEY_NOPRESSED;
|
|
key_nopress++;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
uint8_t GetSigState(uint8_t sigid)
|
|
{
|
|
uint16_t adval;
|
|
adval = getAdval(AD_ST3_KEY);
|
|
switch (sigid)
|
|
{
|
|
case KEYID_K11:
|
|
return (adval>405&&adval<505)?1:0;//455
|
|
case KEYID_K14:
|
|
return (adval>608&&adval<708)?1:0;//658
|
|
case KEYID_K9:
|
|
return (adval>204&&adval<304)?1:0;//254
|
|
case KEYID_K13:
|
|
return (adval>852&&adval<952)?1:0;//902
|
|
case KEYID_K10:
|
|
return (adval<50)?1:0;//0
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
uint8_t GetKeyState(uint8_t keyno)
|
|
{
|
|
if (keyno > 0 && keyno <= 16)
|
|
{
|
|
return keystate[keyno-1];
|
|
}
|
|
return KEY_NOPRESSED;
|
|
}
|
|
|
|
|
|
|
|
uint16_t getAdval(uint8_t ch)
|
|
{
|
|
if (ch < AD_ST_NUM)
|
|
{
|
|
return g_adval[ch];
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
void setValveState(uint8_t valve_id,uint8_t state)
|
|
{
|
|
switch (valve_id)
|
|
{
|
|
case VALVE1:
|
|
O_T1 = state;
|
|
break;
|
|
|
|
case VALVE2:
|
|
O_T2 = state;
|
|
break;
|
|
|
|
case VALVE3:
|
|
O_T3 = state;
|
|
break;
|
|
|
|
case VALVE4:
|
|
O_T4 = state;
|
|
break;
|
|
|
|
case VALVE5:
|
|
O_T5 = state;
|
|
break;
|
|
|
|
case VALVE6:
|
|
O_T6 = state;
|
|
break;
|
|
|
|
case VALVE7:
|
|
O_T7 = state;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void setPumpState(uint8_t state)
|
|
{
|
|
O_PUMP = state;
|
|
}
|
|
|
|
|
|
void ad_handle(void)
|
|
{
|
|
switch (ADS)
|
|
{
|
|
case AD_SCAN_STEP1_CH:
|
|
R_ADC_Get_Result(g_adval);
|
|
ADS = AD_SCAN_STEP2_CH;
|
|
break;
|
|
case AD_SCAN_STEP2_CH:
|
|
R_ADC_Get_Result(g_adval+1);
|
|
ADS = AD_SCAN_STEP3_CH;
|
|
break;
|
|
case AD_SCAN_STEP3_CH:
|
|
R_ADC_Get_Result(g_adval+2);
|
|
ADS = AD_SCAN_STEP1_CH;
|
|
break;
|
|
default:
|
|
ADS = AD_SCAN_STEP1_CH;
|
|
break;
|
|
}
|
|
}
|
|
|
|
void setFanDuty(uint8_t duty)
|
|
{
|
|
uint32_t reg;
|
|
if (duty > 100)
|
|
{
|
|
duty = 100;
|
|
}
|
|
if (duty < 0)
|
|
{
|
|
duty = 0;
|
|
}
|
|
|
|
reg = TDR06;
|
|
reg = (reg + 1U) * duty / 100U;
|
|
TDR07 = (unsigned short)reg;
|
|
}
|
|
|
|
void setHeatDuty(uint8_t duty)
|
|
{
|
|
uint32_t reg;
|
|
if (duty > 100)
|
|
{
|
|
duty = 100;
|
|
}
|
|
if (duty < 0)
|
|
{
|
|
duty = 0;
|
|
}
|
|
reg = TDR04;
|
|
reg = (reg + 1U) * duty / 100U;
|
|
TDR05 = (unsigned short)reg;
|
|
}
|
|
|
|
|
|
|