2023-11-18 11:46:58 +08:00
|
|
|
|
/**
|
|
|
|
|
* @file appTask.c
|
|
|
|
|
* @author sunbeam
|
|
|
|
|
* @brief
|
|
|
|
|
* @version 0.1
|
|
|
|
|
* @date 2023-11-14
|
|
|
|
|
*
|
|
|
|
|
* @copyright Copyright (c) 2023
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#include "appTask.h"
|
|
|
|
|
#include "iodefine.h"
|
|
|
|
|
#include "r_cg_adc.h"
|
|
|
|
|
#include "PINdef.h"
|
|
|
|
|
#include "hwCtrl.h"
|
|
|
|
|
#include "MotorCtrl.h"
|
|
|
|
|
#include "RLIN_driver.h"
|
2023-11-22 20:34:48 +08:00
|
|
|
|
#include "r_cg_wdt.h"
|
2023-11-26 11:43:55 +08:00
|
|
|
|
#include "r_cg_timer.h"
|
2023-11-18 11:46:58 +08:00
|
|
|
|
|
|
|
|
|
static uint8_t EEL_BUF[50];
|
|
|
|
|
|
|
|
|
|
unsigned char IGN_Voltage_error_flag, IGN_Voltage_error_count;
|
|
|
|
|
|
|
|
|
|
unsigned char Timer_1ms_flag;
|
|
|
|
|
unsigned char Timer_5ms_flag;
|
|
|
|
|
unsigned char Timer_10ms_flag;
|
|
|
|
|
unsigned char Timer_20ms_flag;
|
|
|
|
|
unsigned char Timer_50ms_flag;
|
|
|
|
|
unsigned char Timer_1000ms_flag;
|
|
|
|
|
|
|
|
|
|
/***************************************************/
|
|
|
|
|
static unsigned int EEL_SAVE_CNT_DOWN_TIMER;
|
|
|
|
|
static uint8_t EEL_SAVE_ENABLE;
|
|
|
|
|
|
|
|
|
|
MotorStateEE_Type MotorStateEE;
|
|
|
|
|
MotorStateEE_Type *pEE;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void MotorCtrl(void);
|
|
|
|
|
void HallDetecte(void);
|
|
|
|
|
void LIN_Task(void);
|
|
|
|
|
void TfJr_CtrlTask(void);
|
2023-11-26 21:40:14 +08:00
|
|
|
|
void JrTask(void);
|
|
|
|
|
void Lock_Ctrl(void);
|
2023-11-18 11:46:58 +08:00
|
|
|
|
extern uint8_t OC1flag,OC2flag,OC3flag;
|
|
|
|
|
uint8_t TfState,JrState;
|
2023-11-26 11:43:55 +08:00
|
|
|
|
unsigned char keybyte1,keybyte2,keybyte3;
|
2023-11-18 11:46:58 +08:00
|
|
|
|
|
|
|
|
|
void Apply_task(void)
|
|
|
|
|
{
|
2023-11-26 11:43:55 +08:00
|
|
|
|
//static uint8_t temp;
|
2023-11-18 11:46:58 +08:00
|
|
|
|
|
|
|
|
|
if (Timer_1ms_flag == 1)
|
|
|
|
|
{
|
|
|
|
|
Timer_1ms_flag = 0;
|
|
|
|
|
KeyScan();
|
|
|
|
|
HallDetecte();
|
|
|
|
|
CurrentDetecte();
|
2023-11-26 21:40:14 +08:00
|
|
|
|
JrTask();
|
2023-11-18 11:46:58 +08:00
|
|
|
|
if (EEL_SAVE_CNT_DOWN_TIMER > 0)
|
|
|
|
|
{
|
|
|
|
|
EEL_SAVE_CNT_DOWN_TIMER--;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (Timer_5ms_flag == 1)
|
|
|
|
|
{
|
|
|
|
|
Timer_5ms_flag = 0;
|
|
|
|
|
KeyPro();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (Timer_10ms_flag == 1)
|
|
|
|
|
{
|
|
|
|
|
Timer_10ms_flag = 0;
|
2023-11-26 11:43:55 +08:00
|
|
|
|
MotorCtrl();
|
2023-11-18 11:46:58 +08:00
|
|
|
|
LIN_Task();
|
|
|
|
|
}
|
|
|
|
|
if (Timer_20ms_flag == 1)
|
|
|
|
|
{
|
|
|
|
|
Timer_20ms_flag = 0;
|
2023-11-26 11:43:55 +08:00
|
|
|
|
//R_WDT_Restart();
|
2023-11-18 11:46:58 +08:00
|
|
|
|
}
|
|
|
|
|
if (Timer_50ms_flag == 1)
|
|
|
|
|
{
|
|
|
|
|
Timer_50ms_flag = 0;
|
|
|
|
|
TfJr_CtrlTask();
|
2023-11-26 21:40:14 +08:00
|
|
|
|
Lock_Ctrl();
|
2023-11-18 11:46:58 +08:00
|
|
|
|
}
|
|
|
|
|
if (Timer_1000ms_flag == 1)
|
|
|
|
|
{
|
|
|
|
|
Timer_1000ms_flag = 0;
|
2023-11-22 20:34:48 +08:00
|
|
|
|
//temp = !temp;
|
|
|
|
|
//MOTOR1Ctrl(temp);
|
2023-11-18 11:46:58 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
2023-11-26 21:40:14 +08:00
|
|
|
|
extern uint16_t MotorHallLoc[6],MotorHardStop1[6],MotorHardStop2[6];
|
2023-11-26 11:43:55 +08:00
|
|
|
|
extern uint8_t Master_TxData1[];
|
2023-11-26 21:40:14 +08:00
|
|
|
|
extern uint16_t current1,current2,current3;
|
2023-11-18 11:46:58 +08:00
|
|
|
|
void LIN_Task(void)
|
|
|
|
|
{
|
2023-11-26 11:43:55 +08:00
|
|
|
|
static uint8_t lin_sch_count=0;
|
2023-11-18 11:46:58 +08:00
|
|
|
|
switch (lin_sch_count)
|
|
|
|
|
{
|
|
|
|
|
case 0:
|
2023-11-26 11:43:55 +08:00
|
|
|
|
Master_TxData1[0] = (JrState<<4)|(TfState<<6);
|
|
|
|
|
Master_TxData1[1] = keybyte3;
|
2023-11-26 21:40:14 +08:00
|
|
|
|
|
|
|
|
|
Master_TxData1[3] = current1;
|
|
|
|
|
Master_TxData1[4] = current2;
|
|
|
|
|
Master_TxData1[5] = current3;
|
|
|
|
|
|
|
|
|
|
//Master_TxData1[6] = MotorHallLoc[2]>>8;
|
|
|
|
|
//Master_TxData1[7] = MotorHallLoc[2];
|
2023-11-26 11:43:55 +08:00
|
|
|
|
RLIN_Master_HeaderTransmit(0x80);
|
2023-11-18 11:46:58 +08:00
|
|
|
|
break;
|
|
|
|
|
case 1:
|
2023-11-26 11:43:55 +08:00
|
|
|
|
RLIN_Master_HeaderTransmit(0x99);
|
2023-11-18 11:46:58 +08:00
|
|
|
|
break;
|
|
|
|
|
case 2:
|
2023-11-26 11:43:55 +08:00
|
|
|
|
RLIN_Master_HeaderTransmit(0x61);
|
|
|
|
|
break;
|
|
|
|
|
case 3:
|
2023-11-18 11:46:58 +08:00
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
lin_sch_count = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
lin_sch_count++;
|
|
|
|
|
if (lin_sch_count > 2)
|
|
|
|
|
{
|
|
|
|
|
lin_sch_count = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
2023-11-26 11:43:55 +08:00
|
|
|
|
|
2023-11-18 11:46:58 +08:00
|
|
|
|
void LIN_Rx_Handle(uint8_t pid,uint8_t *data)
|
|
|
|
|
{
|
|
|
|
|
uint8_t id = pid & 0x3f;
|
|
|
|
|
switch (id)
|
|
|
|
|
{
|
|
|
|
|
case 0x21:
|
2023-11-26 11:43:55 +08:00
|
|
|
|
keybyte3 = data[4];
|
2023-11-18 11:46:58 +08:00
|
|
|
|
break;
|
2023-11-26 11:43:55 +08:00
|
|
|
|
case 0x19:
|
|
|
|
|
//MOTOR1Ctrl(1);
|
2023-11-18 11:46:58 +08:00
|
|
|
|
keybyte1 = data[0];
|
|
|
|
|
keybyte2 = data[1];
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void KeyPressLogic(uint8_t keyid)
|
|
|
|
|
{
|
|
|
|
|
switch (keyid)
|
|
|
|
|
{
|
|
|
|
|
case KEYID_MOTOR1_XQ:
|
|
|
|
|
setMotorState(MOTOR1,ACT_XQ);
|
|
|
|
|
break;
|
|
|
|
|
case KEYID_MOTOR1_XH:
|
|
|
|
|
setMotorState(MOTOR1,ACT_XH);
|
|
|
|
|
break;
|
|
|
|
|
case KEYID_MOTOR2_XQ:
|
|
|
|
|
setMotorState(MOTOR2,ACT_XQ);
|
|
|
|
|
break;
|
|
|
|
|
case KEYID_MOTOR2_XH:
|
|
|
|
|
setMotorState(MOTOR2,ACT_XH);
|
|
|
|
|
break;
|
|
|
|
|
case KEYID_MOTOR3_XQ:
|
|
|
|
|
setMotorState(MOTOR3,ACT_XQ);
|
|
|
|
|
break;
|
|
|
|
|
case KEYID_MOTOR3_XH:
|
|
|
|
|
setMotorState(MOTOR3,ACT_XH);
|
|
|
|
|
break;
|
|
|
|
|
case KEYID_MOTOR4_XQ:
|
|
|
|
|
setMotorState(MOTOR4,ACT_XQ);
|
|
|
|
|
break;
|
|
|
|
|
case KEYID_MOTOR4_XH:
|
|
|
|
|
setMotorState(MOTOR4,ACT_XH);
|
|
|
|
|
break;
|
|
|
|
|
case KEYID_MOTOR5_XQ:
|
|
|
|
|
setMotorState(MOTOR5,ACT_XQ);
|
|
|
|
|
break;
|
|
|
|
|
case KEYID_MOTOR5_XH:
|
|
|
|
|
setMotorState(MOTOR5,ACT_XH);
|
|
|
|
|
break;
|
|
|
|
|
case KEYID_MOTOR6_XQ:
|
|
|
|
|
setMotorState(MOTOR6,ACT_XQ);
|
|
|
|
|
break;
|
|
|
|
|
case KEYID_MOTOR6_XH:
|
|
|
|
|
setMotorState(MOTOR6,ACT_XH);
|
|
|
|
|
break;
|
|
|
|
|
case KEYID_MM:
|
|
|
|
|
MotorMemoryKeyMMPress();
|
|
|
|
|
break;
|
|
|
|
|
case KEYID_M1:
|
2024-03-08 15:51:51 +08:00
|
|
|
|
MotorMemoryKeyM1Press();
|
2023-11-18 11:46:58 +08:00
|
|
|
|
break;
|
|
|
|
|
case KEYID_M2:
|
2024-03-08 15:51:51 +08:00
|
|
|
|
MotorMemoryKeyM2Press();
|
2023-11-18 11:46:58 +08:00
|
|
|
|
break;
|
|
|
|
|
case KEYID_M3:
|
2024-03-08 15:51:51 +08:00
|
|
|
|
MotorMemoryKeyM3Press();
|
2023-11-18 11:46:58 +08:00
|
|
|
|
break;
|
2023-11-26 11:43:55 +08:00
|
|
|
|
case KEYID_K4:
|
|
|
|
|
JrState++;
|
|
|
|
|
TfState = 0;
|
|
|
|
|
if (JrState > 3)
|
|
|
|
|
{
|
|
|
|
|
JrState = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case KEYID_K3:
|
|
|
|
|
TfState++;
|
|
|
|
|
JrState = 0;
|
|
|
|
|
if (TfState > 3)
|
|
|
|
|
{
|
|
|
|
|
TfState = 0;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case KEYID_K2:
|
|
|
|
|
break;
|
|
|
|
|
case KEYID_K1:
|
|
|
|
|
break;
|
2023-11-18 11:46:58 +08:00
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-03-21 15:12:04 +08:00
|
|
|
|
extern uint8_t flagMotorMemoryKeyStart;
|
2023-11-18 11:46:58 +08:00
|
|
|
|
void KeyReleaseLogic(uint8_t keyid)
|
|
|
|
|
{
|
|
|
|
|
switch (keyid)
|
|
|
|
|
{
|
|
|
|
|
case KEYID_MOTOR1_XQ:
|
|
|
|
|
setMotorState(MOTOR1,ACT_NOACT);
|
|
|
|
|
break;
|
|
|
|
|
case KEYID_MOTOR1_XH:
|
|
|
|
|
setMotorState(MOTOR1,ACT_NOACT);
|
|
|
|
|
break;
|
|
|
|
|
case KEYID_MOTOR2_XQ:
|
|
|
|
|
setMotorState(MOTOR2,ACT_NOACT);
|
|
|
|
|
break;
|
|
|
|
|
case KEYID_MOTOR2_XH:
|
|
|
|
|
setMotorState(MOTOR2,ACT_NOACT);
|
|
|
|
|
break;
|
|
|
|
|
case KEYID_MOTOR3_XQ:
|
|
|
|
|
setMotorState(MOTOR3,ACT_NOACT);
|
|
|
|
|
break;
|
|
|
|
|
case KEYID_MOTOR3_XH:
|
|
|
|
|
setMotorState(MOTOR3,ACT_NOACT);
|
|
|
|
|
break;
|
|
|
|
|
case KEYID_MOTOR4_XQ:
|
|
|
|
|
setMotorState(MOTOR4,ACT_NOACT);
|
|
|
|
|
break;
|
|
|
|
|
case KEYID_MOTOR4_XH:
|
|
|
|
|
setMotorState(MOTOR4,ACT_NOACT);
|
|
|
|
|
break;
|
|
|
|
|
case KEYID_MOTOR5_XQ:
|
|
|
|
|
setMotorState(MOTOR5,ACT_NOACT);
|
|
|
|
|
break;
|
|
|
|
|
case KEYID_MOTOR5_XH:
|
|
|
|
|
setMotorState(MOTOR5,ACT_NOACT);
|
|
|
|
|
break;
|
|
|
|
|
case KEYID_MOTOR6_XQ:
|
|
|
|
|
setMotorState(MOTOR6,ACT_NOACT);
|
|
|
|
|
break;
|
|
|
|
|
case KEYID_MOTOR6_XH:
|
|
|
|
|
setMotorState(MOTOR6,ACT_NOACT);
|
|
|
|
|
break;
|
|
|
|
|
case KEYID_MM:
|
|
|
|
|
MotorMemoryKeyMMRelease();
|
|
|
|
|
break;
|
|
|
|
|
case KEYID_M1:
|
|
|
|
|
MotorMemoryKeyM1Release();
|
|
|
|
|
break;
|
|
|
|
|
case KEYID_M2:
|
|
|
|
|
MotorMemoryKeyM2Release();
|
|
|
|
|
break;
|
|
|
|
|
case KEYID_M3:
|
|
|
|
|
MotorMemoryKeyM3Release();
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
2024-03-22 10:20:54 +08:00
|
|
|
|
if (keyid!=KEYID_MM)
|
|
|
|
|
{
|
|
|
|
|
flagMotorMemoryKeyStart = 0;
|
|
|
|
|
}
|
|
|
|
|
|
2023-11-18 11:46:58 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void KeyPro(void)
|
|
|
|
|
{
|
|
|
|
|
uint8_t keyid;
|
2023-11-26 11:43:55 +08:00
|
|
|
|
for (keyid = 0; keyid < KEY_NUM; keyid++)
|
2023-11-18 11:46:58 +08:00
|
|
|
|
{
|
|
|
|
|
if (getKeyPressFlag(keyid))
|
|
|
|
|
{
|
|
|
|
|
KeyPressLogic(keyid+1);
|
|
|
|
|
StopAutoCal();
|
|
|
|
|
}
|
|
|
|
|
if (getKeyReleaseFlag(keyid))
|
|
|
|
|
{
|
|
|
|
|
KeyReleaseLogic(keyid+1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void EEL_READ(void)
|
|
|
|
|
{
|
|
|
|
|
uint16_t checksum;
|
|
|
|
|
uint8_t *src,*des,i;
|
2024-03-08 15:51:51 +08:00
|
|
|
|
ReadFlashData(EEL_BUF, 0x000F1000, sizeof(MotorStateEE));
|
2023-11-18 11:46:58 +08:00
|
|
|
|
pEE = (MotorStateEE_Type *)EEL_BUF;
|
|
|
|
|
checksum = pEE->kbsoft1 + pEE->kbsoft2 + pEE->kbnow + pEE->zysoft1 + pEE->zysoft2 + pEE->zynow;
|
|
|
|
|
if (pEE ->start == 0x55AA && pEE->stop == 0xAA55 && checksum == pEE->checksum)
|
|
|
|
|
{
|
|
|
|
|
des = &MotorStateEE;
|
|
|
|
|
src = EEL_BUF;
|
|
|
|
|
for (i = 0; i < sizeof(MotorStateEE); i++)
|
|
|
|
|
{
|
|
|
|
|
des[i] = src[i];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
uint16_t SupplyVoltage;
|
|
|
|
|
void IGN_Voltage_Detect(void)
|
|
|
|
|
{
|
|
|
|
|
uint32_t adval;
|
2023-11-26 11:43:55 +08:00
|
|
|
|
adval = getAdval(ADCH_BAT);
|
2023-11-18 11:46:58 +08:00
|
|
|
|
SupplyVoltage = (adval*57*5)>>10;
|
|
|
|
|
if (adval <= 305 )
|
|
|
|
|
{
|
|
|
|
|
IGN_Voltage_error_count++;
|
|
|
|
|
if (IGN_Voltage_error_count >= 250)
|
|
|
|
|
{
|
|
|
|
|
IGN_Voltage_error_count = 0;
|
|
|
|
|
IGN_Voltage_error_flag = 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (adval >= 592 )//16.5
|
|
|
|
|
{
|
|
|
|
|
IGN_Voltage_error_count++;
|
|
|
|
|
if (IGN_Voltage_error_count >= 250)
|
|
|
|
|
{
|
|
|
|
|
IGN_Voltage_error_count = 0;
|
|
|
|
|
IGN_Voltage_error_flag = 2;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (adval >= 323 && adval <= 574)
|
|
|
|
|
{
|
|
|
|
|
IGN_Voltage_error_count = 0;
|
|
|
|
|
IGN_Voltage_error_flag = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (IGN_Voltage_error_flag != 0)
|
|
|
|
|
{
|
|
|
|
|
// TAU0_Channel1_ChangeDuty(0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void value_init(void)
|
|
|
|
|
{
|
|
|
|
|
R_TAU0_Channel0_Start();
|
|
|
|
|
R_TAU0_Channel2_Start();
|
|
|
|
|
|
|
|
|
|
R_ADC_Start();
|
|
|
|
|
R_ADC_Set_OperationOn();
|
|
|
|
|
R_TMR_RJ0_Start();
|
|
|
|
|
|
2023-11-22 20:34:48 +08:00
|
|
|
|
OUT_LINEN = 1;
|
2023-11-18 11:46:58 +08:00
|
|
|
|
RLIN_Master_Init();
|
|
|
|
|
MotorValueInit();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Timer_Pro(void)
|
|
|
|
|
{
|
|
|
|
|
static unsigned int Timer_1ms_tick_count;
|
|
|
|
|
Timer_1ms_tick_count++;
|
|
|
|
|
Timer_1ms_flag=1;
|
|
|
|
|
if(Timer_1ms_tick_count%5==0)
|
|
|
|
|
{
|
|
|
|
|
Timer_5ms_flag=1;
|
|
|
|
|
}
|
|
|
|
|
if(Timer_1ms_tick_count%10==0)
|
|
|
|
|
{
|
|
|
|
|
Timer_10ms_flag=1;
|
|
|
|
|
}
|
|
|
|
|
if(Timer_1ms_tick_count%20==0)
|
|
|
|
|
{
|
|
|
|
|
Timer_20ms_flag=1;
|
|
|
|
|
}
|
|
|
|
|
if(Timer_1ms_tick_count%50==0)
|
|
|
|
|
{
|
|
|
|
|
Timer_50ms_flag=1;
|
|
|
|
|
}
|
|
|
|
|
if(Timer_1ms_tick_count%1000==0)
|
|
|
|
|
{
|
|
|
|
|
Timer_1000ms_flag = 1;
|
|
|
|
|
}
|
|
|
|
|
if(Timer_1ms_tick_count>=5000)
|
|
|
|
|
{
|
|
|
|
|
Timer_1ms_tick_count=0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2023-11-26 11:43:55 +08:00
|
|
|
|
const uint8_t TfDutyTable[4] = {0,100,80,50};//{0,100,80,50};
|
|
|
|
|
const uint8_t JrDutyTable[4] = {0,100,80,50};//{0,100,80,50};
|
2023-11-18 11:46:58 +08:00
|
|
|
|
void TfJr_CtrlTask(void)
|
|
|
|
|
{
|
|
|
|
|
if (JrState < 4)
|
|
|
|
|
{
|
2023-11-26 11:43:55 +08:00
|
|
|
|
SetJrDuty(JrDutyTable[JrState]);
|
2023-11-18 11:46:58 +08:00
|
|
|
|
}
|
|
|
|
|
if (TfState < 4)
|
|
|
|
|
{
|
|
|
|
|
SetTfDuty(TfDutyTable[TfState]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2023-11-26 21:40:14 +08:00
|
|
|
|
void JrTask(void)
|
|
|
|
|
{
|
|
|
|
|
static uint16_t count;
|
|
|
|
|
uint16_t duty;
|
|
|
|
|
if (JrState == 0)
|
|
|
|
|
{
|
|
|
|
|
OUT_JR1 = 0;
|
|
|
|
|
OUT_JR2 = 0;
|
|
|
|
|
count = 0;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2024-03-08 15:51:51 +08:00
|
|
|
|
duty = TfDutyTable[JrState];
|
2023-11-26 21:40:14 +08:00
|
|
|
|
}
|
|
|
|
|
count++;
|
2024-03-08 15:51:51 +08:00
|
|
|
|
if (count >= 100)
|
2023-11-26 21:40:14 +08:00
|
|
|
|
{
|
|
|
|
|
count = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (count >= duty)
|
|
|
|
|
{
|
|
|
|
|
OUT_JR1 = 0;
|
|
|
|
|
OUT_JR2 = 0;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
OUT_JR1 = 1;
|
|
|
|
|
OUT_JR2 = 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
#define LOCK_OUT_TIME 80
|
|
|
|
|
void Lock_Ctrl(void)//50ms
|
|
|
|
|
{
|
|
|
|
|
uint8_t key1,key2;
|
|
|
|
|
static uint8_t count;
|
|
|
|
|
key1 = GetKeyState(KEYID_K2);
|
|
|
|
|
key2 = GetKeyState(KEYID_K1);
|
|
|
|
|
if (key1 == 1 && key2 == 0)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if (count < LOCK_OUT_TIME)
|
|
|
|
|
{
|
|
|
|
|
count++;
|
|
|
|
|
OUT_LOCK1 = 1;
|
|
|
|
|
OUT_LOCK2 = 0;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
OUT_LOCK1 = 0;
|
|
|
|
|
OUT_LOCK2 = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (key1 == 0 && key2 == 1)
|
|
|
|
|
{
|
|
|
|
|
if (count < LOCK_OUT_TIME)
|
|
|
|
|
{
|
|
|
|
|
count++;
|
|
|
|
|
OUT_LOCK1 = 0;
|
|
|
|
|
OUT_LOCK2 = 1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
OUT_LOCK1 = 0;
|
|
|
|
|
OUT_LOCK2 = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
OUT_LOCK1 = 0;
|
|
|
|
|
OUT_LOCK2 = 0;
|
|
|
|
|
count = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-11-18 11:46:58 +08:00
|
|
|
|
|
|
|
|
|
|