Delay1mS(unsigned int tt) //延时1ms
{
unsigned char i
while(tt--) for(i = 113i >0i--)
}
反复多次调用即可。
但是,用软件腊蚂衫延时,观察起物桐来,就像死机一样,经常会误轮腔事的。
#include<reg52.h>//#include"delay.h" //在本文件中加入一个延时函数,或添加带有延时函数的.c文件
unsigned char code table1[]={0x00,0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}//0x00表示停止转动
//
//bit flag//正反转标志
void delayus(unsigned int t) //延时函数
{
while(--t)
}
void delayms(unsigned int t) //毫秒级延时
{
unsigned int i,j
for(i=ti>0i--)
for(j=110j>0j--)
}
void qudong(unsigned char t,bit flag) // t范围0~4控制转速,flag表示正反转李旅
{
unsigned char zz,i
if(t) // 先判断t是否为0,如果是,就没必要进行下面的判断
{
if(flag) //flag=1为正转
{
switch(t) // 选出几级速度
{
case 1: zz=4break
case 2: zz=3break
case 3: zz=2break
case 4: zz=1break
}
for(i=1i<=8i++)//实现转动
{
P1=table1[i]
delayus(zz*100) //100可以改,晶振不同有所不同,悉档直到感觉转动平滑有力为止
}
}
else
{ switch(t)
{
case 1: zz=4break
case 2: zz=3break
case 3: zz=2break
case 4: zz=1break
}
for(i=8i>=1i--) //反转
{
P1=table1[i]
delayus(zz*100)
}
}
}
else
P1=table1[0]
}
main()
{
unsigned char k,j
while(1)
{
for(k=30k>0k--)
qudong(1,0) /睁扰乱/1表示1级转速,0表示反转,自己改就行了
delayms(500) //延迟500ms
}
}
我是个初学者,有什么错的敬请谅解,如果你也是,那么我们可以交流交流,还有什么不懂接着问就行了
第一,你什么电机?第二,步进电机你是几线几向的?你这都没说清楚让人档键咋写?其实思想很简单,比如你是用PWM写的,就是控制脉冲占空比。
思想都说了,你要代码?
给搭尺你个例子你行枝巧看看就行了,估计直接用是不可能的,接口不同。
// 左轮驱动
void __leftMotorContr (void)
{
static int8 cStep = 0 /* ±£Žæµç»úµ±Ç°Î»ÖÃ*/
switch (__GmLeft.cDir) {
case __MOTORGOAHEAD:/* ÏòÇ°²œœø*/
cStep = (cStep + 1) % 8
break
case __MOTORGOBACK: /* Ïòºó²œœø*/
cStep = (cStep + 7) % 8
break
default:
break
}
switch (cStep) {
case 0: /* A2B2*/
GPIOPinWrite(GPIO_PORTD_BASE,
__PHLA1 | __PHLA2 | __PHLB1 | __PHLB2,
__PHLA1 | __PHLA2 | __PHLB1 | __PHLB2)
break
case 1: /* B2 */
GPIOPinWrite(GPIO_PORTD_BASE,
__PHLA1 | __PHLA2 | __PHLB1 | __PHLB2,
__PHLB1 | __PHLB2)
break
case 2: /* A1B2*/
GPIOPinWrite(GPIO_PORTD_BASE,
__PHLA1 | __PHLA2 | __PHLB1 | __PHLB2,
__PHLA2 | __PHLB1 | __PHLB2)
break
case 3: /* A1 */
GPIOPinWrite(GPIO_PORTD_BASE,
__PHLA1 | __PHLA2 | __PHLB1 | __PHLB2,
__PHLA2)
break
case 4: /* A1B1*/
GPIOPinWrite(GPIO_PORTD_BASE,
__PHLA1 | __PHLA2 | __PHLB1 | __PHLB2,
__PHLA2 | __PHLB2)
break
case 5: /* B1 */
GPIOPinWrite(GPIO_PORTD_BASE,
__PHLA1 | __PHLA2 | __PHLB1 | __PHLB2,
__PHLB2)
break
case 6: /* A2B1*/
GPIOPinWrite(GPIO_PORTD_BASE,
__PHLA1 | __PHLA2 | __PHLB1 | __PHLB2,
__PHLA1 | __PHLA2 | __PHLB2)
break
case 7: /* A2 */
GPIOPinWrite(GPIO_PORTD_BASE,
__PHLA1 | __PHLA2 | __PHLB1 | __PHLB2,
__PHLA1 | __PHLA2)
break
default:
break
}
}
// 右轮驱动同理
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)