📄 d015.c
字号:
{
nVibStrengthIndex = 1;
}
}
break;
case 0xffef://leg knead speed // “小腿揉捏速度”键
if(bLegKneadSW == On)
{
bLedAuto = LedOff;
nKneadSpeedIndex++;
if(nKneadSpeedIndex>3)
{
nKneadSpeedIndex = 1;
}
}
break;
case 0xffdf://auto // 全自动键
if(bRun == On)
{
bAutoProcess = TRUE; // 全自动过程开始
bBackSwitchReset = FALSE;
bLedAuto = LedOn;
//bLocationReset = FALSE;
}
break;
case 0xffbf:// back part switch “背部开关”键
if(bRun == On)
{
bBackSW = ~bBackSW;
if(bBackSW==On)
{
nBackLocateIndex = 1; // 上半身
bBackMassageChange = TRUE;
bBackSwitchReset = FALSE;
//bLocationReset = FALSE;
}
else
{
bWalkUpDwTriac = ACOff;
bLedAuto = LedOff;
bLedBackSW = LedOff;
bLedBackFull = LedOff;
bLedBackUpper = LedOff;
bLedBackLower = LedOff;
bBackSwitchReset = TRUE;
}
}
break;
case 0xff7f://vib switch “坐垫振动开关”键
if(bRun == On)
{
bVibSW = ~bVibSW;
if(bVibSW == On)
{
nVibStrengthIndex = 2;
}
else
{
bLedAuto = LedOff;
}
}
break;
case 0xfdff: //leg knead switch “小腿揉捏开关”键
if(bRun ==On)
{
bLegKneadSW = ~bLegKneadSW;
if(bLegKneadSW == On)
{
nKneadSpeedIndex = 2;
}
else
{
bLedAuto = LedOff;
}
}
break;
case 0xf7ff: //power switch//f7ff 电源键
bPowerSW =~bPowerSW;
if( bPowerSW == On )
{
if ( bLocationReset == FALSE )
{
//bLocationReset = FALSE;
bBackSW = On;
bVibSW = On;
bLegBeatSW = On;
bLegKneadSW = On;
bAutoProcess = TRUE;
bBackSwitchReset = FALSE;
bRun = On;
nRunTime = 20;
nRunTimeIndex = 2;
nRunTime1 = 0;
nLedValue4 = Seg[nRunTime/10];
nLedValue5 = Seg[nRunTime%10];
}
else bPowerSW = Off;
}
else
{
bBackSW = Off;
bLegKneadSW = Off;
bVibSW = Off;
bRun = Off;
if ( bLocationReset == FALSE )
{
bLocationReset = TRUE; // 关电源后,背部电机复位(上行至顶部行程开关处);若正在复位,则不予理睬
nLocateResetTimer = 0;
nLocateResetStep = 0;
}
}
break;
}
}
nOldKeyCode = nNewKeyCode ;
}
/**************************************************************************************/
void SetMotor(void) // ”坐垫振动电机“函数
{
if(nCurVibStrength >=6)
{
nCurVibStrength = 0;
}
if(nCurVibStrength>=nVibStrength)
{
if(bVibFlag == TRUE)
{
bVib1 = VibOn;
bVib2 = VibOn;
bVib3 = VibOn;
}
else
{
bVib1 = VibOff;
bVib2 = VibOff;
bVib3 = VibOff;
}
}
else
{
bVib1 = VibOff;
bVib2 = VibOff;
bVib3 = VibOff;
}
}
//-------------- 背部行走参量 ----------------------------------------------------------------
bit bBackStepChange;
bit bBackMassageChange; // 背部按摩部位改变状态
bit bBackSW; // 背部开关
bit bWalkUpDwRel; // 背部电机上下状态
bit bWalkUpDwAC; // 此状态量似乎未用?
unsigned char nBackMassageTime;
unsigned char nWalkStep;
unsigned char nCountHigh;
unsigned char nBackLocateIndex;
unsigned char nCurMoveTime;
unsigned char nCurCheckTime;
unsigned char nCurMoveDirection; //背部电机当前运行方向(上、下、停)
#pragma norambank
void main(void)
{
PowerOnInit();
while(1)
{
KeyProcess();
_clrwdt();
RunTimeProcess();
BackWalk();
_clrwdt();
Automation();
Vibration();
SetMotor();
LegKnead();
BackReset();
if((bBackSW == Off)&&(bVibSW == Off)&&(bLegKneadSW == Off))
{
bRun = Off; // 若所有开关关闭,则总电源自行关闭,显示OF
if (( bLocationReset == FALSE ) && ( bBackSwitchReset == TRUE ))
{
bBackSwitchReset = FALSE;
bLocationReset = TRUE; // 关电源后,背部电机复位(上行至顶部行程开关处);若正在复位,则不予理睬
nLocateResetTimer = 0;
nLocateResetStep = 0;
}
}
_clrwdt();
if(bRun == Off)
{
bPowerSW = Off;
bBackSW = Off;
bVibSW = Off;
bLegBeatSW = Off;
bLegKneadSW = Off;
nLedValue0 = 0xff;
nLedValue1 = 0xff;
nLedValue2 = 0xff;
nLedValue3 = 0xff;
nLedValue4 = 0xc0;
nLedValue5 = 0x8e;
}
}
}
void BackWalk(void)
{
if(bBackSW == On) //背部按摩处理 "背部行走”功能
{
bLedBackSW = LedOn;
if(bBackMassageChange == TRUE) // 当按“背部定位键、背部开关键”,bBackMassageChange会变为TURE,即“定位模式”改变
{
bBackMassageChange = FALSE;
nCurBackStep = 0;
bBackStepChange = TRUE;
}
if(bBackStepChange == TRUE)
{
bBackStepChange = FALSE;
nBackMassageTime = 0;
nWalkStep = 0; // 当背部行走模式(定位模式)改变时,步骤nWalkStep=0
nCountHigh = 0;
switch(nBackLocateIndex)
{
case 1: // 上半身
bLedBackUpper = LedOff;
bLedBackLower = LedOff;
bLedBackFull = LedOn;
nCurMoveTime = BackFullMoveTime[nCurBackStep];
nCurCheckTime = BackFullCheckTime[nCurBackStep];
nCurMoveDirection = BackFullMoveDirection[nCurBackStep];
break;
case 2: // 颈肩
bLedBackUpper = LedOn;
bLedBackLower = LedOff;
bLedBackFull = LedOff;
nCurMoveTime = BackUpperMoveTime[nCurBackStep];
nCurCheckTime = BackUpperCheckTime[nCurBackStep];
nCurMoveDirection = BackUpperMoveDirection[nCurBackStep];
break;
case 3: // 背腰
bLedBackUpper = LedOff;
bLedBackLower = LedOn;
bLedBackFull = LedOff;
nCurMoveTime = BackLowerMoveTime[nCurBackStep];
nCurCheckTime = BackLowerCheckTime[nCurBackStep];
nCurMoveDirection = BackLowerMoveDirection[nCurBackStep];
break;
}
nCurBackStep++; // 背部行走计步器(主程序循环一次增1)
if(nCurBackStep>=TotalAutoStep[nBackLocateIndex])
{
nCurBackStep = 0;
}
}
switch(nCurMoveDirection) // 方向判别,然后进行电机起停和继电器换向处理
{
case StopState: // 0 - 停止状态
switch(nWalkStep)
{
case 0:
bWalkUpDwTriac = ACOff; // “背部电机”关:Back_Motor = 1
bWalkUpDwAC = ACOff; // // 此状态量似乎无用?
//WalkStop();
nBackMassageTime = 0;
nWalkStep = 1;
break;
case 1:
if(nBackMassageTime>=ACStopTime) // 2秒定时。每500ms,nBackMassageTime增计数。ACStopTime = 4
{
bWalkUpDwRelay = StopWard; // 继电器下行控制:Back_Relay = 0
bWalkUpDwRel = StopWard; // 背部电机下行状态
nBackMassageTime = 0;
nWalkStep = 2;
}
break;
case 2:
if(nBackMassageTime >= nCurMoveTime) // 21秒。nCurMoveTime = 42
{
bBackStepChange = TRUE;
}
break;
}
break;
case UpState: // 1 - 上升状态
switch(nWalkStep)
{
case 0:
if(bWalkUpDwRel == UpWard)
{
nWalkStep = 4;
nBackMassageTime = 0;
}
else
{
nWalkStep = 1;
nBackMassageTime = 0;
}
break;
case 1:
bWalkUpDwTriac = ACOff;
bWalkUpDwAC = ACOff;
//WalkStop();
nBackMassageTime = 0;
nWalkStep = 2;
break;
case 2:
if(nBackMassageTime>= ACStopTime) //
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -