基于51单片机智能小车循迹程序_第1页
基于51单片机智能小车循迹程序_第2页
基于51单片机智能小车循迹程序_第3页
基于51单片机智能小车循迹程序_第4页
基于51单片机智能小车循迹程序_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、#include <reg51.h>#include <stdio.h>#define uint unsigned int#define uchar unsigned char/*/ uchar led_data9=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82, 0xf8,0x80; uchar circle=0,cir_comp=0,cir_count=0;/设定圈数,实际圈数 uchar turn_count=0; bit end=0; /圈数跑完标志/*/sbit xg0=P10;/左寻轨对管sbit xg1=P11;/中间寻轨对管sbit

2、 xg2=P12;/右寻轨对管sbit xz=P13;/感应挡板对管/*/sbit Q_IN1=P20; /车前左轮控制 sbit Q_IN2=P21;sbit Q_IN3=P22; /车前右轮控制sbit Q_IN4=P23; sbit H_IN1=P24; /车尾左轮控制sbit H_IN2=P25;sbit H_IN3=P26; /车尾右轮控制sbit H_IN4=P27;sbit Q_ENA=P30; /车前左轮使能,PWMsbit Q_ENB=P31; /车前右轮使能,sbit H_ENA=P36; /车尾左轮使能,sbit H_ENB=P37; /车尾右轮使能,/*/#define

3、 stra_q_l 100 /直线行走时,四个轮子占空比调试#define stra_q_r 100#define stra_h_l 100#define stra_h_r 100#define turn_q_l 100 /转弯时四个轮子的占空比调试#define turn_q_r 100#define turn_h_l 100#define turn_h_r 100 #define turnr_time 2900/右转弯时的延时常数#define turnl_time 3000 /左转弯时的延时常数#define dt_time 5800 /原地掉头时延时常数#define over_tim

4、e 1000 /停止延时#define back_time 2500 /走完环形,回到直道延时转弯#define black_time 1500 /过黑线的时间#define correct_l_time 700 /左矫正时间#define correct_r_time 700 /右矫正时间#define hou_time 200/*/ uchar q_duty_l,q_duty_r,h_duty_l,h_duty_r,/车前后左右轮占空比 i=0,j=0,k=0,m=0;/*/ void delay_cir(uint n) uchar x; while(n-) for(x=0; x<2

5、50;x+); ; /*/void delay(uint ct)/ 延时函数 uint t; t=ct; while(t-);/*/void straight() /直走 q_duty_l=stra_q_l; q_duty_r=stra_q_r; h_duty_l=stra_h_l; h_duty_r=stra_h_r; Q_IN1=1; Q_IN2=0; Q_IN3=1; Q_IN4=0; H_IN1=1; H_IN2=0; H_IN3=1; H_IN4=0; /*/void houtui()/后退 q_duty_l=stra_q_l; q_duty_r=stra_q_r; h_duty_l

6、=stra_h_l; h_duty_r=stra_h_r; Q_IN1=0; Q_IN2=1; Q_IN3=0; Q_IN4=1; H_IN1=0; H_IN2=1; H_IN3=0; H_IN4=1; /*/void turn_left()/左转 q_duty_l=turn_q_l; q_duty_r=turn_q_r; h_duty_l=turn_h_l; h_duty_r=turn_h_r; Q_IN1=0; /左轮反转 Q_IN2=1; H_IN1=0; H_IN2=1; Q_IN3=1; /右轮正转 Q_IN4=0; H_IN3=1; H_IN4=0; delay(turnl_tim

7、e);/*/void turn_right() /右转 q_duty_l=turn_q_l; q_duty_r=turn_q_r; h_duty_l=turn_q_l; h_duty_r=turn_q_r; Q_IN1=1; /左轮正转 Q_IN2=0; H_IN1=1; H_IN2=0; Q_IN3=0;/右轮反转 Q_IN4=1; H_IN3=0; H_IN4=1; delay(turnr_time);/*/void turn_round() /原地掉头 q_duty_l=turn_q_l; q_duty_r=turn_q_r; h_duty_l=turn_h_l; h_duty_r=tu

8、rn_h_r; Q_IN1=0; /左轮反转 Q_IN2=1; H_IN1=0; H_IN2=1; Q_IN3=1; /右轮正转 Q_IN4=0; H_IN3=1; H_IN4=0; delay(dt_time);/*/void over() /小车停止 Q_IN1=0; Q_IN2=0; Q_IN3=0; Q_IN4=0; H_IN1=0; H_IN2=0; H_IN3=0; H_IN4=0; /*/void correct_right() /左偏,向右矫正 q_duty_l=turn_q_l; q_duty_r=turn_q_r; h_duty_l=turn_q_l; h_duty_r=t

9、urn_q_r; Q_IN1=1; /左轮正转 Q_IN2=0; H_IN1=1; H_IN2=0; Q_IN3=0;/右轮反转 Q_IN4=1; H_IN3=0; H_IN4=1; delay(correct_r_time);void correct_left() /右偏,向左矫正 q_duty_l=turn_q_l; q_duty_r=turn_q_r; h_duty_l=turn_h_l; h_duty_r=turn_h_r; Q_IN1=0; /左轮反转 Q_IN2=1; H_IN1=0; H_IN2=1; Q_IN3=1; /右轮正转 Q_IN4=0; H_IN3=1; H_IN4=

10、0; delay(correct_l_time);/*/void xunji() if(xg1=1) turn_count+;over();delay(over_time);if(turn_count=1)straight(); delay(black_time);elseif(turn_count=2)houtui(); delay(hou_time); turn_left();elseif(turn_count=3)houtui(); delay(hou_time); turn_right();elseif(turn_count=4)houtui(); delay(hou_time); t

11、urn_right();elseif(turn_count=5)straight(); delay(black_time);elseif(turn_count=6)houtui(); delay(hou_time); turn_right();elseif(turn_count=7)houtui(); delay(hou_time); turn_right(); straight(); delay(back_time); turn_left();elseif(turn_count=8)straight(); delay(black_time);elseif(turn_count=9)houtu

12、i(); delay(100); turn_round(); if(turn_count>=9)turn_count=0; cir_count+; circle-;if(cir_count=cir_comp) end=1; over(); delay(500); else if(xg0=0)&&(xg1=0)&&(xg2=0) straight(); else if(xg0=1)&&(xg1=0)&&(xg2=0) over(); delay(over_time); houtui(); delay(hou_time); co

13、rrect_right(); /左偏,向右矫正 else if(xg0=0)&&(xg1=0)&&(xg2=1) over(); delay(over_time); houtui(); delay(hou_time); correct_left(); /右偏,向左矫正 /*/void int0(void) interrupt 0/中断圈数设定 EX0=0; delay_cir(250); circle+; cir_comp+; if(circle>8) circle=0; cir_comp=0; P0=led_datacircle; EX0=1;/*/vo

14、id time1(void) interrupt 3 /T1溢出中断,电机调速 i+; j+; k+; m+; if(i<q_duty_l) Q_ENA=1; else Q_ENA=0; if(i>100) Q_ENA=1;i=0; if(j<q_duty_r) Q_ENB=1; else Q_ENB=0; if(j>100 ) Q_ENB=1;j=0; if(k<h_duty_l) H_ENA=1; else H_ENA=0; if(k>100) H_ENA=1;k=0; if(m<h_duty_r) H_ENB=1; else H_ENB=0; if(m>100) H_ENB=1;m=0; P0=led_datacircle; TH1=0XFF; TL1=0XF6; /*/void mai

温馨提示

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

评论

0/150

提交评论