版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
江苏理工学院毕业设计说明(论文)第页序言
自超声波测距技术问世以来,该技术在国外被广泛应用于速度测量、浅海探测、精度定位、军事武器等各方面,同时在其他各个科技领域也有涉及。在中国,超声波测距技术起步较晚,技术掌握不够成熟,但是由于超声波测距技术应用广泛、实用价值较高、功能强大,越来越多的人对其产生浓厚兴趣,技术得到了突飞猛进的发展,特别是在公路超速监控、感应测量等领域得到广泛应用。对完善我国现代工业化建设有着极其重要的意义【1】。现实生活中绝大部分的汽车倒车过程都是通过后视镜观测来判断,由于这种方法多数要求驾驶者具有很好的驾驶技能[1],很多情况下无法一个人单独实现倒车过程,实际操作中存在观测盲区、操控不便、安全隐患等较多因素,于是,人们逐渐把目光投向了超声波测距报警方向的研究。本设计就是采用基于单片机的超声测距对目前市场上倒车报警系统的研究。本说明书共分为4章,第1章讲述课题分析与方案设计;第2章主要对硬件电路各个模块进行详细说明;第3章模块化的对软件设计进行分析;第4章讲述性能调试与结果分析,针对性的把实验中出现的问题加以解释说明;设计的最终效果是能实现LCD液晶实时显示测量距离,以蜂鸣器的形式完成倒车报警及按钮修改报警距离等功能,而且报警频率随着离障碍物距离的不同报警频率也不同。课题分析与方案设计1.1课题任务分析本设计主要实现一个基于单片机技术控制的超声波倒车报警系统,具体内容要求:1.利用超声波测距原理,测量汽车离障碍物的距离,当测得汽车与障碍物的距离在所设定的报警范围内时,系统会以蜂鸣器形式发出声音报警;2.能够实时显示出离障碍物的距离;3.离障碍物距离的不同,声音报警系统的程度也不同,并且离障碍距离越近,蜂鸣器鸣响频率越大;4.报警距离可以在3米范围内进行修改;5.系统工作稳定;1.2系统整体方案设计系统硬件方案框图如图1-1所示:接受模块接受模块控制模块发射模块报警模块显示模块按键模块测距模块图1-1系统硬件框图测距模块:采用现成的HC-SR04超声波模块,该模块能够实现2cm-300cm的非接触式超声波感应测距的功能,最高精度达到5mm【2】。其中发射模块完成超声波的产生、发射功能,主要包含发射器、发射电路;接收模块实现从超声波的接受和数据处理的功能,包括接收器、接受电路部分组成。(2)控制模块:采用AT89C52单片机为控制中心,负责着命令的产生、接受、处理及数据运算,是整个系统的核心控制中心;报警模块:主要由无源蜂鸣器组成,驾驶员可以根据蜂鸣器是否鸣响状况,来判断汽车后方距离障碍物的的情况,从而做到提前采取措施,使倒车过程更加快捷、高效。显示模块:主要由LCD1602液晶组成,起到实时显示测量距离的功能,进一步提示距离障碍物的距离;按键模块:采用四引脚贴片开关,实现启动电源,控制功能的作用;系统软件方案框图如图1-2所示:本次设计的超声波倒车报警系统软件设计部分使用Keiluvision4作为开发平台,采用的是模块化的思路来进行设计和程序编写。软件设计主要由系统初始化、超声波发射接收、运算结果处理、显示及预警模块五个主要模块组成。系统初始化模块:实现对系统的各寄存器的初值赋值和对各个引脚的电平分配的功能。2.运算结果处理模块:运算结果处理模块将多次所测得时间进行处理,进行软件取大值工作,根据公式计算出距离,然后再对计算得出的结果进行修正处理,数据处理后送至显示模块。3.发射接收控制模块:发射控制模块是软件控制超声波发射电路发射超声脉冲启动定时器,同时启动接收电路,当接收电路有信号输入时,对输入信号进行处理。4.显示模块:该模块的功能是把超感器距离障碍物的距离实时的显示在LED液晶上,进一步提示驾驶者。5.报警模块:当所测距离小于预先设定值时,通过声音报警来提醒驾驶员。程序框图程序框图报警模块显示模块系统初始化模块发射接收控制模块运算处理模块图1-2软件设计框图硬件电路设计2.1AT89C52单片机最小系统设计4.5vvvv本次设计的最小系统主要由AT89C52单片机和晶振电路及复位电路组成,是整个超声波倒车报警系统的的核心电路,4.5vvvv4.5v4.5v图2-1最小系统电路2.1.1AT89C52单片机介绍AT89C52是由一个CPU(微处理器)、一个8k的RAM(数据存储器)、一个64k的ROM(程序存储器)、32个I/O口、3个16位定时计数器、特殊功能寄存器(SFR)组成【5】。其结构框图如图2-2所示:图2-2AT89C52结构框图(1)主要特性1.具有兼容MCS-51特性2.32个编程I/O线3.可以实现上千次写与擦循环4.10年的保存时间5.可以全静态工作6.运行速度快可以达到24M7.两个16位计数器/定时器8.具有多个中断源(2)引脚及功能
图2-3AT89C52引脚排列2.1.2晶振电路设计查阅资料可知,单片机的指令要想运行,都必须外界提供它一个晶振频率,此时就引出了最小单片机系统所需要的晶振电路。它结合单片机内部的电路,能够产生系统工作所需要的晶振频率,单片机的内部所有命令的执行都是在这个基础上完成的,而且晶振的提供的时钟频率越高,单片机运行的速度就越快。一个单片机一共有6个状态周期,其中每个状态周期包含2个振荡周期,所以一个机器周期共有2×6=12个振荡周期[4]。本次选用的晶体振荡器的震荡频率是12MHZ,经计算可知每一个振荡周期的时间是1/12us,刚好每一个震荡周期时间为1us。如图2-4所示为晶振电路,XATL1、XATL2用来接石英晶体Y1和瓷片电容,其中瓷片电容C1=C2=20pf,晶振Y1=12M。图2-4晶振电路图2.1.3复位电路设计
复位电路的目的就是把系统恢复到初始状态,复位电路通常有手动复位和上电自动复位两种方法[7]。单片机中有一个Reset引脚专门用于连接系统复位,RESET端如果能够持续接收到2个机器周期的高电平,那么系统就会恢复到初始状态,并能够重新工作。由于晶振频率选择的是12MHz,那么reset端口至少接收到2us以上的高电平才能完成复位功能。本设计采用的是手动复位电路,如图2-5所示,即当S1被按下时,电容C3会迅速放电,等到S1被弹起后,C3会再次充电,即完成手动复位功能。本次设计C1=10uf,R2=10。4.5v4.5v图2-5手动复位电路2.2超声波测试模块介绍超声波测模块使用的是HC-SR04模块,该模块可实现2cm-300cm的非接触式超声波感应测距功能,最高精度可达到5mm。HC-SR04测距模块通常包含超声波发射器、接收器【6】。图2-6超声波模块实物图工作原理:使用IO口的TRIG触发超声波测距方式,当单片机提供大于10us的高电平信号时,此时HC-SR04超声波测距模块会自动发送8个40khz的方波,于此同时HC-SR04模块的接收器检测是否有信号返回,如果收到信号的返回,一个高电平会通过HC-SR04超声波测距模块的ECHOIO口得以输出到单片机,超声波从产生到遇到障碍物反射回来所用的时间就是高电平持续的时间,根据距离公式S=VT/2,即可算出汽车离障碍物的距离。图2-6超声波模块实物图HC-SR04超声波测距模块实物图如图2-6所示:VCC:连接4.5V电源;GND:连接地线;TRIG:触发信号的输入;ECHO:回响信号的输出;超声波测距的原理是根据超声波从发射到超声波遇到障碍物后反射回波所经历的时间,然后根据距离计算公式S=CT/2计算可得(其中C为超声波波速)。资料显示表明超声波的速度受温度的影响较大,如表2-1所示列出几种常见温度下的声速【7】。表2-1常见温度下的声速气温(℃)05101520声速(m/s)331334337340343通常情况下,我们一般认为温度一定,即所采用的超声波传输速度一定,(如果检测精度要求很高,可以利用温度补偿的方法得意补偿)声速确定后,只要获得超声波在空中传输的往返时间,即可求得距离。本次设计的超声波测距模块采用是渡越时间检测法,其原理是当超声波发射器向某一方向发射超声波的同时开始计时,当超声波在空气中传播碰到障碍物返回来,超声波接收器收到发射器发射的超声波后会立即停止计时。此检测方具有较为直接、简单、高效的优点,无论是硬件控制还是软件设计都比较简单实现。其具体的算法如下:假设超声波在空气中的传播速度为v,根据计时器记录的时间,发射点距障碍物的距离,如图2-7所示:图2-7超声波测距原理图2-1中两探头中心距离的一半用M表示,超声波单程所走过的距离用表示,由图可得:(2-1)(2-2)将式(2-2)带入式(2-1)得:(2-3)在整个传播过程中,超声波所走过的距离为:(2-4)式中:为超声波的传播速度,为传播时间,即为超声波从发射到接收的时间。将式(2-4)带入式(2-3)可得:(2-5)当被测距离H远远大于M时,式(2-5)变为:(2-6)本设计由单片机负责计时,采用12MHZ的晶振,所以此系统的测量精度理论上可以达到毫米级。2.3显示模块设计由于LCD1602液晶显示屏具有成本便宜、体积精巧、操作简单,美观大方等优点,所以本设计采用LCD1602液晶作为显示屏。LCD1602液晶显示模块用点阵图形显示字符,显示模式分为2行16个字符[2]。它具有16个引脚,其正面左起为第一脚。第一脚GND:接地;第二脚VCC:+5V电源;第三脚VO:对比度调整端,使用时通过接一个5K的电阻调节亮度;第四脚RS:寄存器选择信号线;第五脚RW:读写信号线;第六脚E:使能端,当E由高电平跳变为低电平时执行命令;第七~十四脚:8位数据线D0~D7;第十五脚BLA:背光电源正极输入端;第十六脚BLK:背光电源负极输入端;LCD1604液晶显示器显示原理:(1)字符显示用LCD显示一个字符时是相当比较复杂的,因为一个字符由8×8或6×8点阵组成,不仅要清楚每个字符对应位置对应的RAM区的8个字节,还要确定每个字节的不同位置处于点亮状态还是非点亮状态,通常“1”表示点亮,“0”表示非点亮状态[7]。经过这样一系列的转换即可显示出字,但控制器内部带有字符生成器来说,显示字符会简单很多,可以根据在LCD上开始显示的每一行列号和每行的列数,找出相对应显示RAM的地址,把此设成光标,最后在把该字符对应的代码送出就可以。(2)汉字显示汉字的显示一般采用图形的方式,可以用自模提取软件提取要显示的汉字的点阵码,每个汉字占32B,左边占16B,右边占16B,左边为1、3、5到15,右边为2、4、6到16。查阅LCD上开始显示的行列号和每行的列数,即可得到所显示RAM对应的地址,以此设置光标,根据每送上显示的汉字的第一字节,光标位置加1的原则,以此类推,直到32B显示完,就把想要显示的汉子显示在LCD1602液晶上[9]。(3)线段显示点阵图形式液晶由N×M个显示单元组成[6],例如LCD1602显示屏有64行,每行有128列,每8列对应1字节的8位,每行由16字节控制,共16×8=128个点组成。显示RAM区1024字节与屏上64×16个显示单元相对应,显示屏上相应位置的亮暗和每一字节的内容对应。例如LCD1602显示屏第1行的亮暗由RAM区的000H—00FH的16字节的内容决定。当(000H)=FFH时,则LCD1602显示屏的左上角显示一条长度为8个点短亮线;当(3FFH)=FFH时,则LCD1602显示屏的右下角显示一条短亮线;以此类推下去,即可得到想要的线段。本设计采用的LCD1602液晶显示模块接口电路图如图2-8所示:VO与GND之间需要串联一个电阻R用于调节LCD1602液晶对比度的调节,本设计中R=2,D0-D7与单片机的 P0-P7相连,用于地址/数据传送;RS、RE、E分别于单片机的P1.0、P1.1、P1.2相连;BLA端口、BLK端口分别连接电源正负极,用于背光灯控制;图2-8LCD1602显示电路2.4报警电路设计如图2-9所示,报警模块用的是声音报警模式,由源蜂鸣器、S8550三极管及电阻构成。查阅资料可知,单片机AT89C52的IO口驱动能力无法使蜂鸣器达到鸣响的条件,此时,我们通常需要串联一个S8550三极管用于放大驱动电流。当IO口输出的是低电平,三极管处于导通状态,集电极电流通过三极管流经蜂鸣器从而可以是蜂鸣器发出鸣响,起到蜂鸣报警状态;当IO口输出的是高电平时,三极管处于截止状态,无电流流经蜂鸣器,此时不报警。为了保护因三极管产生的电流过大造成对单片机IO端口的损害,此时在单片机IO端口与三极管基极之间串联一个2K的电阻,起到限流、保护电路的作用。4.5v4.5v图2-9声音报警电路图2.4电源电路设计电源部分的设计采用3节5号干电池4.5V供电,实物图如图2-10所示:图2-10电源电路图2-10电源电路2.6按键电路设计本设计采用的是独立按键电路,为了能使运行中的系统,经人工干预,强制系统进行复位,达到修改设计参数的功能。电路如图3-11所示:S1:增加报警范围值;S2:减少报警范围值;S1:增加报警范围值;S2:减少报警范围值;S3:选择/确定;图3-11按键电路第三章软件设计3.1主程序设计主程序设计采用模块化设计的思想进行程序编写,主程序设计主要完成单片机系统初始化、超声波复位、发射超声波启动T0中断、接收回波中断停止、数据计算、显示及蜂鸣器报警的编程。系统主程序流程图思路如图3-1所示:开始开始单片机初始化、超声波测距模块初始化、显示模块初始化、报警模块初始化调用超声波测距子程序测距调用显示模块子程序显示调用报警子程序报警图3-1系统主程序流程图3.2测距程序设计测距程序是关于障碍物精确测量的关键部分,不仅完成超声波从产生到被接收器接收所经历时间的计算,还要把计算出的距离值传输到其他功能模块,进行其他功能的设置。测距程序的流程图如图3-2所示:返回返回开始停止计时是否收到回波信号N发射脉冲计时计算距离Y图3-2测距程序流程图3.3显示模块程序设计显示模块程序主要完成串口、读取数据、控制字符显示等功能的编程,能够显示距离和设置的报警值。显示模块的设计流程图如图3-3所示:开始开始清屏写字符数据写地址返回图3-3显示模块流程图3.4报警模块程序设计报警模块程序设计是根据测距模块测量的距离值,把测量的距离显示在LCD液晶上,通过判断是否在设计的0.5米报警范围内进行判断蜂鸣报警与否。报警流程图如图3-4所示:测得距离小于测得距离小于0.5米?开始蜂鸣器停止鸣响YN蜂鸣器鸣响返回图3-4报警子程序框图
第4章性能调试与结果分析4.1性能调试(1)硬件调试本此设计的超声波倒车报警装置以HC-SR04型的超声波测距传感器模块为主体,中心频率基本稳定在40kHz,安装时需要整个电路板保持水平安装,这样可以尽可能的减少误差。其中硬件的连线焊接和组装基本情况如下:单片机的P00一P07引脚与LED显示器的D0-D7相对应,掌控着LED显示器字符的显示;P3.2端口接超声波模块的发射端;P3.3端口接超声波接收端,用作判断超声波是否接收到了回波的信号,并控制计数器停止计时;P1口的P1.4通过一个三极管连接到蜂鸣器上,构成蜂鸣器报警电路,进行蜂鸣器鸣叫报警;P3.5-P3.7端口接按键,实现功能的控制。现对电路进行如下几点检查:a.上电前检查为了防止电路板因焊接问题而把电路板烧坏,一般通电前需要对电路进行无电检测,先用观察法观察电路板是否有虚焊、错连等现象,然后仔细检查电路图与焊接图是否一致,最后用万用表对各电路进行逐一检测,判断是否存在短路等状况。经测量发现各个电路无短路现象,电路连接正确。b.上电检查上电后应首先用手触摸电路板各个元器件是否处在正常温度范围内,如有异常则需立刻断电检查,若无异常,然后用万用表对各个电路的工作电压进行检测,观察LCD1602液晶是否工作正常,检查重要元器件是否工作正常等工作。(2)软件调试当硬件制作完成后,软件制作也是不可轻视的部分,是实现电路的功能的关键部分,通过本次毕业设计,总结经验如下:a.先进行人工检查。写好程序后,不要立刻烧入单片机,先对纸面上的程序进行人工检查。于采用C语言编程,所以要特别小心地检查语法错误,如括号不配对,漏写分号等,通过仔细的检查,发现并排除这些错误;b.人工检查无误后,上机调试。在编译时给出的语法错误的信息,根据提示的信息具体找出程序中错误之处并改之,从上至下逐一改正。应当注意的是:有的提示出错行并不是真正出错的行,如果在提示出错的行上找不到错误的话,则应该到上行再找;c.当确认程序无语法错误和逻辑错误时,通过直接下载到单片机来调试。采用的是自下到上的调试方法,即单独调好每一个模块,然后再连接成一个完整的系统调试;d.程序烧入单片机后,观察各个部件的工作是否正常,功能是否实现。如不能正常工作,则继续检查程序中的相应模块,必要时从上到下重新检查程序;注意:电路焊接完成,仔细检查无误后,才可通电调试。4.2结果与误差分析(1)结果分析现象一:电路检查无短路、错接现象,但是把程序下载到AT89C52后,发现虽然电路工作指示灯正常,但是却无法正常完成工作,液晶显示乱码,蜂鸣器也不报警;分析:a.断电检测和上电检测都是正常的,并且电路指示灯正常,说明电路焊接没有问题;b.由于LCD出现乱码,可能是程序编写出问题;经检查发现本设计软件部分显示模块的对单片机和LCD1602的引脚编写错误,及时修改后,从新下载到单片机中发现此时液晶显示“juli:0.45mset:0.50m”字样,此时蜂鸣器报警,一切工作正常。现象二:电路能够实现显示和蜂鸣器报警功能,出现液晶显示不稳定,且蜂鸣器一直报警现象。分析:a.由于电路能够实现显示和蜂鸣器报警,而且检查报警电路电压一切正常,明电路设计方案是正常的。b.由于蜂鸣器一直报警,电路又无误,说明电路一直处于程序判断的报警范围内,最后分析程序可知,软件部分缺少延时程序,以至超声波发射与接收几乎同时进行,所以以至处于报警状态。最终添加了一个延时程序,发现系统能够正常完成功能。在已知既定的一米距离,用此装置测量的一米距离显示为0.99米,比较稳定,精度较高。图5.1测量的一米距离显示(2)误差分析本设计存一些无法避免的误差,对设计作品的性能有着一定的影响,下面分析一下对可能产生误差的原因进行分析:a.外界温度所引起的误差超声波的传送速度与温度有着较为直接的联系。查阅资料可知,当温差每升高一摄氏度,速度就会增加一米每秒【10】。鉴于此,可以设计一个稳步补偿装置,尽可能的减小误差,由于实际情况可知,一般汽车尾部距离障碍物的距离只需要注意2米左右的范围,对误差的影响很小,所以本设计就未采用温度补偿模块进行设计。b.超声波模块的感应角的影响两个超声波探头即发射探头和接收探头和障碍物之间存在一个几何角度,反射波入射到探头存在一定的角度,当这个角度过大时,这就会造成测量较大的误差,或者说根本接收不到回波信号。特别是在障碍物的距离较小的时候这个误差就成为了距离测量的主要误差的原因,但是这种误差是可以尽量减小的,利用发射能力强、散射小的探头,或者多用几个探头[11]。结论本毕业设计设计的基于单片机的超声波汽车倒车报警系统是方便驾驶者更好的观察汽车后方障碍物的一种汽车安全辅助系统。AT89C52单片机的P1.0口产生一个高电平,传送到HC-SR04超声波传感器的Eric端口,内部超声波发生器会产生8个40KHZ的超声波,经过发射探头反射超声波,当超声波在空中传播遇到障碍物反射回来被超声波接收器接受,HC-SR04超声波接收到反射回来的超声波信号经放大、滤波、检波后送入单片机,AT89C52单片机根据计算超声波从发射到被接受时经历的时间,根据距离计算公式S=CT/2,即可计算出汽车距离障碍物的距离【12】。最后把计算出来的距离显示在LCD1602液晶上。当探测到距离障碍物的距离在预设值的报警范围内时,蜂鸣器会鸣响报警,并且本设计的一大优点是随着距离障碍物的逼近,蜂鸣器鸣响的频率会变大,驾驶者可以根据蜂鸣器的鸣响程度,仅凭听觉就可以判断距离障碍物的程度,这样可以使驾驶者做到心中有数,更加高效、方便的完成倒车过程。通过几个月的努力,终于完成了本次毕业设计,本次设计的基于单片机的汽车倒车报警系统具有以下优点:1.成本低、性价比比较高;2.本电路操作简单,稳定性和可靠性比较高;3.测量精度高,能够比较准确测出汽车后面障碍物距离;4.有完整的距离和报警双重提示,提高驾驶的安全性;5.蜂鸣器的报警频率是可以改变的;当然本设计也存在以下缺点:1.探测盲区:可能对过于低矮的障碍物、过细的障碍物、沟坎等检测不到距离。2.存在误差:由于超声波传播速度受温度等因素的影响,一致存在一定的误差。致谢几个月的时间转眼间即将逝去,看着自己的设计的超声波倒车雷达系统作品的完成,内心除了小小的自豪感,更多的是充满了无限的感激之情。在此,我想表达我对李月红老师衷心的感谢。从选题、选题审批表、开题报告、作品设计、论文撰写,整个过程李老师虽然工作繁多,但是一直都对我很认真细心的指导,特别是开题报告和论文细节方面李老师不耐其烦的一遍又一遍帮我指出细节小错,给予了我方向性的指导和建设性的建议和意见,这一切让作为学生的我看在心里不由得想表达我的感激之情。特别是软件设计部分,遇到了一些问题,困惑我近一周的时间,当李老师知道这些后,主动与我沟通,不仅给我知识上的指导帮助我开拓研究思路,同时也鼓励我,告诉我遇到困难应该以积极乐观的心态,任何设计都是在经历无数次失败之后才能获得成功。李月红老师以其高度的敬业精神、严谨求实的治学态度、兢兢业业、认认真真的工作学习态度和勇于创新的进取精神对我产生了深深的影响,不仅授我以文,也教会我很多做人做事的道理,给以我终生受益无穷之道。再者,我还想感谢和我一起做毕业设计的同学们。毕业设计的这些时间里,给我了很多的帮助,不惜利用自己宝贵的时间帮我指导设计的困惑和不足,给我提出很多宝贵的看法,在此我还想真诚的感谢你们。四年的大学生活即将结束,感谢在我成长过程中认真教学的老师们,正是你们的无私奉才有我们今天的成果。同时也要感谢在生活和学习中给予我帮助的同学们,是你们陪伴我度过人生最美好的时光。最后,经过几个月的努力付出,超声波倒车报警系统已经接近尾声,作为一个电子信息工程专业的本科生的毕业设计,由于知识有限、经验的匮乏,设计中还是存在一些考虑不周全的地方;毕竟这次设计是我第一次进行如此全面和系统的设计,还可能存在一些不足,还希望各位老师能够多多指导,帮助以后更好的提升自我,完善作品。我相信这次毕业设计对我的人生有着深远的影响,衷心祝愿各位辛苦的老师们身体健康、万事如意、阖家欢乐,同时也预祝毕业设计的同学们能够顺利通过毕业答辩,有个美好的未来。参考文献[1]宋培义,刘立新.现代汽车工业进步与发展[M].北京:中国广播电视台出版社,1999[2]潘新民,王燕芳.传感器与检测技术[M].北京:人民邮电出版社,1999[3]马志良.单片机原理与控制技术[M].北京:机械工业出版社,2002[4]李广弟,朱月秀,王秀山.单片机基础(第二版)[M].北京:北京航空航天大学出版社,2001[5]何宏.单片机原理与接口技术[M].北京:国防工业出版社,2006[6]秦晓梅,陈育斌.单片机原理综合实验教程[M].大连:大连理工大学出版社,2004[7]张义民,王顺,刘巧伶.基于温度补偿的超声波倒车测距系统的设计.中国科学,2003,33(9)804-812[8]公茂法,马宝甫,孙辰.单片机人机接口实例[M].北京:北京航空航天大学,1998[9]梁建明.电阻炉炉温控制系统[J].兵工自动化,2003,18(3):123-126[10]张振荣,晋明武,王毅平.MCS-51单片机原理及其实用技术[M].北京:人民邮电出版社,2000[11]李秉操,张登举,付寿英,徐飞.LCD液晶显示技术及其在工业控制中的应用[M].陕西:陕西电子编辑部,1991[12]赵依军.单片微型计算机接口技术[M].湖北:湖北计算机协会,1988[13]张俊谟.单片机中级教程[M].北京:北京航空航天大学出版社,2000[15]TomR.Watt.Coolingourtomorrowseconomically,ASHRAEJournal.[16]ArmyKayla.Improvingefficiencyinexistingchillerswithoptimizationtechnology,ASHRAEJournal.附录1整体电路接线图附录2程序清单#include<reg52.h> //调用单片机头文件#defineucharunsignedchar//无符号字符型宏定义 变量范围0~255#defineuintunsignedint //无符号整型宏定义 变量范围0~65535#include<intrins.h>#include"eepom52.h"sbitc_send=P3^3; //超声波发射sbitc_recive=P3^2; //超声波接收//这三个引脚参考资料sbitrs=P1^0; //1602数据/命令选择引脚H:数据 L:命令sbitrw=P1^1; //1602读写引脚 H:数据寄存器 L:指令寄存器sbite=P1^2; //1602使能引脚下降沿触发ucharcodetable_num[]="0123456789abcdefg";#defineP0P0uchari;sbitbeep=P1^4;//蜂鸣器IO口定义bitflag_300ms;bitkey_500ms;longdistance; //距离uintset_d; //距离bitflag_csb_juli;//超声波超出量程uintflag_time0;//用来保存定时器0的时候的//按键的IO变量的定义ucharkey_can; //按键值的变量ucharmenu_shudu=10;//用来控制连加的速度bitflag_lj_en; //按键连加使能bitflag_lj_3_en; //按键连3次连加后使能加的数就越大了ucharkey_time,flag_value;//用做连加的中间变量ucharmenu_1;//菜单设计的变量uchara_a;/***********************1ms延时函数*****************************/voiddelay_1ms(uintq){ uinti,j; for(i=0;i<q;i++) for(j=0;j<120;j++);}/******************把数据保存到单片机内部eepom中******************/voidwrite_eeprom() //保存数据{ SectorErase(0x2000); byte_write(0x2000,set_d%256); byte_write(0x2001,set_d/256); byte_write(0x2058,a_a); }/******************把数据从单片机内部eepom中读出来*****************/voidread_eeprom() //读出保存数据{ set_d=byte_read(0x2001); set_d<<=8; set_d|=byte_read(0x2000); a_a=byte_read(0x2058);}///**************开机自检eeprom初始化*****************/voidinit_eeprom() ////开始初始化保存的数据{ read_eeprom(); //读出保存数据 if(a_a!=2) //新的单片机初始单片机内问EEPOM { set_d=50; a_a=2; write_eeprom(); //保存数据 } }/*********************************************************************名称:delay_uint()*功能:小延时。*输入:无*输出:无***********************************************************************/voiddelay_uint(uintq){ while(q--);}/*********************************************************************名称:write_com(ucharcom)*功能:1602命令函数*输入:输入的命令值*输出:无***********************************************************************/voidwrite_com(ucharcom){ e=0; rs=0; rw=0; P0=com; delay_uint(25); e=1; delay_uint(100); e=0;}/*********************************************************************名称:write_data(uchardat)*功能:1602写数据函数*输入:需要写入1602的数据*输出:无***********************************************************************/voidwrite_data(uchardat){ e=0; rs=1; rw=0; P0=dat; delay_uint(25); e=1; delay_uint(100); e=0; }/*********************************************************************名称:write_string(ucharhang,ucharadd,uchar*p)*功能:改变液晶中某位的值,如果要让第一行,第五个字符开始显示"abcdef",调用该函数如下 write_string(1,5,"abcdef;")*输入:行,列,需要输入1602的数据*输出:无***********************************************************************/voidwrite_string(ucharhang,ucharadd,uchar*p){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); while(1) { if(*p=='\0')break; write_data(*p); p++; } }/***********************lcd1602上显示超声波距离函数************************/voidwrite_sfm3(ucharhang,ucharadd,uintdate){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); write_data(0x30+date/100%10); write_data('.'); write_data(0x30+date/10%10); write_data(0x30+date%10); }/*********************************************************************名称:init_1602()*功能:初始化1602液晶*输入:无*输出:无***********************************************************************/voidinit_1602()//1602初始化{ write_com(0x38); write_com(0x0c); write_com(0x06); delay_uint(1000); write_string(1,0,"juli:0.00m"); write_string(2,0,"set:0.00m");}/********************独立按键程序*****************/ucharkey_can; //按键值voidkey() //独立按键程序{ staticucharkey_new; key_can=20; //按键值还原 P3|=0xf0; if(key_500ms==1) //连加 { key_500ms=0; key_new=1; } if((P3&0xf0)!=0xf0) //按键按下 { delay_1ms(1); //按键消抖动 if(((P3&0xf0)!=0xf0)&&(key_new==1)) { //确认是按键按下 key_new=0; switch(P3&0xf0) { case0xd0:key_can=3;break; //得到按键值 case0xb0:key_can=2;break; //得到按键值 case0x70:key_can=1;break; //得到按键值 } flag_lj_en=1; //连加使能// write_sfm2(1,0,key_can); //显示按键值 } } else { if(key_new==0) { key_new=1; write_eeprom(); //保存数据 flag_lj_en=0; //关闭连加使能 flag_lj_3_en=0; //关闭3秒后使能 flag_value=0; //清零 key_time=0; } } }/**************10us延时函数***************/voiddelay(){ _nop_(); //执行一条_nop_()指令就是1us _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();}/*********************超声波测距程序*****************************/voidsend_wave(){ c_send=1; //10us的高电平触发 delay(); c_send=0; TH0=0; //给定时器0清零 TL0=0; TR0=0; //关定时器0定时 while(!c_recive); //当c_recive为零时等待 TR0=1; while(c_recive) //当c_recive为1计数并等待 { flag_time0=TH0*256+TL0; if((flag_time0>40000))//当超声波超过测量范围时,显示3个888 { TR0=0; flag_csb_juli=2; distance=888; break; } else { flag_csb_juli=1; } } if(flag_csb_juli==1) { TR0=0; //关定时器0定时 distance=flag_time0; distance*=0.017;//0.017=340M/2=170M=0.017M算出来是米 if((distance>600)||(distance<=0)) //距离=速度*时间 { distance=888; //如果大于3.8m就超出超声波的量程 } }}/*********************定时器0、定时器1初始化******************/voidtime_init() { EA=1; //开总中断 TMOD=0X11; //定时器0、定时器1工作方式1 ET0=0; //关定时器0中断 TR0=1; //允许定时器0定时 ET1=1; //开定时器1中断 TR1=1; //允许定时器1定时 }/****************按键处理数码管显示函数***************/voidkey_with(){ if(key_can==1) //设置键 { menu_1++; if(menu_1>=2) { menu_1=0; init_1602();//1602初始化 write_sfm3(2,7,set_d); //显示设置的距离 } } if(menu_1==1) //设置距离报警 { if(flag_lj_3_en==0)//三次连加之后速度加快 menu_shudu=10;//500ms 加减一次 else
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年年产10万套金融医疗电子信息设备研发生产基地项目实施方案
- 2026年卫浴智慧产业园项目商业计划书
- T/GLAC 24-2025北斗交通工程应用 高速公路路基形变监测系统技术要求
- T/GDKJ 0073-2024研究生联合培养开放平台建设规范
- 2026年物流行业无人驾驶货运降本增效项目分析方案
- 产业智能化转型中的人工智能应用前景分析报告
- 孩子沉迷短视频怎么办:家长应对指南
- 《电子支付》-第三章
- 《国际金融实务》-第4 章 外汇业务
- T/HNNMIA 67-2023二次铝灰生产铝酸钙技术规范
- 2026中国废旧木材回收利用行业分析及投资可行性研究报告
- 4.RBT 089-2022绿色供应链管理手册
- (2025)肺移植术后慢性移植肺失功专家共识
- 高中生物必修一实验归纳全!1
- (正式版)DB36∕T 1117-2019 《安福火腿》
- 全国验光与配镜技能竞赛实操试题库(附答案)
- 氢氧化钙;熟石灰化学品安全技术说明书MSDS
- 规范乡镇招投标管理制度
- 急诊科五年发展规划(2026-2030)
- 化粪池施工方案钢筋混凝土
- 足浴店合作协议合同
评论
0/150
提交评论