51单片机控制的步进电机C语言程序_第1页
51单片机控制的步进电机C语言程序_第2页
51单片机控制的步进电机C语言程序_第3页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、51单片机控制的步进电机 C语言程序用的是L298驱动的 和ULN2003 样,你把它换成 2003就行拉#i nclude un sig ned char codetable=0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9,0x00,0xf1,0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0x f3,0x00。un sig ned char temp,temp_old。un sig ned char key 。un sig ned char i,j,k,m,s 。void delay(i nt ifor(m=i 。 m0。 m-for(j=250

2、。j0 o j-for(k=10 o k0 o k-。void saomiao(P3=0xff oP3_4=0 otemp=P3 otemp=temp&0 x0f 。if(temp!=0x0ffor(i=50 o i0。i-for(j=200 o j0 o j- otemp=P3 otemp=temp&0 x0f 。if(temp!=0x0ftemp=P3 otemp=temp&0x0f。switch(tempcase 0x0e:key=1 obreak 。case 0x0d:key=2 。break 。case 0x0 b:key=3 。break 。case 0x07:key=4 。bre

3、ak 。temp=P3 。temp=temp&0 x0f 。 while(temp!=0x0f temp=P3 。temp=temp&0x0f。P3=0xff。P3_5=0 。 temp=P3 。temp=temp&0 x0f 。if(temp!=0x0ffor(i=50 。 i0。 i- for(j=200 o j0。 j-。 temp=P3 o temp=temp&0 x0f 。 if(temp!=0x0ftemp=P3 otemp=temp&0x0f。switch(tempcase 0x0d:key=5 。break 。case 0x0 b:key=6 。break 。case 0x07

4、:key=7 。break 。temp=P3 o temp=temp&0 x0f 。 while(temp!=0x0ftemp=P3。 temp=temp&OxOf 。 void mai n(voidwhile(1saomiao( 。if(key=1 P1=0。P2=0。saomiao( 。if(key=2 temp_old=key 。 for(s=0 。 s P2=tables。P1_4=0 。 delay(13 。 saomiao( 。 if(key!=temp_oldP1_4=1 。 break 。if(key=3 temp_old=key 。 for(s=0 。 s P2=tables

5、。P1_5=0 。 delay(5 。 saomiao( 。 if(key!=temp_oldP1_5=1 。break。if(key=4temp_old=key 。for(s=0 。 s P2=tables。P1_6=0 。delay(20 。 saomiao( 。 if(key!=temp_oldP1_6=1 。break 。if(key=5temp_old=key 。for(s=9 。 s P2=tables。P1_7=0 。delay(13 。 saomiao( 。 if(key!=temp_oldP1_7=1 。break 。if(key=6temp_old=key 。for(s=9

6、 。 s P2=tables。P1_5=0 。delay(5 。saomiao( 。if(key!=temp_oldP1_5=1 。break 。if(key=7temp_old=key 。for(s=9 。 s P2=tables。P1_6=0 。delay(20 。saomiao( 。if(key!=temp_oldP1_6=1 。break 。C语言程序源代码#i nclude / 51 寄存器定义#i nclude in tri ns.h#define control P1 P1_0:A 相,P1_1:B 相,P1_2:C 相,P1_3:D 相#defi ne discode P0 /

7、 显示代码控制端口#defi ne uchar un sig ned char / 定义无符号型变量#defi ne uint un sig ned intsbit en_dm=P3A0 。/显示代码锁存控制sbit en_wk=P3A1 。/位控锁存控制uchar code corotation4= 0x03,0x06,0x0c,0x09。 / 电机正转uchar code rollback4=0x0c,0x06,0x03,0x09。/ 电机反转。显示字段uchar code tab10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f ui

8、nt code Levspeed5=500,400,300,200,100。/ 电机速度等级uchar Hscan,speedcount。 /Hscan 行扫描,speedcount 速度等级计数uint uu。/频率计数uint step,setstep 。 /step :电机步伐计数,setstep :手动设置电机步伐uint speed=500 。 /电机初始速度uchar count。uchar flag5。uchar butcount 。/按键次数*flag0正转标志flag1反转标志flag2加速标志flag3减速标志flag4设置标志*Delay1mS(u nsig ned in

9、t tt / 延时1msDelaylmS延时子程序,用循环语句延时。unsigned char i 。while(tt-for(i=113。i0。i-。keyscan( /键盘扫描“keyscan键盘扫描子程序,用于寻找是否有按键按下。P2=0xf0。/把oxfe赋值给P2 口 /将按键控制口置于未按键的状态.单片机输出/ 口假设不是按键按下状态if(P2!=0xf0 /如果P2 口的值不等于Oxfe /检查是否有按键按下如果有,处理内的事/有按键按下Delay1mS(150 。调用延时函数/有按键按下,避开无效读码值的时间.,或者是脉冲长度Hscan=0xfe 。/将Hscan赋值,初始遥控

10、值是要置高电平的P2=Hscan 。/while(Hscan&0x10!=0 / 检查X10 口是否有键按下。未按下是1,/在这显示出你的按键口是P2_4.即检查P2_4是高电平,无/键按下,低电平有键按下。P2=Hscan 。if(P2 &0xf0!=0xf0 /检查按键脉冲是否是变化,return P2 。else Hscan=(Hsca*|0x01。 /这里在存码值,应该是遥控输入。将码值存入Hscan/这里是读取码值的关键,如果来的脉冲不管是高电平还是低电平,靠左 移一位保存脉冲的状态值else return 0 。key_val( /按键处理函数/这里是读取将存好的码值进行处理看是什

11、么代码值uchar key。key= keyscan( 。 /这里是读取码值并存放在key里switch(key /这里是对比读取的码值case Oxee: /按键7读取的码值=OxEE,则是按键 “的代码while(P2=0xee。setstep=setstep*10+7 。 步伐数/这里是输入” setstep+7步伐数对比读取的码值, /setstep原来可能是有数字的。step=setstep 。butcount+ 。/计数,看输入拉几个数字if(butcount=5/输入的数字超过 5个就置0,无效butco un t=0。setstep=0 。break 。case 0xde: /

12、按键8读取的码值=0xdE,则是按键 “的代码/其他同” 7”while(P2=0xde。setstep=setstep*10+8 。butco un t+ 。step=setstep 。if(butco un t=5butco un t=0。setstep=0 。break 。case 0xbe: / 按键9同上 ” 7”/while(P2=0xbe 。setstep=setstep*10+9 。butco un t+ 。step=setstep 。if(butco un t=5butco un t=0。setstep=0 。break 。case 0x7e: /按键 正转/正转按键识别while(P2=0x7e 。/等待按键松开一值按住电机是不转的,放开后才转有检查/P2 口的状态值flag0=0xff 。/开启正转标志,关闭反转置正转标志flag1=OxOO。/清除反转标志butcount=0。speedcount=0 。speed=500 。/置电机的转速if(!flag4 step=0 。TR0=1。break 。case 0xed: / 按键 4同上 ” 7” while(P2=0xed 。setstep=setstep*10+4 。 butco un t+

温馨提示

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

评论

0/150

提交评论