导航:首页 > 操作系统 > 单片机控制步进电机c程序

单片机控制步进电机c程序

发布时间:2023-07-19 12:54:49

‘壹’ 51单片机C语言程序按键控制步进电机转速

sbit K1=P1^0;
sbit K2=P1^1;
char y=0;
while(1)
{
pangan();
for(i=0;i<4;i++) //4相
{
/*P1=F_Rotation[i]; //输出对应的相 可以自行换成反转表格
Delay(500); //改变这个参数可以调整电机转速
Delay(5000);*/
P1=B_Rotation[i];
Delay(265+y);
P1=F_Rotation[i];
Delay(265+y);

}
}
void pangan()
{
if(K1==0)
{ y++; //加
while(~k1)
}
if(K2==0)
{ y--;
while(~k2); //减
}
}
}
没有下上限 要是调的话 需要判断显示延时时间

‘贰’ 求单片机控制步进电机的C语言程序,急啊

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit KEY1 = P3^2; //步进电机逆时让辩针方向转
sbit KEY2 = P3^3; //步进电机顺时针方向转
sbit KEY3 = P3^4; //步进电机调速
uchar step = 0;
bit AB_flag = 0;
unsigned char code A_Rotation[8]={0x08,0x18,0x10,0x30,0x20,0x60,0x40,0x48}; //顺时针转表格
unsigned char code B_Rotation[8]={0x48,0x40,0x60,0x20,0x30,0x10,0x18,0x08}; //逆时针转表格
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/指滚
void Delay(uint i)
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
void KEY(void)
{
if(KEY1 == 0) //按P3.2,实现步进电机的逆时针转动
{
Delay(15);
if(KEY1 == 0)
{
while(1)
{
if(KEY1 == 1)
{
Delay(15);
if(KEY1 == 1)
{
AB_flag = 0;
break;
}
}
}
}
}
if(KEY2 == 0) //按P3.3,实现步进电机的顺时针转动
{
Delay(15);
if(KEY2 == 0)
{
while(1)
{
if(KEY2 == 1)
{
Delay(15);
if(KEY2 == 1)
{
AB_flag = 1;
break;
}
}
}
}
}
if(KEY3 == 0) //按P3.4,实现步进电机的调速
{
Delay(15);
if(KEY3 == 0)
{
while(1)
{
if(KEY3 == 1)
{
Delay(15);
if(KEY3 == 1)
{
step++;
if(step == 3)
{
step = 0;
}
break;
}
}
}
}
}
}
main()
{
uchar i;
while(1)
{
KEY(); //按键处理函数
for(i=0;i<8;i++) //因为有8路的控制时序
{
if(AB_flag == 0)
{
P1 = A_Rotation[i]; //逆时针转动
}
else
{
P1 = B_Rotation[i]; //顺时针转动
}
Delay(2+step); //改变这个参数可以调坦逗缺整电机转速
}
}
}

‘叁’ 我想用STC12C5A60S单片机控制STI6608驱动步进电机动作,请问C程序怎么写

这个STI6608驱动器输入信号是Pluse+DIR方式控制,可以带2个步进电机。Reset可以置位步进电机到位置1。刚启动是置位1次就可以了。以下编一简单的演示程序:

