📄 neck.c
字号:
CCPR2L=KnockSpeed[nCurMassSpeed];
TMR0IF=0;
m=0;
n=0;
TMR0ON=1; //打开定时器0;
break;
case 4:
CCPR1L=0xff;
CCPR2L=FingerSpeed[nCurMassSpeed]; //开始指压按摩;
break;
case 5:
CCPR1L=KneadFlapSpeed[nCurMassSpeed][0];
CCPR2L=KneadFlapSpeed[nCurMassSpeed][1];
break;
}
nPreMassState=nCurMassState;
}
if(nCurMassState==QJ)
{
if(TMR0IF==1)
{ TMR0IF=0;
m++;
TMR0H=0x3C;
TMR0L=0xAF; //对TMR0定时50ms写入一个初值;
if(m==10)
{
m=0;
n++;
if(n==1)
{
CCPR2L=0xff;
}
if(n==2)
{
CCPR2L=KnockSpeed[nCurMassSpeed];
n=0;
}
}
}
}
}
/**********************************************************************/
/* 主函数 */
/**********************************************************************/
main() //主函数主要负责初始化,与手控板进行数据通信,
{ //并且查询键值,来执行相应的功能;
int i;
systemInit(); //系统初始化;
bUpperOn=0;
key=1;
k=1;
UpMoveDir=0;
DwMoveDir=0;
nMoveTimeCount=0;
nTimeCount=0;
nMoveCycleCount=0;
CycleTimeCount=0;
bDischarge=0;
bDischargeComplete=0;
nPreMassState=0;
accycleflag=0;
if(!RB6)
{
nCurMoveDir=2;
nPreMoveDir=nCurMoveDir;
RD7=1;
RD6=0; //启动上行功能;
while(1)
{
if(RB6)
{nCurMoveDir=0;
nPreMoveDir=nCurMoveDir;
break;}
}
RD7=0;
RD6=0;
}
for(i=0;i<4;i++) //延时2秒后开始执行下面的程序;
Delay_ms(250);
TXEN=1; //启动发送允许;
TXREG=0xAA; //发出联络信号AA;
while(1)
{
if(TXIF==1) break;
} //等待写入完成;
TXEN=0;
while(1)
{
if(RCIF)
{
k=RCREG;
if(k=0xBB)
break; //如果从机未准备好,继续等待;
}
}
PEIE=1;
GIE=1; //初始化完成后,开放全局中断;
while(1)
{
Task();
if(bUpperOn&&KeyOn) //开启所有功能;
{
KeyOn=0;
bNeckAutoOn=1;
if(bNeckAutoOn)
{ nCurMassState=RN; //设置初始化按摩手法;
nCurMassSpeed=4; //默认速度为最快;
nPreMassSpeed=nCurMassSpeed;
UpLocationSet=AutoLocationSet[0][0];
DwLocationSet=AutoLocationSet[0][1];
}
nCurMoveDir=1;
nCurMoveCycle=0;
TMR1ON=1; //开TMR1定时器;
}
else if(!bUpperOn) //关闭所有功能;
{
bNeckAutoOn=0;
nCurMoveDir=0;
nCurMassState=0;
}
if(TMR1IF==1)
{
TMR1IF=0;
TMR1H=0xec;
TMR1L=0x78; //启动TMR1,定时时间为5ms,晶振为4.000M
if(UpMoveDir==1||DwMoveDir==1)
{ CycleDetect(); //圈数检测;
if(nMoveCycleCount)
{
if(UpMoveDir==1)
nCurMoveCycle=nCurMoveCycle-nMoveCycleCount; //上升过程中记录当前机械手位置;
else if(DwMoveDir==1)
nCurMoveCycle=nCurMoveCycle+nMoveCycleCount; //下降过程中记录当前机械手位置;
nMoveCycleCount=0;
}
}
if(nCurMoveCycle==UpLocation&&UpMoveDir==1) //到规定位置后开始停止行走;
{
nMoveCycleCount=0;
RD7=0;
RD6=0;
nCurMoveDir=0;
bDischarge=1;
}
else if(nCurMoveCycle==DwLocation&&DwMoveDir==1) //到规定位置后开始停止行走;
{
nMoveCycleCount=0;
RD7=0;
RD6=0;
nCurMoveDir=0;
bDischarge=1;
}
if(bDischarge)
{
nTimeCount++;
if(nTimeCount==250) //等待放电完成;
{bDischarge=0;
nTimeCount=0;
bDischargeComplete=1;}
}
}
if(bDischargeComplete) //放电完成后开始换向;
{
bDischargeComplete=0;
DwMoveDir=0;
UpMoveDir=0; //放电完成后彻底停止圈数检测;
if(nPreMoveDir==1)
nCurMoveDir=2;
if(nPreMoveDir==2)
nCurMoveDir=1;
nMoveTimeCount++; //上下移动次数检测;
if(nMoveTimeCount==2) //当移动次数达到规定次数后,改变按摩手法;
{
nMoveTimeCount=0;
nCurMassState++;
if(nCurMassState>5) //按摩手法达到循环要求时,重新选择按摩手法;
{
nCurMassState=1;
if(nCurMassSpeed<4)
nCurMassSpeed++;
else
nCurMassSpeed=1; //五种按摩手法循环一次后,速度改变一次;
nPreMassSpeed=nCurMassSpeed;
}
}
}
masscontrol();
if(nPreMoveDir!=nCurMoveDir) //换向后启动行走马达;
{ if(nCurMoveDir==1)
{RD6=1;
RD7=0;
DwMoveDir=1;
nPreMoveDir=nCurMoveDir;} //启动下行功能;
if(nCurMoveDir==2)
{RD7=1;
RD6=0;
UpMoveDir=1;
nPreMoveDir=nCurMoveDir;} //启动上行功能;
}
}
}
void Task() //功能键判别及功能选择;
{
if(key)
{
switch(k)
{
case 1: bUpperOn=!bUpper;
break;
case 2: bNeckAutoOn=!bNeckAutoOn;
bFullAutoOn=0;
WaistAutoOn=0;
break;
case 3: bFullAutoOn=!bFullAutoOn;
WaistAutoOn=0;
bNeckAutoOn=0;
break;
case 4: WaistAutoOn=!WaistAutoOn;
bFullAutoOn=0;
bNeckAutoOn=0;
break;
default: k=0;
break;
}
key=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -