白昂松-基于51单片机控制的自动停泊小车的设计与实现_第1页
白昂松-基于51单片机控制的自动停泊小车的设计与实现_第2页
白昂松-基于51单片机控制的自动停泊小车的设计与实现_第3页
白昂松-基于51单片机控制的自动停泊小车的设计与实现_第4页
白昂松-基于51单片机控制的自动停泊小车的设计与实现_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

./本科专业学生毕业设计〔论文题目:基于51单片机控制的自动停泊小车的设计与实现系别:计算机工程系专业:电子信息工程年级:2010级学号:姓名:白昂松指导教师:博.摘要在当今社会,汽车更加成为了千家万户必不可少的工具。然而,对于大多数人来说,将车子停车入车位都是件头疼的事,尤其是停入那种前后各一辆车的车位,也叫顺列式车位,新手对这种车位最为恐惧。如果稍有不慎,那么停车时发生刮蹭的小事故的几率非常高。为了解决驾驶员们的这一难题,自动停泊技术走进了人们的视野中。此次设计采用STC89C52RC单片机作为控制核心,由L298N电机驱动模块来控制小车的运动轨迹,利用超声波模块进行与障碍之间距离的检测,还使用了红外避障模块对障碍进行检测,最后使用了LCD1602显示屏对数据进行显示,以提示驾驶员。整个系统先由电机驱动模块控制小车移动,期间由红外避障模块进行障碍物检测,如果检测到障碍,超声波模块则开始测量距离并显示在LCD液晶屏上,并且小车停止移动。上述流程循环至小车停入库,最后由超声波传感器测量小车与后方障碍物的距离,并最终做出调整。整个过程由单片机进行数据处理,是一种既方便又安全的停车方式。论文中首先提出了整体方案,然后在对STC89C52RC单片机开发及运用的基础上对各个模块的工作原理及其特性进行了分析与介绍,并加以说明。在论文中还对系统的软件结构进行介绍。在对硬件工作原理的理解为前提条件,用C语言编程来实现系统的功能。关键词:超声波传感器;STC89C52RC单片机;自动停泊;C语言AbstractNowadays,automobilehasbecomeanessentialtoolforeveryfamily.Almosteveryfamilyhastheirowncar.however,howtoparkingacarisaheadachethingformanypeople,especiallyparkingtothecolumnspaces.Theparkingscratchesaccidentisveryhigh.Inordertosolvethedifficulties,automaticberthingtechnologyintopeople'svision.ThisdesignusestheSTC89C52RCsingle-chipmicrocomputerascontrolcore,byL298Nmotordrivermoduletocontrolthemovementofthecar,usingtheultrasonicmoduleandthedistancebetweentheobstacledetection,alsousedtheinfraredobstacleavoidancemoduletodetectobstacles,finallyusestheLCD1602displayscreentodisplaythedata.Thewholesystemmoduletocontrolthecardrivenbyamotortomovefirst,duringtheobstacledetectionbyinfraredobstacleavoidancemodule,ifdetectedobstacle,ultrasonicmodulebegantomeasuredistanceanddisplayedintheLCDscreen,andthecarstopmoving.Theprocesscycletothecarstoppedwithinthelibrary,andfinallythetrolleyandtherearobstacledistanceismeasuredbytheultrasonicsensor,andeventuallymakeadjustments.Thewholeprocessbysingle-chipcomputerfordataprocessing,itisaconvenientandsafewayofparking.Thethesisfirstputsforwardtheoverallplan,andthenbasedonSTC89C52RCMCUdevelopmentandapplication,andexplained.Inthepaperalsointroducesthesoftwarestructureofthesystem.Onthepremiseofunderstandingoftheworkingprincipleofthehardwareconditions,usingClanguageprogrammingtorealizethefunctionofthesystem.KeyWords:ThetransducerSTC89C52RCSCMAutomaticparkingTheClanguage目录22645第一章引言 198151.1研究背景及发展现状 1217801.2研究目的及意义 1187221.3研究容 120441第二章方案的论证及设计 2102432.1自动泊车系统的设计要求 2234972.2系统的主要功能 218458第三章自动泊车系统的硬件设计 4304453.1自动停泊小车的硬件系统 4120473.2STC89C52单片机的电路图及引脚说明 464113.3L298N电机驱动模块 7172503.4超声波传感器模块 10279423.5红外避障模块 1242043.6LCD1602液晶显示 1413332第四章自动泊车系统的软件设计 1648954.1开发软件 161674.1.1Keil软件的介绍 1676844.1.2STC_ISP软件介绍 17169584.2自动泊车系统主程序 1756524.3L298N电机驱动程序 19309024.4超声波测距程序 1959734.5红外避障模块程序 2113014.6LCD1602液晶显示程序 2118279第五章自动停泊小车的测试 2425708结论 263423致 2720145参考文献 2825000附录 2916816附录一 2915809附录二 36.第一章引言1.1研究背景及发展现状在当今社会,科技不断发展和更新,逐渐形成了家有一车的趋势,拥有一辆自己的汽车成为了当今社会人们生活中的重要一部分。然而拥有了自己的爱车之后,许多棘手的问题也都随之而来。最重要的是考取驾照,考取驾照时,倒库和移库作为必考科目之一,有一定的道理。只要不开车就要停车,如果作为一名新手或者倒车技术还不够硬的驾驶者,这无疑是最折磨人的事情,导致发生爱车小规模摩擦等不必要的麻烦。为了解决这种情况的发生,各大汽车厂商研发出了自动泊车功能,自动泊车逐渐进入了人们的视野之中,并广泛被大众使用。1.2研究目的及意义伴随着汽车的普及和人们物质文化水平的提高,自动停泊小车正迅速地走进人们的生活中来,自动泊车系统不但给人们带来方便,也让停车成为了一种享受。自动泊车作为一个强大的控制系统,对距离的检测和车辆行驶速度的把握能力要远远强于驾驶者的手动控制。自动泊车是由处理器,检测系统和控制系统组成。先由检测系统来检测汽车周围的环境和汽车自身状况,然后传出到处理器,对数据进行处理。最后由控制系统来控制汽车的行动方式和轨迹,从而达到自动停车的功能。在此过程中,驾驶员需要按下启动自动停泊装置的按钮即可,双手可完全脱离方向盘既舒适又简单。1.3研究容本次设计就是利用所学的单片机知识设计一款具有自动停泊功能的小车,对小车进行自动倒入车位、测量安全距离和对驾驶员的危险距离提示等功能进行完善,并且参照各大汽车制造商研发出来的自动泊车功能,对自己的小车进行完善与改进,并与生活接轨做出一款既能丰富自己知识面又能应用到现实生活中的设计。研究的容有:具有自动倒车与停泊,对切入车位的角度和车辆行驶的速度进行控制;超声波检测距离,并将距离呈现给驾驶者,提供距离信息给驾驶员;危险距离提示,给予驾驶员提醒,使驾驶员作出相应判断。并将这一系列的功能用基于单片机的小车来实现。第二章方案的论证及设计2.1自动泊车系统的设计要求整个系统应用51单片机作为处理数据的核心部位,并利用其它各部件实现侧方位停车,与距离检测,危险提示等模块来实现此次自动停泊小车的设计。应对各个模块、各部件结构进行熟悉了解,对代码进行编写和优化,以及外围传感器的驱动和测距模块所使用的相关电气化元器件的工业要求。首先要确定小车开启自动停泊模式的位置,然后计算好距离、角度和速度然后进行倒车,利用小车后面的红外模块对障碍物进行检测,确保倒车过程能顺利实现。完成倒车后利用超声波模块检测车尾与后面障碍物的距离,并显示在LCD显示屏上,最后对位置进行调整。整个过程中要计算好车与停车位的参数,比如:车身长度与宽度,入库时车与障碍形成的角度,停车的长度与宽度,还有小车实现功能时的位置。2.2系统的主要功能本次设计的自动停泊小车具有以下功能:1、自动将小车停泊到停车位中〔列式停车位。2、LCD1602距离显示:先输出超声波模块所测出的距离。3、红外避障:对障碍物进行探测。4、超声波测距:测量小车与后方障碍物的距离。5、蜂鸣器报警提示:进行危险状态提示。系统功能图如下图2-1所示。图2-1系统功能图用图的方式可以展示出本次设计:基于51单片机的自动停泊小车设计的基本工作原理,输入输出部分。超声波传感器和红外传感器能够让车更加规的完成倒车动作,而LCD1602液晶屏和蜂鸣器也能让驾驶者更加顺利地得到实时数据,并且完成倒车。第三章自动泊车系统的硬件设计3.1自动停泊小车的硬件系统在本次的毕业设计中自动停泊小车的硬件上主要使用了:STC89C52RC的单片机、超声波传感器、红外线避障传感器、L298N电机驱动模块以及小车部件等。将自动泊车系统应用于小车上,使普通小车转变成具有自动停泊功能的小车并能模拟自动泊车的基本过程。自动停泊小车的硬件框图如下图3-1所示。图3-1自动停泊小车的硬件框图图3-1表示自动泊车系统应用在小车上时,各个输入、采集数据的模块的工作状态以及通过单片机计算处理后的作出的数据输出和相应的电机驱动状态的展现。3.2STC89C52单片机的电路图及引脚说明STC89C52单片机是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片含8KBYTES的可反复擦写的FLASH只读程序存储器和256BYTES的随机数据存储器〔RAM,器件采用ATMEL公司的高密度,非易失性存储技术生产,与标准MCS-51指令系统及8052产品引脚兼容。功能强大的STC89C52单片机适合于许多较为复杂的控制应用场合[11]。引脚图如图3-2所示:图3-2STC89C52RC引脚图主要特性如下:增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,兼容MCS51兼容系统;8k可反复擦写<大于1000次>FLASHROM;256x8bit部RAM;工作电压:5.5V~3.3V〔5V单片机/3.8V~2.0V〔3V单片机;工作频率围:0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz;用户应用程序空间为8K字节;时钟频率0-24MHz;双向32个I/O口复位后为:P1/P2/P3/P4是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻;ISP〔在系统可编程/IAP〔在应用可编程,无需专用编程器,无需专用仿真器,可通过串口〔RxD/P3.0,TxD/P3.1直接下载用户程序,数秒即可完成一片;EEPROM功能;看门狗功能;3个16位可编程定时/计数器中断,即定时器T0、T1、T2;2个外部中断源,共8个中断源;通用异步串行口〔UART,还可用定时器软件实现多个UART;工作温度围:-40~+85℃〔工业级/0~75℃〔商业级PDIP封装。STC89C52RC单片机的工作模式:掉电模式:典型功耗<0.1μA,可由外部中断唤醒,中断返回后,继续执行原程序;空闲模式:典型功耗2mA;正常工作模式:典型功耗4Ma~7mA;STC89C52RC引脚功能说明:40个引脚按其功能可以分为以下三类;电源及时钟引脚——Vcc、Vss;XTAL1、XTAL2;控制引脚——PSEN、ALE/PROG、EA/Vpp、RESET;I/O口引脚——P0、P1、P2、P3,为四个八位I/O口的外部引脚。P0口是一个双功能的八位并行口,字节地址为80H,位地址为80H~87H。端口的各位具有完全相同但又相互独立的电路结构。P0口作为双功能口〔地址/数据复用口和通用I/O口,当P0口用作地址/数据复用口时,是一个真正的双向口,用作与外部储存器的连接,输出低八位地址和输出/输入8位数据。当P0口作为通用I/O口时,需要在片外接上拉电阻,此时端口不存在高阻抗状态,因此是一个准双向口;当作为通用的I/O口输入时,应先向端口输出锁存器写入1。P0口可驱动8个LS型TTL负载。P1端口〔P1.0~P1.7,1~8引脚:八位,准双向I/O口,在部具有自带的上拉电阻。P1的输出缓冲器可驱动〔吸收或者输出电流方式4个TTL输入。对端口写入"1”时,通过部的上拉电阻把端口拉到高电位,这是可用作输入口。P1口作输入口使用时,因为有部上拉电阻,那些被外部拉低的引脚会输出一个电流〔I。此外,P1.0和P1.1还可以作为定时器/计数器2的外部技术输入〔P1.0/T2和定时器/计数器2的触发输入〔P1.1/T2EX。在对FlashROM编程和程序校验时,P1接收低8位地址。P2端口〔P2.0~P2.7,21~28引脚:P2口是一个自带部上拉电阻的8位双向I/O端口当单片机扩展外部储存器及I/O口时,P2口作为高八位地址线总线用,输出高八位地址,P2口也可以当做普通的I/O口使用。当作为普通的I/O口输入时,应先向端口输出锁存器写入1;P2口与P0口输出的低八位地址一起构成16位地址,可以寻址64KB的地址空间,在访问外部程序存储器和16位地址的外部数据存储器时,P2送出高8位地址。在访问8位地址的外部数据存储器时,P2口引脚上的容〔就是专用寄存器〔SFR区中的P2寄存器的容,在整个访问期间不会改变。在对FlashROM编程和程序校验期间,P2也接收高位地址和一些控制信号。P3端口〔P3.0~P3.7,10~17引脚:P3是一个带部上拉电阻的8位双向I/O端口。P3口作为第二功能的输出/输入或第一功能通用输入,均需将相应位的锁存器置1。实际应用中,由于复位后P3口锁存器置1,满足第二功能所需要的条件,所以不需要任何设置工作,就可以进入第二功能操作。当某位不作为第二功能使用时,作为第一功能I/O口使用。引脚输入部分有两个缓冲器,第二功能的输入信号取自缓冲器BUF3的输出端,第一功能输入信号取自缓冲器BUF2的输入端[8]。RST〔9引脚:复位信号输入端,高电平有效。在此引脚加上持续时间大于2个机器周期的高电平,就可以使单片机复位。当单片机正常工作时,次引脚应该为≤0.5V的低电平。当看门狗定时器溢出时,该引脚将输出长达96个时钟震荡周期的高电平。ALE/ROG〔30引脚ALE为CPU访问外部程序存储器或外部数据存储器或外部数据存储器提供一个地址锁存的信号,将低八位地址锁存在片外的地址锁存器中。在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。如果需要,通过把地址位8EH的SFR的第0位置"1”,ALE操作将无效。这一位置"1”,ALE仅在执3.3L298N电机驱动模块L298N芯片的介绍L298N是ST公司生产的一种高电压、大电流电机驱动芯片。该芯片的主要特点是工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器、线圈等感性负载;采用标准TTL逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作;有一个逻辑电源输入端,使部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。L298N芯片如图3-3所示:图3-3L298N芯片L298N的工作原理:在L298N模块中有两组H桥驱动电路,每一组桥H电路中有4个三极管,四个三机关两两相对,在导通时,可以控制流过电机的电流的方向,并通过此方法来控制电机的正传反转等,从而控制此小车的行进方向。此模块有IN1、IN2、IN3、IN4四个逻辑输入端,其中IN1、IN2控制一个电机,IN3、IN4控制另一个电机。当IN1输入高电平为1、IN2输入低电平为0时,IN1、IN2所控制的电机正转,当IN1输入为低电平0,IN2输入高电平1时,电机反转。将PWM引脚上的跳线帽去掉后,从ENA、ENB端输入,可控制电机速度。L298N芯片引脚说明:1脚:电流监测端A2脚:输出端3脚:输出端 4脚:功率电源电压<+12V>5脚:输入端 6脚:时能端〔通过电阻接地7脚:输入端 8脚:GND接地9脚:逻辑电源电压端〔+5V> 10脚:输入端11脚:使能端 12脚:输入脚13脚:输出端 14脚:输出端15脚:电流监测端BL298N电机驱动模块原理图如下图3-4所示:图3-4L298N电机驱动模块L298N电机驱动模块参数:驱动芯片:L298N双H桥直流电机驱动芯片;驱动部分端子供电围Vs:+5V~+12V;如需要板取电,则供电围Vs:+6V~+12V;驱动部分峰值电流Io:2A;逻辑部分端子供电围:Vss:+5V~+7V〔可板取电+5V;逻辑部分工作电流围:0~36mA;控制信号输入电压围:低电平:-0.3V≤Vin≤1.5V;高电平:2.3V≤Vin≤Vss;使能信号输入电压围:低电平:-0.3≤Vin≤1.5V〔控制信号无效;高电平:2.3V≤Vin≤Vss〔控制信号有效;最大功耗:20W〔温度T=75℃存储温度:-25℃~+130℃驱动板尺寸:52mm*44mm*33mm<其他扩展:控制方向指示灯、逻辑电源选择接口。3.4超声波传感器模块超声波测距是利用超声脉冲回波渡越时间法来实现的。设超声波脉冲由传感器发出到接收所经历的时间为t,超声波在空气中的传播速度为c,则从传感器到目标物体的距离D可用下式求出:D=ct/2。本次毕业设计使用的是HC-SR04超声波测距模块。HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm图3-5超声波传感器系统框图主要功能:1、距离测量;2、温度测量;3、光亮度测量。超声波传感器模块原理如下图3-6所示:图3-6超声波传感器模块原理图基本工作原理:1、采用I/O口TRIG触发测距,给最少10us的高电平信号;2、模块自动发送8个40KHz的方波,自动检测是否有信号返回;3、有信号返回,通过I/O口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=<高电平时间*声速<340M/S>>/2。基本参数:工作电压:DC5V;工作电流:15mA;工作频率:40KHz;探测距离围:2cm~4m;测量温度围:0℃至+100℃〔精度:测量角度:15度;数据输出方式:iic和uart〔57600bps两种方式,用户任选;其中UART方式,是以7个字节为一组,以0x55开头的3个数据是距离数值;以0x66开头的2个数据是温度数据以0x77开头的2个数据是光照度数据。0x55\0x66\0x77是为区分3个数据而增加的数据头;时间限制:支持如下2种探测方式;〔1持续探测;〔2受控间歇探测;距离数据格式:以毫米为最小数据单位,双字节16进制传输,前高后低;温度数据格式:以摄氏度为最小数据单位,单字节16进制传输;光照数据格式:单字节16进制传输;光线暗时数值大,光线亮时数值小;工作温度围:0℃至+100存放温度:-40℃至+120外形尺寸:48mm*39mm*22mm〔H。传播限制:1、超声波探测时,被测物的表面如果为布料、毛料等会出现很大的误差,因为布料或者是毛料对超声波的反射率很小。2、测距时,被测物体的面积不少于0.5平方米且平面要保持平整,否则会出现误差,影响测量的结果。3.5红外避障模块在本次设计中红外避障模块安装于小车的车尾左右两侧,其主要作用是检测后方是否有障碍物存在,并控制蜂鸣器报警,对危险距离进行提示,并提醒驾驶者后方有障碍物。红外避障模块原理如下图3-7所示:图3-7红外避障模块上图的红外避障模块展示了其基本的工作原理:红外二极管发射红外线波,遇到障碍后,红外线波返回被模块上的红外接收装置接收到,并将信息传递给单片机,然后做出相应的处理。模块描述:红外模块由光电传感器组成,光电传感器一般用于光的测量、光的控制和光电转换〔将光的变化转换为电的变化。光敏电阻器是利用半导体的光电导效应制成的一种电阻值随入射光的强弱而改变的电阻器,入射光强,电阻减小,入射光弱,电阻增大。还有另一种入射光弱,电阻减小,入射光强,电阻增大。只要人眼可感受的光,都会引起它的阻值变化。该传感器模块对环境光线适应能力强,由红外发射管发射出一定频率的红外线,当检测方向遇到障碍物时,红外线反射回来被接收管接收,经过比较器电路处理之后,绿色指示灯会亮起,同时信号输出接口输出数字信号〔一个低电平信号,可通过电位器旋钮调节检测距离,有效距离围2~80cm,工作电压为3.3V—5V。该传感器的探测距离的优点是可以通过电位器调节、具有干扰小、便于装配、使用方便等特点,可以广泛应用于机器人避障、避障小车、流水线计数及黑白线循迹等众多场合。模块参数说明:当模块检测到前方障碍物信号时,电路板上绿色指示灯点亮电平,同时OUT端口持续输出低电平信号,该模块检测距离2~80cm,检测角度35°,检测距离可以通过电位器进行调节,顺时针调电位器,检测距离增加;逆时针调电位器,检测距离减少;传感器主动红外线反射探测,因此目标的反射率和形状是探测距离的关键。其中黑色探测距离最小,白色最大;小面积物体距离小,大面积距离大;传感器模块输出端口OUT可直接与单片机I/O口连接即可,也可以直接驱动一个5V继电器。连接方式:VCC-VCC;GND-GND;OUT-I/O;比较器采用LM393,工作稳定;可采用3-5V直流电源对模块进行供电。当电源接通时,红色电源指示灯点亮;具有3mm的螺丝孔,便于固定、安装;电路板尺寸:3.1CM*1.5CM;模块接口说明〔3线制:1、VCC外接3V-5V电压〔可以直接与5V单片机和3V单片机相连;2、GND外接GND;3、OUT小板数字量输出接口〔0和1。3.6LCD1602液晶显示本设计采用LCD1602,即工业字符型液晶,能够同时显示16x02即32个字符〔16列2行。LCD1602液晶屏原理图如下图3-8所示:图3-8LCD1602封装图及相关引脚图接口定义如下:1脚:Vss为地电源;2脚:VDD为电源正极;3脚:VEE为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生"鬼影",使用时可以通过一个10K的电位器调整对比度;4脚:RS为数据命令选择端寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器;5脚:R/W读写选择端,高电平为读操作,低电平为写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据;6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令;7~14脚:D0~D7为8位双向数据线;15脚:BLA背光电源正极;16脚:BLK背光电源负极。基本操作时序:1、读状态:输入:RS=L,RW=H,E=H输出:D0~D7=状态字;2、写命令:输入:RS=L,RW=L,D0~D7=指令码,E=高脉冲输出:无;3、读数据:输入:RS=H,RW=H,E=H输出:D0~D7=数据;4、写数据:输入:RS=H,RW=L,D0~D7=数据,E=高脉冲输出:无。复位说明〔初始化:延时15ms;写命令38H〔不检测忙信号;延时5ms;写命令38H〔不检测忙信号;延时5ms;写命令38H〔不检测忙信号;以后每次命令、读/写数据操作之前均需要检测忙信号;写命令38H:显示模式设置;写命令08H:显示关闭;写命令01H:显示清屏;写命令06H:显示光标移动设置;写命令0CH:显示开及光标设置。第四章自动泊车系统的软件设计4.1开发软件本次自动停泊小车的设计主要使用了KeilC51编程软件进行程序的编写,以及STC_ISP程序烧制软件对单片机进行程序烧录。Keil软件的介绍1、C51开发系统基本知识KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,包括C语言编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在的完整开发方案。KeilC51是在ANSIC基础上针对51单片机的硬件特点进行的拓展,并向51单片机上移植,经过多年努力,C语言已经成为公认的高效、简介而又贴近51单片机硬件的实用高级编程语言。目前大多数的51单片机用户都在使用C语言进行程序设计。用C51进行单片机软件开发,具有如下优点:功能十分强大;可读性好;可移植性好;可维护性得到加强;易学易用。2、KeilC51单片机软件开发系统的整体结构C51工具包的整体结构,uVision与Ishell分别是C51forWindows和forDos的集成开发环境〔IDE,可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可以IDE本身或其他编辑器编辑C或汇编源文件。然后分别由C51及C51编译器编译生成目标文件〔.OBJ。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件〔.ABS。ABS文件由OH51转换成标准的.Hex文件,以供调试器Dscope51或Tscope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。使用独立的Keil仿真器时,注意事项:〔1仿真器标配11.0592MHz的晶振,但用户可以在仿真器上的晶振插孔中换其他频率的晶振;〔2仿真器上的复位按钮只复位仿真芯片,不复位目标系统;〔3仿真芯片的31脚〔/EA已接至高电平,所以仿真是只能使用片ROM,不能使用片外ROM;但仿真器外引插针中的31脚并不与仿真芯片的31脚相连,故该仿真器仍可插入到扩展有外部ROM〔其CPU的/EA引脚接至低电平的目标系统中使用。优点:〔1KEILC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势;〔2与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C语言来开发,体会更加深刻。KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。STC_ISP软件介绍STC_ISP是一款单片机下载编程烧录软件,是针对STC系列单片机而设计的,可下载STC89系列、12C2052系列和12C5410等系列的STC单片机,使用简便,现已被广泛使用。4.2自动泊车系统主程序本次设计的主程序主要是对超声波模块及LCD液晶屏等模块进行初始化并调用定时器。并使小车进行功能的实现。是主程序中的部分代码如下所示〔while循环体中的部分省略:主程序部分代码:voidmain<void>{ uinta; ucharflag_c; Sound=1; LCMInit<>; DisplayListChar<0,1,Cls>; TMOD=0x01; TH0=0; TL0=0; ET0=1; EA=1; BZ_L=1; BZ_R=1; flag_c=0; while<1> {….}}自动停泊小车系统的主程序主要是对各个模块进行初始化以及调用定时器。以上为主程序的主要代码〔while循环体中的部分省略此代码为设计的主程序main〔部分,首先此段代码对程序中的变量、超声波模块、LCD进行初始化。并开始对小车的功能进行实现。主程序流程图如图4-1所示:图4-1主程序流程图以上为该系统的流程图,此流程图表现了主程序的作用与运行主程序的运行过程,如果在运行次程序时满足所有条件,程序将完成自动泊车的全过程。4.3L298N电机驱动程序L298N电机驱动模块可以实现小车的5个运动状态,包括小车的停止、前进、后退、左转、右转。当4个状态引脚IN1,IN2,IN3,IN4为逻辑输入端,当接收到高、低电平信号时,执行对应的小车运动状态。L298N电机驱动模块程序如下所示:voidGo<>{IN1=1;IN2=0;IN3=1;IN4=0}…..voidLeft<>{IN1=0;IN2=1;IN3=1;N4=0;}以上程序部分即展示了小车5种运动状态下的状态引脚的电平信号值。本次设计采用的是IN1和IN2引脚控制左端电机,IN3和IN4控制右端电机的2轮小车,通过控制不同的电平对引脚的输入从而控制小车当前的状态。4.4超声波测距程序超声波测距模块主要是测量小车后方与障碍物之间的距离,同时可以通过液晶显示屏来显示车辆后方与后方障碍物的距离。当红外避障模块监测到后方有障碍物时,小车进行停车操作,此时超声波进行距离检测。超声波测距模块测距部分程序如下所示:voidceju<void>{ StartModule<>; while<!RX>; TR0=1; while<RX>; TR0=0; Conut<>; delayms<80>; }以上程序为超声波测距的实现,当模块输出口〔RX为0时开始等待,并且开启计数,当模块输出口为1时开始计数并等待,然后关闭计数,最后调用Conut函数进行计算对距离进行计算,并且进行延时。超声波测距流程图如图4-2所示:图4-2超声波测距流程图从流程图可以看出在无论小车在任何运动状态中只要红外壁障模块测出小车后方有障碍物,超声波模块就开始测量距离。4.5红外避障模块程序在本次设计中,红外模块的作用是对小车的运动状态进行控制。安装在小车车尾左右放置,通过红外臂章模块对两侧的障碍物进行探测从而控制小车运动状态,同时,蜂鸣器作出报警相应提示,此时应注意车身周围是否存在障碍物。红外模块的功能可以独立完成,只需要给此模块一个高或低的电平即可。当红外模块发射管发射出的的红外线被红外模块的接收管接收时,此段程序开始执行。当左右两侧检测到障碍物时,蜂鸣器进行报警,小车进行停车操作,并打开延时。延迟过后蜂鸣器关闭报警状态。红外避障模块工作流程图如图4-3所示:图4-3红外避障流程图在此流程图中,我们可以看出红外模块在不同的工作状态下所执行的运行状态和执行的操作也不相同。当遇见障碍物时蜂鸣器进行报警提示,在泊车开始前的检测只会对驾驶员进行报警提醒,若是在泊车过程中不仅会报警提醒驾驶者同时会取消泊车操作。而当不存在障碍物则完成泊车过程。4.6LCD1602液晶显示程序LCD1602液晶屏主要时将超声波模块所测得的数值显示出来,并且呈现给驾驶者,使其更能直观的将小车车尾与障碍物的距离显示出来,以提醒驾驶者注意安全。LCD1602液晶显示程序中初始化程序部分如下所示:voidLcdInitiate<void>{delay<15>;WriteInstruction<0x38>;…….delay<5>;WriteInstruction<0x01>;delay<5>;}以上代码为使用LCD1206液晶显示屏之前要对其进行初始化。随着液晶屏的初始化操作完成以后,就该对其忙检测来确定LCD液晶屏当前的状态。LCD1602液晶显示程序中显示程序部分如下所示:voidWriteCommandLCM<unsignedcharWCLCM,BuysC>{ if<BuysC>ReadStatusLCM<>; LCM_Data=WCLCM; LCM_RS=0; LCM_RW=0; LCM_E=0; LCM_E=0; LCM_E=1; }unsignedcharReadDataLCM<void>{ LCM_RS=1; LCM_RW=1; LCM_E=0; LCM_E=0; LCM_E=1; return<LCM_Data>;….以上所显示程序代码就是在忙检测和显示设置方面完成的前提下,进行数据的读与写的过程,并且将得到的数据显示在液晶屏上。让使用者能够更加直观的知道所获得的数据。第五章自动停泊小车的测试第一次测试的时候伴随着我紧的心情,小车还是出现了一些小问题。不过我并没有气馁,经过多次调试后,小车能实现功能,并且运行得十分流畅。不论是L298N电机驱动模块,还是超声波测距模块、红外避障模块,都能正常工作。LCD显示屏和蜂鸣器工作状态也没有异常。本次设计主要考虑的问题有:1、小车是否需要自动寻找泊车位置;2、小车的初始位置如何选择;3、切入角度大小是多少;4、超声波模块测得与后方距离为多少时向前移动;5、如果需要向前移动,需要移动多少。遇到以上问题后开始研究解决方法,并且经过无数次的测试、改进。到最后解决问题也好点了不少时间,不过,问题都已迎刃而解:1、此次涉及小车不需要自动寻找停车位,那样会多附加很多功能,难以实现;2、初始位置应该与左侧的障碍物平行;3、入弯切入角约为40°;4、如果超声波模块测得的距离为危险距离时,小车需要向前移动;5、移动的距离为脱离超声波测得的危险距离即止。设计的不足:此次设计完成后,小车可以实现的功能符合课题的基本要求,虽然在制作、调试过程中历尽艰辛,并付出了很多,但是设计中还存在着不足和需要改进的地方,具体如下:1、需要计算好地面与车轮的摩擦,会导致误差;2、小车可以自动寻找车位,并完成倒车;3、主函数太大,运行时会出现问题;4、对电机的控制不准确,会出现碰撞;5、万向轮有时会影响小车的前进方向。升级的方向:基于以上不足,小车需要改进改进的方向大致为一下点:首先,对车轮进行升级,并且增加车身重量,如此可以对抗摩擦力,并减小摩擦力带来的误差。其次,对单片机进行升级,变为可以进行更强大的数据处理的芯片,在对此进行功能附加,让小车完成自动寻找车位,并且完成倒车;然后对程序进行调整,简化主函数,这样有利于程序更好的运行,并且在运行期间不会出错;而且在功能改进时程序更加简易明了。最后,对万向轮进行改进,由于小车底盘的原因,电池盒的位置和万向轮离得太近,导致万向轮不能随意转动,方向也跟着受影响,不能改变。结论在大学的最后这段时间里,我把全身心投入到毕业设计中去,虽然学校给的时间是两个月,但由于自身原因和课题原因,我不得不提前准备,期间尝遍了设计带给我的酸甜苦辣。历时三个月,设计终于完成了,我在此过程中学到了很多,也懂得了很多。虽然我做出来的设计与期望相差很大,但我看着自己的成果还是很欣慰,很高兴。我感觉最后的这次设计教会我们的东西不比这大学四年来学到的东西少,这些都是走向社会以后的宝贵经验。它让我知道只有不断摸索,不断创新,不断超越自己才能扫尽眼前的雾霾,迎接和煦的,创造美好的新生活。四年大学中我学到了不少知识,不过这些知识的绝大部分都是一些理论知识,虽然有用,但是无法应用到实践中去。但是通过此次设计,使我把课堂上学到的C语言知识、单片机知识全部应用到实践中去,让理论与实践有了完美的结合,在此结合的过程中让自己的知识得到强化和复习,温故而知新,学到了不少新的知识。还对KeilC51软件和STC_ISP软件使用方法得到了加固。并且让我感觉到自己的知识面和动手能力等多方面都得到了加强,比起以前更上一层楼。我也明白了单单掌握理论知识无异于纸上谈兵,单单掌握实践,就像无头苍蝇,理论与实践是不可分离、相辅相成的。除了对知识的掌握和深化,我还知道了团队的重要性,因为没有同学们的帮助,此次设计也就很难完成,团队作用是伟大的。致本次设计历时数个月,到最后能够顺利完成少不了各位老师的悉心指导与各位同学们的热心帮助。如果不是他们,我在设计制作期间遇到的无数艰难将会无法度过。首先我要感我的指导老师——博老师,他在此期间,不辞辛苦,对我进行了无私的指导,使我在设计进行期间得到了很大的帮助,并且不厌其烦的为我讲解各类设计中所用到的知识。其次,我要感教研组的其它老师,因为在我的导师不在或者忙碌时,我遇到困难后经常麻烦他们,不过老师们都会细心地为我讲解。还有实验室的迟明玉老师,在设计的制作过程中,所需要的工具和部分器件都由迟老师为我提供。最后我要感我的同学们,每当一个人遇到问题时,其它同学都会无私的利用自己的时间帮助其解决问题,让我感觉到了集体的力量,让我明白了只要我们团结,没有什么不可战胜。尊敬的老师和同学们,没有你们的帮助我的设计也不能顺利完成,你们,!参考文献[1]尤晴曦,洪兴:"基于变论域理论的自动倒车控制",《师大学学报》,2005.[2]吴锴:《智能自动泊车系统研究》,2008.[3]宋金泽:"自主泊车系统关键技术研究",《国防科技大学博士学位论文》,2009.[4]王为青,程国刚:《KEILC51应用开发技术》,人民邮电,2006.[5]高海生:《单片机应用技术大全》,西南科技,2003.[6]朝青:《单片机原理及接口技术》,航天航空大学,2004.[7]玲:"平行泊车方法研究与仿真",《长安大学硕士论文》,2009.[8]毅刚,喜元,宇:《单片机原理及应用》,2000.[9]何立民:《单片机高级教程》,航天航空大学,2001.[10]晓安:《MSC-51单片机原理及应用》,大学,2001.[11]广第:《单片机基础》,航天航空大学,1999.[12]徐惠民,安德宁:《单片机微型计算机原理及应用》,邮电大学,2001.[13]夏继强:《单片机实验与实践教程》,航天航空大学,2001.[14]志强,胡辉:《单片机应用系统设计实践指南》,2003.[15]肖红兵:《单片机应用技术》,人民邮电,2005.附录附录一源程序:变量以及函数的声明:.#include<reg52.h> #include<intrins.h> #defineucharunsignedchar#defineuintunsignedint #defineLCM_DataP0 sbitBZ_L=P1^6; sbitBZ_R=P1^7; sbitTX=P3^1;sbitRX=P3^2;sbitIN1=P1^0;sbitIN2=P1^1;sbitIN3=P1^2;sbitIN4=P1^3;sbitPWM1=P1^4;sbitPWM2= P1^5;sbitSound=P3^7;sbitLCM_RW=P2^5;sbitLCM_RS=P2^6;sbitLCM_E=P2^4;bitsucceed_flag;#defineBusy0x80voidDelay5Ms<void>;unsignedcharReadDataLCM<void>;unsignedcharReadStatusLCM<void>;unsignedcharcodeCls[]={""};unsignedcharcodeASCII[15]={'0','1','2','3','4','5','6','7','8','9','.','-','M'};staticunsignedcharDisNum=0;unsignedinttime=0;unsignedlongS=0;bitflag=0;unsignedchardisbuff[4] ={0,0,0,0,};voidWriteDataLCM<unsignedcharWDLCM>{ ReadStatusLCM<>; LCM_Data=WDLCM; LCM_RS=1; LCM_RW=0; LCM_E=0; LCM_E=0; LCM_E=1;}voidWriteCommandLCM<unsignedcharWCLCM,BuysC>{ if<BuysC>ReadStatusLCM<>; LCM_Data=WCLCM; LCM_RS=0; LCM_RW=0; LCM_E=0; LCM_E=0; LCM_E=1; }unsignedcharReadDataLCM<void>{ LCM_RS=1; LCM_RW=1; LCM_E=0; LCM_E=0; LCM_E=1; return<LCM_Data>;}unsignedcharReadStatusLCM<void>{ LCM_Data=0xFF; LCM_RS=0; LCM_RW=1; LCM_E=0; LCM_E=0; LCM_E=1; while<LCM_Data&Busy>;/ return<LCM_Data>;}voidLCMInit<void>{ LCM_Data=0; WriteCommandLCM<0x38,0>; Delay5Ms<>; WriteCommandLCM<0x38,0>; Delay5Ms<>; WriteCommandLCM<0x38,0>; Delay5Ms<>; WriteCommandLCM<0x38,1>; WriteCommandLCM<0x08,1>; WriteCommandLCM<0x01,1>; WriteCommandLCM<0x06,1>; WriteCommandLCM<0x0F,1>;}voidDisplayOneChar<unsignedcharX,unsignedcharY,unsignedcharDData>{ Y&=0x1; X&=0xF; if<Y>X|=0x40; X|=0x80; WriteCommandLCM<X,1>; WriteDataLCM<DData>;}voidDisplayListChar<unsignedcharX,unsignedcharY,unsignedcharcode*DData>{ unsignedcharListLength;ListLength=0; Y&=0x1; X&=0xF; while<DData[ListLength]>0x19> { if<X<=0xF> { DisplayOneChar<X,Y,DData[ListLength]>; ListLength++; X++; } }}voidDelays<uinta>{ ucharb,c; for<b=0;b<125;b++> for<c=0;c<125;c++> for<;a>0;a--> ;}voidConut<void> { time=TH0*256+TL0; TH0=0; TL0=0; S=<time*1.7>/100; if<<S>=700>||flag==1> { flag=0; DisplayOneChar<0,1,ASCII[11]>; DisplayOneChar<1,1,ASCII[10]>; DisplayOneChar<2,1,ASCII[11]>; DisplayOneChar<3,1,ASCII[11]>; DisplayOneChar<4,1,ASCII[12]>; } else { disbuff[0]=S%1000/100; disbuff[1]=S%1000%100/10; disbuff[2]=S%1000%10%10; DisplayOneChar<0,1,ASCII[disbuff[0]]>; DisplayOneChar<1,1,ASCII[10]>; DisplayOneChar<2,1,ASCII[disbuff[1]]>; DisplayOneChar<3,1,ASCII[disbuff[2]]>; DisplayOneChar<4,1,ASCII[12]>; } }voidzd0<>interrupt1 {flag=1; }voidStartModule<> { TX=1; _nop_<>; _nop_<>; _nop_<>; _nop_<>; _nop_<>; _nop_<>; _nop_<>; _nop_<>; _nop_<>; _nop_<>; _nop_<>; _nop_<>; _nop_<>; _nop_<>; _nop_<>; _nop_<>; _nop_<>; _nop_<>; _nop_<>; _nop_<>; _nop_<>; TX=0;}voiddelayms<unsignedintms>{ unsignedinta; unsignedintb; for<a=0;a<ms;a++> for<b=0;b<109;b++>; }voidBACK<>{ IN1=0; IN2=1; IN3=0; IN4=1;}voidGO<>{ IN1=1; IN2=0; IN3=1; IN4=0;}voidStop<>{ IN1=0; IN2=0; IN3=0; IN4=0;}voidLeft<>{ IN1=1; IN2=0; IN3=0; IN4=1;}voidRight<>{ IN1=0; IN2=1; IN3=1; IN4=0;}voidceju<void>{ StartModule<>; while<!RX>; TR0=1; while<RX>; TR0=0; Conut<>; delayms<80>; /}主函数:voidmain<void>{ uinta; ucharflag_c; Sound=1; LCMInit<>; DisplayListChar<0,1,Cls>

温馨提示

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

评论

0/150

提交评论