您好,欢迎来到筏尚旅游网。
搜索
您的当前位置:首页智能小车避障系统设计

智能小车避障系统设计

来源:筏尚旅游网
[在此处键入]

毕业设计说明书

设计题目: 专 业: 班 级: 学 号: 姓 名: 指导教师:

二〇一五年十二月二日

I

[在此处键入]

目 录

摘 要 .............................................................. 1 第1章 绪论 ........................................................ 2 第2章 方案论证 .................................................... 4 2.1 系统总体方案设计 .............................................. 4 2.2 系统方案的选择与比较 .......................................... 4 2.2.1 控制模块方案的选择 ........................................ 4 2.2.2 显示模块方案的选择 ........................................ 5 2.2.3 超声波模块方案的选择 ...................................... 5 2.2.4 驱动模块方案的选择 ........................................ 5 2.3 系统总体方案论证 .............................................. 6 第3章 硬件电路设计 ................................................ 7 3.1 整机设计 ...................................................... 7 3.1.1 整机系统 .................................................. 7 3.1.2 避障系统工作模式 .......................................... 7 3.2 各功能模块硬件电路设计 ........................................ 8 3.2.1 单片机最小系统 ............................................ 8 3.2.2 液晶显示电路 ............................................. 13 3.2.3 驱动电路 ................................................. 19 3.2.6 超声波测距避障电路 ....................................... 22 第4章 系统软件设计 ............................................... 24 4.1 主程序流程 ................................................... 24 4.2 主要子程序流程 ............................................... 24 4.2.1 液晶显示子程序流程 ....................................... 24 4.2.2 超声波子程序流程 ......................................... 25 4.2.3 避障子程序流程图 ......................................... 26

II

[在此处键入]

4.3 软件调试 ..................................................... 27 第5章 系统制作与调试 ............................................. 29 5.1 硬件制作 ..................................................... 29 5.1.1 Altium Designer 14软件 .................................. 29 5.1.2 PCB的设计与制作 ......................................... 30 5.2 硬件电路的安装与焊接 ......................................... 32 5.3 电脑端的ISP控制软件 ......................................... 32 5.4 实物安装与调试 ............................................... 33 结 论 ............................................................. 36 参考文献 ........................................................... 38 附录1 系统各部分设计原理图 ........................................ 39 附录2 系统各部分设计PCB板 ......................... 错误!未定义书签。 附录3 元件清单表 ................................... 错误!未定义书签。 附录4 源程序 ...................................................... 41

III

摘 要

系统以MCS-51单片机为控制核心,完成对系统各个子模块的控制工作,从而保证各模块正常有序的完成任务;电源模块负责为整个系统供电,提供所需的电压;采用超声波模块对障碍物进行探测和距离测定;显示模块负责显示小车距离障碍物的距离和设计者姓名;语音模块负责对障碍物距离进行语音提示;红外对管模块负责探测地面黑白线,保证小车按预定路线行驶;电机驱动模块负责小车的运行,其中小车驱动由L298N驱动电路完成,速度由单片机输出的PWM波控制。同时,设计制作的实物功能齐全,美观大方。

关键词 避障;超声波;单片机

第1章 绪论

近年来,随着电子测量技术的发展,运用超声波做出精确测量已成可能。随着经济发展,电子测量技术应用越来越广泛,而超声波测量因其测量精确度高,成本低,性能稳定而备受青睐。超声波是指频率在20kHz以上的声波,它属于机械波的范畴。超声波也遵循一般机械波在弹性介质中的传播规律,如在介质的分界面处发生反射和折射现象,在进入介质后被介质吸收而发生衰减等。正是因为具有这些性质,使得超声波可以用于距离的测量中。随着科技水平的不断提高,超声波测距技术被广泛应用于人们日常工作和生活之中。一般的超声波测距仪可用于固定物体物位或液位的测量,适用于建筑物内部、液位高度的测量等。

由于超声测距是一种非接触检测技术,不受光线、被测对象颜色等的影响,较其它仪器更卫生,更耐潮湿、粉尘、高温、腐蚀气体等恶劣环境,具有少维护、不污染、高可靠、长寿命等特点。因此可广泛应用于造纸业、矿业、电厂、化工业、特殊水处理、污水处理厂、农业用水、环保检测、食品(酒业、饮料业、添加剂、食用油、奶制品)、防汛、水文、明渠、空间定位、公路限高等行业中。可在不同环境中进行距离准确度在线标定,可直接用于水、酒、糖、饮料等液位控制,可进行差值设定,直接显示各种液位罐的液位、料位高度。因此,超声测距在特殊环境下有较广泛的应用。利用超声波检测往往比较迅速、方便、计算简单、易于实现实时控制,并且在测量精度方面能达到工业实用的指标要求,因此为了使移动机器人能够自动躲避障碍物行走,就必须装备测距系统,以使其及时获取距障碍物的位置信息(距离和方向)。因此超声波测距在移动机器人的研究上得到了广泛的应用。同时由于超声波测距系统具有以上的这些优点,因此在汽车倒车雷达的研制方面也得到了广泛的应用。

超声波测距电路可以由传统的模拟或者数字电路构建,但是基于这些传统电路构建的系统往往可靠性差,调试困难,可扩展性差,所以基于单片机的超声波测距系统被广泛的应用。通过简单的外围电路发生和接收超声波,单片机通过采

样获取到超声波的传播时间,用软件来计算出距离,并且可以采集环境温度进行测距补偿,其测量电路小巧,精度高,反映速度快,可靠性好。

第2章 方案论证

2.1 系统总体方案设计

根据设计任务要求,可将此系统划分为四个部分,第一个部分为单片机控制模块,它由STC89C52RC单片机、单片机最小系统、串口通信电路和相应辅助电路组成,并主要负责各个子模块的控制工作,从而保证各自模块正常有序的完成各自任务;第二个部分为驱动模块,它的主要作用是驱动小车直流电机,使小车运动。第三个部分为显示模块,它主要用于显示小车距离障碍物的距离等信息。第四个部分为超声波传感器,他主要用于对小车运行前方的障碍物进行探测和对障碍物距离进行判断。其系统结构如图2-1所示。

主 控 超声波模块 系 统 LCD液晶显示模块 驱动模块 图2-1 系统总框图

2.2 系统方案的选择与比较

2.2.1 控制模块方案的选择

第一种方案:选用数字逻辑电路平台,整个超声波测距避障的控制系统由计数器、译码器和555定时器等数字芯片组成。其电路具有逻辑结构简单、精确控制等优点,但也有功能单一、不易调试等缺点。

第二种方案:选用单片机平台,整个超声波测距避障控制系统由MCS-51单片机最小系统作为主控制器。同时,STC89C52RC单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点。