#include<reg51.h>
#defineucharunsignedchar
#defineuintunsignedchar
sbitpluse1=P1^0;
sbitpluse2=P1^1;
sbitdir1=P1^2;
sbitdir2=P1^3;
sbitreset1=P1^4;
sbitreset2=P1^5;
voiddelay(uinta)
{
uinti;
while(a--)for(i=0;i<1100;i++);
}
main()
{
uinti;
reset1=0;
reset2=0;
delay(1000);
reset1=1;
reset2=1;
while(1)
{
for(i=0;i<4800;i++)
{
pluse1=~pluse1;
dir1=1;
delay(5);
}
for(i=0;i<4800;i++)
{
pluse2=~pluse2;
dir2=1;
delay(5);
}
for(i=0;i<4800;i++)
{
pluse1=~pluse1;
dir1=0;
delay(5);
for(i=0;i<4800;i++)
{
pluse2=~pluse2;
dir2=0;
delay(5);
}
}
}

‘肆’ 用C语言编写单片机驱动步进电机的程序,原理图如下

While(1)

{
P1=8;
delayms(5);
P1=4;
delayms(5);
P1=2;
delayms(5);
P1=1;
delayms(5);
}

‘伍’ 一个51单片机同时控制2个步进电机的C语言程序

#include<reg52.h>
#include<intrins.h>
#define mode 0x81 // 方式0,A口、B口输出,C口高4位输出,低4位输入
# include "stdio.h"
# include "string.h"
# include "math.h"

xdata unsigned char PA _at_ 0x7f00;
xdata unsigned char PB _at_ 0x7f01;
xdata unsigned char PC _at_ 0x7f02;
xdata unsigned char caas _at_ 0x7f03; //控制字
sbit P32=P3^2;
sbit P33=P3^3;
sbit P35=P3^5;
#define uchar unsigned char
#define uint unsigned int
unsigned char h,Pos ;
unsigned int R,NX,NY;
unsigned char key;

code unsigned char KeyTable[] = { // 键码定义
0x0f, 0x0b, 0x07, 0x03,
0x0e, 0x0a, 0x06, 0x02,
0x0d, 0x09, 0x05, 0x01,
0x0c, 0x08, 0x04, 0x00
};

code unsigned char LEDMAP[] = { // 八段管显示码
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
};

unsigned char Code_ ; // 字符代码寄存器

#define PD1 61 // 122/2 分成左右两半屏(122x32)

unsigned char Column;
unsigned char Page_ ; // 页地址寄存器 D1,DO:页地址
unsigned char Code_ ; // 字符代码寄存器

unsigned char Command; // 指令寄存器
unsigned char LCDData; // 数据寄存器

xdata unsigned char CWADD1 _at_ 0x1cff; // 写指令代码地址(E1)
xdata unsigned char DWADD1 _at_ 0x1eff; // 写显示数据地址(E1)
xdata unsigned char CRADD1 _at_ 0x1dff; // 读状态字地址(E1)
xdata unsigned char DRADD1 _at_ 0x1fff; // 读显示数据地址(E1)

xdata unsigned char CWADD2 _at_ 0x3cff; // 写指令代码地址(E2)
xdata unsigned char DWADD2 _at_ 0x3eff; // 写显示数进地址(E2)
xdata unsigned char CRADD2 _at_ 0x3dff; // 读状态字地址(E2)
xdata unsigned char DRADD2 _at_ 0x3fff; // 读显示数据地址(E2)

//----------------------液晶-----------------

// 清屏

// ************************ 中文显示程序 ***********************************/

/*************************直线 插 补***************************8*/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=50;y>0;y--);
}

void zhengx()
{
PA=0x00;
delay(10);
PA=0x01;
delay(10);

}
void fux()
{
PA=0x02;
delay(10);
PA=0x03;
delay(10);

}
void zhengy()
{
PB=0x00;
delay(10);
PB=0x10;
delay(10);

}
void fuy()
{
PB=0x20;
delay(10);
PB=0x30;
delay(10);

}
void xian(int NX,int NY)
{int FM, NXY, XOY,ZF,z;
FM=0;
{if(NX>0)
if(NY>0)
XOY=1;
else
XOY=4;
else
if(NY>0)
XOY=2;
else
XOY=3;}

for(NXY= fabs(NX) + fabs(NY)-1;NXY>=0&&P32!=0&&P33!=0;NXY--)
{ {if(NX>0)
if(NY>0)
XOY=1;
else
XOY=4;
else
if(NY>0)
XOY=2;
else
XOY=3;}

for(NXY= fabs(NX) + fabs(NY)-1;NXY>=0;NXY--)
{ if(FM>=0)
{if(XOY==1||XOY==4)

{ZF=1;
zhengx();
}
else
{ZF=2;
fux();

}
FM=FM-fabs(NY);
}
else
{if(XOY==1||XOY==2)
{
ZF=3;
zhengy();

}
else
{ZF=4;
fuy();
}
FM=FM+fabs(NX);
}

}
for(z=0;z<200;z++)
{P35 = 0;
delay(10);
P35 = 1;
delay(10);
}

}
}

