多功能避障探测小车_第1页
多功能避障探测小车_第2页
多功能避障探测小车_第3页
多功能避障探测小车_第4页
多功能避障探测小车_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

多功能避障探测小车摘要:随着科学技术的不断发展,自动化技术已经开始在工业生产制造、现场救援、野外勘测以及人民生活当中开始广泛应用。尤其对人们的生命安全构成威胁的场所不适合人们亲自探测,这就需要自动装置去完成这种危险性的工作。基于使用方便、便于携带为其本原则考虑,我们设计了能够实现数据采集、图像发送接收以及自动避障避悬崖等多种功能的装置来完成一些特殊场合下的特种作业。本设计可以使一些复杂问题简单化,极具推广价值!1系统设计方案本系统是以89S52CPU为微处理器芯片,能收集和处理小车由超声波测距模块、红外蔽障模块、显示器传送的信息,通过电机驱动芯片L298N驱动步进电机运转,运动状态及距离前方障碍的距离通过5110液晶屏显示,采用无线摄像头,实现无线拍摄、时时显示,将信号传递到无线接收器及采集卡。再将信号传递到计算机,显示图像。使小车具有自动避障功能、到危险场所进行信息拍摄、危险建筑工程测量以及到未知环境下进行测量等功能。2系统芯片简介2.1系统核心芯片89S52AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K

的系统可编程Flash

存储器。使用Atmel

公司高密度非易失性存储器技术制造,与工业80C51

产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8

位CPU

和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52具有以下标准功能:

8k字节Flash,256字节RAM,32

位I/O

口线,看门狗定时器,2

个数据指针,三个16

位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52

可降至0Hz

静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。AT89S52图2-1-1AT89S52封装图图2-1-2AT89S52结构图多功能I/O口AT89S52共有四个8位的并行I/O口:P0、P1、P2、P3端口,对应的引脚分别是P0.0~P0.7,P1.0~P1.7,P2.0~P2.7,P3.0~P3.7,共32根I/O线。每根线可以单独用作输入或输出。①P0端口,该口是一个8位漏极开路的双向I/O口。在作为输出口时,每根引脚可以带动8个TTL输入负载。当把“1”写入P0时,则它的引脚可用作高阻抗输入。当对外部程序或数据存储器进行存取时,P0可用作多路复用的低字节地址/数据总线,在该模式,P0口拥有内部上拉电阻。在对Flash存储器进行编程时,P0用于接收代码字节;在校验时,则输出代码字节;此时需要外加上拉电阻。②P1端口,该口是带有内部上拉电阻的8位双向I/O端口,P1口的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写“1”时,通过内部的上拉电阻把端口拉到高电位,此时可用作输入口。P1口作输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。在对Flash编程和程序校验时,P1口接收低8位地址。另外,P1.0与P1.1可以配置成定时/计数器2的外部计数输入端(P1.0/T2)与定时/计数器2的触发输入端(P1.0/T2EX),如表1-1所示。

表2-1-1

P1口管脚复用功能端口引脚复用功能P1.0T2(定时器/计算器2的外部输入端)P1.1T2EX(定时器/计算器2的外部触发端和双向控制)P1.5MOSI(用于在线编程)P1.6MISO(用于在线编程)P1.7SCK(用于在线编程)

③P2端口,该口是带有内部上拉电阻的8位双向I/O端口,P2口的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写“1”时,通过内部的上拉电阻把端口拉到高电位,此时可用作输入口。P2口作输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。在访问外部程序存储器或16位的外部数据存储器(如执行MOVX

@DPTR指令)时,P2口送出高8位地址,在访问8位地址的外部数据存储器(如执行MOVX

@RI指令)时,P2口引脚上的内容(就是专用寄存器(SFR)区中P2寄存器的内容),在整个访问期间不会改变。在对Flash编程和程序校验期间,P2口也接收高位地址或一些控制信号。④P3端口,该口是带有内部上拉电阻的8位双向I/O端口,P3口的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写“1”时,通过内部的上拉电阻把端口拉到高电位,此时可用作输入口。P3口作输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。在AT89S52中,同样P3口还用于一些复用功能,如表1-2所列。在对Flash编程和程序校验期间,P3口还接收一些控制信号。

表2-1-2