方案比较:虽然采用数字逻辑电路平台可以实现超声波测距避障,电路结构

简单,但整个系统的功能单一。为了高质量完成复杂的设计要求,此系统采用第二种方案。

2.2.2 显示模块方案的选择

第一种方案:采用由LED彩灯、七段LED数码管组成的显示方案,但其只能显示有限的指示信号和数码字符,无法达到设计要求。

第二种方案:采用由1602LCD液晶显示器组成的显示方案,该模块功能强大,可方便的显示各种英文字符等内容。

方案比较:采用第一种方案不能很好的达到设计要求,数码管只能显示字码,不能显示字母;而采用第二种方案能充分利用1602LCD液晶显示器显示障碍物距离等信息。故选用第二种方案。

2.2.3 超声波模块方案的选择

第一种方案:采用US-100超声波模块,US-100 超声波测距模块可实现2cm~4.5m 的非接触测距功能、拥有2.4~5.5V 的宽电压输入范围、静态功耗低于2mA,自带温度传感器对测距结果进行校正、同时具有GPIO、串口等多种通信方式、内带看门狗、工作稳定可靠。

第二种方案:采用HY-SRF05超声波模块,HY-SRF05超声波测距模块可提供2cm~450cm的非接触距离感测功能,测距精度可达3mm,模块包括超声波发射器、接收器和控制电路。

方案比较:由于该系统的超声波模块主要用于对小车运行前方障碍物的探测及障碍物距离的探测,故对功能要求不高。经过比较,故此方案选用第二种方案。

2.2.4 驱动模块方案的选择

第一种方案:采用由多个三极管和续流二极管组成的双H桥驱动电路,该结构原理简单,但结构复杂且驱动电流过小。

第二种方案:采用以L298N为核心的集成驱动电路,该方案结构简单,且驱动电流大。

方案比较:采用第一种方案时驱动电流不足,可能会出现小车运行缓慢,严重时甚至会烧毁三极管;第二种方案驱动电流大,足以保证小车的运行,且体积小、电路结构简单。故此设计选用第二种方案。

2.3 系统总体方案论证

系统系统设计方框总图如图2-2所示。

S T C SRF05超声波模块 89C52RC 最小系统 1602LCD显示模块 L298N驱动模块

图2-2 系统设计方框总图

经上述对各模块的方案选择与论证,此设计的超声波测距避障系统主要以一片MCS-51系列单片机为控制核心,STC89C52RC单片机用作超声波测距避障系统主控芯片;以SRF05超声波传感器作为障碍物测距传感器;以1602LCD液晶显示器作为障碍物距离的显示;以L298N驱动模块作为小车运动的驱动部分。

第3章 硬件电路设计

硬件电路是整个系统的核心基础,需要全面考虑系统运行的各个状态。这里,除了要实现整个超声波测距避障系统的基本功能以外,还需考虑以下几个因素:①系统的稳定度和性能指标;②元器件的通用性和易购性;③系统的可扩展性。因此,硬件电路的设计至关重要,现对各功能模块进行深度的分析与探讨。

3.1 整机设计

3.1.1 整机系统

系统主要以一片MCS-51单片机为控制核心,采用模块化设计,完成整个循迹避障系统。其具体分可为以下七个功能模块:单片机控制模块、超声波模块、循迹模块、显示模块、语音提示模块和驱动模块。

1.单片机最小系统作为整个硬件电路的核心电路,它既是协调各个模块使之正常有序作的控制器,也是计算系统运行过程中数据参数的处理器。它由单片机、时钟电路和复位电路三大部分组成。

2.障碍物的探测和障碍物距离的测定采用SRF05超声波模块,分别探测小车前、左、右的障碍物。

3.采用1602LCD液晶显示模块显示障碍物距离,运用软件控制其分别显示小车前方、左侧和右侧的障碍物距离。

4.驱动电路模块采用L298N集成驱动,它将驱动直流电机来带动小车按预定路线行驶。

3.1.2 避障系统工作模式

根据设计要求及实际应用规则,小车需多种情况下避障,其避障模式就会有多种,需要根据不同的障碍情况作不同的规避动作。在此举两个最常见的类型。一种是小车正面有障碍物的情况,另一种是小车侧面有障碍物的情况。

当小车正面有障碍物障时,单片机检测到前方障碍物与小车之间的距离小于设定距离时,开始避障,此时单片机判断在小车左右方向障碍物离小车的距离分

别为多大,然后根据两边距离大小选择与障碍物距离大的一边转向行驶。当检测到障碍物距离不再低于设定距离时,小车避障完毕恢复直线行驶。其运行图如图3-1.

小车 障碍物

图3-1 小车正面避障运行图

当小车侧面有障碍物时,单片机检测到侧面障碍物与小车之间距离小于设定的距离时,运行侧面避障程序,向与障碍物方向相反的方向转向,直到侧面障碍与小车距离大于设定的距离时恢复直线行驶。运行图如图3-2所示。

图3-2 小车侧面避障运行状态

3.2 各功能模块硬件电路设计

3.2.1 单片机最小系统

单片微机(Single-Chip Microcomputer)简称为单片机。它在一块芯片上集成中央处理单元CPU、随机存储器RAM、只读存储器ROM、定时/计数和多功能输入/输出I/O口,如并行口I/O、串行口I/O和转换A/D等。

MCS-51系列单片机在我国得到了广泛的应用,是单片机的主流系列,软硬

件应用设计资料丰富齐全。为了提高指令的执行速度和效率,采用了面向控制的结构和指令系统的独立CPU。

此设计主要采用STC89C52RC单片机作为系统的主控制芯片,这是因为它是目前

应用比较广泛的MCS-51系列兼容型单片机。现将STC89C52RC单片机的特点介绍如下:

1.增强型6时钟/机器周期,12时钟/机器周期8051CPU。 2.工作电压:3.4V~5.5V。

3.工作频率范围:0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz。

4.用户应用程序空间8K字节。 5.片上集成1280字节/512字节RAM。

6.通用I/O口(32/36个),复位后为:P1/P2/P3/P4是准双向口/弱上拉(普通8051 传统I/O口)。P0口开漏输出,作为总线扩展用时,不用加上拉电阻,但作为I/O口用时,则需加上拉电阻。

7.ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器/仿真器可通过串口(P3.0/P3.1)直接下载用户程序,8K程序3秒即可完成一片ISP(在系统可编程)/IAP (在应用可编程),无需专用编程器/仿真器可通过串口(P3.0/P3.1)直接下载用户程序,8K程序3秒即可完成一片。

8.内置EEPROM功能和看门狗功能。

