基于单片机的智能跟踪小车1

更新时间:2023-10-20 03:41:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

物理电气信息学院 宁夏大学本科毕业论文

毕业设计

(2016届)

题目基于单片机的智能跟踪小车的

设计以及实现

学院 物理电气信息学院

专业 电气工程与自动化 年级2012级 学生学号12012242019 学生姓名段春瑞 指导教师白 娜

2016年5月12日

1

基于单片机的智能跟踪的小车及实现

摘 要

智能车辆作为现代社会的新产物,并且在智能车辆开发出来的各种功能如跟踪、循迹、避障、自动停泊等,这些功能让生产工作,日常生活变得更加智能,自动化程度更进一步。目前,关于智能小车的研究越来越成为社会关注的焦点。这次的毕业设计是将STC89C52单片机为核心,由直流电机作为驱动,通过红外线传感器来发出跟踪信号,来实现智能小车的跟踪功能。

论文先对自动跟踪功能做了整体的介绍,然后对小车的硬件如单片机,传感器做了介绍。最后在理解硬件的原理的基础上,使用C语言编程和Keil软件与烧写软件实现自动跟踪的功能。

关键词:自动跟踪单片机红外传感器

2

Abstract

Intelligent vehicle as a new product of modern society, and on the basis of intelligent vehicle developed products have become automatedlogistics transportation,flexible production organization system of key equipment,research and development of intelligent car is becoming the focus of attention.This design is based on STC89C52RC single-chip microcomputer ascontrolcore, as by DC motor drive,through infraredsensors to signal tracking,to realize the intelligent car tracing.

Paper first made the overall introduction to the automatic tracking function,and then to the car hardware such as single chip microcomputer, sensor is presented.Then on the basis of understanding the principle of hardware,usingC language programming and the Keil software and burning software to achieve the function of automatic tracking.

Key words:Automatic trackingSingle chip microcomputerInfrared sensor

3

目录

1. 绪论............................................................. 6 1.1 课题研究背景 ................................................. 6 1.2 国内外发展状况 ............................................... 6 1.3 智能跟踪小车的研究目的 ....................................... 6 1.4 课题研究的意义 ............................................... 7 2. 小车的功能以及设计............................................... 8 2.1 智能跟踪小车的设计要求 ....................................... 8 2.2 小车的主要功能 ............................................... 8 3. 智能跟踪小车的硬件设计.......................................... 10 3.1 智能跟踪小车的硬件组成 ...................................... 10 3.2 STC89C52RC单片机的电路以及引脚介绍 .......................... 10 3.3电机驱动模块 ................................................. 12 3.4传感器模块 ................................................... 13 3.5 电源供电系统 ................................................. 15 3.6 LCD1602液晶显示模块 ......................................... 16 4. 自动跟踪系统的软件设计.......................................... 17 4.1 开发软件KeiluVision5与STC-ISP的介绍 ........................ 17 4.2跟踪系统主程序分析 ........................................... 18 4.3电机驱动程序 ................................................. 19 4.4红外传感器程序 ............................................... 20 4.5 LCD1602液晶显示程序 ......................................... 20

4

5.功能测试......................................................... 22 5.1智能跟踪小车的功能测试 ....................................... 22 5.2 发现问题与解决问题的方案 ..................................... 22 6. 结论和展望...................................................... 23 6.1 结论 ......................................................... 23 6.2 展望 ........................................................ 23 参考文献........................................................... 24 谢辞............................................................... 25 附录一:系统硬件仿真图............................................. 26 附录二:红外遥控程序............................................... 27 附录三:系统实物图34

5

绪论

1.1 课题研究背景

在当今的社会中,企业的生产技能逐渐提高,在生产过程中对于自动控制技术的要求也在逐渐提高,在高自动化的生产环境下,智能车辆的研究与运用越来成为工业生产的重要设备。许多科研机构都在致力于智能车辆的开发与应用。智能小车是一个集感应,控制,辅助驾驶,智能操控于一体的系统。在功能性上它可以自动识别并避开障碍物,自动刹车,控制与障碍物或被跟踪物体的安全距离,测量车速,自动停泊等功能。与一般的车辆系统相比智能车辆拥有以下特点:1)计算机处理系统,主要完成对来自摄像机所获取的图像的预处理、增强、分析、识别等工作。2)获得道路路况信息的摄像设备。3)传感器设备,车速传感器用来获得当前车速,障碍物传感器用来获得前方、侧方、后方障碍物等信息。 越来越多的科研项目都在关注着智能小车的开发与研究。

