本文共 1467 字,大约阅读时间需要 4 分钟。
#include#include unsigned char code z[]={ 0x02,0x06,0x04,0x0c,0x08,0x09,0x01,0x03//315,270,225......360(0)};//八拍unsigned char code f[]={ 0x01,0x09,0x08,0x0c,0x04,0x06,0x02,0x03//45,90,145......360(0)};sbit K1 = P3^0;//定义正转按钮sbit K2 = P3^1;//定义反转按钮sbit K3 = P3^2;//定义停止按钮void zz(unsigned char n);void fz(unsigned char n);void delay();void step();void main(){ unsigned char N = 1;//由于设定好了转一圈的数据,所以N在此设定为转多少圈。 TMOD=0X10; TL1=0XF0; TH1=0XD8; EA=0; ET1=0;//这里没有使用定时器中断,这里只是使用定时器的定时功能。 zz(N); delay(); fz(N); while(1) { if(K1 == 0) { while(1) { P0 = 0xfe; zz(N); if(K3 == 0||K2==0) break; } } else if(K2 == 0) { while(1) { P0 = 0xfd; fz(N); if(K3 == 0||K1==0) break; } } else { P0 = 0xfb; P1 = 0x03; } }}void zz(unsigned char n)//正转{ unsigned char i,j; for(i=0;i
1.程序中用到的延时,这个根据自己的习惯,可以写相对应的函数延时,但是由于电机转的过程中的延时,就我上文中for循环里面的定时10ms,这个是根据实际情况来调的,理论上来说,使用proteus仿真的电机延时最低是1ms,如果低于1ms实验起来,不会看到自己编写代码的理想结果。
2.步距角的不同,那么想要电机转一圈,执行zz或者fz函数的参数就要有所不同。以我上面程序为例。 八拍转一个循环,转过360度,步距角是90°。 那么步距角是45°时,要想转过360°,那么就需要16拍。 这里需要各位自己去修改程序去实验,这里只提供一个提醒。如果超过256拍的话,那么unsigned char是不够你玩的,需要unsigned int。转载地址:http://bnjzk.baihongyu.com/