9.共3个16位定时器/计数器,其中定时器0还可以当成2个8位定时器使用。

10.外部中断4路,下降沿中断或低电平触发中断,Power Down模式可由外部中断低电平触发中断方式唤醒。

11.通用异步串行口(UART),还可用定时器软件实现多个UART。 12.工作温度范围:0~75℃。

STC89C52RC单片机最小系统的基本工作电路包括电源电路、时钟电路和复位电路。其组成方框图如图3-3所示:

电源电路 时钟电路 复位电路 单 片 机 图3-3 单片机最小系统组成方框图

1.电源电路

电源电路模块为单片机最小系统和其他功能模块提供标准的+5V电源电压。 2.时钟电路

单片机的时钟信号为单片机芯片内部的各种操作提供时间基准,时钟电路为单片机产生时钟脉冲序列。作为单片机工作的时间基准,典型的晶体振荡频率为12MHz。

MCS-51系列单片的时钟信号可以由两种方式产生:一种为内部时钟方式,利用芯片内部的振荡电路;另一种为外部时钟方式。其两种电路如图3-4所示。

(a)内部时钟方式 (b)外部时钟方式

图3-4 单片机时钟信号示意图

3.复位电路

单片机复位是使CPU和系统中的其他功能部件都恢复到一个确定的初始状态,并从这个状态开始工作。当在MCS-51系列单片的RST引脚处引入高电平并保持2个机器周期,单片机内部就执行复位操作。单片机常见的复位电路有两种基本形式:一种是上自动电复位,另一种是手动复位。其两种电路方式如图3-5(a)、(b)所示。在此设计中我们采用手动复位方式。

1.2~12MHz之间选择,在此选择12MHz。

(a)上电自动复位 (b)手动复位

就构成了自激振荡器并在单片机内部产生时钟信号脉冲信号。同时,也采用手动

复位电路。其具体电路设计如图3-6所示。在此图中,C1、C2电容的作用的是稳

定频率和快速起振,其值为5~30pF,在此选择30pF;晶振X1的振荡频率范围在

由于STC89C52RC单片机芯片内有时钟振荡电路,所以此系统单片机均采用

内部时钟方式。只需在单片机的XTAL1和XTAL2引脚外接石英晶体和微调电容,

图3-6 单片机最小系统电路图

图3-5 单片机复位电路示意图

1 2 3 4 5 6 7 8 13 12 15 14 31 19 18 9 17 16 P10 P11 P12 P13 P14 P15 P16 P17 INT1 INT0 T1 T0 EA/VP X1 X2 RESET RD WR

89C52

P00 P01 P02 P03 P04 P05 P06 P07 P20 P21 P22 P23 P24 P25 P26 P27

39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 RXD 11 TXD 30 ALE/P 29 PSEN

图3-7 单片机引脚图

单片机的引脚说明:

89C52系列单片机采用40Pin封装的双列直接DIP结构,下图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。其引脚排列如图3-7。

控制引脚介绍:

1.ALE:系统扩展时,P0口是八位数据线和低八位地址先复用引脚,ALE用于把P0口输出的低八位地址锁存起来,以实现低八位地址和数据的隔离。

2.PSEN;低电平有效时,可实现对外部ROM单元的读操作。 3.EA:当EA信号为低电平时,对ROM的读操作限制在外部程序存储器;而当EA为高电平时,对ROM的读操作是从内部程序存储器开始的,并可延至外部程序存储器。

4.RST:当输入的复位信号延续两个机器周期以上的高电平时即为有效,用以完成单片机的复位初始化操作。

5.XTAL和XTAL2:外接晶振引线端。

并行I/O端口介绍:P0端口[P0.0-P0.7] P0是一个8位漏极开路型双向I/O端口,端口置1(对端口写1)时作高阻抗输入端。作为输出口时能驱动8个TTL。

P1端口[P1.0-P1.7] P1是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。

对内部Flash程序存储器编程时,接收低8位地址信息。

P2端口[P2.0-P2.7] P2是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存储器编程时,接收高8位地址和控制信息。在访问外部程序和16位外部数据存储器时,P2口送出高8位地址。而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。

P3端口[P3.0-P3.7] P2是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。除此之外P3端口还用于一些专门功能,具体请看下表3-1。

3-1 P3引脚的第二功能说明

P3引脚 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 兼用功能 串行通讯输入(RXD) 串行通讯输出(TXD) 外部中断0申请( INT0) 外部中断1申请(INT1) 定时器/计数器0的外部输入(T0) 定时器/计数器1的外部输入(T1) 外部数据存储器写选通WR 外部数据存储器写选通RD 3.2.2 液晶显示电路

在此设计中,选用1602LCD液晶模块显示三个方向的障碍物距离。 1.1602LCD液晶显示器介绍

液晶显示器(LCD)的主要原理是以电流刺激液晶分子产生点、线、面并配合背部灯管构成画面。液晶体积小、功耗低、显示操作简单。此设计选用1602LCD液晶显示器。其外形如图3-7所示。

图3-7 1602LCD实物图

现将其主要技术参数和显示特性如下: 1.电源:VDD为+4.5V~+5.5V; 2.显示内容:16*2字符; 3.工作电流:2.0MA(5.0V); 4.显示颜色:蓝屏;

5.模块最佳工作电压:5.0V; 6.显示角度:6:00钟直视; 7.与MCU接口:8位并口; 8.配置LED背光;

9.多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等。 其基本操作时序如图3-8所示。 其基本时序如表3-2所示。 其读写操作如图3-9所示。 其内存地址如图3-10所示。 其控制指令集如表3-3所示。 其控制接口时序如图3-11所示。 其初始化过程如下所示。

图3-8 1602LCD基本操作时序 表3-2 1602LCD时序参数

图3-9 1602LCD读写操作

图3-10 1602LCD内存地址 表3-3 1602LCD控制指令集

其初始化过程(复位过程): (1)延时15MS

(2)写指令38H(不检测忙信号) (3)延时5MS

(4)写指令38H(不检测忙信号) (5)延时5MS

(6)写指令38H(不检测忙信号)

(7)(以后每次写指令、读/写数据之前均需检测忙信号) (8)写指令38H:显示模式设置 (9)写指令08H:显示关闭 (10)写指令01H:显示清屏 (11)写指令06H:显示光标移到设置

(12)写指令0CH:显示开关光标设置

图3-11 1602LCD控制接口时序图

2.液晶显示电路设计

若要用单片机控制1602LCD液晶显示模块正常的显示字符、图形和动画,就必须了解此液晶显示模块的各引脚定义和功能,其引脚功能介绍如表3-4所示。

其基本外形尺寸如图3-12所示。