1.2 国内外发展状况

关于国外的智能小车的研究状况可以追溯到20世纪50年代。美国一家电子公司于1954年开发出了世界上第一台无人驾驶的自主引导系统的车辆。虽然这个系统智能在固定的线路上直线行驶,但是这却是智能车辆研究的长足的进步。随后,关于智能车辆的研究成果如雨后春笋般的出现在世人面前。到了1980年左右欧洲以及美国等一些发达国家已经将智能车辆控制系统投入到高速公路的使用中,智能小车的研究有了其实际意义。1990年之后美国卡内基大学研究的Navlab系列智能小车在传感器传输速度,图像处理,以及车辆横向移动等方面都作出了突出的研究成果,这标志着智能车辆即将进入我们的日常生活之中。

国内关于智能小车的研究起步相对较晚,在借鉴发达国家先进的研究成果的基础之后,我国的科研项目致力于对智能交通系统ITS(Intelligent Transport System)的研究目前我国的交通运输行业正在向着交通智能化迈进,相信在不久的将来,我们的出行会更加安全,快捷,智能。

1.3 智能跟踪小车的研究目的

智能小车的一般功能包括自动循迹、传感跟踪、避障、自动停泊等。人们研究智能小车是为了让其代替人类完成一些危险的或者十分枯燥的不适宜人类的工作,通过小车的程序化的工作可以节省物力人力而且可以更高效快捷的完成工

6

作对实现工业系统的自动化有一定的帮助。

关于智能自动跟踪小车的研究,它可以帮助工人在工业工作中取料,运料。还可以在机场帮助下飞机的旅客运送行李,甚至还可以在高尔夫球场扮演“球童”的角色等等。总而言之智能跟踪小车将会使我们的生活更加便捷、轻松。

1.4 课题研究的意义

目前,许多国家的重点大学的理工学院都在致力于智能化与自动化系统的研究,国内外有许许多多关于智能机器人的竞赛,这其中就包括了智能机器人,智能小车的设计与研究。可见智能车辆的研究在全球范围内都被人们所关注着。

智能小车作为智能机器人的典型代表,由传感、执行、控制三大部分组成,本次毕业设计所采用的89C52单片机控制,红外传感,L293芯片控制的直流电机执行运动模块都是目前比较先进的器件,通过以C语言为基础的程序编写可实现智能跟踪,智能循迹避障,智能停泊等功能。在生产实践当中智能小车可以运用于工业生产,医疗考古,生活服务等多方面,极大的方便了人们的生产生活,使我们的世界更加自动化。 该毕业设计对于毕业生来说,在硬件的研究与程序的编写过程中,可以培养其自动控制系统的操作能力,熟练掌握STC89C52单片机的知识,在电路的设计过程中对于电机学,电路的相关知识可以做到温故而知新。将实践与理论统一结合起来,进一步熟悉自动控制系统。

7

2. 小车的功能以及设计

2.1 智能跟踪小车的设计要求

该系统以STC89C52单片机作为系统的核心,通过红外线传感器来检测到被 跟踪对象所处的位置,将信号反馈给单片机,单片机根据STC软件下载到其中的程序作出相应的反应,并将指令下达至电机驱动模块然后电机驱动轮胎作出相应的动作实现跟踪的功能。在下载红外避障跟踪程序的hex文件到单片机之前,应当做好充分的准备工作。首先应当安装好开发板的驱动以及STC烧写软件,在设备管理器中查看USB端口的号码如COM6。然后安装KeiluVision4软件为编程做准备。最后在使用红外避障程序之前先将调用函数编译好以备调用,所用的函数有小车左转函数、小车右转函数、电机后退函数、小车前进函数。这样小车的功能函数就不会显得过于冗长,而且不影响跟踪功能的实现。将程序下载到单片机之后,检测小车能否按照要求对目标进行跟踪实现功能,总结实验中发现的不足,进行总结与改进,尽最大可能满足毕业设计的要求。

