我的一个51单片机 ULN2003A驱动5线4相的步进电机 找了半天还是不知道哪里错 总是不转动

#include<reg51.h>
#define uchar unsigned char
sbit jia_key=P3^6;
sbit jian_key=P3^7;
uchar num=0;
uchar code table[]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6};
void delay(uchar i)
{
uchar j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--)
}

void key();
{
if(jia_key==0)
{
delay(5);
if(jia_key==0)
{
num++;
if(num==8)
num=7;
while(jia_key==0);
}
}
if(jian_key==0)
{
delay(5);
if(jian_key==0);
{
if(num!=0)
num--;
else
num=0;
while(jian_key==0);
}
}
}

void dispose();
{
switch(num);
{
case 0:
shu=1;
break;
case 1:
shu=2;
break;
case 2:
shu=3;
break;
case 3:
shu=4;
break;
case 4:
shu=5;
break;
case 5:
shu=6;
break;
case 6:
shu=7;
break;
case 7:
shu=8;
break;
}
}

void qudong()
{
uchar j,i;
for(j=0;j<8;j++)
{
P1=table[j];
for(i=0;i<shu;i++)
{
delay(20);
}
}
}

void main()
{
while(1)
{
key();
dispose();
qudong();
}
}

第1个回答  2011-07-30
电机驱动有讲究的,最好的办法就是用示波去去跟踪脉冲,看你是想走八拍的,如果你没做过,可以先走4拍试试,如果有脉冲,你就看一下是不是频率太高了,来不及反应。追问

4拍我试过 还是不行 4拍就是改几个数据的 用过

第2个回答  2011-07-30
void dispose();
{
switch(num); //这里不应该有分号“;”。
{
……追问

改掉了还是不行 急用啊

本回答被提问者采纳
第3个回答  2012-03-09
shu明显没有定义成全局变量么==
第4个回答  2011-07-30
这种情况要附图的 无图无真相追问

用的低4位P1口传送数据 是51开发板 所以应该不用图吧 直接写程序就可以上开发板了

我的一个51单片机 ULN2003A驱动5线4相的步进电机 找了半天还是不知道哪...
电机驱动有讲究的,最好的办法就是用示波去去跟踪脉冲,看你是想走八拍的,如果你没做过,可以先走4拍试试,如果有脉冲,你就看一下是不是频率太高了,来不及反应。

...一个按键实现步进电机的正反转?驱动芯片用的是ULN2003A
在程序里定义一个位变量flag,按下按键时对它取反,若flag为1则正转,为0则反转,就可以了

请问能用ULN2003A控制24V的步进电机吗???控制器是AT889S52单片机。步进...
完全可以的哦 不用耦合的 ULN2003的 IN端接单片机的引脚 OUT步进电机 2003的公共端COM接到24v 这样就可以控制了的 2003本来是个复合的达林顿管子 内部就相当于耦合了 专门可以用来驱动低于50V的负载的 你找个ULN的数据手册看看典型应用就知道怎么用了 ...

相似回答
大家正在搜