基于单片机的步进电机转速控制_第1页
基于单片机的步进电机转速控制_第2页
基于单片机的步进电机转速控制_第3页
基于单片机的步进电机转速控制_第4页
基于单片机的步进电机转速控制_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

电子器件市场调研与系统设计实践报告电子器件市场调研与系统设计实践评语:考勤(10)守纪(10)过程(40)报告(30)答辩(10)总成绩(100)专业:***班级:姓名:学号:指导教师:****大学****学院****年**月**日附录A实物图附录B源程序#include<reg51.h>#defineucharunsignedchar#defineuintunsignedint#defineledP0//数码管段选#definehahaP2sbits1=P1^0;sbits2=P1^1;sbits3=P3^0;sbits4=P3^1;//按键定义,s1正转,s2反转,s3加1,s4减1sbitwei3=P2^3;sbitwei2=P2^2;sbitwei1=P2^1;sbitwei0=P2^0;//数码管位选定义sbita=P2^7;sbitb=P2^6;sbitc=P2^5;sbitd=P2^4;//脉冲信号输入端定义ucharcodedisplay[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//共阳数码管驱动信号09,不显示ucharcodetime_counter[10][2]={{0xda,0x1c},{0xde,0xe4},{0xe1,0xec},{0xe5,0xd4},{0xe9,0xbc},//9.71ms {0xed,0xa4},{0xf1,0x8c},{0xf5,0x74},{0xf9,0x5c},{0xfc,0x18}};ucharcodequdong[8]={0x80,0xc0,0x40,0x60,0x20,0x30,0x10,0x90}; ucharnum1=0;//控制取励磁信号变量 ucharnum2=8;uchark=1;//加减档位控制,1为最小档bitflag1=0;//初始正转,正反转标志ucharbuf[4]={0,10,10,1};//数码管显示缓存,正转,不显示,不显示,显示1档位,高低//================================定时器0/1初始化函数================================voidT0_T1_init(){ TMOD=0x11;//定时器0/1均工作于方式1,16位计时方式 TH0=(65536-4000)/256; TL0=(65536-4000)%256;//定时器0,定时4ms用于数码管扫描显示 TH1=time_counter[k-1][0]; TL1=time_counter[k-1][1];//定时器1,定时10ms用于步进电机转速控制 TR0=1; TR1=1; ET0=1; ET1=1;//开定时器中断 EA=1;//开总中断}//================================ms级延时函数=======================================voiddelay1m(uintx){uinti,j;for(i=0;i<x;i++)//连数x次,约xms for(j=0;j<120;j++);//数120次,约1ms}//================================主函数=============================================voidmain(){ T0_T1_init(); buf[1]=10;//不显示 while(1) { if(s1==0) { delay1m(3); if(s1==0) { flag1=0;//正转 buf[0]=0;//最高位显示0 haha=0x00;//停止 { k--; if(k==0) { k=10; } buf[2]=k/10; buf[3]=k%10; } flag1=1;//反转 buf[0]=1;//最高位显示1 haha=0x00;//停止 } while(!s2); } if(s3==0) //速度加1档 { delay1m(3); if(s3==0) { k++; if(k>10) { k=1; } buf[2]=k/10; buf[3]=k%10; } while(!s3); } if(s4==0) //速度减1档 { delay1m(3); if(s4==0) { k--; if(k==0) { k=10; } buf[2]=k/10; buf[3]=k%10; } while(!s4); } }}//==================================定时器0中断函数,用于数码管扫描显示====================================voidtime0_interrupt()interrupt1{ staticnum=0; TH0=(65536-4000)/256; TL0=(65536-4000)%256;//定时器0,定时4ms用于数码管扫描显示 switch(num) { case0:wei3=1;wei2=1;wei1=1;wei0=0;led=display[buf[3]];break; case1:wei3=1;wei2=1;wei1=0;wei0=1;led=display[buf[2]];break; case2:wei3=1;wei2=0;wei1=1;wei0=1;led=display[buf[1]];break; case3:wei3=0;wei2=1;wei1=1;wei0=1;led=display[buf[0]];break; } num++; if(num==4)num=0;}//==================================定时器1中断函数,用于脉冲频率控制=====================================voidtime1_interrupt()interrupt3{ staticnum1=0; staticnum2=0; TH1=time_counter[k-1][0]; TL1=time_counter[k-1][1];//定时器1,定时1用于步进电机转速控制 if(flag1==0)//正转 { switch(num1) { case0:a=1;b=0;c=0;d=0;break; case1:a=1;b=1;c=0;d=0;break; case2:a=0;b=1;c=0;d=0;break; case3:a=0;b=1;c=1;d=0;break; case4:a=0;b=0;c=1;d=0;break; case5:a=0;b=0;c=1;d=1;break; case6:a=0;b=0;c=0;d=1;break; case7:a=1;b=0;c=0;d=1;break; } num1++; if(num1==8)num1=0; } else //反转 { switch(num2) { case0:a=1;b=0;c=0;d=1;break; case1:a=0;b=0;c=0;d=1;break; case2:a=0;b=0;c=1;d=1;break; case3:a=0;b=0;c=1;d=0;break; case

温馨提示

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

评论

0/150

提交评论