2.2 小车的主要功能

自动跟踪小车的主要功能有:1、实现对指定物体的红外感应跟踪。2、延时50msK4确认是按下之后,蜂鸣器发出“滴”声响,然后启动小车。3、超声波测距,测量小车与被跟踪物体之间的距离。4、LCD1602液晶距离显示:在液晶屏上显示测得的距离。5、蜂鸣报警器还可以对危险情况进行报警等。对于智能小车更广泛的更高级的功能来说主要有以下几点:(1)智能家居的控制辅助:在家庭中,可以用智能小车进行家具、远程控制家中的家用电器,控制室温等等。(2)工程安全检测与受损评估:在工程建设领域,可对高速公路自动跟踪,进行道路质量检测和破坏分析检测;对水库堤坝、海岸护岸堤、江河大坝进行质量和安全性检测。在制造领域,可用于工业管道中机械损伤,裂纹等缺陷的探寻,对输油和输气管线的泄漏和破损点的查找和定位等。(3)探测危险与排除险情:在战场上或工程中,常常会遇到各种各样的意外。这时,智能化探测小车就会发挥很好的作用。战场上,可以使用智能车辆扫除路边炸弹、寻找和销毁地雷。民用方面,可以探测化学泄漏物质,可以进行地铁灭火,以及在强烈地震发生后到废墟中寻找被埋人员等。(4)辅助驾驶系统:利用智能感知系统的信息进行决策规划,给驾驶员提出驾驶建议或部分地代替驾驶员进行车辆控制操作。主要包括:巡航控制、车辆跟踪系统、准确泊车系统及精确机动系统。这些高级的智能小车的功能让我们的生活更加的自动化,让人类的工作更为安全。智能跟踪小车虽然

8

比不上它们的功能强大,但是也为我们的生活提供了便利。如商场里的自动追踪购物车、机场的自动行李运输车等。

9

3. 智能跟踪小车的硬件设计

3.1 智能跟踪小车的硬件组成

本次实验所用到的硬件主要包括:STC89C52RC单片机、HL-1小车底盘、LCD液晶显示模块等。各模块功能为:

(1)单片机模块为总控制模块,控制其他模块的工作。

(2)HL-1小车底盘包括L293D电机驱动模块、电源供电系统、红外线传感器模块、超声波传感器模块以及传感器指示灯。电机驱动模块控制小车的运动状态,超声波传感器模块负责距离的测量,红外传感器负责光感检测。

3.2 STC89C52RC单片机的电路以及引脚介绍

图3-1 STC89C52RC引脚图

STC89C52是一种耗能较低,性能很强的单片机芯片,相比于传统的单片机芯片89C52在控制上更加灵活[1]。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。其引脚图如图3-1所示。

STC89C52微处理器的主要功能有:

1. 8k可反复擦写(大于1000次)FLASH ROM; 2. 256x8bit内部RAM;

3. 工作电压:5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机); 4. 工作频率范围:0~40MHz,相当于普通 8051 的 0~80MHz,实际工作频率可达48MHz;

5. 用户可以获得8k字节的应用程序空间; 6. 时钟频率0-24MHz;

10

3.6 LCD1602液晶显示模块

1602液晶称之为字符型液晶,该模块在液晶屏上显示数字、字母、字符,显示的内容由点阵组成。点阵的组成是由五乘以七或者五乘以十一的点阵组成,字符由每一个点阵所组成,每个字符之间有一个点的距离,每一行之间也有一个点的距离,通过这些距离起到了较好的隔离作用,因为有这些点距的存在所以点阵不能较好的显示图形。但是作为距离测量数据的显示1602已经能为其所用了。

液晶显示模块的引脚图如图3-7所示:

图3-7 液晶模块引脚图

LCD1602模块引脚及其功能介绍:

一号GND为接地端;二号VCC接5V电源正极;

三号VL为对比度的调整端口,当VL接电源正极时对比度最小,反之接GND时对比度最大;

四号RS作为寄存器当信号为1时进行数据的寄存,当信号为0时进行指令的寄存;

