智能小车系统设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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时忽略忙检测