基于单片机的智能小车设计与制作.doc
桂林航天工业学院桂林航天工业学院毕毕 业业 论论 文(设计)文(设计)论文题目论文题目基于单片机的智能小车设计与制作姓姓名名学学号号_ _专专业业指导教师指导教师职职称称中国中国桂林桂林二二 0 一二年九月一二年九月2目录1 1 引言引言32 2 设计思想、方案选择及设计任务的指标设计思想、方案选择及设计任务的指标42.1 设计思想42.2 方案设计比较与选择52.2.1 遥控模块52.2.2 障碍物检测模块62.3 设计指标及技术参数错误!未定义书签。错误!未定义书签。3 3 硬件电路设计硬件电路设计73.1 智能寻迹小车系统框图及概述 73.2 智能小车系统硬件电路图及单元电路 83.2.1 系统的硬件电路总体设计 83.2.2 分布单元电路设计与功能概述 83.3 单元电路设计小结 134 4 软件程序设计软件程序设计 134.1164.2184.2.1 程序状态指示灯模块184.2.2 流水灯演示模块184.2.3 数码管及跑马灯模块194.2.4 按键中断查询模块194.2.5 话筒声音识别模块194.2.6 光敏电阻及蜂鸣器模块204.2.7 红外反射与直流电机驱动模块204.2.8 串口通信模块 214.3 单元模块程序设计小结215 5 实物运行与测试结果以及结论实物运行与测试结果以及结论215.1 小车的运行情况 225.2 小车的测试结果及分析225.3 结论 236 6 结束语结束语 23参考文献参考文献 23英文摘要英文摘要 25致致 谢谢25附录附录 A A:系统总原理图:系统总原理图26附录附录 B:部分程序清单:部分程序清单 27附录附录 C:33附录附录 D:343基于单片机的智能小车设计与制作基于单片机的智能小车设计与制作王鹰摘摘要要:基于近几年大学生电子大赛中关于小车的研究,对此根据嵌入式系统的应用,提出了提出了一种以8位单片机作为系统大脑能实现智能循线避障避悬崖小车的设计方法,通过主芯片的32个完全IO端口,对这些端口加以信号输入电路,控制电路和执行电路,并且利用红外探头技术检测障碍物和搜集地面信息,采用AT89S52单片机进行适时控制,实现智能循线避障以及避悬崖。智能小车采用前轮驱动,两轮各用一个电机执行,用MAX232芯片来控制,前方和底部探头采用红外发射管和红外接收管进行障碍物检测以及地面信息的采集。关键词:关键词:AT89S52,寻线,避障,避悬崖,流水灯1 1 引言引言随着汽车工业的迅速发展,关于汽车的研究也就越来越受人关注。全国大学生电子大赛和省内电子大赛中几乎每次都有关于小车这方面的题目,全国各高校也都很重视该题目的研究,可见其研究意义很大。本设计就是在这样的背景下提出的,指导教师已经有充分的准备。本题目是结合科研项目而确定的设计类课题。设计的智能电动小车应该具有智能寻迹、避障、避悬崖等功能。根据题目的要求,确定如下方案:在已有线路板及元器件的基础上,将传感器改为红外探头,将前方底部的两个步进电机改为用 LG9110 驱动的电机,再编写一段程序,通过 COM1 端口将程序下载至线路板上的 STC 单片机芯片里,使得 LED 灯和数码管具有程序指示作用以及跑马灯流水灯的演示,并且实现小车的防撞、避悬崖和寻迹。本设计以 AT89S52 为主芯片,通过 P0.0,P0.1,P0.2,P0.3 分别控制 LG9110电机驱动,来驱动电机 1 和电机 2,。由电机的正转与反转来完成小车的前进,后退,左转,右转等功能的基本动作。在小车前进时如果前方有障碍物,由红外发射管发射的红外信号被反射给红外接收管,且将此信号经过P3.7传送入AT89S52中,主芯片通过内部的代码进行小车的绕行,同时主芯片将 P3.7 的信号状态通过 P2.5 的 LED 灯显示出来;小车行走时 P3.5 与 P3.6 的红外接收探头会进行路面检测,当走到悬崖处时,端口将会收到一个电平信号,此电平信号通过相应端4口传送入主芯片中,以此来控制小车后退然后左转以避开悬崖前进;另外通过代码还附有程序状态指示功能,蜂鸣器的报警功能,夜间自动照明等功能。第三代单片机包括了 Intel 公司发展 MCS-51 系列的新一代产品,如 8C15280C51FA/FB80C51GA/GB8C4518C452,还包括了 PhilipsSiemensADMFujutsuOKIHarria-MetraATMEL 等公司以 80C51 为核心推出的大量各具特色与 80C51 兼容的单片机。新一代的单片机的最主要的技术特点是向外部接口电路扩展,以实现 Microcomputer 完善的控制功能为己任,将一些外部接口功能单元如 A/DPWMPCA(可编程计数器阵列)WDT(监视定时器)高速 I/O 口计数器的捕获/比较逻辑等。这一代单片机中,在总线方面最重要的进展是为单片机配置了芯片间的串行总线,为单片机应用系统设计提供了更加灵活的方式。Philips 公司还为这一代单片机 80C51 系列 8C592 单片机引入了具有较强功能的设备间网络系统总线-CAN(Controller Area Network BUS)。新一代单片机为外部提供了相当完善的总线结构,为系统的扩展与配置打下了良好的基础。本设计就采用了比较先进的 89S52 为控制核心,89S52 采用 CHOMS工艺,功耗很低,因此该设计具有实际意义。2 2 设计思想、方案选择及设计任务的指标设计思想、方案选择及设计任务的指标2.12.1 设计思想设计思想本系统主要实现的功能有:避障功能,避悬崖功能,寻黑线功能,声控功能,流水灯演示,程序状态指示功能,数码管演示,报警功能,夜间探照灯照明及方向灯模拟。(1)避障避悬崖功能:小车前进时,如果遇到具有反光的物体或者悬崖时,小车会自动后退一段,然后左转,绕过障碍物和避开悬崖行驶。(2)巡线功能:将小车放在一条特定的黑色跑道上,边缘是白色,小车会寻着黑线行驶,不会走到白色跑道上。(3)声控功能:前进时,用双手拍打一下,小车就会停止前进,这时前方的探照灯依然亮着,再次拍打后,小车又会继续前进。(4)流水灯和数码管演示:将流水灯模块的程序写入单片机之后,小车上的 LED灯会从左到右,从右到左,从两边到中间以及从中间到两边依次点亮。(5)报警功能:小车在遇到悬崖和障碍物时后退左转过程中会报警,一直到继5续前进时才停下警笛声音。(6)夜间探照灯照明及方向灯模拟:当小车处于黑暗条件时,前方的探照灯会一直点亮,起到照明作用;小车处于左转时,左边方向灯闪一次,右边的方向灯会灭,模拟了生活中汽车的方向灯。具体设计思路如图 2-1 所示。避悬崖巡线功能声控功能报警功能COM1 接口方向灯模拟图图2-12-1基本模块方框图基本模块方框图2.22.2 方案设计比较与选择方案设计比较与选择2.2.12.2.1 遥控模块遥控模块方案一:普通遥控玩具小车的遥控装置。此装置是通过发送不同频率的电磁波,被小车接收后,在电路中产生不同的电流和电压,从而控制各个电动机的开关和方向,来实现遥控目标的。此装置需要在遥控器和小车上安装小型天线,用于发射和接受,虽然是无线的,但是也不方便,容易弯曲与损坏,而且遥控距离较短。方案二:红外遥控装置。此装置是通过遥控器的按键发送由一串 0 和 1 的二进制代码组成,被红外接收装置接受,运用单片机将遥控器上的多种按键解码出来,用作单片机系统的输遥控功能流水灯演示避障功能AT89S526入。这样不但解决了常规矩阵键盘线路板过大、布线复杂、占用 I/O 口过多的弊病,而且通过使用遥控器,操作时可实现人与机器设备的分离,从而更加方便实用。通过两种方案的比较,结合本设计所采用的主控制器为单片机芯片AT89S52,故采用第二种方案。2.2.22.2.2 障碍物检测模块障碍物检测模块方案一:超声波探测采用超声波器件。超声波传感器向空气中发射声脉冲,声波遇到障碍物反射回来,被接收探头接受进行相关的计算和处理;超声波波瓣较宽,一个发生器就可以监测较宽的范围。其优点为抗干扰能力强,不受物体表面颜色的影响;缺点为实现电路复杂,且用通常的测量方法在较近距离上有盲区。方案二:光电式探测采用光电式发射器。发射器向外发送信号,如遇到具有反光效应的障碍物,接受管会接收到信号,通过电路转换成高电平或低电平的电信号,送入芯片内部,通过预先设计的程序使其绕过障碍物。其优点是电路实现非常简单,抗干扰能力较强,但是这种探测只能躲避反光物体,如遇黑色物体则不能避障。通过比较,两种方案均有优缺点,由于本设计中的避障功能不需要非常的精确,并且探测的距离比较近,考虑到电路实现的难易程度,对于电路知识掌握不够熟练,所以综合之下,采用方案二。在方案二中,由于单个发射器的照射范围不能太小,因此不使用激光管。用波瓣较宽的脉冲调制型红外发射管和接收管。2.32.3 设计指标及技术参数设计指标及技术参数(1)输入基准电压:6V(2)路径识别:黑色寻迹(3)障碍物检测范围:具有反光性质物体范围:0.005m1m不具反光性质物体范围:0(4)悬崖探测范围:大于 0.1m(5)转弯角度设置:左转 90 度(6)行驶速度:0.06 m/s7(7)遥控距离:25m3 3 硬件电路设计硬件电路设计一个单片机应用系统的硬件电路设计包含有两部分内容:一是系统扩展,即单片机内部的功能单元,如 ROMRAMI/O 口定时/记数器中断系统等能量不能满足应用系统的要求时,必须在片外进行扩展,选择适当的芯片,设计相应的电路。二是系统配置,既按照系统功能要求配置外围设备,如键盘显示器打印机A/DD/A 转换器等,要设计合适的接口电路。3.13.1 智能寻迹小车系统框图及概述智能寻迹小车系统框图及概述如下图3-1所示:图图 3-13-1 小车系统框图小车系统框图微控制器 CPU 即控制核心模块(MCU):使用 AT89S52 单片机,其作用是对其他模块采集到的信号进行通过设计的程序进行相关处理,并发出正确的控制信号,是整个系统中最重要的部分。防撞模块巡迹避悬崖模块都采用红外发射探头和红外接收探头,利用红外光线反射和其对黑白两色反光程度不同的原理,既可以很好的检测到前方能够反射防撞功能模块寻迹避悬崖功能模块声控模块遥控模块数码管显示模块电动机程序指示灯模块跑马灯演示模块蜂鸣器报警模块探照灯模拟模块电机驱动模块COM 1 端微控制器CPU8的白光物体,从而实现绕障碍物与防撞的功能,也可以用来检测黑线与白线,实现智能巡迹的功能,同时还可以根据这种方法来实现避悬崖及其他更多的高级功能。声控模块由普通的小型话筒构成,简易方便,电路搭建也不复杂;在接近小车上方的位置,有间隔的拍打双手两次,小车会实行停止与前进两种状态。流水灯数码管以及程序状态指示模块均由一排发光二极管和一个数码管组成,发光二极管可以展示不同的花样,比且与小车的运行状态同步;数码管采用共阳的方式接入,由芯片端口直接控制,可以更好的展现出小车的运行状态。电机驱动模块分别由两个LG9110芯片通过主芯片的发出指令来驱动底部的两个电动机,以完成小车的顺利运行;采用简单易于管理的 LG9110 驱动芯片,充分主程序有时间去处理其它更多功能,比步进电机驱动更简单,更能提高主芯片的效率。电源模块比较简单,由四节干电池构成电池组,提供整机的电源;COM 接口模块采用 RS232 连接方式,为电脑控制小车实现 RS232 通信建立了接口,能实现串口通信,同时它还是程序下载与烧录不可缺少的端口,可以通过它完成 ISP 编程。3.23.2 智能小车系统硬件电路图及单元电路智能小车系统硬件电路图及单元电路3.2.13.2.1 系统的硬件电路总体设计系统的硬件电路总体设计小车的硬件搭建电路主要根据上述框图的每个模块设计,将分步的模块电路与主控制器连接构成系统总原理图,原理总图见附录 A。3.2.23.2.2 分布单元电路设计与功能概述分布单元电路设计与功能概述(1)微控制器 CPU 模块根据前面关于单片机系统的概述,本设计的主控电路采用 AT89S52 单片机芯片,主要是根据外部遥控和红外探头送入单片机的信号,以内部代码来控制小车的运动状态以及数码管 LED 灯的动作;附控电路选用 LG9110 芯片,即驱动小车的底部电机,它根据主芯片发出的指令来控制电机的正转和反转,以完成小车的前进、后退、左转、右转。两种芯片的结构、引脚及连接电路如下图 3-2 所示:9P0.7/AD732P0.6/AD633P0.5/AD534P0.4/AD435P0.3/AD336P0.2/AD237P0.1/AD138P0.0/AD039VCC40P1.0/T21P1.1/T2EX2P1.23P1.34P1.45P1.56P1.67P1.78P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427P2.7/A1528VSS20P3.0/RxD10P3.1/TxD11P3.2/INT012P3.3/INT113P3.4/T014P3.5/T115P3.6/WR16P3.7/RD17_ALE30PSEN29EA/VPP31RST9XTAL118XTAL219_1OA2VCC3VCC4OB5GND6IB7IA8GND图图 3-23-2AT89S52 引脚图和引脚图和 LG9110 引脚图引脚图(2)COM1 端口模块COM 端口在电路中的连接如下图 3-3 所示:图图 3-33-3COM1 1 端口模块电路端口模块电路MAX232 芯片是为电脑的 RS-232 标准串口设计的单电源电平转换芯片,使用+5v 单电源供电。第一部分是电荷泵电路。由 1、2、3、4、5、6 脚和 4 只电容构成。功能是产生+12v 和-12v 两个电源,提供给 RS-232 串口电平的需要。第二部分是数据转换通道。由 7、8、9、10、11、12、13、14 脚构成两个数据通道。其中 13 脚(R1IN)、12 脚(R1OUT)、11 脚(T1IN)、14 脚(T1OUT)为第一数据通道。8 脚(R2IN)、9 脚(R2OUT)、10 脚(T2IN)、7 脚(T2OUT)为第二数据通道。TTL/CMOS 数据从 T1IN、T2IN 输入转换成 RS-232 数据从 T1OUT、T2OUT 送到电脑 DB9 插头;DB9 插头的 RS-232 数据从 R1IN、R2IN 输入10转换成 TTL/CMOS 数据后从 R1OUT、R2OUT 输出。第三部分是供电,15 脚 GND、16 脚 VCC(+5v)。(3)遥控模块外部遥控信号与小车的无线连接装置利用电视机的遥控器发送无线信号以及安装在小车上的红外遥控接收头接收信号,然后转变成电信号,通过外部中断端口和访问外部程序存储器控制信号的端口送入主芯片内部进行处理,以发出正确的指令来控制小车(4)防撞寻迹以及电机驱动模块此模块是小车的肢体,小车根据微控制器 CPU 大脑所下发的指令,来做出正确的肢体行为,此肢体即为红外反射与直流电机驱动,用红外发射管和红外接收管以及电机驱动芯片 LG9110来实现。其与主芯片的搭建电路如下图3-4 所示:防撞寻迹探头LG9110 驱动电机图图 3-43-4防撞寻迹以及电机驱动模块电路防撞寻迹以及电机驱动模块电路红外反射是通过 V1、V2、V5、V6、V3 和 V4,信号通过 220 电阻到达发射管 V1,电路中 220 欧电阻是给发射管提供工作电压和工作电流;15K 电阻至 V2是将光信号转变成电信号传送到单片机的端口 P3.7 和P3.6以及 P3.5端口,V3、V4 是防撞的,V5、V6 是寻迹的。电机驱动主要是通过驱动芯片 LG9110,将电机直接接到芯片输出的两端,引脚 1 和 4 用于电机方向的控制,1 和 4 的电平不同变换表示电机的运转方向不同,主要有正转和反转等状态,以驱动小车的前进、后退、左转以及右转。11设计中对路径检测精度要求较高,可采用 6 个红外探头置于小车前方(超出小车的车头,成“一”型)和底端(垂直于车身向下,离地面大约 1cm),安装时探头需置于小车前方超出小车车头,是为了增加径向探出距离,从理论上讲,径向探出距离越大即探头超出小车车头的距离越大,越有利于尽早的预测小车即将通过的路径,早点将此信息传递给单片机,作出相应的调整,发出正确的控制信号,从而改善小车的性能,因此从理论上讲,径向探出距离是越大越好。但从实际出发,增加径向探出距离会使探头位于小车前方,必然会使小车的重心前移,如果小车本事的重量较轻的话,势必会影响到小车自身的平衡性,严重影响小车在行驶过程中的稳定性能,当然不会得到理想的控制效果的。但是本设计中的小车底部有电机,重心比较稳,并且检测障碍物选用的是红外探头,重量很轻,故不需考虑会影响到小车的平衡性。此外,在采取合理的安置检测探头后,还可以将探头向下倾斜安置,如下图3-5 所示。这样做会比垂直安置光电传感器更能获得较大的径向探出距离,更能有效的探测障碍物。小车车身红 外 探图图 3-53-5探头装置图探头装置图(5)声控模块实现小车具有声控功能,则需有声音信号采集装置,因此采用比较简单的小型话筒,其声控的硬件电路设计如下图 3-6 所示:12图图 3-63-6声控电路声控电路当有声音输入时,话筒内部的电流会发生相应的变化,47K 电阻将声音信号转变成电压信号,其电压信号经过 10uF 的滤波电容传入到三极管中,8050 在设置时有静态工作点,通过 1M 电阻和 150K 电阻使三极管处于一种即将开启状态或者是即将导通状态,当有信号输入时,三极管导通,输出一个低电平的信号,传送到单片机的 P0.4 端口;没有信号时,三极管将处于截止状态,信号的电平被拉高,则 P0.4 端口将会是一个高电平。这样就可以实现话筒的声控功能。(6)数码管显示、程序指示灯及跑马灯演示模块数码管与 LED 灯电路的电路设计比较简单,主要在于它的软件设计。其硬件电路如下图 3-7 所示:图图 3-73-7显示电路显示电路电路中数码管和 LED 灯与主芯片通过 560 欧的限流电阻连接,主芯片根据预先设计的程序会通过 P1 和 P2 发出指令信号,这样数码管就会显示相应的数字或相应顺序的连续变换,以及发光二极管同时点亮,完成从左到右、从右到左、从中间往两边和从两边往中间依次点亮的跑马灯的演示。(7)探照灯模拟与蜂鸣器模块此模块主要是在电路中加入了两个发光二极管,前方左右各一个用于方向指13示,以及一个光敏电阻用于夜间照明;同时安装了一个蜂鸣器,实现报警功能。其电路如下图 3-8 所示:图图 3-83-8照明与报警电路照明与报警电路光敏电阻 RL1 通过 15K 电阻,将光信号转为电压信号,传送到单片机的 P0.5端口;蜂鸣器经过三极管 V1 和 220 欧电阻与 P0.6 端口连接,作为输出。因为选用的三极管是 8550,故低电平时才能导通。当外界光度较强时,RL1 阻值变小,输入到单片机的是低电平,此时蜂鸣器就会工作;相反,当没有光照或较暗时,送入的是高电平,蜂鸣器就会截止。而且电路中在 P0.7 和 P2.0 端口输出照明电路,黑暗条件下,装在小车前段的 LED 灯会点亮,模拟了汽车的夜间照明。3.33.3 单元电路设计小结单元电路设计小结以上为智能小车的每个单元电路设计,并且对每个电路的设计思想、部分元器件的性能及实现的功能,进行了比较详细的阐述,把每个模块整合后就会形成小车的整体硬件电路,但是这只是小车的肢体,没有语言使大脑发出正确的指令,它需要大脑来控制,即需要对小车的软件部分进行精心设计。4 4 软件程序设计软件程序设计在进行微机控制系统设计时,除了系统硬件设计外,大量的工作就是如何根据每个生产对象的实际需要设计应用程序。因此,软件设计在微机控制系统设计中占重要地位。对于本系统,软件更为重要。在单片机控制系统中,大体上可分为数据处理、过程控制两个基本类型。数据处理包括:数据的采集、数字滤波、标度变换等。过程控制程序主要是使单片14机按一定的方法进行计算,然后再输出,以便控制生产。为了完成上述任务,在进行软件设计时,通常把整个过程分成若干个部分,每一部分叫做一个模块。所谓“模块”,实质上就是所完成一定功能,相对独立的程序段,这种程序设计方法叫模块程序设计法。模块程序设计法的主要优点是:1、单个模块比起一个完整的程序易编写及调试;2、模块可以共存,一个模块可以被多个任务在不同条件下调用;3、模块程序允许设计者分割任务和利用已有程序,为设计者提供方便。本系统软件部分与硬件电路设计相似,采用模块化结构,由程序状态指示灯模块,流水灯演示模块,数码管及跑马灯模块,按键中断查询模块,话筒声音识别模块,光敏电阻及蜂鸣器模块,红外反射与直流电机驱动模块,红外遥控解码模块,串口通信模块构成。软件流程如图 4-1 流程图所示:15初 始 化状态指示灯闪烁是否烧录程序开关是否按下前进是否遇障碍物是否第一次检测到声音避障子程序避悬崖子程序是否遇到悬崖是否第二次检测到声音停止前进图图 4-14-1 软件设计流程软件设计流程图图164.14.1 总程序的头文件、数据类型和端口定义以及综合程序总程序的头文件、数据类型和端口定义以及综合程序#include 包含51 相关的头文件typeset unsigned char uchar;typedef unsigned int uint;重定义char和int数据类型#define ShowPort P2uchar code LedShowData=0 x03,0 x9F,0 x25,0 x0D,0 x99,0 x49,0 x41,0 x1F,0 x01,0 x19;/0,1,2,3,4,5,6,7,8,9定义数码管显示端口和显示数据static unsigned int RecvData;static unsigned char CountData;定义接收红外数据变量和红外个数计数变量static unsigned char AddData;static unsigned int LedFlash;定义自增变量和闪动频率计数变量unsigned char HeardData;bit RunFlag=0;定义接收到数据的高位变量和运行标志位以上完成了基本数据变量和端口的定义,下面对状态指示灯及按键端口进行相关的定义:sbit S1State=P10;sbit S2State=P11;sbit B1State=P12;sbit IRState=P13;定义S1、S2、B1、IR状态标志位sbit RunStopState=P14;sbit FontIRState=P15;sbit LeftIRState=P16;sbit RightIRState=P17;17定义运行停止标志位以及FontIR、LeftIR和RightIRState三种状态标志位sbit S1=P32;sbit S2=P34;定义S1、S2按键端口完成LED灯的定义后,我们将对最重要的红外探头和电机端口进行定义,如下:sbit LeftLed=P20;sbit RightLed=P07;定义前方左侧和右侧指示灯端口sbit LeftIR=P35;sbit RightIR=P36;sbit FontIR=P37;定义前方左侧和右侧红外探头以及正前方红外探头sbit M1A=P00;sbit M1B=P01;sbit M2A=P02;sbit M2B=P03;定义电机1及电机2的正向端口和反向端口下面是对小车的附加功能,如话筒、光敏电阻、蜂鸣器的端口定义,如下:sbit B1=P04;sbit RL1=P05;sbit SB1=P06;定义话筒传感器、光敏电阻和蜂鸣端口sbit IR1=P33定义红外接收端口void Delay();uint DelayTime=30000定义延时子程序和延时时间变量综上所有程序只是整体程序代码设计的开头部分,只是对小车所有需要定义的端口及数据类型进行定义,为以下的每个模块程序设计做好铺垫。184.24.2 单个模块程序设计与编写单个模块程序设计与编写4.2.14.2.1 程序状态指示灯模块程序状态指示灯模块程序状态指示灯是比较常见到的一种工作状态指示器,像网卡、无线发射器、电脑等等都会有相应的 LED 指示灯来表示当前仪器的工作状况。往往用 LED闪亮的快慢来表示仪器是否处在工作中,以及长亮与长灭来表示仪器是否故障或需要检查等操作本设计系统中的此模块也是通过 LED 灯来模拟小车的运行情况,设计思路如下:(1)定义一个可变的延时函数,通过它来改变灯闪亮的时间.(2)选取 51 机器人中相应的 LED 模块,声明端口,用来显示闪亮的状态。(3)编写主函数,让芯片一直循环运行,并定义一个时间记录器来改变闪亮情况。(4)根据时间记录器的数值来改变 LED 指示灯的闪亮情况,来完成程序状态指示灯的模拟操作.具体的程序见附录 B 程序指示灯模块。4.2.24.2.2 流水灯演示模块流水灯演示模块(1)unsigned int code BToM=0 x7E,0 x3C,0 x18,0 x00;unsigned int code MToB=0 xE7,0 xC3,0 x81,0 x00;定义由两边到中间及中间到两边的显示数据void Delay()reentrant unsigned int DelayTime=10000;while(DelayTime-);加入可重入的延时函数延和时时间基数,以便每个 LED 灯闪灭之间有一定的延时(2)void LeftToRight()unsigned char TempCount=0;Led=Led1;定义从左边到右边的显示函数以及显示次数变量;由右边向左边移动数据;然后定义初步的显示数据,通过循环进行数据显示,在每次移动数据开始的时候19加入(1)中的延时,最后通过空返回语句 return 表明该子程序的结束,进入下一个子程序。流水灯的四个动作程序结构与设计上完全一样,完整的程序见附录 B 中流水灯模块。4.2.34.2.3 数码管及跑马灯模块数码管及跑马灯模块此模块只是将数码管的显示融入到上述的流水灯演示里面,使两者结合起来演示,所以不复杂,并且设计中已经将这个模块的程序写入到总程序中,在小车运行时,会有相应的显示。4.2.44.2.4 按键中断查询模块按键中断查询模块本模块通过两个按键对数码管进行操作,分别演示了查询与中断的操作方式,中断中应用了对按键进行查询的方法来判断按键的键值,查询按键方法中则采用了键盘延迟的方法来消除按键重复输入。程序运行效果:开机后数码管显示数字 1,当按 S1 不放时,数码管数字不变,松开 S1 按键,数码减 1;按 S2 键不放时,数码管数字会自动加 1。并且数字遵守从 0-9 循环操作。具体的程序见附录 B 中的按键中断查询模块4.2.54.2.5 话筒声音识别模块话筒声音识别模块本程序主要通过话筒对声音信号进行识别,由于硬件关于本模块电路设计中能有效的去除杂波,所以仅能对响度较大的声音进行识别(例:拍手声,大叫声等等)。像正常的说话声对本电路虑除,不会产生信息的输入。话筒识别的加入,为我们建立了声控平台。主要的程序设计如下:while(1)if(0=B1)while(0=B1);Delay();LeftLed=!LeftLed;RightLed=!RightLed;20首先判断是否有声音输入,等待声音信号结束,去除多余杂音,然后使小车前方左侧和右侧指示灯分别取反,这样就实现了声音识别的功能;关于声音控制小车运行的设计,已经写入了总程序中,在小车运行时能展现出声控的功能。4.2.64.2.6 光敏电阻及蜂鸣器模块光敏电阻及蜂鸣器模块while(1)if(1=RL1)Delay();SB1=!SB1;LeftLed=!LeftLed;RightLed=!RightLed;elseSB1=1;LeftLed=1;RightLed=1;首先判断光敏的现在状态(有光 0,无光 1),然后开始延时,如果在黑暗条件下,高电平输入使蜂鸣器响亮以及前方左右两侧指示灯闪亮;否则蜂鸣器和指示灯均关闭。4.2.74.2.7 红外反射与直流电机驱动模块红外反射与直流电机驱动模块此模块为小车最为重要的模块,因为它关系着小车整体的运行情况,避障避悬崖和寻线都是设计的核心部分,也都是在本模块实现的。首先要定义前方指示灯、红外探头以及电机驱动、语音传感器和蜂鸣器端口,然后加入小车调转子时间子程序并定义转弯时间变量,在延时子程序中写入让蜂21鸣器响亮的代码:while(DelayTime-);SB1=!SB1;这样使得小车转弯时蜂鸣器报警,用 return 语句来结束该子程序,进入到下一个电机控制子程序,将电机的初始化都设为 0,用 case 语句来判断小车的前进,后退,左转以及右转四种状态,并在相应的状态下写入电机的运转状态,如前进时电机 M1M2 正转,左转时 M1 电机反转 M2 电机正转;下面是进入主循环。用LeftLed 和 RightLed 分别表示前方左侧和右侧红外探头状态,RunShow 指示前方红外探头状态,然后用 if 语句(if(FontIR=0|LeftIR=1)来判断前方,左侧,右侧是否有信号输入RightIR=1);ControlCar(2);让小车后退,在后退过程中加入了蜂鸣器报警,注意此时小车没有声控功能,因为存在报警声音,对其造成了一定的干扰。4.2.84.2.8 串口通信模块串口通信模块本程序是通过数码管、LED 指示灯的闪亮来表示当前串口通信的结果,串口通信使单片机与电脑之间通信的桥梁,可以很好的用电脑来进行单片机的控制,及对单片机数据的采集。具体的程序代码见附录 B 中的串口通信模块运行时可以看到,打开本机电源开关后,P1 端 LED 指示灯在不停的闪耀,此时使用“串口调试助手”或其它软件向单片机发送数据,可以看到相应的数据显示在数码管上,并且发送的数据又返回到电脑中。(只显示 0-9 数字)4.34.3 单元模块程序设计小结单元模块程序设计小结以上是对小车软件部分的每个模块进行了说明,并且对主要的程序设计思想进行了阐述,有的模块已经融入到了综合程序中,有的模块是需要分步下载之后才能展现出来,将每个模块的程序经过整合,定义的端口和函数都放在前面,子程序通过空返回语句 return 来连接,构成总程序。总程序代码如附录 B 中总程序所示。5 5 实物运行与测试结果以及结论实物运行与测试结果以及结论225.15.1 小车的运行情况小车的运行情况将 COM 端口的 USB 线把小车和电脑连接起来,通过 ISP 编程器和STC_ISP_V394 软件将综合程序写入到芯片中,等待几秒钟,放在一张反光较强的桌子上,打开电源可以看到,小车往前走,当遇到障碍物时会后退转弯,绕过障碍物行驶;行驶到桌子的边缘时,小车同样也会后退转弯,躲避悬崖;同时在前进过程中,可以用拍手声来控制小车,使小车停下来,再拍一次小车又会前进。由于寻迹功能需单独演示,所以要将其程序写入芯片并把原有程序覆盖,单独实现黑色寻迹。流水灯和程序状态指示灯也都是属于独立演示的模块,所以要通过端口依次写入依次演示。5.25.2 小车的测试结果及分析小车的测试结果及分析(1)测试结果及数据如下:小车的前进和后退速度一致,均为 0.059m/s;障碍物检测距离:反光很强的物体:约 1m;反光很弱的物体:约 0.005m;黑色物体:0 m(即检测不到黑色的障碍物);避悬崖高度范围:大于等于 0.09m;巡黑线偏离范围:00.04m;转弯角度:路面较光滑时为左转 8790 度路面比较粗糙时左转约 8087 度数码管能正常显示出数字“0、1、2、”,LED 灯比较亮,没有出现闪、较暗或不亮的情况;流水灯演示、方向灯探照灯及声控功能都能实现遥控功能没有实现(2)测试结果分析如下:经过调试与测试,实物小车的速度与设计指标相差 0.001 m/s;转弯度与目标值相差 10 度,这两种误差都与小车行驶的路面状况有关,摩擦力大时,误差范围会更大,所以都符合预先设计的技术要求。避障避悬崖以及寻线的精确度与设计指标相差不是太大,这与元器件的性能有关。其他功能也都能实现,只有实23遥控功能没有实现,这是本次设计中的缺陷所在经过线路板及元器件的焊点观察和测试分析,主要原因有以下几点:可能是红外遥控接收头坏了,接收不到遥控器发出的信号;可能是红外接收头至芯片那一路的某个元件虚焊导致断路;还有可能是所选遥控器与软件设计的代码不匹配,实现不了对小车的遥控。由于对遥控解码程序不熟悉,可能通过单片机的程序对遥控器的按键解码不正确,导致小车不具遥控功能。5.35.3 结论结论至此小车的整体包括硬件和软件的设计已经完成,历时三个月的设计过程中,我首先上网搜集资料,并在网上选购线路板,在我实习的车间里焊接小车的线路板。虽然我训练过两个月的焊接,但是在实际的焊接过程中,我感觉到即使是一个简单的电路,要想很轻松的焊好,也不是很容易的事情,有时是“虚焊”的原因,有时可能是阻值选错,比如这次的遥控功能就不能实现,这使我深深感受到理论与实际间的差距。通过这样的设计,提高了我的动手能力。焊接结束后,要对其进行调试,在调试过程中,出现了很多问题,如数码管不显示、小车总是后退不前进等等一些问题,在孟老师的指导与帮助下,这些难题已经被攻克了,小车能够正确的实现智能防撞壁悬崖等功能。小车的模型图和实物图见附录 C 所示;小车的元件清单见附录 D 所示。6 6 结束语结束语从三月份着手查资料开始到今日,小车的焊接、调试和组装已经完成,系统基本上能稳定的运行,但是还有不足之处,就是上面所提到的遥控功能没有实现,所以要吸取经验,在以后的学习和工作中要更加完善。参考文献参考文献1 胡汉才.单片机原理及其接口技术.M.北京:清华大学出版社,2004 年 2 月.2 张永瑞,王松林,李小平.电路分析.M.北京:高等教育出版社,2004 年 10 月.3 谭浩强.C 程序设计.M.北京:清华大学出版社,2005 年 7 月.4 清源科技.电路原理图与 PCB 设计及仿真.M.北京:机械工业出版社,2008 年 6 月.245 李松法.电子元器件应用技术.M.北京:航空工业出版社,2009 年 6 月.6AT89C51 DATASHEEP Philips Semiconductors 1999.dec7Nilsson,J.W.IntroductoryCircuitsforElectricalandComputerEngineering.M.BeiJing:Publishing House of Electronics Industry25英文摘要英文摘要Based on single chip microcomputer intelligent car designand productionWang Ying(anhui agricultural university economic institute of technology,Hefei 230036)Abstract:based on undergraduate electronic contest in recent years,the research onthis car according to the application of the embedded system,puts forward presented a8-bit microcontroller as the system can realize intelligent follow line brainobstacle-avoidance avoid cliff car design methods,through the main chip 32completely to these ports,IO port to signal input circuit,control circuit and executecircuit,and make use of infrared se