图3-12 LCD1602外观图 表3-4 1602LCD液晶引脚功能介绍

在此设计中采用的1602LCD为标准的液晶显示器件。其典型的应用电路如图所示。

图3-13 液晶显示模块典型应用原理图

此设计分别采用一块TC1602LCD液晶显示模块显示障碍物距离和学号。TC1602显示的容量为2行16个字。液晶显示屏有微功耗、体积小、显示内容丰富、超薄轻巧、使用方便等诸多优点,与数码管相比,显得更专业、美观。使用时,可将P0与LCD的数据线相连,P2口与LCD的控制线相连,如图所示。

图3-14 1602LCD液晶显示硬件电路图

3.2.3 驱动电路

在此设计中,小车使用的是直流电机。从单片机输出的信号功率很弱,即使在没有其它外在负载时也无法带动电机,所以在实际电路中我们加入了电机驱动芯片提高输入电机信号的功率,从而能够根据需要控制电机转动。本设计中电机驱动采用L298集成H桥芯片如图3-17。L298中有两套H桥电路,刚好可以控制两个电机。它的使能端可以外接高低电平,也可以利用单片机进行软件控制,极大地满足各种复杂电路需要。该芯片的主要特点是:工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电机,继电器,线圈等感性负载;采用标准逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作;有一个逻辑电源输入端,是内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。引脚如功能如表3-5所示。

图3-17 L298N引脚图

L298N可接受标准TTL逻辑电平信号VSS,VSS可接4.5~7 V电压。4脚VS接电源电压,VS电压范围VIH为+2.5~46V。输出电流可达2.5A,可驱动电感性负载。1脚和15脚下管的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。L298N可驱动2个电动机,OUT1、OUT2和OUT3、OUT4之间可分别接电动机,此设计选用驱动两台电动机。5、7、10、12脚接输入控制电平,控制电机的正反转。ENA、ENB接控制使能端,控制电机的停转。

本设计采用高电压,大电流的L298N全桥驱动芯片,其外围电路设计如图3-18所示,它响应频率高,一片L298N可以分别控制两个直流电机。两个电机的四个正方向信号和两个PWM信号经L298N后能够很好的控制电机的正反转和较大范围的控制电机电压。

表3-5 L298N引脚编号与功能

引脚编号 1 2 3 4 5 6 7 8 名称 电流传感器A 输出引脚1 输出引脚2 电机电源端 输入引脚1 使能端A 输入引脚2 逻辑地 功能 在该引脚和地之间接小阻值电阻可用来检测电流 内置驱动器A的输出端1,接至电机A 内置驱动器A的输出端2,接至电机A 电机供电输入端,电压可达46V 内置驱动器A的逻辑控制输入端1 内置驱动器A的使能端 内置驱动器A的逻辑控制输入端2 逻辑地

9 10 11 12 13 14 15 逻辑电源端 输入引脚3 使能端B 输入引脚4 输出引脚3 输出引脚4 电流传感器B 逻辑控制电路的电源输入端为5V 内置驱动器B的逻辑控制输入端1 内置驱动器B的使能端 内置驱动器B的逻辑控制输入端2 内置驱动器B的输出端1,接至电机B 内置驱动器B的输出端2,接至电机B 在该引脚和地之间接小阻值电阻可用来检测电流 表3-6 L298N对直流电机控制的逻辑功能表 输入 H H L C H L * D L H * 输出 正转 反转 无输出,不工作 说明:表3-6为L298N的逻辑控制表,其中C、D分别为IN1、IN2或IN3、IN4;L为低电平,H为高电平,*为不管是低电平还是高电平。

如图3-18所示,本设计中L298N OUT1、OUT2和OUT3、OUT4之间各接一个小直流电动机。VSS 9脚接入经过稳压后的+5V,VS 4脚直接接+9V电源。1、5、8脚都接地。5、7、10、12脚接输入控制信号(控制信号从单片机P0.0、P0.1、P0.3、P0.4发出,经光电耦合器TLP521-4后接L298N的5、7、10、12脚输入),控制电机的正反转。

图3-18 电机电路图

单片机的两个端口(P0.2、P0.5)给出PWM信号直接与ENA、ENB相连控制使能端,从而达到控制电机直行、加减速、倒退等动作。在该模块设计中,我们采用了小周期信号,通过改变小车的占空比对小车的速度进行调节。将小车速度分为20个档,这样就可以让小车在调试过程中得到一个合理的速度,使其行驶在对稳定的状态。

3.2.6 超声波测距避障电路

超声波电路原理图如图3-20所示。发射电路主要由低噪声JFET输入的运算放大器和超声波发射换能器R构成,单片机P1.0端口输出的40kHz的方波信号一路经一级反向器后送到超声波换能器的一个电极,另一路由单片机P1.0端口经两级反向器后送到超声波换能器的另一个电极,用这种推换形式将方波信号加到超声波换能器的两端,可以提高超声波的发射强度。输出端采两个反向器并联,用以提高驱动能力。上位电阻R20、R21一方面可以提高运算放大器TL074输出高电平的驱动能力,另一方面可以增加超声波换能器的阻尼效果,缩短其自由振荡时间。压电式超声波换能器是利用压电晶体的谐振来工作的。超声波换能器内部有两个压电晶片和一个换能板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片会发生共振,并带动共振板振动产生超声波,这时它就是一个超声波发生器;反之,如果两电极问未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收换能器。超声波发射换能器与接收换能器在结构上稍有不同,使用时应分清器件上的标志。

图3-20 超声波模块电路原理图

超声波接收电路由电平转换芯片ST202和超声波接收换能器T组成。ST202是一款电平转换的专用芯片,常用于电视机红外遥控接收器。考虑到红外遥控常用的载波频率38 kHz与测距的超声波频率40 kHz较为接近,因为当ST202接受到40KHZ的信号时,会在第7脚产生一个低电平下降脉冲,这个信号可以接到单片机的外部中断引脚作为中断信号输入,可以利用它制作超声波接收电路。实验证明用ST202接收超声波(无信号时输出高电平),具有很好的灵敏度和较强的抗干扰能力。

第4章 系统软件设计

硬件平台结构一旦确定,大的功能框架即形成,软件在硬件平台上构筑,完成各部分硬件的控制和协调工作。系统功能是由软硬件共同实现的,由于软件的可伸缩性,最终实现的系统功能可强可弱,差别可能很大。因此,软件是系统的灵魂。软件采用模块化设计方法,不仅易于编程和调试,也可减小软件故障率和提高软件的可靠性。

4.1 主程序流程

