#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" uint8_t g_rx_buf[3]; extern uint16_t g_AdVal[3]; void HardWare_Init(void) { //时基初始化 R_TAU0_Channel0_Start(); //LED初始化 //AD 初始化 R_ADC_Start(); R_ADC_Set_OperationOn(); R_TAU0_Channel1_Start(); //UART初始化 MotorCtrl(MOTOR_NOACT); } void Variable_Init(void) { } void keyLogic(uint8_t keyno) { switch (keyno) { case KEY_RESET: MotorStart(); break; default: break; } } #define KEY_DELAY_TIME 6 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}; uint8_t keyval,i; for (i = 0; i < KEY_NUM; i++) { keyval = GetKeyState(i); if (keyval == 1 && keyflag[i] == 0) { keydelay[i]++; if (keydelay[i] > KEY_DELAY_TIME)//30ms { keyflag[i] = 1; keydelay[i] = KEY_DELAY_TIME; keyLogic(i); keep_count[i] = 0; } } else if (keyval == 0) { keyflag[i] = 0; keydelay[i] = 0; } } } void AppTask(void) { static uint8_t ledno = 1,last = 0; if (TimeBase5msFlag == 1) { TimeBase5msFlag = 0; keyScan(); } if (TimeBase10msFlag == 1) { TimeBase10msFlag = 0; MotorTask(); } if (TimeBase100msFlag == 1) { TimeBase100msFlag = 0; R_WDT_Restart(); } if (TimeBase1000msFlag == 1) { TimeBase1000msFlag = 0; } } uint8_t flagMotorStart; uint8_t MotorState; uint16_t MotorCounter; #define MOTOR_IDLE 0 #define MOTOR_START 1 #define MOTOR_STEP1 2 #define MOTOR_STEP2 3 #define MOTOR_STEP3 4 #define MOTOR_STOP 5 void MotorStart(void) { flagMotorStart = 1; } const uint16_t MotorTimeArr[3] = {3000,3000,3000}; #define MOTOR_TASK_TIMEBASE 10 void MotorTask(void)//10ms { switch (MotorState) { case MOTOR_IDLE: if (flagMotorStart == 1) { flagMotorStart = 0; MotorState = MOTOR_START; } break; case MOTOR_START: MotorCounter = 0; MotorState = MOTOR_STEP1; break; case MOTOR_STEP1: MotorCounter++; if (MotorCounter*MOTOR_TASK_TIMEBASE > MotorTimeArr[0]) { MotorCounter = 0; MotorState++; } MotorCtrl(MOTOR_FZ); /* if (flagMotorStart == 1) { flagMotorStart = 0; MotorState = MOTOR_STOP; } */ break; case MOTOR_STEP2: MotorCounter++; if (MotorCounter*MOTOR_TASK_TIMEBASE > MotorTimeArr[1]) { MotorCounter = 0; MotorState++; } MotorCtrl(MOTOR_NOACT); /* if (flagMotorStart == 1) { flagMotorStart = 0; MotorState = MOTOR_STOP; } */ break; case MOTOR_STEP3: MotorCounter++; if (MotorCounter*MOTOR_TASK_TIMEBASE > MotorTimeArr[2]) { MotorCounter = 0; MotorState++; } MotorCtrl(MOTOR_ZZ); /* if (flagMotorStart == 1) { flagMotorStart = 0; MotorState = MOTOR_STOP; } */ break; case MOTOR_STOP: MotorCtrl(MOTOR_NOACT); MotorState = MOTOR_IDLE; break; default: MotorState = MOTOR_STOP; break; } }