五号RW作为读写信号端口当输入1时进行读操作,当输入0时进行写操作; 六号E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令;

七到十四号D0~D7为8位双向数据端。

十五、十六号 为空脚或背灯电源。十五脚为背灯正极,十六为负极。 LCD的基本操作时序:

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=高脉冲 输出:无。 LCD的初始化:

1、延时15ms; 2、写命令38H(不检测忙信号);3、延时5ms; 4、写命令38H(不检测忙信号);5、延时5ms;6、写命令38H(不检测忙信号);7以后每次命令、读/写数据操作之前均需要检测忙信号;8、写命令38H:显示模式设置;9、写命令08H:显示关闭;10、写命令01H:显示清屏;11、写命令06H:显示光标移动设置;12、写命令0CH:显示开关及光标设置。

16

4. 自动跟踪系统的软件设计

4.1 开发软件KeiluVision5与STC-ISP的介绍

本次智能小车的程序开发是基于C语言的程序编写,所以采用了KeilC51软件对程序进行编写并且用STC-ISP程序烧写软件对单片机进行程序烧录。

Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。[6]Keil软件拥有强大的集成调试功能,其包含C语言编译器、程序管理库、连接功能等通过μVision组合在一起。该软件兼容目前所有的Windows系统。Keil软件最适用于和C语言配合的编程,其强大的集成环境与调试能力都会让毕业设计的制作更加快捷。[7]

Keil C51开发系统基本知识 1.系统概述

KeilC51拥有强大的集成功能与丰富的函数库,并且与电脑的操作界面完全相同,是目前单片机程序开发的主要编程软件。[8]

2.软件开发系统的结构

KeilC51所包含的μVision是C51关于Windows系统的开发环境,在该开发环境之中可以编译、链接、仿真、运行目。我们可以在此开发环境中生成.c文件用来编写我们所需要的程序,并且在Options中创建我们所需要烧写的.hex文件。最后进行编译运行仿真,查找错误。

使用独立的Keil仿真器时,注意事项

*仿真器的标准的晶振为11兆赫兹,但是在实际操作中可以通过晶振插口换 用其他的频率。

*使用仿真器的复位键并不能将目标系统进行重置,只能复位仿真器的芯片。 * 仿真时只可以使用内部的只读存储器(ROM),片外的存储器无法使用。这是因为仿真芯片的EA引脚已经被置为高电平。

KeilC51软件的优点:

1.Keil C51中的语句所生成的汇编代码与其他开发软件相比较更容易让人理解。在开发复杂的程序过程中更具有“高效代码”优势。[9]

2.C语言功能高、可移植性好,既具有高级语言的优点,又具有低级语言的许多特点,因此特别适合于编写系统软件。[10]

STC-ISP烧写软件介绍:

17

STC_ISP是将Keil软件编写好的程序烧写进入单片机的一款软件,是专门针对STC系列的单片机所设计的一款软件,可下载目前绝大部分系列的STC单片机,因其操作简单易用,现在已经成为主流的烧写软件[11]。该软件操作界面如下图4-1所示:

图4.1STC-ISP软件界面

该软件的使用方法:

第一步:选择单片机的型号(选择STC89C52)型号。

第二步:在“我的电脑”里的设备管理器的USB端口查看串口号。 第三步:点击打开程序文件,将保存好的hex.文件添加到该软件中。(此时不需要给单片机通电。)

第四步:点击下载编程,当显示请给MCU上电时,给单片机通电。程序就能够下载到单片机中。

4.2跟踪系统主程序分析

本次设计的跟踪主程序是对左转函数,右转函数,前进函数,以及红外线传感函数的调用结合起来实现小车的跟踪功能。具体的红外传感跟踪函数见附录二。

工作流程:

初始化后系统判断K4键是否按下,按下后蜂鸣器发出声音信号小车开始工作。程序调用前进函数小车开始向前走,并且红外线传感器开始检测跟踪目标,

18