系统主程序模块主要完成对系统中各模块电路的初始化等工作,其主要包括对液晶显示器、驱动电路和超声波传感器的初始化,同时循环发送脉冲信号,等待外部中断以及根据所需要功能进行相应的操作。主程序流程如图4-1所示。

图4-1 主程序流程图

无 有障碍吗 有 测距并显示 避障程序 启动小车 开 始 初 始 化 4.2 主要子程序流程

4.2.1 液晶显示子程序流程

LCD液晶显示模块可用于显示姓名和学号以及距离障碍物的距离,其数据有单片机的P2口输入,其控制由单片机的P0口进行控制。由单片机最小系统对其

进行实时刷新。其子程序流程如图4-2所示。

开始 LCD初始化 与STC89C52单片机通信 显 示 动 画 1 显 示 动 画 2 显 示 动 画 3 结束 图4-2 LCD 液晶显示子程序流程图

4.2.2 超声波子程序流程

主要是实现功能测距软件分为两部分,主程序和中断服务程序,如图4-3 (a)(b)(c) 所示。主程序完成初始化工作、各路超声波发射和接收顺序的控制。定时中断服务子程序完成三个方向超声波的轮流发射,外部中断服务子程序主要完成时间值的读取、距离计算、结果的输出等工作。其主程序如图4-3(a)所示。

主程序首先是对系统环境初始化,设置定时器T0工作模式为16位定时计数器模式。置位总中断允许位EA并给显示端口P0和P1清0。然后调用超声波发生子程序送出一个超声波脉冲,为了避免超声波从发射器直接传送到接收器引起的直射波触发,需要延时约0.1 ms(这也就是超声波测距仪会有一个最小可测距离的原因)后才打开外中断0接收返回的超声波信号。

由于采用的是12MHz的晶振,计数器每计一个数就是1μs,当主程序检测到接收成功的标志位后,将计数器T0中的数(即超声波来回所用的时间)按式(2)计算,即可得被测物体与测距仪之间的距离,设计时取20℃时的声速为344 m/s 则有:d=(c×t)/2=172T0/10000cm(2)其中,T0为计数器T0的计算值。

超声波发生子程序的作用是通过P1.0端口发送2个左右超声波脉冲信号(频

率约40kHz的方波),脉冲宽度为12μs左右,同时把计数器T0打开进行计时。超声波发生子程序较简单,但要求程序运行准确,所以采用C语言编程。超声波测距仪主程序利用外中断检测返回超声波信号,一旦接收到返回超声波信号(即INT0引脚出现低电平),立即进入中断程序。进入中断后就立即关闭计时器T停止计时,并将测距成功标志字赋值 1。如果当计时器溢出时还未检测到超声波返回信号,则定时器T0溢出中断将外中断0关闭,并将测距成功标志字赋值2以表示此次测距不成功。 前方测距电路的输出端接单片机INT0端口,中断优先级最高,左、右测距电路的输出通过与门IC3A的输出接单片机INT1端口,同时单片机P1.3和P1.4接到IC3A的输入端,中断源的识别由程序查询来处理,中断优先级为先右后左。 开始 定时器中断入口 定时器初始化 初始化 定时中断子程序 N 有回波吗 Y 外部中断子程序 返回 a 主程序流程图

关外部中断 读取时间值 发射超声波 计算距离 三方均发射完否 Y 停止发射 开外部中断 N 结果输出 返回 返回

b 定时中断服务子程序 图4-3 超声波测距系统软件设计

c 外部中断服务子程序

4.2.3 避障子程序流程图

当小车检测到有障碍物后,进入避障子程序,判断障碍物的情况,根据障碍物的情况选择相应的避障方式控制小车做出做出相应的避障动作。避障完成后退出。其子程序流程图如图4-4所示。

避障方式1 情况1 情况2 开 始 无 有障碍物吗 有 障 碍 物 的 情 况 情况3 情况4 避障方式2 避障方式3 避障方式4 结 束 图4-4 避障子程序流程图

4.3 软件调试

单片机是本设计的核心控制器,只有保证单片机的正常工作才能完成程序的运行及显示的控制。保证单片机最小系统能够正常工作是前提。判断办法就是用万用表测量单片机时钟引脚(18、19脚)的对地电压,以正常工作的单片机用数字万用表测量为例:18脚对地约2.24V,19脚对地约2.09V。对于怀疑是复位电路故障而不能正常工作的单片机也可以采用模拟复位的方法来判断,单片机正常工作时第9脚对地电压为零,可以用导线短时间和+5V连接一下,模拟一下上电复位,如果单片机能正常工作了,说明这个复位电路没问题。

本设计功能很多,所以对于它的程序也较为复杂,所以在编写程序和测试时出现了相对较多的问题。如烧入程序后,LCD显示屏显示闪动,不循迹。则要首先对测用的延时进行逐渐修改,可以解决循迹问题。

本设计采用Keil4 软件用来进行编写程序和程序的调试,它是目前最流行开

发MCS-51 系列单片机的软件。软件页面如图4-5所示。

Keil4 提供了包括C 编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境( uVision)将这些部份组合在一起。运行Keil4 软件需要Pentium 或以上的CPU,16MB 或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP 等操作系统。掌握这一软件的使用对于使用51 系列单片机的爱好者来说是十分必要的。

图4-5 Kil4l软件界面图

在使用Keil4软件时需要注意的是:在程序编译的时候一定要记得输出.hex文件,因为STC—ISP.exe只有.hex文件才能下进单片机里去。

由于此循迹避障系统设计程序比较多,为了便于对程序的修改和可移植性等要求,此设计软件设计使用C语言来进行编程,其特点是C语言简洁、使用方便、灵活,具有强大的图形功能,C语言生成目标代码质量高,程序执行效率高等。

第5章 系统制作与调试

硬件的焊接与调试是整个超声波循迹避障系统设计必不可少的一个环节,它将验证整个系统设计是否实现了所要完成的功能。

这一章重点介绍PCB主板的焊接、循迹传感器的焊接、驱动电路焊接、电源电路的焊接与车体的搭建方法、ISP软件的使用以及整机的调试。

5.1 硬件制作

5.1.1 Altium Designer 14软件

自20世纪80年代中期以来,计算机应用已进入各个领域并发挥着越来越大的作用。在这种背景下,美国ACCEL Technologies Inc公司推出了第一个应用于电子线路设计的软件包—TANGO,这个软件开创了电子设计自动化(EDA)的先河。为了适应科学技术的发展,Protel Technology公园以其强大的研发能力推出了Protel For Dos,从此Protel这个名字在业内日益响亮。

Altium Designer 14 包含许多高效的新特性和增强功能,能够使整个设计过程统一起来,实现用户的电子产品创新理念,创造显著地经济效益。Altium Designer 14其主要功能如下所示。

