求解单片机控制步进电机步数的程序

 我来答
changdacekong
2012-06-27 · TA获得超过362个赞
知道小有建树答主
回答量:463
采纳率:100%
帮助的人:256万
展开全部
下面的程序可以控制步进电机正反转,加减速。至于控制步数稍微改一下就可以,自己看看。
#include<reg52.h>#include<intrins.h>#define uchar unsigned char #define uint unsigned int sbit key1=P3^7;sbit key2=P3^6;sbit key3=P3^5;uchar kz,i=200;uchar zhengzhuan[]={0xf3,0xf9,0xfc,0xf6};uchar fanzhuan[]={0xf3,0xf6,0xfc,0xf9};void delay1ms(uint ms){ uchar i; while(ms--) { for(i = 0; i<10; i++) { _nop_(); _nop_(); _nop_(); _nop_(); } }}
void key(){ if(key2==0) { delay1ms(10); if(key2==0) kz=1; while(!key2) {} } if(key3==0) { delay1ms(10); if(key3==0) kz=2; while(!key3) {} }}void zz()//正转{ uchar a=0,b=20; while(kz==1) { P1=zhengzhuan[a]; a++; if(a>3) a=0; i--;if(i==0)kz=0; if(key1==0) { delay1ms(10); if(key1==0) { kz=0; P1=0xff; while(!key1); } } if(key2==0) { b=b+5; if(b>=240) b=240; while(!key2) { } } if(key3==0) { b=b-5; if(b<=20) b=20; while(!key3) { } } delay1ms(b); }i=200;}void fz()//反转{ uchar a=0,b=20; while(kz==2) { P1=fanzhuan[a]; a++; if(a>3) a=0; if(key1==0) { delay1ms(10); if(key1==0) { kz=0; P1=0xff; } } if(key2==0) { b+=5; if(b>=240) b=240; while(!key2) { } } if(key3==0) { b-=5; if(b<=20) b=20; while(!key3) { } } delay1ms(b); }}void main(){ while(1) { key(); if(kz==0); else if(kz==1) zz(); else fz(); } }
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式