M12-05P/app/user/appTask.c
2024-07-27 17:17:25 +08:00

194 lines
3.6 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"
#include "r_cg_adc.h"
#include "r_cg_serial.h"
#include "PINdef.h"
#include "MotorCtrl.h"
extern uint16_t g_AdVal[3];
void HardWare_Init(void)
{
//时基初始化
R_TAU0_Channel0_Start();
//AD 初始化
R_ADC_Start();
R_ADC_Set_OperationOn();
R_TAU0_Channel1_Start();
MOTOR1Ctrl(ACT_NOACT);
MOTOR2Ctrl(ACT_NOACT);
}
void Variable_Init(void)
{
MotorValueInit();
}
#define KEY1 0
#define KEY2 1
void keyLogic(uint8_t keyno)
{
switch (keyno)
{
case KEY1:
setMotorState(0,ACT_XQ);
break;
case KEY2:
setMotorState(0,ACT_XH);
break;
default:
break;
}
}
void keyLogicRelease(uint8_t keyno)
{
switch (keyno)
{
case KEY1:
setMotorState(0,ACT_NOACT);
break;
case KEY2:
setMotorState(0,ACT_NOACT);
break;
default:
break;
}
}
#define KEY_DELAY_TIME 60
void keyScan(void)//5ms
{
static uint16_t keydelay[9]={0,0,0,0,0,0,0,0,0};
static uint8_t keyflag[9]={0,0,0,0,0,0,0,0,0};
static uint8_t keep_count[9]={0,0,0,0,0,0,0,0,0};
static uint8_t KeyShort2Counter1,KeyShort2Counter2;
uint8_t keyval,i;
keyval = GetIOState(SIGID_KEY1);
if (keyval == 1 && keyflag[KEY1] == 0)
{
keydelay[KEY1]++;
if (keydelay[KEY1] > KEY_DELAY_TIME)//300ms
{
keyflag[KEY1] = 1;
keydelay[KEY1] = KEY_DELAY_TIME;
keyLogic(KEY1);
}
setMotorState(1,ACT_NOACT);
}
else if (keyval == 0)
{
if (keyflag[KEY1] == 1)
{
keyLogicRelease(KEY1);
}
if (keydelay[KEY1] > 0 && keydelay[KEY1] < KEY_DELAY_TIME)
{
if (KeyShort2Counter1 == 0)//第一次按下
{
KeyShort2Counter1 = 100;
}
else
{
setMotorState(1,ACT_XQ);
}
}
keyflag[KEY1] = 0;
keydelay[KEY1] = 0;
}
keyval = GetIOState(SIGID_KEY2);
if (keyval == 1 && keyflag[KEY2] == 0)
{
keydelay[KEY2]++;
if (keydelay[KEY2] > KEY_DELAY_TIME)//30ms
{
keyflag[KEY2] = 1;
keydelay[KEY2] = KEY_DELAY_TIME;
keyLogic(KEY2);
}
setMotorState(1,ACT_NOACT);
}
else if (keyval == 0)
{
if (keyflag[KEY2] == 1)
{
keyLogicRelease(KEY2);
}
if (keydelay[KEY2] > 0 && keydelay[KEY2] < KEY_DELAY_TIME)
{
if (KeyShort2Counter2 == 0)//第一次按下
{
KeyShort2Counter2 = 100;
}
else
{
setMotorState(1,ACT_XH);
}
}
keyflag[KEY2] = 0;
keydelay[KEY2] = 0;
}
if (KeyShort2Counter1 > 0)
{
KeyShort2Counter1--;
}
if (KeyShort2Counter2 > 0)
{
KeyShort2Counter2--;
}
}
void AppTask(void)
{
static uint8_t ledno = 1,last = 0;
if (TimeBase1msFlag == 1)
{
TimeBase1msFlag = 0;
CurrentDetecte();
}
if (TimeBase5msFlag == 1)
{
TimeBase5msFlag = 0;
keyScan();
}
if (TimeBase10msFlag == 1)
{
TimeBase10msFlag = 0;
MotorCtrl();
}
if (TimeBase100msFlag == 1)
{
TimeBase100msFlag = 0;
R_WDT_Restart();
}
if (TimeBase1000msFlag == 1)
{
TimeBase1000msFlag = 0;
}
}