1.高效的复杂电路板设计开发环境。 2.高效能的DirectX图形引擎。 3.实时的3D可视化显示。 4.电子和机械实时同步设计。

5.更真实的PCB着色和准确的对象几何尺寸。 6.布线技术延伸到智能、快速的物理设计中。 7.内部平面显示。

8.支持适应制造技术得更高密度布线。 9.加工前的实时制造规则检查。

10.通过设计智能感知简化设计过程和项目导航。

11.全新的Cadence Allegro和Zuken CADSTAR导入器。 12.从设计到制造—输出作用编辑器的改进。 13.版本控制功能的增强。 14.实时链接到供应商的数据库。 15.库文件搜索功能的改进。

16.以企业形式管理产品发布和发布设计数据。 17.基于FPGA设计中的定制仪器。 18.更为直观的逻辑分析仪。 19.数字波形显示的增强控制。 20.FPGA工具反馈。

21.用C语音开发定制的FPGA逻辑。 22.可定制的Wishbone接口元件。 23.基于FPGA仪器的现场面板。 24.即插即用的软件平台生成器。 25.增强的设备视图。 其软件界面如图5-1所示。

图5-1 Altium Designer 14软件界面图

5.1.2 PCB的设计与制作

PCB板的制作和主板的焊接一般包括印制底图图样描绘、底图掩膜层制作和蚀刻加工等三个环节。

首先根据整机设计,采用电子设计自动化软件中的Altium Designer 14进行印制电路板底图图样的设计。在软件环境下绘制好底图后,可用喷墨式或激光打印机将PCB板的设计图样打印出来,然后进行制作。其图样如以下图样所示。

图5-2 驱动电路PCB板图样

PCB板的制作一般分制作印制电路板、清洗与打孔和检修三个环节。 1.制作印制电路板 利用所打印的PCB板图样、热转印纸和恒温电熨斗完成制作。而热转印法制板的不足之处是:由于热转印纸局部缺陷等原因,会出现墨粉在热转印纸上局部附着不均匀等现象,对附着层太薄的地方,使抗腐蚀能力下降,影响PCB板的质量。

2.清除防护层 对于腐蚀好的印制电路板,选用细砂纸将防护层打磨掉,并进行清洗。

3.打孔 对清洗好的印制电路板,需要在焊盘和固定位置钻孔后,才能进行安装。

4.检修 对制作好的PCB板,要进行严格检查,判断印制线间是否有短路、断裂、脱落和起层问题,及时发现问题后,可采用相应的修理或补救措施,若有严重质量问题时,需要重新制作。

出于实际需要和美观需要,本超声波循迹避障设计使用的PCB板为军工级A级黑漆双面板,它与普通的PCB板相比具有耐高温焊盘牢固可靠、抗压力强不易变形等优点;而且黑漆板更显高贵和效果更炫目。

5.2 硬件电路的安装与焊接

在焊接元器件前,需要做好各项准备工作,对要用到的元器件进行清点和检测、按照PCB板上元器件间距,依据电子产品安装工艺要求。弯折好元器件引脚;对元器件引脚渡锡。且安装元件要遵循先小后大,先轻后重,先内后外的原则采用手工烙铁锡焊。

1.单片机最小系统与串口通信电路的焊接

最小系统是单片机得以正常工作的前提,包括时钟电路和复位电路,在焊接时需注意电解电容的正负极,晶振要尽可能的靠近单片机的18、19引脚,而且对晶振的焊接要迅速,不能长时间加热,以免烧坏晶振。串口电路是单片机与上位机进行TTL电平转换通信的必要电路,是上位机烧写Hex文件到单片机的电路,在单片机运用系统中具有重要作用。

2.驱动电路焊接

驱动电路是整车运行的动力输出,相当于汽车的发动机,在整个系统中起着决定性作用。是将单片机最小系统输出的控制指令转化为车辆的运动信息。在焊接时,续流二极管要紧贴电路板安装,驱动芯片在安装时,要先焊接其散热片,其次在安装驱动芯片。7805稳压芯片应紧贴安装,将接地端应良好焊接。发光二极管应插到底安装,光电耦合器应安装在集成电路插座上,方便更换。其焊接实物图如下图5-4所示。

图5-4 驱动电路实物图

5.3 电脑端的ISP控制软件

STC-ISP 是一款单片机下载编程烧录软件,是针对STC系列单片机而设计的,可下载STC89系列、12C2052 系列和12C5410等系列的STC单片机,使用简便,现已被广泛使用。

在使用时的操作步骤如下:

Step1/步骤1:选择你所使用的单片机型号,如STC12C5A60S2等

Step2/步骤2:打开文件,要烧录用户程序,必须调入用户的程序代码(*.bin, *.hex)

Step3/步骤3:选择电脑串行口。

Step4/步骤4:选择下次冷启动后,时钟源为“内部R/C振荡器”还是“外部晶体或时钟”(STC12系列单片机只有内部R/C振荡时钟)

Step5/步骤5:选择“Download/下载”按钮下载用户的程序进单片机内部,可重复执行电脑端操作如下页图5-5所示:

图5-5 电脑端STC-ISP烧录

5.4 实物安装与调试

根据系统设计方案,此系统调试可分为硬件装配、硬件调试和软硬件联调三个部分。

1.硬件装配

由于此设计实物的焊接、装配工作量非常大,所以在各部分电路安装完成后,应首先对各部分电路进行测试,确保每一个电路都完好,能够实现预定功能。在进行整个系统的装配时,要按照从低到高、充主到次的顺序安装。尤其需要注意的是,超声波传感器因为要前伸出一部分,不能够和电源模块等发生挤压,所以在安装时才有了万用板安装,成功实现了良好安装。同时,由于本机提供的电源端口较少,不能够满足所有的供电,所以自行设计制作了一个转接口,可同时提供10个供电端口,为功能扩展提供了支持。在安装时,要将每一个螺丝螺帽拧紧,防止松脱。同时要注意螺丝螺帽不能与焊点等接触,防止短路。

2.硬件调试

整机的元件焊接完成后,要使电路处理最佳工作状态,需要对单元模块电路和整个电路进行调试。调试与测试方案的选择应根据现有的仪器仪表条件来确定,比如万用表、稳压电源、示波器、逻辑分析仪等。调试工作分调试前的准备和调试操作两步完成。

(1)调试准备 调试准备指在调试前,对调试过程中所需要的仪器、设备、工具、元件和材料等进行调配。

(2)调试操作 电路调试的基本原则是:先静态,后动态,先局部,后整体。对于动态技术指标调试,要从末级开始,逐级向前级反复进行,直到调准为止。

