299 lines
5.3 KiB
C
299 lines
5.3 KiB
C
#include "r_cg_macrodriver.h"
|
|
#include "appTask.h"
|
|
#include "event.h"
|
|
#include "r_cg_port.h"
|
|
#include "r_cg_timer.h"
|
|
#include "r_cg_wdt.h"
|
|
#include "hwCtrl.h"
|
|
|
|
void KeyPressPro(uint8_t keyno);
|
|
void KeyReleasePro(uint8_t keyno);
|
|
|
|
static uint8_t autoflag = 0;
|
|
static uint8_t updown = 0,stopflag = 0;
|
|
|
|
static uint16_t keydelay[5]={0,0,0,0,0};
|
|
static uint8_t keyflag[5]={0,0,0,0,0};
|
|
static uint8_t shoudong = 0;
|
|
|
|
#define UPDOWN_UP 1
|
|
#define UPDOWN_DOWN 2
|
|
#define UPDOWN_NO 0
|
|
|
|
|
|
#define KEY_DELAY_TIME 6
|
|
#define KEY_DELAY_TIME_50ms 10
|
|
#define KEY_DELAY_TIME_8000ms 1600
|
|
|
|
uint8_t shortflag;
|
|
|
|
void HardWare_Init(void)
|
|
{
|
|
//time base init
|
|
R_TAU0_Channel0_Start();
|
|
|
|
//output init
|
|
RLY1_Ctrl(OFF);
|
|
RLY2_Ctrl(OFF);
|
|
MOS_Ctrl(OFF);
|
|
|
|
//adc init
|
|
R_ADC_Start();
|
|
R_ADC_Set_OperationOn();
|
|
R_TAU0_Channel1_Start();//for adc scan
|
|
}
|
|
|
|
void Variable_Init(void)
|
|
{
|
|
autoflag = 0;
|
|
updown = 0;
|
|
shortflag = 1;
|
|
}
|
|
|
|
void KeyPressPro(uint8_t keyno)
|
|
{
|
|
if(autoflag != UPDOWN_NO)
|
|
{
|
|
autoflag = 0;
|
|
shoudong = keyno+1;
|
|
return;
|
|
}
|
|
|
|
if (keyno == KEY_UP || keyno == KEY_L_UP)
|
|
{
|
|
updown = UPDOWN_UP;
|
|
}
|
|
else if (keyno == KEY_DOWN || keyno == KEY_L_DOWN)
|
|
{
|
|
updown = UPDOWN_DOWN;
|
|
}
|
|
|
|
|
|
}
|
|
void KeyReleasePro(uint8_t keyno)
|
|
{
|
|
if (keyno+1 == shoudong)
|
|
{
|
|
shoudong = 0;
|
|
return;
|
|
}
|
|
|
|
switch (keyno)
|
|
{
|
|
case KEY_UP:
|
|
//NO
|
|
break;
|
|
case KEY_DOWN:
|
|
if (keydelay[KEY_AUTO]>=KEY_DELAY_TIME_50ms && keydelay[KEY_AUTO] < KEY_DELAY_TIME_8000ms && shortflag == 0)
|
|
{
|
|
autoflag = UPDOWN_DOWN;
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
void keyScan(void)//5ms
|
|
{
|
|
|
|
uint8_t i;
|
|
for (i = 0; i < 4; i++)
|
|
{
|
|
if (GetKeyState(i) == KEY_PRESSED)
|
|
{
|
|
keydelay[i]++;
|
|
if (keydelay[i] > KEY_DELAY_TIME)
|
|
{
|
|
keydelay[i] = KEY_DELAY_TIME;
|
|
if (keyflag[i] == 0)
|
|
{
|
|
keyflag[i] = 1;
|
|
KeyPressPro(i);
|
|
}
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (keydelay[i] > 0)
|
|
{
|
|
keydelay[i]--;
|
|
if (keydelay[i] == 0 && keyflag[i] == 1)//减到0且按下过
|
|
{
|
|
keyflag[i] = 0;
|
|
KeyReleasePro(i);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (keyflag[KEY_UP] == 0 && keyflag[KEY_DOWN] == 0 && keyflag[KEY_L_UP] == 0 && keyflag[KEY_L_DOWN] == 0)
|
|
{
|
|
updown = 0;
|
|
stopflag = 0;
|
|
shoudong = 0;
|
|
shortflag = 0;
|
|
}
|
|
|
|
if (GetKeyState(KEY_AUTO) == KEY_PRESSED)
|
|
{
|
|
keydelay[KEY_AUTO]++;
|
|
if (keydelay[KEY_AUTO] >= 2000)
|
|
{
|
|
keydelay[KEY_AUTO] = 2000;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (keyflag[KEY_UP]==0 && keyflag[KEY_DOWN]==0)
|
|
{
|
|
keydelay[KEY_AUTO] = 0;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
#define MOTOR_NONE 0
|
|
#define MOTOR_UP 1
|
|
#define MOTOR_DOWN 2
|
|
#define MOTOR_BREAK 3
|
|
void Motor_Ctrl(uint8_t state)
|
|
{
|
|
switch (state)
|
|
{
|
|
case MOTOR_UP:
|
|
RLY2_Ctrl(ON);
|
|
RLY1_Ctrl(OFF);
|
|
MOS_Ctrl(ON);
|
|
break;
|
|
case MOTOR_DOWN:
|
|
RLY2_Ctrl(OFF);
|
|
RLY1_Ctrl(ON);
|
|
MOS_Ctrl(ON);
|
|
break;
|
|
case MOTOR_BREAK:
|
|
RLY1_Ctrl(ON);
|
|
RLY2_Ctrl(ON);
|
|
MOS_Ctrl(ON);
|
|
break;
|
|
default:
|
|
RLY1_Ctrl(OFF);
|
|
RLY2_Ctrl(OFF);
|
|
MOS_Ctrl(OFF);
|
|
break;
|
|
}
|
|
}
|
|
|
|
#define OC_9A 21
|
|
#define OC_13A 30
|
|
#define OC_6A 12
|
|
extern uint16_t g_adcval;
|
|
void Output_Ctrl(void)//10mS
|
|
{
|
|
static uint16_t autotime=0;
|
|
static uint8_t oc_delay = 0;
|
|
|
|
if (g_adcval > OC_9A)
|
|
{
|
|
oc_delay++;
|
|
if (oc_delay > 20)//200 ms
|
|
{
|
|
Motor_Ctrl(MOTOR_NONE);
|
|
shortflag = 1;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
oc_delay = 0;
|
|
}
|
|
|
|
if (shortflag == 1)
|
|
{
|
|
autoflag = 0;
|
|
Motor_Ctrl(MOTOR_NONE);
|
|
return;
|
|
}
|
|
|
|
if (stopflag == 1)
|
|
{
|
|
Motor_Ctrl(MOTOR_NONE);
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
if (updown == UPDOWN_UP)
|
|
{
|
|
Motor_Ctrl(MOTOR_UP);
|
|
autotime++;
|
|
}
|
|
else if (updown == UPDOWN_DOWN)
|
|
{
|
|
Motor_Ctrl(MOTOR_DOWN);
|
|
autotime++;
|
|
}
|
|
else
|
|
{
|
|
if (autoflag == UPDOWN_DOWN)
|
|
{
|
|
Motor_Ctrl(MOTOR_DOWN);
|
|
autotime++;
|
|
}
|
|
else
|
|
{
|
|
Motor_Ctrl(MOTOR_NONE);
|
|
autotime = 0;
|
|
}
|
|
}
|
|
|
|
if (autotime > 800)//8s
|
|
{
|
|
Motor_Ctrl(MOTOR_NONE);
|
|
autotime = 0;
|
|
autoflag = 0;
|
|
stopflag = 1;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
void AppTask(void)
|
|
{
|
|
static uint8_t ledno = 1,last = 0;
|
|
if (TimeBase5msFlag == 1)
|
|
{
|
|
TimeBase5msFlag = 0;
|
|
keyScan();
|
|
}
|
|
|
|
|
|
if (TimeBase10msFlag == 1)
|
|
{
|
|
TimeBase10msFlag = 0;
|
|
Output_Ctrl();
|
|
}
|
|
|
|
if (TimeBase100msFlag == 1)
|
|
{
|
|
TimeBase100msFlag = 0;
|
|
|
|
R_WDT_Restart();
|
|
}
|
|
|
|
if (TimeBase1000msFlag == 1)
|
|
{
|
|
TimeBase1000msFlag = 0;
|
|
/*
|
|
LED_Ctrl1LED(ledno,LED_ON);
|
|
LED_Ctrl1LED(last,LED_OFF);
|
|
last = ledno;
|
|
ledno++;
|
|
if (ledno > 9)
|
|
{
|
|
ledno = 1;
|
|
}
|
|
*/
|
|
}
|
|
|
|
} |