判断跟踪目标位置,然后反馈给单片机后判断调用左转或右转函数来进行方向的控制,使小车跟着被跟踪目标的移动而移动,实现跟踪功能。程序流程图如下图4-2所示: 否 小车前进 蜂鸣器发出信号 K4键是否按下 初始化 开始 否 是 是 图4.2主程序流程图 开始跟踪 红外检测目标 4.3电机驱动程序

电机驱动模块可以实现小车的5个运动状态,包括小车的停止、前进、后退,左转,右转。[12]当6个状态引脚IN1,IN2,IN3,IN4,EN1,EN2为逻辑输入端,当接收到高、低电平信号时,执行对应的小车运动状态。IN3高电平时左电机正转,IN4高电平左电机反转,EN1低电平左电机停车。IN1高电平右电机反转,IN2高电平右电机正转,EN2右电机低电平停车。调用左右转函数实现转向[13]。电机驱动程序见附录二。

19

4.4红外传感器程序

在本次设计中,红外模块的作用是对小车的运动状态进行控制。安装在小车车尾左右放置,通过红外跟踪模块对两侧的障碍物进行探测从而控制小车运动状态,同时,蜂鸣器作出报警相应提示,此时应注意车身周围是否存在障碍物。红外模块的功能可以独立完成,只需要给此模块一个高或低的电平即可。

当红外模块发射管发射出的的红外线被红外模块的接收管接收时,此段程序开始执行。当左右两侧检测到障碍物时,蜂鸣器进行报警,小车进行停车操作,并打开延时。延迟过后蜂鸣器关闭报警状态。红外传感器工作流程图如下图4-3所示:

图4-3红外传感器流程图

红外检测被跟踪物体 初始化 开始 是 将信号反馈给单片机 4.5 LCD1602液晶显示程序

LCD1602液晶显示程序中初始化程序部分如下所示: void LcdInitiate(void) { delay(15);

WriteInstruction(0x38); …….

20

delay(5);

WriteInstruction(0x01); delay(5); }

以上代码为使用LCD1206液晶显示屏之前要对其进行初始化。随着液晶屏的初始化操作完成以后,就该对其忙检测来确定LCD液晶屏当前的状态。 LCD1602液晶显示程序中显示程序见附录二

程序代码就是在忙检测和显示设置方面完成的前提下,进行数据的读与写的过程,并且将得到的数据显示在液晶屏上。让使用者能够更加直观的知道所获得的数据[14]。

21

5.功能测试

5.1智能跟踪小车的功能测试

小车在测试之前应该先做好充分的准备工作。首先应当将HL-1电路板与电池、电机安装好并且将红色的线接在电机电源上端,黑色的线接在电机电源下端,(注意:不要将电机的螺丝拧的太紧,否则电机会堵转)最后将转向轮,以及轮胎安好。接下来将单片机模块与HL-1模块相连接,按照两块板子上对应引脚的指示,用导线将HL-1模块上的J3、J4、J8、J7、J5与单片机对应的引脚相连接。最后将超声波模块的四个引脚插入J6区域,完成组装。

在电脑上安装Keil软件的驱动,驱动安装完成后安装Keil软件后安装STC程序烧写软件。两个软件安装完毕之后开始进行程序的编写,编写完毕并且生成hex.文件之后开始将程序烧写进单片机。若烧写成功,则此时小车以及具备跟踪的功能。拔下USB传输线,按下电源开关,小车则会按照预定的程序工作。

5.2 发现问题与解决问题的方案

在小车的安装,编程,烧写,运行中发现了不少问题,其中比较主要的问题有:1、在烧写程序时已经编写好的程序无法写进单片机,单片机与电脑连接无响应。2跟踪过程中小车无法准确的跟踪方向变化太快的被跟踪物。3小车速度无法控制容易引起碰撞。

解决方案:1、使用最新版本的STC烧写软件与所购买的单片机开发板不兼容,使用低版本的STC烧写软件可以将程序录入单片机。2、红外线感应容易受日光的影响所以在做跟踪实验时应当在阴天或者比较阴暗的房间里进行。3、将红外线遥控程序烧写进单片机可以用遥控器对小车的运动状况进行控制。

22

6. 结论和展望

