步进电机的的控制以及数码管显示档位和转速.docx_第1页
步进电机的的控制以及数码管显示档位和转速.docx_第2页
步进电机的的控制以及数码管显示档位和转速.docx_第3页
步进电机的的控制以及数码管显示档位和转速.docx_第4页
步进电机的的控制以及数码管显示档位和转速.docx_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/*本例程主要实现步进电机的的控制以及数码管显示档位和转速*/*S6档位调节 S7暂停并且查看转速 S8正转 S9逆转 * /*数码管第一位显示档位 后四位显示转速*/*发现的问题:由于数码管显示的延时过多,如果让数码管同步显示转速,会出现一闪一闪的现象。我将会考虑用中断定时解决这 个问题。 #includetypedef unsigned char uchar;typedef unsigned int uint;#define t 5#define one 2 /这里只是用了简单的延时函数,一般用中断比较准确/*根据延时算转速:本电机的的步距角为5.625度,减速比为64,设定为ONE时,算出转速:延时为2ms,即2ms/脉冲/* 所以60000ms/30000个脉冲 即1分钟/30000个脉冲 ,由于一个脉冲一个步距角,即1分钟/30000*5.625度=168780度/*即1分钟/168780/360圈,所以468.83圈/分钟(内部),所以(外部)真正看到转速应为468.83/64圈=7.32圈/分钟 #define two 5 /计算得转速为2.93rpm#define three 10 /计算得转速为1.46rpm#define four 30 /计算得转速为0.49rpmuchar temp,num,grade=5; / 设定档bit clockwise=1; / 设定顺时针bit startstop=0; / 设定停止位sbit dula=P26;sbit wela=P27;unsigned char code table0=0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08; /正转表unsigned char code table1=0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09; /反转表uchar code table2=0x06,0x07,0x80,0x4f, 0x5b ; /一档uchar code table3=0x5b,0x5b ,0x80,0x6f, 0x4f; /二档uchar code table4=0x4f ,0x06,0x80, 0x66,0x7d; /三档uchar code table5=0x66,0x3f,0x80, 0x66, 0x6f; /四档/*延时函数MS*void delay(unsigned char z) unsigned int x,y; for(x=z;x0;x-) for(y=110;y0;y-); /*数码管显示*void display() if(grade=2) /一档 dula=1; P0=table20; dula=0; P0=0xfe; wela=1; delay(5); P0=0xff; wela=0; dula=1; P0=table21; dula=0; P0=0xfb; wela=1; delay(5); P0=0xff; wela=0; dula=1; P0=table22; dula=0; P0=0xf7; wela=1; delay(5); P0=0xff; wela=0; dula=1; P0=table23; dula=0; P0=0xef; wela=1; delay(5); P0=0xff; wela=0; dula=1; P0=table24; dula=0; P0=0xdf; wela=1; delay(5); P0=0xff; wela=0; if(grade=5) /二档 dula=1; P0=table30; dula=0; P0=0xfe; wela=1; delay(5); P0=0xff; wela=0; dula=1; P0=table31; dula=0; P0=0xfb; wela=1; delay(5); P0=0xff; wela=0; dula=1; P0=table32; dula=0; P0=0xf7; wela=1; delay(5); P0=0xff; wela=0; dula=1; P0=table33; dula=0; P0=0xef; wela=1; delay(5); P0=0xff; wela=0; dula=1; P0=table34; dula=0; P0=0xdf; wela=1; delay(5); P0=0xff; wela=0; if(grade=10) /三档 dula=1; P0=table40; dula=0; P0=0xfe; wela=1; delay(5); P0=0xff; wela=0; dula=1; P0=table41; dula=0; P0=0xfb; wela=1; delay(5); P0=0xff; wela=0; dula=1; P0=table42; dula=0; P0=0xf7; wela=1; delay(5); P0=0xff; wela=0; dula=1; P0=table43; dula=0; P0=0xef; wela=1; delay(5); P0=0xff; wela=0; dula=1; P0=table44; dula=0; P0=0xdf; wela=1; delay(5); P0=0xff; wela=0; if(grade=30) /四档 dula=1; P0=table50; dula=0; P0=0xfe; wela=1; delay(5); P0=0xff; wela=0; dula=1; P0=table51; dula=0; P0=0xfb; wela=1; delay(5); P0=0xff; wela=0; dula=1; P0=table52; dula=0; P0=0xf7; wela=1; delay(5); P0=0xff; wela=0; dula=1; P0=table53; dula=0; P0=0xef; wela=1; delay(5); P0=0xff; wela=0; dula=1; P0=table54; dula=0; P0=0xdf; wela=1; delay(5); P0=0xff; wela=0; /*键盘扫描*void keyscan() P3=0xfe; /扫描第一行 temp=P3; temp=temp&0xf0; if(temp!=0xf0) delay(t); temp=P3; temp=temp&0xf0; if(temp!=0xf0) temp=P3; switch(temp) case 0xee: /调节档速 num+; if(num=1)grade=one; if(num=2)grade=two; if(num=3)grade=three; if(num=4)grade=four; num=0; break; case 0xde: startstop=0;break; /停止 case 0xbe: clockwise=1;startstop=1;break; /正转 case 0x7e: clockwise=0;startstop=1;break; /逆转 while(temp!=0xf0) temp=P3; temp=temp&0xf0; /*电机运转方式*void stepmotor() char i,r; while(clockwise & startstop) /正转 keyscan(); for(i=0;i8;i+) /一轮通电 P1=table0i; delay(grade);/通过延时改变速度 while(!clockwise & startstop) /反转 k

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论