(3)性能检测 该项工作在电路调试完成后进行,通过测量相关技术指标来主要了解电路是否达到技术要求。

在进行硬件调试时,可编写一个简单的测试程序,通过软件将其烧写入单片机。通过万用表等测试仪器仪表,分别测量各脚电压,与理论值进行比较。以此来判断是否正常工作。同时,在测试驱动电路时,可在对驱动连接好电源线后,对使能控制端分别给高低电平,通过万用表测试输出端电压来判定。在测试电源电路时,在输入端送入12伏特的直流电压,将万用表接入输出端,调节输出电压调节旋钮,观察输出电压的摆动。以此来判定电路的好坏。

3.软硬联调

系统软硬件联调的主要任务是检测系统中各模块的功能和效果,同时需要校正系统的相关数据,按实际测量数据进行调试,直至数据结果准确为止。实物的最终调试效果如图5-6所示。

图5-6 小车智能避障系统实物图

结 论

毕业设计是学生即将完成学业的最后一个重要环节,它既是对学生在学校所学知识的全面总结和综合应用,又为今后走向社会的实际操作应用铸就了一个良好的开端。所以在此有必要对这次的毕业设计作一个系统的总结,说一说自己内心的想法。

这次毕业设计,我选择了实做的题目:基于单片机的循迹超声波测距避障系统设计。本次设计达设计的预期要求:

1.小车启动后,直线行驶。 2.具有行驶中障碍物探测功能。

3.具有对障碍物进行距离显示和自动绕过障碍物功能。

本次毕业设计不仅是对我的一种锻炼,也是对我大学年所学知识的综合检查。从开始设计到设计的完成,我感觉收获很多,不仅在理论上有了很大的升华,并且还在实践中锻炼了自己,使自己成长了许多。

本文首先对整个系统的工作原理和实现方法进行了简单的介绍,给出了系统工作的整体框图。在此基础上,介绍了系统设计用到的各个模块的功能特性,并进性了方案比较,选择出了最优越的方案。

在完成毕业设计的过程中也存在一些问题:就是对软件的编程还是不够熟悉,耗费了太多的时间。同时对焊接,特别是贴片元器件的焊接掌握的还不够好。

总体来说这次的毕业设计很成功,达到了预期的设计要求。不仅学到了许多课本上学不到的知识,提高了自己动手动脑的能力,丰富了创新和创造的思维。由于我在理论和实践方面存在一定的不足,所以在设计思路和实现功能上难免有不足之处,请各位老师多多批评指正。

设计结束了,但学习仍在继续。从这次的毕业论文设计中,我真正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,实践是检验真理的唯一标准。我们电子专业的学习更是如此,不仅要有丰富的理论知识,还要有很强的动手能力,只有理论与实践并重,专业水平才能提高,这就是

在这次毕业设计中的最大收获。在今后的人生中,不断对自己所学的知识进行更新,进行补充。

参考文献

[1] 张永枫.单片机应用实训教程.北京:清华大学出版社,2008 [2] 刘守义.单片机应用技术.西安:西安电子科技大学出版社,2007 [3] 赵克林.C语言实例教程.北京:人民邮电出版社,2009 [4] 徐 玮.C51单片机高效入门.北京:机械工业出版社,2006 [5] 刘建清.从零开始学单片机技术.北京:国防工业出版社,2006 [6] 刘建清.从零开始学单片机C语言.北京:国防工业出版社,2006 [7] 王静霞.单片机应用技术(C语言版).北京:电子工业出版社,2009 [8] 李伯成.嵌入式系统可靠性设计.北京:电子工业出版社,2006 [9] 先锋工作室.单片机程序设计实例.西安:清华大学出版社,2003

[10] 马忠梅.单片机的C语言应用程序设计.北京:北京航空航天大学出版社,1988

[11] 李群芳.单片微型计算机与接口技术.北京:电子工业出版社,2007 [12] 王静霞.单片机应用技术(C语音版).北京:电子工业出版社,2009 [13] 郭天祥.51单片机C语音教程.北京:电子工业出版社,2009

[14] 刘 坤.51单片机典型应用开发范例大全.北京:中国铁道出版社,2011 [15] 谭浩强.C程序设计教程.北京:清华大学出版社,2007 [16] L298N集成驱动电路技术手册 [17] HY-SRF05超声波传感器技术手册

[18] 李全利.单片机原理及接口技术(第二版).北京:高等教育出版社,2009

附录1 系统各部分设计原理图

(a)最小系统及LCD1602显示模块电路原理图

(b)驱动模块电路原理图

(c)超声波模块电路原理图

附录4 源程序

#include #include

#define Busy 0x80 //用于检测LCM状态字中的Busy标识 sbit RX=P3^6; sbit TX=P3^7; sbit RXR=P3^4; sbit TXR=P3^5; sbit RXL=P3^3; sbit TXL=P3^2; sbit LQ=P1^1; sbit LH=P1^0; sbit RQ=P1^3; sbit RH=P1^2;

sbit LCM_RW = P2^1; sbit LCM_RS = P2^0; sbit LCM_E = P2^2; void LCMInit(void);

void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);

void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData); void Delay5Ms(void); void Delay400Ms(void);

void Decode(unsigned char ScanCode);

void WriteDataLCM(unsigned char WDLCM);

void WriteCommandLCM(unsigned char WCLCM,BuysC); unsigned char ReadDataLCM(void); unsigned char ReadStatusLCM(void);

unsigned char code mcustudio[] = {\"WWW.SCITC.COM.CN\unsigned char code zuozhe[] = {\"1319001 Durongfu\unsigned char code Cls[] = {\" \

unsigned char code ASCII[15] = {'0','1','2','3','4','5','6','7','8','9','.','-','M'}; unsigned char sd=0,fx=0; unsigned int SQ,SR,SL; unsigned int time=0; unsigned long S=0; bit flag =0;

unsigned char disbuff[4]={ 0,0,0,0,}; void qj();

void WriteDataLCM(unsigned char WDLCM)//写数据 { ReadStatusLCM(); //检测忙 P0 = WDLCM; LCM_RS = 1; LCM_RW = 0; LCM_E = 0; //若晶振速度太高可以在这后加小的延时 LCM_E = 0;

LCM_E = 1; }

//写指令 BuysC为0时忽略忙检测

