解析上面那段代码
时间: 2023-07-03 18:13:42 浏览: 116
绅士游戏.zip
好的,下面是这段代码的解析:
```
if(!led) //判断步进电机的旋转方向,led为0代表正转,led为1代表反转
{
switch(flag1) //根据步进电机的状态控制相应的输出端口
{
case 0: BB=1;break;
case 1: AA=0;break;
case 2: CC=1;break;
case 3: BB=0;break;
case 4: DD=1;break;
case 5: CC=0;break;
case 6: AA=1;break;
case 7: DD=0;
}
if(flag1<7) //下一个状态
flag1++;
else
flag1=0;
tou++; //改变步进电机的位置
}
else
{
if(tou>0) //判断步进电机是否在原点
{
switch(flag1) //根据步进电机的状态控制相应的输出端口
{
case 0: DD=1;break;
case 1: AA=0;break;
case 2: CC=1;break;
case 3: DD=0;break;
case 4: BB=1;break;
case 5: CC=0;break;
case 6: AA=1;break;
case 7: BB=0;
}
if(flag1<7) //下一个状态
flag1++;
else
flag1=0;
tou--; //改变步进电机的位置
}
}
TH0=0X3C; //定时50ms
TL0=0XB0;
```
这段代码主要是控制步进电机的转动,并且通过改变输出端口的状态来控制步进电机的正反转和步进角度。具体来说:
1. 首先通过判断led的状态来确定步进电机的旋转方向,led为0代表正转,led为1代表反转;
2. 对于正转的情况,根据flag1的值依次控制输出端口ABCD的状态,具体控制方式是:AB相正转、BC相正转、CD相正转、DA相正转。然后通过改变flag1的值来控制步进电机的状态(也就是控制输出端口的状态);
3. 对于反转的情况,需要先判断步进电机是否在原点(也就是tou的值是否为0),如果不在原点,则根据flag1的值依次控制输出端口ABCD的状态,具体控制方式是:AB相反转、BC相反转、CD相反转、DA相反转。然后通过改变flag1的值来控制步进电机的状态(也就是控制输出端口的状态),最后改变tou的值来控制步进电机的位置;
4. 最后通过定时器TH0和TL0来控制步进电机的转速,定时器的值为0X3C和0XB0,表示定时50ms。
阅读全文