北航人 自我总结单片机 与控制步进电机.doc_第1页
北航人 自我总结单片机 与控制步进电机.doc_第2页
北航人 自我总结单片机 与控制步进电机.doc_第3页
北航人 自我总结单片机 与控制步进电机.doc_第4页
北航人 自我总结单片机 与控制步进电机.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

这是我自己做过的。源码都给你了#include#include#include#include#define uchar unsigned char#define uint unsigned intuint count; /当前计数值uint distance;bit intt=1;unsigned char cont=0;unsigned char co=0;uchar buf;/uchar m,lm,cm;/*针脚定义*/sbit rect_wave=P20; /晶振控制信号sbit RS=P10;sbit RW=P11;sbit EN=P12;sbit CLR=P13;sbit DATA=P14;sbit CLK=P15;sbit d=P21;sbit cp=P22;sbit dir=P23;/*/*函数声明*/void time0over(void); /定时器计时程序void clrlcd(void); /clr LCDvoid c_send(unsigned char y); /发命令void reset(void); / reset LCDvoid d_send(unsigned char x); /发数据void pos(unsigned char pos); /设定显示位置void l_delay(unsigned int t); /长延时void trans(j);void ret(void); /初始化系统void retcont(void); /定时器复位void math(void); /计算测量距离/*/void init(void) TH1=0xf3; TL1=0xf3; PCON=0x80; TR1=1; SCON=0x50; /*串口初始化设置,波特率4800BPS*/*/void send(uchar dat) /*发送子程序*/ /uchar i; /*发送一个数据*/ SBUF=dat; while(TI=0); TI=0; /*/void turn (void) /电机转动控制 unsigned char x; cont+; cp=cp; l_delay(50); cp=cp; co+; if(co = 3) d=d; if(co = 4) d=d; co=0; if (cont = 200) /判断是否进行反转复位 dir=dir; cont=0; for(x=0;x 200;x+) cp=cp; l_delay(5); cp=cp; co+; if(co = 3) d=d; if(co = 4) d=d; co=0; dir=dir; cont=0; /*子程序*/void int0 () interrupt 0 /中断0服务程序 EX0=0; /关闭中断 TR0=0; /关闭定时器 TF0=0; /标志位清零 rect_wave=0; /停止发送超声波 intt=0; void work(void) if(!intt) intt=1; if (distance 400) buf=distance; send(buf); turn(); math(); /计算所测得的距离 l_delay(5); /延时 retcont(); /定时器复位 rect_wave=1; count=0; void math(void) /计算所测得的距离 uchar m,lm,cm; cm=distance%10; /取距离的最低位 distance=distance/10; /取距离的次高位 lm=distance%10; distance=distance/10; /取距离的最高位 m=distance%10; clrlcd(); /输出计算结果 pos(0); d_send(d); d_send(i); d_send(s); d_send(=); /pos(4); d_send(m+0x30); d_send(lm+0x30); d_send(cm+0x30); d_send(c); d_send(m); l_delay(500);void time0over(void) /定时器计时程序 TF0=0; count+; distance=count; /*void trans(j) switch(j) case 0: d_send(0);break; case 1: d_send(1);break; case 2: d_send(2);break; case 3: d_send(3);break; case 4: d_send(4);break; case 5: d_send(5);break; case 6: d_send(6);break; case 7: d_send(7);break; case 8: d_send(8);break; case 9: d_send(9);break; */delay() /延时 int i; for(i=0;i1000;i+);void l_delay(unsigned int t) /延时 unsigned int p; unsigned int j; for(j=0;jt;j+) for(p=0;p1000;p+); void reset(void) / reset LCD delay(); c_send(0x38); c_send(0x01); c_send(0x06); c_send(0x0c); c_send(0x80);void clrlcd(void) / clr LCD delay(); c_send(0x01);void pos(unsigned char pos) /设定显示位置 c_send(pos | 0x80);void c_send(unsigned char y) /发命令 unsigned char i; EN=1; RS=0; RW=0; for(i=0;i8;i+) if(_crol_(y,i)&0x80) DATA=1; else DATA=0; CLK=0; CLK=1; EN=0; delay();void d_send(unsigned char x) /发数据 unsigned char i; EN=1; RS=1; RW=0; for(i=0;i8;i+) if(_crol_(x,i)&0x80) DATA=1; else DATA=0; CLK=0; CLK=1; EN=0; delay();void ret(void) /初始化计数器 TMOD=0x22; /设置定时器计数器1为工作方式2 TH0=0xc6; /设置计数初值高字节 TL0=0xc6; /设置计数初值低字节 count=0; IE=0x00; /禁止中断 TF0=0; /溢出标志位清零 TR0=1; /打开定时器1 rect_wave=1; EA=1; /打开中断 IP=0x01; /外部中断0为高中断优先级 IT0=0; /外部中断低电平触发? EX0=1;void retcont(void) TF0=0; /溢出标志位清零 TR0=1; /打开定时器1 EA=1; /打开中断 IP=0x01; /外部中断0为高中断优

温馨提示

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

评论

0/150

提交评论