基于89C52单片机的智能循迹测速避障小车.doc

上传人:土8路 文档编号:10513480 上传时间:2021-05-20 格式:DOC 页数:15 大小:970.50KB
返回 下载 相关 举报
基于89C52单片机的智能循迹测速避障小车.doc_第1页
第1页 / 共15页
基于89C52单片机的智能循迹测速避障小车.doc_第2页
第2页 / 共15页
基于89C52单片机的智能循迹测速避障小车.doc_第3页
第3页 / 共15页
基于89C52单片机的智能循迹测速避障小车.doc_第4页
第4页 / 共15页
基于89C52单片机的智能循迹测速避障小车.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《基于89C52单片机的智能循迹测速避障小车.doc》由会员分享,可在线阅读,更多相关《基于89C52单片机的智能循迹测速避障小车.doc(15页珍藏版)》请在三一文库上搜索。

1、基于89C52单片机的智能循迹测速避障小车为了参加我校举办的电子科技竞赛,刚刚开始学习单片机的我们,经过讨论,决定做一辆智能循迹测速小车,综合我们搜集的材料以及自己的修改,我们做出了我们的作品。以下是我们整理的材料:一、 原理图1、 最小系统 我们采用的是89C52单片机来做小车的最小系统,针对自己的需要只把要用到的排针口接了上去,具体电路图如下:2、 电机驱动我们采用L293D作为驱动芯片,L293D是一种直流电机控制器件,具有外围电路简单,易于集成、控制等特点,电路图如下:其中我们用TLP521-4光耦器作为电机的稳定,即稳定的是电机的电压,避免电机的电流过大烧坏单片机,起到保护单片机的作

2、用,增加安全性,减少电路干扰,简化电路设计。其电路图如下:3、 测速电路我们采用RPR220反射式光电传感器作为测速器,反射式红外光电传感器模块是一种利用反射式红外光电传感器制成的在传感器的有效检测距离范围内对被测物体的存在性进行检测的电路装置,由红外光发射接收器、电压变化检测电路、检测灵敏度调节电位器、检测状态指示 LED 灯等四个主要部分组成,额定工作电压 DC3.3V 或 DC5.5V(兼容支持 DC3VDC5.5V,而无需额外的硬件配置),DC5V 工作电压条件下,约为 60mA,最大不超过 80 mA。具体电路图如下:4、探测器我们仍采用RPR220反射式光电传感器作为探测器,基于它

3、受被测物体的红外反射特性影响很大,亦能通过检测灵敏度调节电位器进行调节,我们用它来探测黑线(即路线),实现循迹功能。事实证明它的灵敏度是很高的,具体电路如下:相应的放大电路我们采用LM339芯片作为放大器,LM339芯片通常用作电压比较器,该电压比较器的特点是:1)失调电压小,典型值为2mV;2)电源电压范围宽,单电源为2-36V,双电源电压为1V-18V;3)对比较信号源的内阻限制较宽;4)共模范围很大,为0(Ucc-1.5V)Vo;5)差动输入电压范围较大,大到可以等于电源电压;6)输出端电位可灵活方便地选用。LM339类似于增益不可调的运算放大器,在本装置中,我们将它用来放大探测信号。电

4、路图如下:5、电源我们采用L7805作为电源的稳压芯片,虽然用lm78/lm79系列三端稳压IC来组成稳压电源所需的外围元件极少,但是电路内部还有过流、过热及调整管的保护电路,使用起来可靠、方便,而且价格便宜。电路图如下:6、我们用DYP-ME007超声波作为避障部分,DYP-ME007超声波测距模块可提供3cm3.5m的肥接触式距离感测功能。下图为DYP-ME007外观,包括超声波发射器、接收器与控制电路。其基本工作原理为给予此超声波测距模块一触发信号后发射超声波,当超声波投射到物体上后反射回来时,模块输出一回响信号,以触发信号和回响信号间的间差,来判定物体的距离。7、程序驱动程序如下:#i

5、nclude /包含单片机寄存器的头文件#include /包含随机函数rand()的定义文件#include /包含_nop_()函数定义的头文件#include #define uchar unsigned char; /char单字节整型数据或字符型数据#define uint unsigned int;#define CM 3sbit RS=P27; /寄存器选择位,将RS位定义为P2.0引脚sbit RW=P26; /读写选择位,将RW位定义为P2.1引脚sbit E=P25; /使能信号位,将E位定义为P2.2引脚sbit BF=P07; /忙碌标志位,将BF位定义为P0.7引脚s

6、bit S_LEFT=P14;/左轮测速器sbit S_RIGHT=P15;/右轮测速器sbit EN12=P36;/电机1使能端sbit IN1=P21;/电机1前进驱动sbit IN2=P22;/电机1后退驱动sbit EN34=P37;/电机2使能端sbit IN3=P16; /电机2前进驱动sbit IN4=P17; /电机2后退驱动sbit D1=P10;/定义探测器1sbit D2=P11;/定义探测器2sbit D3=P12;/定义探测器3sbit D4=P13;/定义探测器4sbit SPK=P20;/定义蜂鸣器sbit EX=P34;/超声波接收端 sbit TX=P35;/