/*************************圆 弧 插 补***************************8*/
void yuanhu1( int X0,int Y0, int NX, int NY ,int RNS )
{
int NXY,BS,ZF,XM,YM,z;
int FM=0;
BS=fabs(NX-X0) + fabs(NY-Y0);
XM=fabs(X0);
YM=fabs(Y0);
for(NXY= fabs(NX-X0) + fabs(NY-Y0)-1;NXY>=0&&P32!=0&&P33!=0;NXY--)
{
if(RNS==1||RNS==3||RNS==6||RNS==8)

{
if(FM<0)
{
if(RNS==1||RNS==8)

{ZF=1;
zhengx();

}
else

{ZF=2;
fux();}

FM=FM+2*fabs(XM)+1;
XM=XM+1;

}

else
{
if(RNS==1||RNS==6)
{
ZF=3;
fuy();
}
else

{ZF=4;
zhengy();
}

FM=FM-2*fabs(YM)+1;
YM=YM-1;
}
}
else
if(FM>=0)
{
if(RNS==2||RNS==7)

{ZF=1;
zhengx();
}
else

{ZF=2;
fux();
}

FM=FM-2*fabs(XM)+1;
XM=XM-1;
}
else
{
if(RNS==2||RNS==5)
{ZF=3;
zhengy();}
else
{ZF=4;
fuy();}
FM=FM+2*fabs(YM)+1;
YM=YM+1;
}
}
if(P32==0||P33==0)
{
for(z=0;z<200;z++)
{P35 = 0;
delay(10);
P35 = 1;
delay(10);
}
}

}
int shu1 ()
{
int i=0,j=0,k=3;
while (1)
{
if(testkey())
{ delay(300);
delay1();
if(testkey())
{ j=getkey();
if(j!=14)
{i=i*10 + j;
k--;}
}}
if(k==0)
break;
}
return i;
}
int shu2 ()
{
int i=0,j=0,k=3;
while (1)
{
if(testkey())
{ delay(300);
delay1();
if(testkey())
{ j=getkey();
if(j!=14)
{i=i*10 + j;
k--;}
}}
if(k==0)
break;
}
return i;
}

void yuanhuchabu1()
{ int q=0;
delay(300);
R=shu1();
yj1();

q=R/100;
Page_ = 0x00;
Column = 0x35;
Code_ = q;
WriteCHN8x16();

q=R%100;
q=q/10;
Page_ = 0x00;
Column = 0x40;
Code_ = q;
WriteCHN8x16();

q=R%10;
Page_ = 0x00;
Column = 0x48;
Code_ = q;
WriteCHN8x16();

yuanhu1(R,0,0,R,5);
yuanhu1(0,R,-R,0,6);
yuanhu1(-R,0,0,-R,7);
yuanhu1(0,-R,R,0,8);
}
void yuanhuchabu2()
{ int q=0;
delay(300);
R=shu1();
yj1();

q=R/100;
Page_ = 0x00;
Column = 0x35;
Code_ = q;
WriteCHN8x16();

q=R%100;
q=q/10;
Page_ = 0x00;
Column = 0x40;
Code_ = q;
WriteCHN8x16();

q=R%10;
Page_ = 0x00;
Column = 0x48;
Code_ = q;
WriteCHN8x16();

yuanhu1(0,R,R,0,1);
yuanhu1(R,0,0,-R,4);
yuanhu1(0,-R,-R,0,3);
yuanhu1(-R,0,0,R,2);
}
void xianchabu()
{ int q1=0,q2=0;
delay(300);
NX=shu1();
delay(300);
NY=shu2();
yj2();

Page_ = 0x00;
Column = 0x25;
Code_ = 0x10;
WriteCHN8x16();

q1=NX/100;
Page_ = 0x00;
Column = 0x30;
Code_ = q1;
WriteCHN8x16();

q1=NX%100;
q1=q1/10;
Page_ = 0x00;
Column = 0x37;
Code_ = q1;
WriteCHN8x16();

q1=NX%10;
Page_ = 0x00;
Column = 0x40;
Code_ = q1;
WriteCHN8x16();

q2=NY/100;
Page_ = 0x00;
Column = 0x50;
Code_ =q1;
WriteCHN8x16();

q2=NY%100;
q2=q2/10;
Page_ = 0x00;
Column = 0x58;
Code_ = q2;
WriteCHN8x16();

q2=NY%10;
Page_ = 0x00;
Column = 0x60;
Code_ = q2;
WriteCHN8x16();

Page_ = 0x00;
Column = 0x72;
Code_ = 0x11;
WriteCHN8x16();
xian(NX,NY );
}

void main()