P3端口引脚与复用功能表端口引脚复用功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2INT0(外部中断0)P3.3INT1(外部中断1)P3.4T0(定时器0的外部输入)P3.5T1(定时器1的外部输入)P3.6WR(外部数据存储器写选通)P3.7RD(外部数据存储器读选通)RST

复位输入端。在振荡器运行时,在此脚上出现两个机器周期的高电平将使其单片机复位。看门狗定时器(Watchdog)溢出后,该引脚会保持98个振荡周期的高电平。在SFRAUXR(地址8EH)寄存器中的DISRTO位可以用于屏蔽这种功能。DISRTO位的默认状态,是复位高电平输出功能使能。ALE/PROG

地址锁存允许信号。在存取外部存储器时,这个输出信号用于锁存低字节地址。在对Flash存储器编程时,这条引脚用于输入编程脉冲PROG。一般情况下,ALE是振荡器频率的6分频信号,可用于外部定时或时钟。但是,在对外部数据存储器每次存取中,会跳过一个ALE脉冲。在需要时,可以把地址8EH中的SFR寄存器的0位置为“1”,从而屏蔽ALE的工作;而只有在MOVX或MOVC指令执行时ALE才被激活。在单片机处于外部执行方式时,对ALE屏蔽位置“1”并不起作用。PSEN

程序存储器允许信号。它用于读外部程序存储器。当AT89S52在执行来自外部存储器的指令时,每一个机器周期PSEN被激活2次。在对外部数据存储器的每次存取中,PSEN的2次激活会被跳过。EA/Vpp

外部存取允许信号。为了确保单片机从地址为0000H~FFFFH的外部程序存储器中读取代码,故要把EA接到GND端,即地端。但是,如果锁定位1被编程,则EA在复位时被锁存。当执行内部程序时,EA应接到Vcc。在对Flash存储器编程时,这条引脚接收12V编程电压Vpp。XTAL1

振荡器的反相放大器输入,内部时钟工作电路的输入。XTAL2

振荡器的反相放大器输出。2.2超声波测距超声波探头又称超声波换能器,用来测量距离障碍物的距离,根据距离控制机器人的运动,来避开障碍物,实现自动蔽障。它是采用进口镀膜晶片,适用于空气介质中测距、物位检测的电声转换器件。超声波测距就是利用超声波来测量机器人距离障碍物的距离。超声波发射头发出超声波,当发出的超声波被前方的障碍物返射回来,返射回来的超声波被接收探头接收到。在发出超声波的同时单片机开始计时,当超声波信号返回时,计时停止;利用计时的时间和公式“测量距离=(时间*声速(340M/S))/2”就可以知道机器人距离障碍物的距离了。单片机把测得的距离信息处理后实现对机器人控制的前进或停止,同时也传递给5110液晶显示器显示出来。表2-2-1测距引脚说明序号定义说明1保留保留2电源地GND3信号输出OUT4信号输入IN5电源VCC+5V

GND和VCC是电源供电引脚,模块正5V供电;2、

IN脚是模块的信号输入脚,用户从此脚输入控制信号,驱动模块工作,控制信号可以从单片机的IO口输出方波信号;3、

OUT脚是模块接收到超声波后的返回信号输出脚,此引脚步在模块上电后输出高电平,当用户从输入脚发出驱动信号后,如果模块接收到返回超声波,OUT引脚即被拉低,输出低电平;4、

