求一个关于用51单片机设计一个步进电单片机控制系统设计的代码

还没有帐号? 赶紧
用户版块帖子
求指导 51单片机控制 57步进电机
UID:1120115
在线时间905小时
M币579专家4
求指导 51单片机控制 57步进电机 手头有51单片机最小系统下载数据线57步进电机+驱动器+24V电源驱动这个57步进电机就是 一个口给脉冲,就可以转了,然后正反转给高低电平就可以了关键是这个脉冲的问题 然后,我自己写了一个程序,不行 void delay(uint z)&&&&//延时{&&&&uint x,y;&&&&for(x=z;x&0;x--)&&&&&&&&for(y=10;y&0;y--);}void main(){&&while(1){maichong=~delay(5);}} 改delay(里面的数值)可以改变转速,但是刻刻刻的,抖动,感觉我的这个想法有问题求指导,网上搜索了一下,没有找到适当的答案,在此发帖求助 初学者 ,有个例子,有注释,最好理解了,也方便后人,再次谢谢各位点击进来的人 如果是单片机不行的话,问一下C 这个行不行,这个单片机有,但是还不会玩STM8 103 这个单片机也有,但是也不会玩,这个是公司的产品电路板,可以写程序玩玩,但是端口部分引出
UID:828209
在线时间1431小时
M币4112专家84
灌水-------------------------u哦发哦N年以前写的步进电机测试程序,可以供楼主可以参考参考#include&reg52.h&#define uchar unsigned char#define uint unsigned intsbit CP=P1^4;&&&&&&&&&& //脉冲输出sbit DIR=P1^5;&&&&&&&& //方向控制sbit enable=P1^6;&&&& //松电机或紧电机sbit key_dir=P3^3;&&&&//正反转按键sbit key_up=P3^4;&&&&&&//转速增加按键sbit key_down=P3^2;&&&& //转速降低按键sbit key_en=P2^7;&&&&&&&& //使能驱动器按键sbit lcd_rs=P3^7;&& //LCD1602 Portsbit lcden=P3^5;sbit lcd_rw=P3^6;uchar table1[]=&SPEED:&;uchar table2[]=&DIR:&;uchar table3[]=&ENABLE &;uchar table4[]=&DISABLE&;uchar table5[]=&HAND&& &;uchar num=0,num1=0,speed=140,aa=0;uchar temp=12;void delay(uint x){&&&&uint a,b;&&&&for(a=x;a&0;a--)&&&&&&&&for(b=10;b&0;b--); }void delay1(uint z){&&&&uchar i,j;&&&&for(i=z;i&0;i--)&&&& for(j=110;j&0;j--);}void write_com(uchar com)&&&& //写命令,RS=0{&&&&P0=&&&&lcd_rs=0;&&&&lcden=0;&&&&delay(10);&&&&lcden=1;&&&&delay(10);&&&&lcden=0;&&&&}void write_data(uchar dat)&&&&&& //写数据,RS=1{&&&&P0=&&&&lcd_rs=1;&&&&lcden=0;&&&&delay(10);&&&&lcden=1;&&&&delay(10);&&&&lcden=0;&&&&}void init_LCD(){&&&&lcd_rw=0;&&&&write_com(0x38);&& //显示模式设置:16×2显示,5×7点阵,8位数据接口&&&&delay(20);&&&&write_com(0x0c);&& //显示模式设置&&&&delay(20);&&&&write_com(0x06);&& //显示模式设置:光标右移,字符不移&&&&delay(20);&&&&write_com(0x01);&& //清屏幕指令,将以前的显示内容清除&&&&delay(20);&&&&}void keyscan(){&&&&if(key_dir==0)&&&&{&&&&&&&&delay1(5);&&&&&&&&if(key_dir==0)&&&&&&&&{&&&&&&&&&&&&while(!key_dir);&&&&&&&&&&&&delay1(10);&&&&&&&&&&&&while(!key_dir);&&&&&&&&&&&&&&&&&&&&&&&&num++;&&&&&&&&&&&&if(num==2)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&num=0;}}}&&&&if(key_en==0)&&&&{&&&&&&&&delay1(5);&&&&&&&&if(key_en==0)&&&&&&&&{&&&&&&&&&&&&while(!key_en);&&&&&&&&&&&&delay1(10);&&&&&&&&&&&&while(!key_en);&&&&&&&&&&&&&&&&&&&&&&&&num1++;&&&&&&&&&&&&if(num1==3)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&num1=0;}}}&&&&if((key_down==0)&&((num1==0)||(num1==1)))&&&&{&&&&&&&&delay1(5);&&&&&&&&if((key_down==0)&&((num1==0)||(num1==1)))&&&&&&&&{&&&&&&&&&&&&while(!key_down);&&&&&&&&&&&&delay1(10);&&&&&&&&&&&&while(!key_down);&&&&&&&&&&&&&&&&&&&&&&&&speed+=10;&&&&&&&&&&&&temp--;&&&&&&&&&&&&if(temp&=1)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&temp=1;}&&&&&&&&&&&&&&&&&&&&&&&&&&&&if(speed&=240)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&speed=240;}}}&&&&if((key_up==0)&&((num1==0)||(num1==1)))&&&&{&&&&&&&&delay1(5);&&&&&&&&if((key_up==0)&&((num1==0)||(num1==1)))&&&&&&&&{&&&&&&&&&&&&while(!key_up);&&&&&&&&&&&&delay1(10);&&&&&&&&&&&&while(!key_up);&&&&&&&&&&&&speed-=10;&&&&&&&&&&&&temp++;&&&&&&&&&&&&if(temp&=24)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&temp=24;}&&&&&&&&&&&&if(speed&=20)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&speed=20;}}}}void display(uchar date){&&&&uchar shi,&&&&shi=date/10;&&&&ge=date%10;&&&&write_com(0x80+0x07);&&&&write_data(0x30+shi);&&&&write_data(0x30+ge);}void main(){&&&&&&&&init_LCD();&&&&DIR=1;&&&&enable=0;&&&&TMOD=0x01;&&&&&&&& //模式设置,,可见采用的是定时器0,工作与模式1(M1=0,M0=1)。&&&&TR0=1;&&&&&&&&&&&& //打开定时器&&&&TH0=0X&&&&&&&& //定时器设置,每隔100微秒发起一次中断。&&&&TL0=0X&&&&ET0=1;&&&&&&&&&&&& //开定时器0中断&&&&EA=1;&&&&&&&&&&&& //开总中断&&&&&&&&&&&&while(1)&&&&{&&&&&&&&keyscan();&&&&&&&&&&&&&&&&&&&&write_com(0x80);&&//设置所要显示字符的位置为第一行第一列&&&&ss=0;&&&&while(table1[ss]!='\0')&&&&//只要没有写到结束标志,就继续写&&&&&&&&{&&&&&&&&&&&&&&&&&&&&//这是写字符的第一种方法,用while循环。&&&&&&&&write_data(table1[ss]);&&&&&&&&ss++;&&&&&&&&}&&&&write_com(0x80+0x40);&&//设置第二行首字符显示的位置,为第二行,第一列&&&&ss=0;&&&&for(ss=0;ss&4;ss++)&&&&&& //总共要显示13个字符,故循环十三次。&&&&{&&&&&&&&&&&&&&&&&&&&&& //这是写字符的第二种方法,用for循环&&&&write_data(table2[ss]);&&&&delay(10);&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&if(num==0)&&&&&&&&{&&&&&&&&&&&&DIR=0;&&&&write_com(0x80+0x40+0x05);&&&&write_data(0x30);}&&&&&&&&&&&&&&&&if(num==1)&&&&&&&&{&&&&&&&&&&&&DIR=1;&&&&write_com(0x80+0x40+0x05);&&&&write_data(0x31);&& }&&&&&&&&&& if(num1==0)&&&& {&&&&&&&& enable=0;&&&&&&&& TR0=1;&&&&&&&& &&&&&&&&&&&&&&&&&&write_com(0x80+0x40+0x09);&&&&&&&& ss=0;&&&&&&&& for(ss=0;ss&7;ss++)&&&&&&&&&&&& {&&&&write_data(table4[ss]);&&&&&&&& }}&&&&&&&&&&&& &&&& if(num1==1)&&&& {&&&&&&&& enable=1;&&&&&&&& &&&&&&&&&&write_com(0x80+0x40+0x09);&&&&&&&& ss=0;&&&&&&&& for(ss=0;ss&7;ss++)&&&&&&&&&&&& {&&&&write_data(table3[ss]);&&&&&&&& }&&&&&&&& }&&&&&& if(num1==2)&&&& {&&&&&&&& enable=1;&&&&&&&& TR0=0;&&&&&&&& &&&&&&&&&&write_com(0x80+0x40+0x09);&&&&&&&& ss=0;&&&&&&&& for(ss=0;ss&7;ss++)&&&&&&&&&&&& {&&&&write_data(table5[ss]);&&&&&&&& }&&&&&&&&&&&& if((key_up==0)&&(num1==2))&&&&&&&& {&&&&&&&&&&&& delay1(5);&&&&&&&&&&&& if((key_up==0)&&(num1==2))&&&&&&&&&&&& {&&&&&&&&&&&&&&&& TR0=1;&&&&&&&&&&&&&&&& DIR=1;&&&&&&&&&&&&&&&&&&&& write_com(0x80+0x40+0x05);&&&&&&&&&&&&write_data(0x31);&&&&&&&&&&&&&&&& while(!key_up);}&&&&&&else&&&&&&&&&&&&{&&&&&&&&&&&&&&&&TR0=0;}}&&&&&&&&&&&&&&&& if((key_down==0)&&(num1==2))&&&&&&&& {&&&&&&&&&&&& delay1(5);&&&&&&&&&&&& if((key_down==0)&&(num1==2))&&&&&&&&&&&& {&&&&&&&&&&&&&&&& TR0=1;&&&&&&&&&&&&&&&& DIR=0;&&&&&&&&&&&&&&&&&&write_com(0x80+0x40+0x05);&&&&&&&&&&&&write_data(0x30);&&&&&&&&&&&&&&&& while(!key_down);&&&&&&&&&&&&&&&& }&&&&&&else&&&&&&&&&&&&{&&&&&&&&&&&&&&&&TR0=0;}}} display(temp);&&}}void time0() interrupt 1{&&&&TH0=0X&&&&TL0=0&&//b4&&&&aa++;&&&&if(aa==speed)&&&&{&&&&&&&&CP=0;&&&&&&&&aa=0;}&&else&&&&{&&&&&&&&CP=1;&&&&}}
UID:1120115
在线时间905小时
M币579专家4
:灌水-------------------------u哦发哦#include&reg52.h&#define uchar unsigned char#define uint unsigned int....... ( 23:47) 大神,这个是啥?啥意思
UID:828209
在线时间1431小时
M币4112专家84
回 xuehai0405 的帖子
:大神,这个是啥?啥意思 ( 23:49) 89C51单片机用的代码第一句是头文件第2,3句是宏定义好久不摸51单片机了,代码我也不怎么看得懂了,更何况没有注释1602数据口是P0口,不要显示的话不用1602也可以的你要转电机的话,把代码复制过去编译,下载HEX文件进单片机就行,接口也告诉你了,把电路做好就可以测试转电机了
UID:1120115
在线时间905小时
M币579专家4
:89C51单片机用的代码第一句是头文件第2,3句是宏定义 ( 23:55) 这个是发脉冲的吗
UID:826661
在线时间1102小时
M币1044专家5
不知道你的晶振是多大的,但是看你的延时貌似不太合适,速度太高了。步进电机非常容易丢步,刚开始的时候最好速度慢点,延时几十毫秒都不为过。以前我用H桥驱动步进电机的时候,延时最短也要10毫秒的样子。顺便提醒一下,你的驱动模块配置好了吗?比如,方向,使能之类的引脚
UID:1528757
在线时间975小时
M币-411专家8
这个你用的是什么驱动片子,在编程的时候最好有加速表,这样的话可以很好的加速而且不丢不,是步是呢
UID:1641309
在线时间730小时
M币1629专家1
步进电机带了环形分配器的吗?可以直接单相脉冲控制?
UID:1641309
在线时间730小时
M币1629专家1
或者驱动与步进电机不配套
UID:1327556
在线时间269小时
M币2321专家3
丢步了,把延时写长点,把步进电机驱动器上的细分设小点。
访问内容超出本站范围,不能确定是否安全
“新手上路”发帖需审核后才能显示(请认真发帖),达到数码9级后取消此限制
您目前还是游客,请
&回复后跳转到最后一页
Code by , Time now is:06-30 13:36, Total 0.160815(s) query 11,
Gzip enabled& 上传我的文档
 下载
 收藏
粉丝量:88
该文档贡献者很忙,什么也没留下。
 下载此文档
毕业论文:基于89C51单片机的步进电机控制系统设计
下载积分:3000
内容提示:毕业论文:基于89C51单片机的步进电机控制系统设计
文档格式:DOC|
浏览次数:643|
上传日期: 00:19:31|
文档星级:
全文阅读已结束,如果下载本文需要使用
 3000 积分
下载此文档
该用户还上传了这些文档
毕业论文:基于89C51单片机的步进电机控制系统设计
关注微信公众号51鍗曠墖鏈烘

我要回帖

更多关于 单片机步进电机 的文章

 

随机推荐