7、超声波发送端 /*延时函数 uint count0=0,w=0,w2=0,H,L;/定义需要用到的变量 float w0,w3,w1,w4;/unsigned int p,j,k,s,m;/unsigned char code digit =0123456789; /定义字符数组显示数字unsigned char code string =; /定义字符数组显示提示信息/unsigned char count,count2,count3; /定义变量统计中断累计次数uint PWM=20;/定义占空比 /*/ void delay1(int ms)/延时函数 unsigned char y;

8、while(ms-) for(y = 0; y250; y+) _nop_(); _nop_(); _nop_(); _nop_(); void forward()/ 前进函数IN1=1;IN2=0;IN3=1;IN4=0;PWM=85;TR0=1; void forward2()/前进函数2IN1=1;IN2=0;IN3=1;IN4=0;PWM=90;TR0=1; void stop1()/停止函数IN1=0;IN2=0;IN3=0;IN4=0;TR0=0; void turnleft()/左转函数IN1=1;IN2=0;IN3=0;IN4=0;PWM=50;TR0=1;void turnr

9、ight()/ 右转函数 IN1=0;IN2=0;IN3=1;IN4=0;PWM=50;TR0=1;void back()/后退函数IN1=0;IN2=0;IN3=0;IN4=1;PWM=60;TR0=1;/- 蜂鸣void delay5(unsigned int cnt)while(-cnt);void speak()unsigned char i,j;for(i=0;i3;i+)for(j=0;j200;j+)/ 喇叭发声的时间循环,改变大小可以改变发声时间长短delay5(80); / 参数决定发声的频率,估算值,可以自行更改参数并SPK=!SPK;SPK=1; / 喇叭停止工作,间歇的

10、时间,可更改delay5(20000); void delay1ms() unsigned char i,j;for(i=0;i10;i+)for(j=0;j33;j+); void delay(unsigned char n) unsigned char i; for(i=0;i1&count21&count320&S_RIGHT=1)k+=CM;count3=0; p=(j+k)/2; TH0=(65536-50000)/256; /定时器T0高8位重新赋初值 TL0=(65536-50000)%256; /定时器T0低8位重新赋初值void main() unsigned char i;

11、 LcdInitiate(); /调用LCD初始化函数Init();TMOD=0x11; /使用定时器T0的模式1TH0=(65536-50000)/256; /定时器T0的高8位设置初值TL0=(65536-50000)%256; /定时器T0的低8位设置初值EA=1; /开总中断ET0=1; /定时器T0中断允许TR0=1; /启动定时器T0EX0=1;IT0=0;s=0;p=0; /秒初始化为0 WriteAddress(0x00); /写地址,从第1行第4列开始显示i=0; /从字符数组的第1个元素开始显示while(stringi!=0) /只要没有显示到字符串的结束标志0,就继续W

12、riteData(stringi); /将第i个字符数组元素写入LCDi+; /指向下一个数组元素 while(1) /无限循环 DisplaySecond(); /显示秒 delay(5); /给硬件一点反应时间 forward2();/上电后先前进 TX=0; TX=1; delay1(1); TX=0; TH2=0; TL2=0; TR2=0; while(!EX); TR2=1; while(EX)if(TH1=50)TH2=0;TL2=0;break; TR2=0; H=TH2; L=TL2; H=TH2; H=TH2; L=TL2; H=TH2; w=H*256+L;/放入16位的

13、高8位 w0=(float)w;/ w1=w0*340/10000/2; /由空气中的声速转为厘米 w2=(int)w1; /取整 w3=w1-w2;/ 差值即为距离 w4=w3*10;/小数取十位 WriteAddress(0x00); WriteData(c); WriteData(e); WriteData(j); WriteData(u); WriteData(:); WriteData(w2/100+0x30); WriteData(w2/10%10+0x30); WriteData(w2%10+0x30); WriteData(.); WriteData(w4+0x30); Wri

14、teData(c); WriteData(m); if(w2=7)stop1();delay5(80);back();speak();delay5(40000); else if(w27)turnleft();speak(); if(D1=1&D2=0&D3=0&D4=0)|(D1=0&D2=1&D3=0&D4=0)|(D1=1&D2=1&D3=0&D4=0) turnleft();if(D1=0&D2=0&D3=0&D4=0)forward(); else if(D1=0&D2=0&D3=1&D4=0)|(D1=0&D2=0&D3=0&D4=1)|(D1=0&D2=0&D3=1&D4=1) turnright();if(D1=0&D2=0&D3=0&D4=0)forward();else if(m=1)stop1();speak();delay1(10);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1