保留引脚用于功能扩展;功能实现原理:通过从IN脚输入40KH的方波信号,即从单片机的IO口连续发出高低电平,产生方波,方波的个数一般为10个左右,发出后启动定时器,开始计时,此时,超声波发射头开始发出超声波,当发出的超声波被前方的障碍物返射回来,返射回来的超声波被接收探头接收到,此时,模块的OUT引脚会产生一个从高电平到低电平的跳变,此时,要停止计时,通过计时的时间,根据以下公式计算测量距离:2.3蔽障传感器ST178H红外光电传感器是采用高发射功率红外光电二极管和高灵敏度光电晶体管组成,输出信号经施密特电路整形,稳定可靠。图2-3-1红外避障模块电路原理功能实现原理:在小车的左、右、后三个方向用红外线蔽障。传感器的红外发射二极管不断发射红外线,当发射出的红外线没有被反射回来或被反射回来但强度不够大时,光敏三极管一直处于关断状态,此时模块的输出端为低电平,指示二极管一直处于熄灭状态;被检测物体出现在检测范围内时,红外线被反射回来且强度足够大,光敏三极管饱和,此时模块的输出端为高电平,指示二极管被点亮。然后把信号传递给单片机(CPU),然后单片机控制电机,机器人自动避开障碍物。2.4无线摄像头及液晶显示器 功能实现原理:在本设计还采用无线摄像头和液晶显示器,实现无线拍摄、时时显示,将信号传递到无线接收器及采集卡。再将信号传递到计算机,显示图像。同时将机器人的运动状态及距离前方障碍的距离通过5110液晶屏显示出来,能够给远程控制的操作员提供操作依据。2.5电机驱动电路本设计才步进电机带动小车,步进电机区别于其他控制电机的最大特点是,它是通过输入脉冲信号来进行控制的,即电机的总转动角度由输入脉冲数决定,而电机的转速由脉冲信号频率决定。步进电机的驱动电路根据控制信号工作,控制信号由单片机产生。其基本原理作用如下:(1)控制换相顺序通电换相这一过程称为脉冲分配。例如:三相步进电机的三拍工作方式,其各相通电顺序为A-B-C-D,通电控制脉冲必须严格按照这一顺序分别控制A,B,C,D相的通断。(2)控制步进电机的转向如果给定工作方式正序换相通电,步进电机正转,如果按反序通电换相,则电机就反转。控制步进电机的速度功能实现原理:如果给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步。两个脉冲的间隔越短,步进电机就转得越快。调整单片机发出的脉冲频率,就可以对步进电机进行调速。电机的驱动采用专用的电机驱动芯片L298N,一片L298N可驱动2个电动机,OUT1,OUT2和OUT3,OUT4之间可分别接电动机,5,7,10,12脚接输入控制电平,控制电机的正反转。EnA,EnB接控制使能端,控制电机的停转。下图是L298N功能逻辑图及电路原理图。表2-5-1图2-5-1驱动电路原理图3硬件设计方案本例的硬件电路设计主要是围绕着超声波测距传感器、避障传感器以及无线摄像头技术的使用进行的。3.1结构框图本例的硬件电路包括串行通信接口电路、单片机电路、超声波测距电路、自动避障电路、无线摄像及液晶显示输出电路和电机驱动电路。其结构框图如图3-1图3-1硬件总体设计图4软件设计软件设计的重点在于单片机如何实现摄像头的多方位摄像、自动避障、超声波测距等功能。程序框图如下:主程序开始主程序开始While(1)IO是高低电平?平口低高电平对IO进行时时扫面并将扫面结果传给CPUCPU判断信息种类从而让相关的调用函数执行命令通过While(1)函数从而判断前后左右主程序继续运行控制电机正反转扫面继续进行初始化主程序开始:#include<reg51.h>#define uchar unsigned char#define uint unsigned int//第一个步进电机控制ucharcodeF1_Rotation[]={0x01,0x02,0x04,0x08};//正转表格ucharcodeB1_Rotation[]={0x08,0x04,0x02,0x01};//反转表格//蔽障模块sbitIR_obj_left=P1^6; //左边障碍扫描sbitIR_obj_right=P1^7; //右边障碍扫描sbitIR_obj_back=P3^1; //后边障碍扫描//显示器和测距sbitsce=P1^0;//片选sbitres=P1^1;//复位,0复位sbitdc=P1^2;//1写数据,0写指令sbitsdin=P1^3;//数据sbitsclk=P1^4;//时钟sbit BACK_LED=P1^5;//背光sbitTrig=P3^0;//产生脉冲引脚sbitEcho=P3^2;//回波引脚uintdistance[4],distance_data,a,b,k;//测距接收缓冲区 ucharge,shi,bai,temp,flag,outcomeH,outcomeL,i,p,q;//自定义寄存器 bitsucceed_flag;//测量成功标志//6*16字符unsignedcharcodeshuzi[]={/*--文字:>--*//*--文字:0--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=6x12--*//*--高度不是8的倍数,现调整为:宽度x高度=6x16--*/0xF8,0x04,0x04,0x04,0xF8,0x00,0x01,0x02,0x02,0x02,0x01,0x00,/*--文字:1--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=6x12--*//*--高度不是8的倍数,现调整为:宽度x高度=6x16--*/0x00,0x08,0xFC,0x00,0x00,0x00,0x00,0x02,0x03,0x02,0x00,0x00,/*--文字:2--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=6x12--*//*--高度不是8的倍数,现调整为:宽度x高度=6x16--*/0x18,0x84,0x44,0x24,0x18,0x00,0x03,0x02,0x02,0x02,0x02,0x00,/*--文字:3--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=6x12--*//*--高度不是8的倍数,现调整为:宽度x高度=6x16--*/0x08,0x04,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00,/*--文字:4--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=6x12--*//*--高度不是8的倍数,现调整为:宽度x高度=6x16--*/0x40,0xB0,0x88,0xFC,0x80,0x00,0x00,0x00,0x00,0x03,0x02,0x00,/*--文字:5--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=6x12--*//*--高度不是8的倍数,现调整为:宽度x高度=6x16--*/0x3C,0x24,0x24,0x24,0xC4,0x00,0x01,0x02,0x02,0x02,0x01,0x00,/*--文字:6--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=6x12--*//*--高度不是8的倍数,现调整为:宽度x高度=6x16--*/0xF8,0x24,0x24,0x2C,0xC0,0x00,0x01,0x02,0x02,0x02,0x01,0x00,/*--文字:7--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=6x12--*//*--高度不是8的倍数,现调整为:宽度x高度=6x16--*/0x0C,0x04,0xE4,0x1C,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x00,/*--文字:8--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=6x12--*//*--高度不是8的倍数,现调整为:宽度x高度=6x16--*/0xD8,0x24,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00,/*--文字:9--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=6x12--*//*--高度不是8的倍数,现调整为:宽度x高度=6x16--*/0x38,0x44,0x44,0x44,0xF8,0x00,0x00,0x03,0x02,0x02,0x01,0x00,/*--文字::--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=6x12--*//*--高度不是8的倍数,现调整为:宽度x高度=6x16--*/0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,/*--文字:C--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=6x12--*//*--高度不是8的倍数,现调整为:宽度x高度=6x16--*/0xF8,0x04,0x04,0x04,0x0C,0x00,0x01,0x02,0x02,0x02,0x01,0x00,/*--文字:M--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=6x12--*//*--高度不是8的倍数,现调整为:宽度x高度=6x16--*/0xFC,0x3C,0xC0,0x3C,0xFC,0x00,0x03,0x00,0x03,0x00,0x03,0x00};unsignedcharcodehanzi[]={/*--文字:蔽--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=12x12--*//*--高度不是8的倍数,现调整为:宽度x高度=12x16--*/0xF2,0x9A,0x52,0xFF,0x92,0xFA,0x22,0xFF,0x12,0xF2,0x12,0x00,0x07,0x00,0x00,0x07,0x04,0x07,0x04,0x02,0x01,0x02,0x04,0x00,/*--文字:障--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=12x12--*//*--高度不是8的倍数,现调整为:宽度x高度=12x16--*/0xFF,0x81,0x9D,0xE3,0x0A,0xFA,0xAE,0xAB,0xAE,0xFA,0x0A,0x00,0x07,0x00,0x00,0x02,0x02,0x02,0x02,0x07,0x02,0x02,0x02,0x00,/*--文字:机--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=12x12--*//*--高度不是8的倍数,现调整为:宽度x高度=12x16--*/0x84,0x64,0xFF,0x24,0x44,0xFE,0x02,0x02,0xFF,0x02,0x00,0x00,0x01,0x00,0x07,0x04,0x02,0x01,0x00,0x00,0x07,0x04,0x07,0x00,/*--文字:器--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=12x12--*//*--高度不是8的倍数,现调整为:宽度x高度=12x16--*/0xA0,0xAF,0xA9,0xE9,0xAF,0x30,0xAF,0xA9,0xF9,0xAF,0xA0,0x00,0x00,0x07,0x04,0x04,0x07,0x00,0x07,0x04,0x04,0x07,0x00,0x00,/*--文字:人--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=12x12--*//*--高度不是8的倍数,现调整为:宽度x高度=12x16--*/0x00,0x00,0x00,0x80,0x60,0x1F,0x60,0x80,0x00,0x00,0x00,0x00,0x04,0x04,0x02,0x01,0x00,0x00,0x00,0x01,0x02,0x04,0x04,0x00,/*--文字:调--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=12x12--*//*--高度不是8的倍数,现调整为:宽度x高度=12x16--*/0x10,0xF1,0x02,0x80,0xFF,0x11,0xD5,0x5F,0xD5,0x11,0xFF,0x00,0x00,0x03,0x01,0x04,0x03,0x00,0x01,0x01,0x05,0x04,0x07,0x00,/*--文字:试--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=12x12--*//*--高度不是8的倍数,现调整为:宽度x高度=12x16--*/0x11,0xF6,0x00,0x04,0x24,0xE4,0x24,0x24,0xFF,0x05,0x06,0x00,0x00,0x07,0x02,0x01,0x02,0x03,0x01,0x01,0x01,0x02,0x07,0x00,/*--文字:运--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=12x12--*//*--高度不是8的倍数,现调整为:宽度x高度=12x16--*/0x10,0xF1,0x02,0x08,0x89,0xC9,0xB9,0x89,0xC9,0x89,0x08,0x00,0x06,0x01,0x02,0x04,0x05,0x04,0x04,0x04,0x04,0x05,0x04,0x00,/*--文字:动--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=12x12--*//*--高度不是8的倍数,现调整为:宽度x高度=12x16--*/0x92,0x52,0x32,0x52,0x92,0x10,0x08,0xFF,0x08,0x08,0xF8,0x00,0x03,0x01,0x01,0x01,0x05,0x02,0x01,0x04,0x04,0x06,0x01,0x00,/*--文字:状--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=12x12--*//*--高度不是8的倍数,现调整为:宽度x高度=12x16--*/0x84,0x48,0xFF,0x00,0x08,0x88,0x7F,0xC8,0x0A,0x0C,0x08,0x00,0x00,0x00,0x07,0x04,0x02,0x01,0x00,0x00,0x01,0x02,0x04,0x00,/*--文字:态--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=12x12--*//*--高度不是8的倍数,现调整为:宽度x高度=12x16--*/0x44,0x44,0x24,0x94,0xAC,0x27,0x4C,0x14,0xA4,0x46,0x44,0x00,0x04,0x03,0x00,0x07,0x04,0x05,0x04,0x04,0x06,0x01,0x02,0x00,/*--文字:距--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=12x12--*//*--高度不是8的倍数,现调整为:宽度x高度=12x16--*/0xEF,0x09,0xF9,0x4F,0x40,0xFF,0x49,0x49,0x49,0x79,0x01,0x00,0x07,0x04,0x03,0x02,0x02,0x07,0x04,0x04,0x04,0x04,0x04,0x00,/*--文字:离--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=12x12--*//*--高度不是8的倍数,现调整为:宽度x高度=12x16--*/0x02,0x82,0xBE,0xA2,0xB6,0xEB,0xB6,0xA2,0xBE,0x82,0x02,0x00,0x00,0x07,0x00,0x02,0x03,0x02,0x02,0x03,0x04,0x07,0x00,0x00,/*--文字:前--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=12x12--*//*--高度不是8的倍数,现调整为:宽度x高度=12x16--*/ //130x04,0xF4,0x54,0x55,0xF6,0x04,0x06,0xF5,0x04,0xF6,0x04,0x00,0x00,0x07,0x01,0x05,0x07,0x00,0x00,0x05,0x04,0x07,0x00,0x00,/*--文字:进--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=12x12--*//*--高度不是8的倍数,现调整为:宽度x高度=12x16--*/ //140x10,0xF1,0x02,0x24,0x24,0xFF,0x24,0x24,0xFF,0x24,0x24,0x00,0x06,0x01,0x02,0x06,0x05,0x04,0x04,0x04,0x07,0x04,0x04,0x00,/*--文字:后--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=12x12--*//*--高度不是8的倍数,现调整为:宽度x高度=12x16--*/0x00,0x00,0xFE,0x0A,0xC9,0x49,0x49,0x49,0x49,0xC9,0x08,0x00,0x04,0x03,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x07,0x00,0x00,/*--文字:退--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=12x12--*//*--高度不是8的倍数,现调整为:宽度x高度=12x16--*/0x11,0xF6,0x00,0x00,0xFF,0x15,0x55,0x55,0x95,0x5F,0x00,0x00,0x06,0x01,0x02,0x02,0x05,0x05,0x05,0x04,0x04,0x05,0x04,0x00,/*--文字:左--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=12x12--*//*--高度不是8的倍数,现调整为:宽度x高度=12x16--*/0x04,0x04,0xC4,0x34,0x2F,0x24,0xE4,0x24,0x24,0x26,0x04,0x00,0x02,0x05,0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0x00,/*--文字:转--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=12x12--*//*--高度不是8的倍数,现调整为:宽度x高度=12x16--*/0x32,0x2E,0xFB,0xA2,0xA2,0x14,0x74,0x5F,0x54,0xD4,0x14,0x00,0x01,0x01,0x07,0x00,0x00,0x00,0x02,0x02,0x05,0x00,0x00,0x00,/*--文字:右--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=12x12--*//*--高度不是8的倍数,现调整为:宽度x高度=12x16--*/0x04,0x84,0x44,0xF4,0x2C,0x27,0x24,0x24,0x24,0xE4,0x04,0x00,0x01,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x02,0x07,0x00,0x00,/*--文字:转--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=12x12--*//*--高度不是8的倍数,现调整为:宽度x高度=12x16--*/0x32,0x2E,0xFB,0xA2,0xA2,0x14,0x74,0x5F,0x54,0xD4,0x14,0x00,0x01,0x01,0x07,0x00,0x00,0x00,0x02,0x02,0x05,0x00,0x00,0x00,/*--文字:停--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=12x12--*//*--高度不是8的倍数,现调整为:宽度x高度=12x16--*/0x10,0xFC,0x03,0x62,0xBA,0xAA,0xAB,0xAA,0xAA,0xBA,0x62,0x00,0x00,0x07,0x00,0x00,0x00,0x04,0x04,0x07,0x00,0x00,0x00,0x00,/*--文字:止--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=12x12--*//*--高度不是8的倍数,现调整为:宽度x高度=12x16--*/0x00,0x00,0xF8,0x00,0x00,0x00,0xFF,0x10,0x10,0x10,0x10,0x00,0x04,0x04,0x07,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0x00,/*--文字:碍--*//*--TrebuchetMS9;此字体下对应的点阵为:宽x高=12x12--*//*--高度不是8的倍数,现调整为:宽度x高度=12x16--*/0x21,0xF9,0x17,0xF1,0x00,0x5F,0x55,0x55,0x55,0xDF,0x40,0x00,0x00,0x03,0x01,0x03,0x00,0x01,0x03,0x05,0x05,0x07,0x01,0x00}; //延时函数//voiddelay_20us(){ucharbt;for(bt=0;bt<100;bt++);}voidDelay(unsignedinti)//延时{while(--i);}/*LCD_write_byte:使用SPI接口写数据到LCD输入参数:dt:写入的数据;command:写数据/命令选择;编写日期:20080918*/voidLCD_write_byte(unsignedchardt,unsignedcharcommand){ unsignedchari; sce=0; dc=command; for(i=0;i<8;i++) { if(dt&0x80) sdin=1; else sdin=0; dt=dt<<1; sclk=0; sclk=1; } dc=1; sce=1; sdin=1;}/*LCD_init:3310LCD初始化编写日期:20080918*/voidLCD_init(void){ res=0; delay_20us(); res=1; LCD_write_byte(0x21,0);//初始化Lcd,功能设定使用扩充指令 LCD_write_byte(0xD0,0);//设定液晶偏置电压 LCD_write_byte(0x20,0);//使用基本指令 LCD_write_byte(0x0C,0);//设定显示模式,正常显示}/*LCD_set_XY:设置LCD坐标函数输入参数:X:0-83Y:0-5编写日期:20080918*/voidLCD_set_XY(unsignedcharX,unsignedcharY){ LCD_write_byte(0x40|Y,0);//column LCD_write_byte(0x80|X,0);//row}/*LCD_clear:LCD清屏函数编写日期:20080918*/voidLCD_clear(void){ unsignedchart; unsignedchark; LCD_set_XY(0,0); for(t=0;t<6;t++) { for(k=0;k<84;k++) { LCD_write_byte(0x00,1); } }}/*LCD_write_shu:显示6(宽)*16(高)点阵列数字字母符号等半角类输入参数:c:显示的字符;编写日期:20080918*/voidLCD_write_shu(unsignedcharrow,unsignedcharpage,unsignedcharc)//row:列page:页dd:字符{ unsignedchari; LCD_set_XY(row*6,page);//列,页 for(i=0;i<6;i++) { LCD_write_byte(shuzi[c*12+i],1); } LCD_set_XY(row*6,page+1);//列,页 for(i=6;i<12;i++) { LCD_write_byte(shuzi[c*12+i],1); } }/*LCD_write_hanzi:显示12(宽)*16(高)点阵列汉字等半角类输入参数:c:显示的字符;编写日期:20080918*/voidLCD_write_hanzi(unsignedcharrow,unsignedcharpage,unsignedcharc)//row:列page:页dd:字符{ unsignedchari; LCD_set_XY(row*6,page);//列,页 for(i=0;i<12;i++) { LCD_write_byte(hanzi[c*24+i],1); } LCD_set_XY(row*6,page+1);//列,页 for(i=12;i<24;i++) { LCD_write_byte(hanzi[c*24+i],1); } }//显示数据转换程序voidconversion(uinttemp_data){ucharge_data,shi_data,bai_data;bai_data=temp_data/100;temp_data=temp_data%100;//取余运算shi_data=temp_data/10;temp_data=temp_data%10;//取余运算ge_data=temp_data;EA=0;bai=bai_data;shi=shi_data;ge=ge_data; EA=1;}//***************************************************************//外部中断0,用做判断回波电平INTO_()interrupt0//外部中断是0号{outcomeH=TH1;//取出定时器的值outcomeL=TL1;//取出定时器的值succeed_flag=1;//至成功测量的标志EX0=0;//关闭外部中断}//****************************************************************//定时器0中断,用做显示timer0()interrupt1//定时器0中断是1号{ TH0=0x0D;//写入定时器0初始值 TL0=0x77; switch(flag){ case0x00: LCD_write_shu(9,4,bai);flag++;break; case0x01:LCD_write_shu(10,4,shi);flag++;break; case0x02: LCD_write_shu(11,4,ge);flag=0;break;} LCD_write_hanzi(9,2,p);//运动 LCD_write_hanzi(11,2,q);//方向}void show(){ LCD_init();//初始化LCD模块 LCD_clear();//清屏幕 LCD_write_hanzi(0,0,0);//蔽 LCD_write_hanzi(2,0,1);//障 LCD_write_hanzi(4,0,2);//机 LCD_write_hanzi(6,0,3);//器 LCD_write_hanzi(8,0,4);//人 LCD_write_hanzi(10,0,5);//调 LCD_write_hanzi(12,0,6);//试 LCD_write_hanzi(0,2,7);// 运 LCD_write_hanzi(2,2,8);//动 LCD_write_hanzi(4,2,9);//状 LCD_write_hanzi(6,2,10);//态 LCD_write_shu(8,2,10);//: LCD_write_hanzi(9,2,13);//前 LCD_write_hanzi(11,2,14);//进 LCD_write_hanzi(0,4,1);//障 LCD_write_hanzi(2,4,21);//碍 LCD_write_hanzi(4,4,11);//距 LCD_write_hanzi(6,4,12);//离 LCD_write_shu(8,4,10);//: LCD_write_shu(12,4,11);//C LCD_write_shu(13,4,12);//M } void data_do(){ ucharCONT_1; EA=0; Trig=1; delay_20us(); Trig=0;//产生一个20us的脉冲,在Trig引脚 while(Echo==0);//等待Echo回波引脚变高电平 succeed_flag=0;//清测量成功标志 EX0=1;//打开外部中断 TH1=0;//定时器1清零 TL1=0;//定时器1清零 TF1=0;// TR1=1;//启动定时器1 EA=1; while(TH1<30);//等待测量的结果,周期65.535毫秒(可用中断实现) TR1=0;//关闭定时器1 EX0=0; if(succeed_flag==1) { distance_data=outcomeH;//测量结果的高8位 distance_data<<=8;//放入16位的高8位 distance_data=distance_data|outcomeL;//与低8位合并成为16位结果数据 distance_data*=12;//因为定时器默认为12分频 distance_data/=588; k=distance_data;//微秒的单位除以58等于厘米 }//为什么除以58等于厘米,Y米=(X秒*344)/2 if(succeed_flag==0) { distance_data=0;//测试灯变化 } a=distance_data; if(b==a)CONT_1=0; if(b!=a)CONT_1++; if(CONT_1>=3) { CONT_1=0; b=a; conversion(b); }} //主函数//void main(){ uint m; uchar temp; i=0;flag=0; Trig=0;//首先拉低脉冲输入引脚 TMOD=0x11;//定时器0,定时器1,16位工作方式 TR0=1; //启动定时器0IT0=0;//由高电平变低电平,触发外部中断 ET0=1;//打开定时器0中断 EX0=0;//关闭外部中断

温馨提示

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

评论

0/150

提交评论