关于本次智能跟踪小车的毕业设计,在硬件部分我将红外传感器模块,单片机模块,电机驱动模块,电源供电模块,用C语言所编写的程序联系起来实现跟踪功能。在程序的编写方面主要运用的是if语句来检测是否给电,小车方向的控制采用的是对函数的调用,通过红外传感器对目标的位置的检测与反馈来调用相应的函数。(采用While…if来实现反馈信号与调用函数的联系)。例如,当红外信号检测到被跟踪物体在左侧时Left=1 Right=0(有信号时为1)。调用左转函数(小车左电机不转,右电机转动)小车向左运动实现跟踪。

6.1 结 论

本次毕业设计用到的主要工具是STC89C52RC单片机,关于单片机的知识我们在大四上学期的的课程中已经学习过,所以在小车的程序方面学习的更加快捷一些。智能小车的设计在单片机的相关课题中是属于比较偏向硬件设计的,所以有了实物模型才能更加具体的了解你所做的东西,否则一切都是纸上谈兵罢了。智能小车的功能非常的多,主要包括循迹、避障、跟踪等等在实际生活中的应用在前文中已经阐述,我所做的跟踪功能只不过是其中的一小种,尽管不是什么创新研究,但是这几个月的毕业设计的学习让我明白了理论与实践结合的重要性,通过此次设计,使我把课堂上学到的C语言知识、单片机知识全部应用到实践中去,让理论与实践有了完美的结合,在此结合的过程中让自己的知识得到强化和复习, 温故而知新,学到了不少新的知识。还对Keil C51软件和STC_ISP软件使用方法得到了加固。并且让我感觉到自己的知识面和动手能力等多方面都得到了加强。

6.2 展望

在测试与实验当中我也发现的小车的一些不足,小车对被跟踪物体方向变化不是很敏感,有时需要物体里小车的传感器很近才能实现跟踪。所以我计划在接下来的学习之中着力于改进小车的红外检测模块,并且对程序进行进一步的研究与完善争取作出更好的智能跟踪小车。

23

参考文献

[1]张兰红,邹华.《单片机原理及应用》[M].北京:机械工业出版社,2013.

[2]周坚.《单片机C语言轻松入门》[M].北京:北京航空航天大学出版社,2008. [3]郑佩.《基于51单片机智能小车的设计与实现》[J]《中国科技博览》2014

[4]陈伯时.《电力拖动自动控制系统(第三版)》[M].北京:机械工业出版社,2000年. [5]刘迎春. 《传感器原理设计与应用》[M].长沙:国防科技大学出版社,1992. [6]谭浩强.《C语言程序设计(第三版)》[M].北京:清华大学出版社,2005. [7]张旭涛.《单片机原理与应用》[M].北京:北京理工大学出版社,2007. [8]高海生.《单片机应用技术大全》[M].四川:西南科技出版社,2003.

[9]张红洗.《C8051F系列单片机开发与C语言编程》[J]《电子产品可靠性与C语言编程》2011.

[10]徐惠民,安德宁.《单片机微型计算机原理及应用》[M].北京:北京邮电大学出版社, 2001.

[11]李广第.《单片机基础》[M].北京:北京航天航空大学出版社,1999. [12]陈兴文,刘燕.《单片机应用系统硬件调试与技巧》[J].中国测控网.2006.

[13]夏继强.《单片机实验与实践教程》[M].北京:北京航天航空大学出版社,2001.

[14]陈享成,耿长青.《基于单片机的LCD显示终端设计》[J]《电力自动化设备》2007(09).

24

谢 辞

在本次毕业设计中由于本人知识水平的限制,我在完成毕业设计的时候遇到了许许多多的困难,但是到最后关于智能跟踪小车的实验设计终于顺利完成,这其中少不了同学和指导老师的帮助,是他们的帮助让我克服了重重困难,解决了许多棘手的问题。其中最应当感谢的是我的论文导师白娜老师,白老师给了我许多学习资料,让我不仅仅完成了毕业设计,还对单片机有了系统的了解与学习,将理论与实践结合起来顺利完成了毕业设计。尊敬的老师和同学们,没有你们的帮助我的设计也不能顺利完成,谢谢你们,谢谢!

25

附录一:系统硬件仿真图

26

附录二:红外遥控程序

红外遥控程序

