1、姓 名 王延大 专 业 班 级 12电子4班 论 文 名 称 智能遥控小车 指 导 教 师 梁召峰 毕业设计(论文)任务书专业(班): 13电子1班 姓名: 陈仕泓 课题名称、主要内容和基本要求课题名称:超声波测距离主要内容: 小小测量超声波到反射物的距离,此设计中关键的是计算从超声波发出到途中遇到障碍物反射回来的往返时间,然后利用有关参数根据距离计算公式算出所测距离,要求测距的范围是0.5到10米,所测到距离要能够实时显示。基本要求: 1、收发传感器均选用超声波传感器; 2、距离要求显示;3、探测距离0.5m10m;4、工作温度-2045。 进度安排周次工作内容执行情况2-4选定题目、明确题
2、目要求、开题报告5-8硬件设计与程序编制9-10软硬件调试与软硬件完善11-12系统硬软件联合调试13-14撰写论文、教师审阅论文、完成论文的修改、定稿及评审工作15参加毕业答辩 指导教师评语 指导教师签名: 评阅教师评语 评阅教师签名: 毕业设计(论文)成绩答辩委员会主任签名: 目 录摘要5Abstract5第一章方案的论证61.1AVR单片机的选择61.1.1 AVR单片机用于智能小车的优点:61.1.2 AVR单片机用于智能小车的缺点:61.2 C51单片机的选择61.2.1 STC89C52单片机简介工作原理:61.2.2 C51单片机用于智能小车的优点:61.2.3 C51单片机用于
3、智能小车的缺点:71.2.4 C51单片机用领域:71.3选题的原因及结果7第二章 系统硬件设计92.1系统硬件的总体设计92.1.1系统硬件总体框图92.1.2各个组成模块92.1.3总体电路原理图122.2 遥控电路设计122.2.1驱动电路13第三章 系统软件设计163.1主程序框图:163.2电机驱动程序163.4避障模块、避障框图19第四章系统调试2241测试工具:224.2 PCB的设计制作与安装224.3调试过程22结束语23致谢23参考文献24摘要超声波具有指向性强,能量消耗缓慢,传播距离较远等优点,所以,在利用传感器技术和自动控制技术相结合的测距方案中,超声波测距是目前应用最
4、普遍的一种,它广泛应用于防盗、倒车雷达、水位测量、建筑施工工地以及一些工业现场。 本文主要是根据超声波传感器的原理和特性,利用传输中距离与时间的关系,计算从超声波发出到途中遇到障碍物反射回来的往返时间,然后利用有关参数,由距离计算公式算出所测距离,此次设计采用AT89C51单片机为核心器件,形成相应的测距电路,信号处理电路,自行编制单片机控制程序,并进行硬件调试、软件调试,最后进行软硬件联调,达到性能要求。该测距仪主要由超声波发射器电路、超声波接收器电路、单片机控制电路、环境温度检测电路及显示电路构成。关键词:超声波测距,51单片机,传感器,LED显示屏等前言随着我国汽车产业的高速发展,我国已
5、开始进入私家车时代,而随之增加的是交通事故的发生的频率。为了提高汽车运行的安全性,倒车雷达预警系统的问世不仅受到了广大顾客的青睐,也使电子产业成汽车行业中的新兴热点。尤其是近年来倒车雷达受到了商家的热捧,很多防盗器的生产商纷纷涉足倒车雷达,使得我国汽车电子行业逐渐繁荣起来,倒车雷达俨然形成一个较大的商机,市场也开始呈现出一派竞争的态势。倒车雷达系统经历了三个阶段,六代技术的改良。最早的是倒车防撞仪,功能单一只能测试车后限定范围内的障碍物,然后发出警报。慢慢的倒车雷达发展到可以根据距离远近程度分段报警。前两个阶段的倒车雷达一般采用集成电路,所以功能比较单一。随着人们对汽车驾驶辅助系统易用性要求的
6、提高,以及单片机价格不断下降和汽车电子系统网络化发展的要求,新型的倒车雷达都是以单片机为核心的智能测距传感系统。要求倒车雷达连续测距并显示障碍物距离,并采用不同间歇鸣叫频率的声音报警提示距离,让驾驶员全神贯注地注视场景。汽车电子系统网络化发展还要求作为驾驶辅助系统子系统的倒车雷达具有通信功能,能够把数据发送到汽车总线上。如最为先进的倒车雷达系统为智能可视倒车雷达系统,它在车尾部装上针孔摄像头,倒车时可以在显示屏上显示车后的真实图像。而倒车雷达控制系统的核心部分就是超声波测距仪的研制。因此,设计好的超声波测距仪就显得非常重要了。这就是我设计超声波测距仪的意义。第一章 方案的论证1.1AVR单片机
7、的选择1.1.1 AVR单片机用于超声波测距仪的优点:1)高可靠性、作用强、低功耗和低价位。2)多种频率的内部RC振荡器、上电自动复位、看门狗、启动延时等作用,零外围电路也可以工作。3)在相同的系统时钟下AVR运行速度最快。1.1.2 AVR单片机用于超声波测距仪的缺点:1)功能寄存器多,不适合初学者。2)供货不稳定,导致价格起伏波动较大,对于长期产品的成本核算不利。不过总的说来这几年还是处于价格下降趋势,毕竟是较新的芯片系列。3)型号较少,且价格在15以下的型号均没有开放总线,对于低成本应用比较困难。1.2 C51单片机的选择1.2.1 STC89C52单片机简介工作原理:STC89C52是
8、STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构,在本系统中定时器T0用来测量超声波的传输时间。1.2.
9、2 C51单片机用于超声波测距仪的优点:1)集成度高,体积小,简单易操作,可靠性好。2)性价比高,控制能力强。3)开发装置多。4)低功耗,低电压,便于生产便携式产品。1.2.3 C51单片机用于超声波测距仪的缺点:1)解密容易。2)不具备自编程能力, 使用不够灵活。3 )改变延时间受到硬件设置的限制1.2.4 C51单片机的应用与设计方案:C51单片机广泛应用于:温度控制系统,电子密码锁,智能风扇设计,宿舍门禁管理系统,自动电阻测量仪等。本系统主要是基于单片机的测距系统,以STC89C52RC单片机为核心控制器件,分为超声波发射电路和超声波检测接收电路、显示三部分。超声波测距电路的设计框图如图
10、1-1所示:本方案采用单片机作为控制系统,用单片机产生40kHz的超声波,脉冲持续时间为0.2ms左右,时隔59.8ms反复进行。此脉冲信号作为计时的起始脉冲,由单片机输出的端口的高频脉冲经过74LS04六反相器功率放大、升压后与超声波探头产生共振,使超声波探头工作,则超声波由超声波发射头发射出去。接收电路由超声波接收器、CX20106A集成电路组成。使用CX20106A集成电路对接收探头收到的信号进行放大、滤波。当CX20106A接收到反射40kHz的信号时,会在第7脚产生一个低电平下降脉冲,这个信号可以接到单片机的外部中断引脚作为中断信号输入,停止计数器T0计数,并读取T0计数值存储。发射
11、超声波时,压电传感器中的压电晶片受发射电脉冲激励后产生共振,并带动共振板振动,便产生超声波。接收超声波时,两电极间未外加电,共振板接收到超声波,将压迫压电晶片作振动将机械能转换为电信号。74LS04反相器CX20106A集成电路超声波发射器超声波接收器MCS-51 单片机显示屏 图1-1 超声波测距电路的设计框图1.3选题的原因及结果1)性价比高,控制能力强,开发装置多。2)低功耗,低电压,便于生产便携式产品。3)有众多芯片制造厂商加盟,可广泛选择。4)利用STC89C52能简单快速解决和实现我没想要的各种功能。对于C51系列单片机和AVR单片机哪个更适合超声波测距仪的控制芯片。就AVR单片机
12、而言:首先在价格方面比较昂贵,在优化与使用性能上较低,如它的32个通用寄存器中前16个寄存器都不能直接与立即数打交道。因此我决定使用C51系列单片机:STC89C52单片机作为我们本次智能小车的控制芯片。第二章 系统硬件电路设计2.1系统硬件的总体设计2.1.1系统硬件总体框图本系统的硬件电路主要分为单片机系统、显示电路、超声波发射电路、超声波检测接收电路四部分。超声波发射电路超声波接收电路MCS-51 单片机显示电路电源图2-1整体设计方框图2.2单片机系统电路图2-2 STC89C52单片机2.2.1单片机STC89C52单片机最小系统电路是整个硬件电路中非常重要的一部分。单片机系统主要起
13、控制电路中的各部分能够按照设计要求正常工作的作用,在本电路中单片机采用STC89C52,采用了12MHz高精度的晶振,以获得较稳定的时钟频率,减小测量误差。单片机STC89C52系统电路如图2-2所示:STC89C52的主要性能如下:1. 增强型8051单片机,6 时钟/机器周期和12 时钟/机器周期可以任意 选择,指令代码完全兼容传统8051.2 2. 工作电压:5.5V3.3V(5V单片机)/3.8V2.0V(3V 单片机)3.工作频率范围:040MHz,相当于普通8051 的080MHz,实际工作 频率可达48MHz4. 用户应用程序空间为8K字节5. 片上集成512 字节RAM6. 通
14、用I/O 口(32 个),复位后为:P0/P1/P2/P3 是准双向口/弱上拉, P0 口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为 I/O 口用时,需加上拉电阻。7. ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无 需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程 序,数秒即可完成一片8. 具有EEPROM 功能9. 共3 个16 位定时器/计数器。即定时器T0、T1、T210.外部中断4 路,下降沿中断或低电平触发电路,Power Down 模式可 由外部中断低电平触发中断方式唤醒11. 通用异步串行口(UART),还可用定时器软
15、件实现多个UART12. 工作温度范围:-40+85(工业级)/075(商业级)2.2.2时钟电路 常用的时钟电路设计有两种方式,一种是内部时钟方式,另一种为外部时钟方式,本系统采用的是内部时钟方式。51单片机内部有一个用于构成振荡器的高增益反相放大器,该高增益反相放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL2.。这两个引脚跨接石英晶体振荡器和微调电容。这里晶振的振荡频率为12MHz,电路中的2个电容选为30pF。2.2.3复位电路本系统设计是的上电自动复位电路,上电自动复位是通过外部复位电路的电容充电来实现的,当电源接通时只要Vcc 的上升时间不超过1ms,就可以实现自动上电复位
16、。2.3显示电路在本系统的显示电路的设计中主要采用的是4位共阴LED数码管,根据LED数码管内部发光二极管的连接方式,数码管结构可以分为共阳极型和共阴极型两种,共阴极型的内部发光二极管是由阴极连在一起接高电平。由于P2口输出电压很低,无法驱动数码管点亮,在此用74ls138驱动;显示电路如图2-3所示:图2-3显示电路 2.4超声波发射电路超声波发射电路主要由六反相器74LS04组成的推挽电路和超声波发射传感器构成。超声波发射电路如图3.4所示。单片机P1.0端口向外输出超声波脉冲信号,该信号一路经一级反相器后送到超声波换能器的一个电极,另一路经两极反相器后送到超声波换能器的另一个电极。用这种
17、推挽形式将方波信号加到超声波换能器两端,可以提高超声波的发射强度。输出端采用两个反相器并联,用以提高驱动能力。其中的上拉电阻R1、R2一方面可以提高反相器74LS04输出高电平的驱动能力,另一方面可以增加超声波换能器的阻尼效果,缩短其自由振荡的时间。图2-4 超声波发射电路2.4.1反相器在本系统的超声波发射电路中采用的反相器是六反相器74LS04芯片,其引脚结构如图:图2-5 芯片74LS04引脚结构由其引脚结构可知, 7脚接地,14脚接电源,剩下12个管脚可分为六个反相器,其中A为输入端,Y为输出端,例如:1A输入,1Y输出。2.4.2超声波传感器超声波传感器是利用晶体的压电效应和电致伸缩
18、效应,将机械能与电能相互转换,并利用波的特性,实现对各种参量的测量。人们能听到声音是由于物体振动产生的,它的频率通常在20Hz-20kHz范围内,超过20kHz称为超声波,低于20Hz的称为次声波。常用的超声波频率为几十kHz-几十MHz。超声波是一种在弹性介质中的机械振荡,它的波形有纵波、横波、表面波三种。质点的振动与波的传播方向一致的波称为纵波;质点的振动与波的传播方向垂直的波称为横波;质点的振动介于纵波与之间,沿着表面传播,振幅随着深度的增加而迅速衰减的波称为表面波。横波、表面波只能在固体中传播,纵波可在固体、液体及气体中传播。2.5超声波检测接收电路超声波检测接收电路主要是由红外线检波
19、接收的专用芯片CX20106A以及超声波接收传感器R构成的,其电路图如图3.12所示。考虑到红外遥控常用的载波频率38kHz与测距的超声波频率40kHz较为接近,而且CX20106A的载波频率可以通过其5脚与电源所接的电阻大小调整到40kHz,所以可以利用它制作超声波检测接收电路。用CX20106A接收超声波(无信号时输出高电平),具有很高的灵敏度和较强的抗干扰能力。以集成片CX20106A的7脚做为指今输出端,利用单片机外中断0口监测超声波接收电路输出的返回信号;CX20106A的5脚与电源之间所接电阻R7的大小决定着它本身的带通滤波器的中心频率 的大小,在本系统中选择R7的阻值为200k
20、,此时的中心频率 =40kHz;超声波接收传感器R接在CX20106A的1脚与地所接电容C5的两端,根据测量范围要求不同,可适当更改接于超声波接收传感器R电极两端的电容C5的大小,以改变接收电路的接收灵敏度和抗干扰能力。图2-6 超声波接收电路红外线检波的专用芯片CX20106A是8脚单列直插式塑封结构,其各引脚功能如表3.2所示,它的主要功能是对接收到的超声波信号进行放大、滤波。它主要是由前置放大器、限幅放大器、带通滤波器(BPF)、峰值检波器和波形整形器等组成。其主要特点如下:(1)低电压供电(Vcc=5V),低功耗(Vcc=5V时,典型功耗为9mV)。(2)带通滤波器在集成电路内部,滤波
21、特性由5脚和电源之间外接电阻的阻值来决定,可不必进行调整,带通滤波器的频率范围为3060kHz,由于没有使用电感,可免受磁场的影响。(3)集电极开路输出,能直接与TTL或CMOS电路相连使用CX 20106A集成电路对接收探头受到的信号进行放大、滤波。其总放大增益80db。以下是CX20106A的引脚注释。 1脚:超声信号输入端,该脚的输入阻抗约为40k。2脚:该脚与地之间连接RC串联网络,它们是负反馈串联网络的一个组成部分,改变它们的数值能改变前置放大器的增益和频率特性。增大电阻R1或减小C1,将使负反馈量增大,放大倍数下降,反之则放大倍数增大。但C1的改变会影响到频率特性,一般在实际使用中
22、不必改动,推荐选用参数为R1=4.7,C1=3.3F。3脚:该脚与地之间连接检波电容,电容量大为平均值检波,瞬间相应灵敏度低;若容量小,则为峰值检波,瞬间相应灵敏度高,但检波输出的脉冲宽度变动大,易造成误动作,推荐参数为3.3f。 4脚:接地端。 5脚:该脚与电源间接入一个电阻,用以设置带通滤波器的中心频率f0,阻值越大,中心频率越低。例如,取R=200k时,f042kHz,若取R=220k,则中心频率f038kHz。 6脚: 该脚与地之间接一个积分电容,标准值为330pF,如果该电容取得太大,会使探测距离变短。 7脚:遥控命令输出端,它是集电极开路输出方式,因此该引脚必须接上一个上拉电阻到电
23、源端,推荐阻值为22k,没有接受信号是该端输出为高电平,有信号时则产生下降。 8脚:电源正极,4.55V。第三章 系统软件设计3.1主程序的设计:系统初始化后就启动定时器T1从0开始计数,此时主程序进入等待,当到达60 ms时T1溢出进入T1中断服务子程序;在T1中断服务子程序中将启动一次新的超声波发射,此时将在P1.0引脚上开始产生超声波脉冲信号,同时开启计数器T0计数,为了避免直射波的绕射,需要延迟1 ms后再开INT0中断允许;INT0中断允许打开后,若P3.2(INT0)引脚出现低电平则代表收到回波信号,将提出中断请求进入INT0中断服务子程序,在INT0中断服务子程序中将停止计数器T
24、0计数,读取计数器T0计数值到相应的存储区,同时设置接收成功标志;主程序一旦检测到接收成功标志,单片机再调用距离计算子程序进行计算,计算出传感器到目标物体之间的距离;此后主程序调用显示子程序进行显示;若超过设定的最小报警距离还将报警;如果没有检测到接收成功标志,则继续等待回波;当一次发射、接收、显示的过程完成后,系统将再次启动T1以溢出,进入下一次测距。主程序的流程图如图3-1所示:开始系统初始化启动定时器T1定时调用距离计算显示距离清回波接收成功标志位回波接收成功标志位置1NY启动计数器T0,开始计数,开外部中断INT0图3-1主程序框图3.2硬件调试:在整个系统的设计当中,首先就是要进行硬
25、件设计,硬件设计以及焊接完成后,就是硬件调试部分。总体来说,超声波测距系统的制作和调试都较为简单,其中超声波发射和接收选用的是16的超声波传感器T/R40-16(T发射/R接收),中心频率为40kHz,在焊接时应保持两传感器的中心轴线平行并相距48cm,其余元器件无特别要求。若能将超声波接收电路用金属壳屏蔽起来,则可提高抗干扰能力。下面就来说明一下本系统的硬件调试部分。在焊接显示部分时,跳线太多结果把数码管两个引脚焊反了,在调程序时数码管有两段led显示反了。后来重新焊接后解决问题。用万用表检测硬件电路是否有断接、短接等情况,同时重点检查一下高、低电平的连接有没有错误。在此检查中由于焊接的过于
26、密集发现在74ls04处出现短接,后将短接处的锡吸掉后重新焊接后解决,改正后继续检测,没有发现其它的错误了,硬件调试结束。3.3软件调试:在编程时提示有错误产生,提示说不可以调用延时程序,检查发现是在主程序中的显示部分用到的延时程序放在了主函数的后面,而前面又没有定义,导致无法调用,后来将程序调到前面后解决。软件程序是在KEIL单片机仿真系统中完成的,软件程序的主程序以及各部分子程序都编完后,进行软件编译,编译不通过,提示说在发生脉冲程序中的_nop_()没有定义,原来是头文件中没有定义,加上#include 头文件后,继续编译。之后没有太大的问题。所以本程序在设计中并没有太大的逻辑上的错误,
27、只是有一些语法上的错误,比如重复定义等,经过调试修改后,没有了语法上的错误,软件调试结束。3.4程序清单:#include#include /头文件#define uint unsigned int#define uchar unsigned charsbit out=P10;/发射超声波端口sbit intt=P32; /接收超声波端口uint sec;uchar code leddata10= 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F;/共阴数码管uchar bwei,swei,gwei,qwei;uint COUNT,TIME;
28、/接收变量uchar flag; /接收标志void start(); /初始化函数void delay1()/延时子函数,2个空指令 _nop_(); _nop_();void del1() /延时1 unsigned char i; for(i=0;i255;i+);void Display() qwei=sec/1000; bwei = sec %1000/ 100; swei = sec%100 / 10; gwei = sec% 10; P0 = leddatagwei; P2=0xc0; del1(); P0 = leddataswei | 0x80; /0x01 小数点 P2=0
29、x40; del1(); P0 = leddatabwei; P2=0x80; del1(); P0 = leddataqwei; P2=0x00; del1();void Display2() P0=0x40; P2=0xc0; del1(); P0=0x40; P2=0x40; del1(); P0=0x40; P2=0x80; del1(); P0=0x40; P2=0x00; del1(); void delay(uchar i) while(i!=0) i-; void tim(void) interrupt 3 uint i; ET1=0; TR0=0; TH0=0; TL0=0;
30、 TR0=1; EX0=1; for(i=0;i4;i+) /超声波发射40KHZ out=out; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); delay(50); IT0=1;/下降边延 ET1=1; TH1=0Xb0; TL1=0X3c; EX0=1; /*=接收到超声波触发中断0=*/ void r_int() interrupt 0/接收超声波 _nop_(); if(intt=0) /判接收到 TR0=0; EX0=0; TIME=TH0*256+TL0;/数据转换 COUNT=TI
31、ME*0.17; flag=1; /置位标志位 while(!intt); /判是否已经完成转换 EX0=1; void start() /初始化ET1=1; TR1=1; TMOD=0X11; TH0=0; TL0=0; TH1=0Xb0;/50ms TL1=0X3c; IT0=1; EX0=1; EA=1;void main(void) start(); /程序初始化 while(1) if(flag=1) /判是否接收到 flag=0; sec=COUNT; /将接收并转换后的数据赋给显示变量 if(sec=3000)Display2(); else Display() ; 总结通过这次
32、的单片机设计,我获益良多。在做设计的这段时间里,我深刻的体会到自动化专业是一门工程特点和实践性很强的学科,加强工程训练,特别是技能的培养,对于工程人员的素质和能力具有十分重要的作用。使我在设计电路的过程中提高了自身运用知识的能力,也为将来的工作打下了坚实的基础,同时也让我对电子技术产生了更加浓厚的兴趣,更加深了对本专业知识的热爱与追求。在做单片机课程设计的过程中,我将这几年里所学的有关本次设计的基础知识和专业知识又复习了一遍,特别是单片机方面的知识,对单片机的原理以及接口方面的知识做了进一步的理解,以便能够更加顺利地完成此次毕业设计。同时在焊接过程中,一定要先弄明白且读懂原理图。搞明白整个电路
33、图的原理,还要细心和仔细,因为每一个焊点你都要牢固以保持它的耐用性,更不能出现虚焊和漏焊的事情发生。同时你必须对芯片的特性都非常清楚,这样你才能让你的实际电路达到你所要求的性能,双列直插的芯片引脚彼此都挨得很近。而每一个引脚都有不同的功用,有的是输出端,有的是输入端,所以在焊接时这些点都是应该特别注意的地方。否则轻者电路的功能实现不了,重者会造成芯片永久的损坏。所以在以后的学习和工作中,当我要使用某个器件时一定要先查资料,将它的工作原理搞清楚,然后再进行实际的操作。这样往往会事半功倍。还有我体会到的一点是电路仿真和实际有一定的差别,在仿真中我们只需要明白电路的工作原理即可,在实际组装电路时,我
34、们要根据实际器件的性能和仿真图的原理来进行调试,二者都很重要。根据以上设计的完成功能来看,已基本上完成了本次设计的题目要求,但由于个人能力有限,设计中也难免会有错误和疏漏,所以还肯请各位老师以及同学多多批评指正。致谢首先感谢我的专业老师梁召峰,在梁老师的耐心指导、帮助下,我才能顺利完成毕业设计。从电路的设计到调试整个过程中,我都从梁老师那里学会了很多专业方面的知识。其次感谢郭志林师兄,在我的毕业设计中给单片机烧录程序和焊接电路的过程中给予了我帮助。最后感谢在这整个设计过程中帮助过我的所有朋友们。参考文献1高光天.传感器与信号调理器件应用技术M.北京:科学出版社,20042赵负图.传感器集成电路
35、手册M.北京:化学工业出版社,20033 林渭勋. 现代电力电子电路M.杭州:浙江大学出版社,2005.4 陈国成.新型电力电子变换技术M.北京:中国电力出版社,2004.5陈平、罗晶.现代监测技术M.北京:电子工业出版社,20036夏继强. 数据采集系统实用设计J. 自动化学报, 2001,19(4):318410.7徐惠民、安德宁 单片微型计算机原理接口与应用M.第1版 北京:北京邮电大学出版社,20003.2电机驱动程序#include sbit LeftLed=P20; /定义前方左侧指示灯端口sbit RightLed=P07; /定义前方右侧指示灯端口sbit FontLled=P
36、10;sbit LeftIR=P35; /定义前方左侧红外探头端口sbit RightIR=P36; /定义前方右侧红外探头端口sbit FontIR=P37; /定义前方正前方红外探头端口sbit M1A=P00; /定义左侧电机驱动A端sbit M1B=P01; /定义左侧电机驱动B端sbit M2A=P02; /定义右侧电机驱动A端sbit M2B=P03; /定义右侧电机驱动B端sbit B1=P04; /定义语音识识别传感器端口sbit SB1=P06; /定义蜂鸣器端口void tingzhi() M1A=0; /将M1电机A端初始化为0 M1B=0; /将M1电机B端初始化为0
37、M2A=0; /将M2电机A端初始化为0 M2B=0;void qianjin() M1A=1; M1B=0; M2A=1; M2B=0;void houtui() M1A=0; M1B=1; M2A=0; M2B=1;void zuozhuan() M1A=0; M1B=1; M2A=1; M2B=0;void youzhuan() M1A=1; M1B=0; M2A=0; M2B=1;void delay_nus(unsigned int i) /延时:i=12 ,i的最小延时单12 us i=i/10; while(-i); void delay_nms(unsigned int n)
38、/延时n ms n=n+1; while(-n) delay_nus(900); /延时 1ms,同时进行补偿 void ControlCar(unsigned char ConType) /定义电机控制子程序 tingzhi(); switch(ConType) /判断用户设定电机形式 case 1: /前进 /判断用户是否选择形式1 qianjin(); break; case 2: /后退 /判断用户是否选择形式2 houtui(); /M2电机反转 break; case 3: /左转 /判断用户是否选择形式3 zuozhuan(); /M2电机正转break; case 4: /右转 /判断用户是否选择形式4 youzhuan(); /M1电机正转 /M2电机反转break; case 8: /停止 /判断用户是否选择形式8 tingzhi();break; /退出当前选择 3.4避障模块、避障框图 图3-3避障框图红外程序:void IR_IN() interrupt 2 using 0 /定义INT2外部中断函数 unsigned char j,k,N=0;