⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 d015.c

📁 / 功能:背部上下行走,分颈肩背腰全程 // 座垫一振动
💻 C
📖 第 1 页 / 共 2 页
字号:
							{
								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 + -