{ int q=0,q1=0,q2=0;
caas=mode;
PA=0X00;
PB=0X00;
PC=0x00;
R=0X00;

while(1)
{
if(testkey())
{
delay1();
if(testKey())
{ delay1();
if(getkey()==15)
{
delay(300);
yuanhuchabu1();
}
else if(getkey()==10)
{ delay(300);
yuanhuchabu2();
}
else if(getkey()==13)
{
xianchabu();
}
else if(getkey()==1)
{
zhengx();
}
else if(getkey()==2)
{
fux();
}
else if(getkey()==3)
{
zhengy();
} else if(getkey()==4)
{
fuy();
}

}
}
if(GetKey()==12)
{ break;}
}

}

‘陆’ 关于51单片机控制步进电机编程(c语言),求助

#include<reg52.h>

#defineucharunsignedchar

#defineuintunsignedint

ucharkey_l,key,i;

ucharcodetemp1[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};

ucharcodetemp2[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};

ucharcodeaa[16]=":";

ucharcodesmg[]="";

sbite=P2^6;

sbitrs=P2^4;

sbitrw=P2^5;

voiddelay(inttt)

{

while(tt--);

}

voidw_cmd(uchardd)

{

rs=0;

rw=0;

e=0;

delay(50);

P0=dd;

e=1;

delay(50);

e=0;

delay(50);

}

voidw_dat(uchardd)

{

rs=1;

rw=0;

e=0;

delay(50);

P0=dd;

e=1;

delay(50);

e=0;

}

voidinit(ucharsmg4[],uchartime[])

{

w_cmd(0x38);

delay(2000);

w_cmd(0x38);

delay(500);

w_cmd(0x38);//注意顺序,设置工作方式,显示模式设置

delay(500);

w_cmd(0x08);//注意顺序,关闭显示

w_cmd(0x01);//清屏

w_cmd(0x07);//光标·画面滚动模式设置

w_cmd(0x0c);//显示及光标模式设置

w_cmd(0x80);//

for(i=0;i<16;i++)

w_dat(time[i]);

w_cmd(0x80+0X40);

for(i=0;i<16;i++)

w_dat(smg4[i]);

}

voidTb(ucharsmg[],ucharn,uchars,ucharl,uchard)

{

unsignedcharm;

w_cmd(0x82);

for(m=n;m<s;m++)

w_dat(smg[m]);

w_cmd(0x80+0X42);

for(m=l;m<d;m++)

w_dat(smg[m]);

}

voidmain()

{

init(aa,aa);

while(1)

{

P1=0xf0;

key_l=P1;

if(key_l!=0xf0)

{

delay(100);

if(key_l!=0xf0)

{

P1=key_l|0x0f;

key=P1;

}

}

switch(key)

{

case0xee:Tb(smg,0,10,11,21);

for(i=0;i<8;i++)

{

P2=temp1[i];

delay(500);

}

break;

case0xde:Tb(smg,0,10,19,29);

for(i=0;i<8;i++)

{

P2=temp1[i];

delay(300);

}

break;

case0xbe:Tb(smg,0,10,30,40);

for(i=0;i<8;i++)

{

P2=temp1[i];

delay(100);

}

break;

case0x7e:P2=0xff;Tb(smg,0,10,39,49);break;

case0xed:Tb(smg,50,60,11,21);

for(i=0;i<8;i++)

{

P2=temp2[i];

delay(200);

}

break;

case0xdd:Tb(smg,50,60,19,29);

for(i=0;i<8;i++)

{

P2=temp2[i];

delay(120);

}

break;

case0xbd:P2=0xff;Tb(smg,50,60,40,50);break;

}

}

}

阅读全文

与单片机控制步进电机c程序相关的资料

热点内容
javamidi编程 浏览:831
android60demo 浏览:65
头条算法怎么复习 浏览:512
灯光控制通道可以编程设置吗 浏览:781
webpack命令行 浏览:805
卸载云服务器操作系统 浏览:29
java文件移动文件夹 浏览:449
针织公斤足称算法 浏览:457
电脑下载的图片从文件夹重新编组 浏览:645
安卓源码编译引导失败 浏览:676
苹果怎么添加自定义app文件夹 浏览:930
橙牛app怎么找客服 浏览:307
php对象魔术方法 浏览:487
OBV能量潮幅图指标源码 浏览:913
编程15个好习惯 浏览:676
电脑u盘文件夹显示屏幕保护程序 浏览:801
我的世界服务器版本怎么下载 浏览:600
c代码加密工具 浏览:358
使用泛型算法的错误 浏览:739
单片机焊接要焊接多少个引脚 浏览:671