智能小车系统设计(循迹超声波遥控)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

<<计算机控制技术综合训练>>任务书

附录:

电信学院课程设计报告要求

1、设计题目;

2、目录;

3、本设计的基本原理;

4、简要说明本设计内容、用途及特点;

5、本设计达到的性能指标;

6、设计方案的选择;

7、写出各部分设计过程、工作原理、元器件选择;

8、绘制图纸(手绘2号图纸);

9、设计参考文献;

10、附录;

11、设计总结体会;

12、设计说明书不得少于10000字。

智能小车运行图

显示速度,距离,超声波探测距离

经过调试,小车完美实现了如下功能

1.小车具有无线遥控功能,小车可完成前进、后退、左转、右转等动作,并且可以正确显示当前的速度及行进位移。

2.小车具有循迹及避障功能,实现了舵机转动下的超声波壁障功能,并且可以正确有序显示小车位移、速度及与前方障碍物距离。

3.与其它组的小车模型配合可以完成交替领跑任务。

4.小车所有模式切换均由遥控器控制。

流程图

硬件原理图

附件一:智能小车系统程序

#include

#include

sbit AA=P3^0;

sbit DD=P3^1;

sbit BB=P3^2;

sbit CC=P2^2;

sbit LCM_RW=P2^4; //定义LCD引脚

sbit LCM_RS=P2^3;

#define RX P2_0

#define TX P2_1

#define LCM_E P2_5

#define Sevro_moto_pwm P2_7 //接舵机信号端输入PWM信号调节速度#define LCM_Data P0

#define Busy 0x80 //用于检测LCM状态字中的Busy标识

#define Left_1_led P3_7 //P3_7接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1

#define XUNJI_left_led P3_6 //P3_6接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2

#define XUNJI_right_led P3_5 //P3_5接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3

#define Right_2_led P3_4 //P3_4接四路寻迹模块接口第四路输出信号即中控板上面标记为OUT4

#define Left_moto_go {P1_4=1,P1_5=0,P1_6=1,P1_7=0;} //左边两个电机向前走

#define Left_moto_back {P1_4=0,P1_5=1,P1_6=0,P1_7=1;} //左边两个电机向后转

#define Left_moto_Stop {P1_4=0,P1_5=0,P1_6=0,P1_7=0;} //左边两个电机停转

#define Right_moto_go {P1_0=1,P1_1=0,P1_2=1,P1_3=0;} //右边两个电机向前走

#define Right_moto_back {P1_0=0,P1_1=1,P1_2=0,P1_3=1;} //右边两个电机向后走

#define Right_moto_Stop {P1_0=0,P1_1=0,P1_2=0,P1_3=0;} //右边两个电机停转

void LCMInit(void); //LCD初始化函数

void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);

//LCD显示一个字符函数

void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);//LCD显示一个字符串函数

void Delay5Ms(void); //延时5毫秒函数

void Delay400Ms(void); //延时400毫秒函数

void Decode(unsigned char ScanCode);

void WriteDataLCM(unsigned char WDLCM); //LCD1602写数据函数void WriteCommandLCM(unsigned char WCLCM,BuysC);//LCD写命令函数

unsigned char ReadStatusLCM(void);

unsigned char code Range[] ="V= cm/s S= . m"; //LCD1602显示格式unsigned char code welcome[] ="=== Welcome === ";

unsigned char code key[]="Press any key...";

unsigned char code ASCII[13] = "0123456789.-M";

unsigned char code table[]="Distance:000.0cm";

unsigned char code table1[]="YAO KONG MO SHI ";

unsigned char code table2[]="=XUN JI MO SHI= ";

unsigned char pwm_val_left = 0;//变量定义

unsigned char push_val_left =14;//舵机归中,产生约,1.5MS 信号

unsigned int CH0=0; //循迹模式标志

unsigned int CH1=0; //超声波模式标志

unsigned int t=0; //速度基准变量

unsigned int timer=0; //延时基准变量

unsigned int time=0;

unsigned int pwm=250;

unsigned int count1=0; //计左电机码盘脉冲值

unsigned char timer1=0; //扫描时间变量

unsigned long S1=0;

unsigned long S2=0;

unsigned long S3=0;

unsigned long S4=0;

unsigned long S=0;

unsigned long V=0; //定义其速度

unsigned long SS=0;

unsigned char disbuff[4]= { 0,0,0,0,};

unsigned char disbuff1[4]={ 0,0,0,0,};

void WriteDataLCM(unsigned char WDLCM) //写数据

{

ReadStatusLCM(); //检测忙

LCM_Data = WDLCM;

LCM_RS = 1;

LCM_RW = 0;

LCM_E = 0; //若晶振速度太高可以在这后加小的延时

LCM_E = 0; //延时

LCM_E = 1;

}

void WriteCommandLCM(unsigned char WCLCM,BuysC) //写指令,BuysC为0时忽略忙检测

相关文档
最新文档