void WriteCommandLCM(unsigned char WCLCM,BuysC) { if (BuysC) ReadStatusLCM(); //根据需要检测忙 P0 = WCLCM; LCM_RS = 0; LCM_RW = 0; LCM_E = 0; LCM_E = 0; LCM_E = 1; }

unsigned char ReadStatusLCM(void) //读状态 { P0 = 0xFF; LCM_RS = 0; LCM_RW = 1; LCM_E = 0; LCM_E = 0; LCM_E = 1; while (P0 & Busy); //检测忙信号 return(P0); }

void LCMInit(void) //LCM初始化 { P0 = 0; WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号 Delay5Ms(); WriteCommandLCM(0x38,0); Delay5Ms(); WriteCommandLCM(0x38,0); Delay5Ms(); WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号 WriteCommandLCM(0x08,1); //关闭显示 WriteCommandLCM(0x01,1); //显示清屏 WriteCommandLCM(0x0c,1); }

//按指定位置显示一个字符

void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData) { Y &= 0x1; X &= 0xF; //限制X不能大于15,Y不能大于1 if (Y) X |= 0x40; //当要显示第二行时地址码+0x40; X |= 0x80; //算出指令码 WriteCommandLCM(X, 1); //发命令字 WriteDataLCM(DData); //发数据 }

//按指定位置显示一串字符

void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData) { unsigned char ListLength; ListLength = 0; Y &= 0x1;

X &= 0xF; //限制X不能大于15,Y不能大于1 while (DData[ListLength]>0x19) //若到达字串尾则退出 { if (X <= 0xF) //X坐标应小于0xF { DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符 ListLength++; X++; } } }

void Delay5Ms(void) //5ms延时 { unsigned int TempCyc = 250; while(TempCyc--); }

void Delay400Ms(void) //400ms延时 { unsigned char TempCycA = 4; unsigned int TempCycB; while(TempCycA--) { TempCycB=20; while(TempCycB--) qj(); } }

void Conut(unsigned char o) { time=TH0*256+TL0; TH0=0; TL0=0; S=(time*1.7)/100; //算出来是CM if(o==1) { SL=S; 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]); //显示M SL=500; } 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]); } }

if(o==3) {

SR=S;

if((S>=700)||flag==1) { flag=0;

DisplayOneChar(10, 1, ASCII[11]); DisplayOneChar(11, 1, ASCII[10]); DisplayOneChar(12, 1, ASCII[11]); DisplayOneChar(13, 1, ASCII[11]); DisplayOneChar(14, 1, ASCII[12]); SR=500; } else {

disbuff[0]=S%1000/100; disbuff[1]=S%1000%100/10; disbuff[2]=S%1000%10 %10;

DisplayOneChar(10, 1, ASCII[disbuff[0]]); DisplayOneChar(11, 1, ASCII[10]);

DisplayOneChar(12, 1, ASCII[disbuff[1]]); DisplayOneChar(13, 1, ASCII[disbuff[2]]); DisplayOneChar(14, 1, ASCII[12]); } }

if(o==2) {

SQ=S;

if((S>=700)||flag==1) { flag=0;

DisplayOneChar(5, 1, ASCII[11]); DisplayOneChar(6, 1, ASCII[10]); DisplayOneChar(7, 1, ASCII[11]); DisplayOneChar(8, 1, ASCII[11]); DisplayOneChar(9, 1, ASCII[12]); SQ=500; } else {

disbuff[0]=S%1000/100; disbuff[1]=S%1000%100/10; disbuff[2]=S%1000%10 %10;

DisplayOneChar(5, 1, ASCII[disbuff[0]]); DisplayOneChar(6, 1, ASCII[10]);

DisplayOneChar(7, 1, ASCII[disbuff[1]]); DisplayOneChar(8, 1, ASCII[disbuff[2]]); DisplayOneChar(9, 1, ASCII[12]); } } }

void zd0() interrupt 1 //T0中断用来计数器溢出,超过测距范围 {

flag=1; //中断溢出标志 }

void StartModule(unsigned char T) //启动模块 {

if(T==1){TX=1;} //启动一次模块1 if(T==2){TXR=1;} if(T==3){TXL=1;} _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); if(T==1){TX=0;} if(T==2){TXR=0;} if(T==3){TXL=0;} }

void delay(unsigned char a) { unsigned char i,j; for(i=0;ivoid qj() { if(fx==1) { RQ=0; LQ=0; RH=1; LH=1; delay(43-sd); RQ=1; LQ=1; delay(sd); }

if(fx==2) { RQ=1; LQ=1; RH=0; LH=0; delay(43-sd); RH=1; LH=1; delay(sd); } if(fx==3) { RQ=0; LQ=1; RH=1; LH=1; delay(43-sd); RQ=1; LH=1; delay(sd); } if(fx==4) { RQ=1; LQ=0; RH=1; LH=1; delay(43-sd); LH=1; LQ=1; delay(sd); } }

void main(void) //主函数 { unsigned char TempCyc; LQ=1; LH=1; RQ=1; RH=1; Delay400Ms(); //启动等待,等LCM讲入工作状态 LCMInit(); //LCM初始化 DisplayListChar(0, 0, mcustudio); DisplayListChar(0, 1, zuozhe); for (TempCyc=0; TempCyc<10; TempCyc++) Delay400Ms(); //延时 DisplayListChar(0, 1, Cls); TMOD=0x01; //设T0为方式1,GATE=1; TH0=0; TL0=0;

ET0=1; //允许T0中断 EA=1; //开启总中断 while(1) { StartModule(1); while(!RX); //当RX为零时等待 TR0=1; //开启计数 while(RX); //当RX为1计数并等待 TR0=0; //关闭计数 Conut(2); //计算 qj(); StartModule(2); while(!RXR); TR0=1; while(RXR); TR0=0; Conut(3); qj(); StartModule(3); while(!RXL); TR0=1; while(RXL); TR0=0; Conut(1); qj(); if(SQ>30&&SR>8&&SL>8) { fx=1; sd=3; } if(SQ>30&&SR<=8&&SL>8) { fx=3; sd=3; } if(SQ>30&&SL<=8&&SR>8) { fx=4; sd=3; } if(SQ<=30&&SL<=8&&SR>8) { fx=4; sd=3; } if(SQ<=30&&SQ>10&&SR<=8&&SL>8) { fx=3; sd=3; } if(SQ<=30&&SQ>10&&SR<=8&&SL<=8) { fx=3; sd=3; }

}

}

if(SQ<=30&&SQ>10&&SR>8&&SL>8&&SR>SL) {

fx=4; sd=3; }

if(SQ<=30&&SQ>10&&SR>8&&SL>8&&SRif(SQ<=10&&SL>SR) {

fx=2; sd=30; Delay400Ms(); fx=3; sd=30; Delay400Ms(); }

if(SQ<=10&&SLfx=2; sd=30; Delay400Ms(); fx=4; sd=30; Delay400Ms(); } qj();

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- efsc.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务