#include

#define Left_moto_go {P1_2=0,P1_3=1;} //左边电机向前走 #define Left_moto_back {P1_2=1,P1_3=0;} //左边电机向后转 #define Left_moto_Stop {P1_2=0,P1_3=0;} //左边电机停转 #define Right_moto_go {P1_6=1,P1_7=0;} //右边电机向前走 #define Right_moto_back {P1_6=0,P1_7=1;} //右边电机向后走 #define Right_moto_Stop {P1_6=0,P1_7=0;} //右边电机停转

#define Imax 14000 //此处为晶振为11.0592时的取值, #define Imin 8000 //如用其它频率的晶振时, #define Inum1 1450 //要改变相应的取值。 #define Inum2 700 #define Inum3 3000

unsigned char f=0;

unsigned char Im[4]={0x00,0x00,0x00,0x00}; unsigned char show[2]={0,0}; unsigned long m,Tc; unsigned char IrOK;

/************************************************************************/

//延时函数

void delay(unsigned int k) {

unsigned int x,y; for(x=0;x

/************************************************************************/

//外部中断解码程序

void intersvr0(void) interrupt 1 using 1 {

Tc=TH0*256+TL0; //提取中断时间间隔时长 TH0=0;

TL0=0; //定时中断重新置零 if((Tc>Imin)&&(Tc

27

} //找到启始码

if(f==1) {

if(Tc>Inum1&&Tc

Im[m/8]=Im[m/8]>>1|0x80; m++; }

if(Tc>Inum2&&Tc

Im[m/8]=Im[m/8]>>1; m++; //取码 }

if(m==32) { m=0; f=0; }

if(Im[2]==~Im[3]) {

IrOK=1; }

else IrOK=0; //取码完成后判断读码是否正确 }

//准备读下一码 } }

/************************************************************************/

//前速前进 void run(void) {

Left_moto_go ; //左电机往前走 Right_moto_go ; //右电机往前走 }

//前速后退

void backrun(void) {

Left_moto_back ; //左电机后退 Right_moto_back ; //右电机后退 }

//右转

28

void rightrun(void) {

Left_moto_go ; //左电机前进 Right_moto_Stop ; //右电机停止 }

//左转

void Leftrun(void) {

Left_moto_Stop ; //左电机停止 Right_moto_go ; //右电机前进 }

//停止

void stoprun(void) {

Left_moto_Stop ; //左电机停止 Right_moto_Stop ; //右电机停止 }

/*********************************************************************/

/*--主函数--*/ void main(void) { m=0; f=0; IT0=1; EX0=1;

TMOD=0x11; TH0=0; TL0=0; TR0=1; EA=1; delay(100); while(1) /*无限循环*/ {

if(IrOK==1) {

switch(Im[2]) {

case 0x18: run(); //前进 break;

case 0x52: backrun(); //后退 break;

case 0x08: leftrun(); //左转 break;

29

case 0x5A: rightrun(); //右转 break;

case 0x1C: stoprun(); //停止 break;

default:break; }

IrOK=0; } } }

附录二:主程序分析 #include //包含51单片机头文件,内部有各种寄存器定义 //主函数

void main(void) {

unsigned char i;

P1=0X00; //关电车电机

B: for(i=0;i<50;i++) //判断K4是否按下 { delay(1); //1ms内判断50次,如果其中有一次被判断到K4没按下,便重新检测 if(P3_7!=0)//当K4按下时,启动小车前进. goto B; //跳转到标号B,重新检测 }

BUZZ=0; //50次检测K4确认是按下之后,蜂鸣器发出“滴”声响,然后启动小车。 delay(50);

BUZZ=1;//响50ms后关闭蜂鸣器 TMOD=0X01;

TH0= 0XFc; //1ms定时 TL0= 0X18; TR0= 1; ET0= 1; EA = 1; //开总中断 while(1) //无限循环 {

if(Left_1_led==1&&Right_1_led==1) //有信号为1 没有信号为0 run(); //调用前进函数

else { if(Left_1_led==1&&Right_1_led==0)//左边检测到红外信号 {

30

本文来源:https://www.bwwdw.com/article/21bf.html

Top