超声波测距仪课程设计说明书

上传人:1777****777 文档编号:37530963 上传时间:2021-11-03 格式:DOC 页数:25 大小:2.88MB
返回 下载 相关 举报
超声波测距仪课程设计说明书_第1页
第1页 / 共25页
超声波测距仪课程设计说明书_第2页
第2页 / 共25页
超声波测距仪课程设计说明书_第3页
第3页 / 共25页
点击查看更多>>
资源描述
长 沙 学 院单片机原理及应用课程设计说明书题目超声波测距仪系(部)电信系专业(班级)电气一班姓名周鹏学号2010042113指导教师刘辉、王新辉起止日期2013.6.106.21单片机原理及应用课程设计任务书21系(部):电信系 专业:2010级电气工程 指导教师:王新辉、刘辉课题名称超声波测距仪设计设计内容及要求(1)课题内容:设计一个以 STC89C52单片机为核心控制的超声波测距仪。功能要求:1测量距离范围要求为0.105.00m;2测量精度为1cm;3用12864液晶屏显示相关信息,液晶屏的第一行显示“超声波测距仪”,第二行显示设计者姓名和学号,第三行显示测量的距离值。 (2)要求:完成该系统的硬件和软件的设计,用单片机开发板进行验证。最后就课程设计本身提交一篇课程设计说明书。设计工作量1、汇编或C51语言程序设计;2、程序调试;3、在单片机开发板上进行下载调试;4、提交一份完整的课程设计说明书,包括设计原理、程序设计、程序分析、调试过程,参考文献、设计总结等。进度安排起止日期(或时间量)设计内容(或预期目标)备注第一天课题介绍,答疑,收集材料,C51介绍第二天设计方案论证,练习编写C51程序第三天第六天程序设计第六天第八天 程序调试、仿真第九天第十天系统测试并编写设计说明书教研室意见年 月 日系(部)主管领导意见年 月 日长沙学院课程设计鉴定表姓名学号专业班级设计题目指导教师指导教师意见:评定等级: 教师签名: 日期: 答辩小组意见:评定等级:答辩小组长签名:日期:教研室意见:教研室主任签名: 日期: 系(部)意见:系主任签名:日期:说明课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类; 目 录摘 要21、基本原理32、方案论证33、系统硬件设计33.1 STC89C52外围电路设计43.2 超声波测距模块电路设计53.3 显示电路设计74、系统软件设计74.1 系统软件设计说明74.2编程语言的选择84.3超声波测距仪的算法设计84.4 超声波发生子程序和超声波接收中断程序设计84.5 显示子程序设计94.6主程序流程图95、设计结果及分析106、使用说明117、课程设计体会11参考文献12附录:程序清单13 摘 要由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量。利用超声波检测距离,设计比较方便,计算处理也较简单,并且在测量精度方面也能达到日常使用的要求。超声波测距仪,可应用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用于如液位、井深、管道长度的测量等场合。利用超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量。利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制。本设计的超声波测距仪利用超声波传输中距离与时间的关系,采用以STC89C52单片机为核心进行控制及数据处理,最终完成超声波测距仪的硬件电路和软件设计。该测距仪主要由超声波发射器电路、超声波接收器电路、单片机控制电路、系统电源电路及LCD12864显示电路构成。整个程序采用模块化设计,由主程序、发射子程序、接收子程序、显示子程序等模块组成。各探头的信号经单片机综合分析处理,实现超声波测距器的各种功能。在此基础上设计了系统的总体方案,最后通过硬件和软件实现了各个功能模块。关键词:超声波;STC89C52;LCD12864;测距1、基本原理超声波传感器的工作原理是陶瓷的压电效应。超声波传感器在测量过程中,超声测距器是根据超声波遇到障碍物反射回来的特性进行测量的。超声波发射器向某一方向发射超声波,在发射同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即中断停止计时。 通过不断检测产生波发射后遇到障碍物所反射的回波,从而测出发射超声波和接收到回波的时间差T,然后求出距离L。基本的测距公式为:S=(T/2)*V 式中 S被测距离; T发射波和反射波之间的时间间隔; V超声波在空气中的声速,常温下取为340m/s 。声速确定后,只要测出超声波往返的时间,即可求得S 。2、方案论证超声波测距的原理是利用超声波的发射和接受,根据超声波传播的时间来计算出传播距离。实用的测距方法有两种,一种是在被测距离的两端,一端发射,另一端接收的直接波方式,适用于身高计;一种是发射波被物体反射回来后接收的反射波方式,适用于测距仪。此次设计采用反射波方式。超声波发生器可以分为两大类:一类是用电气方式产生超声波,一类是用机械方式产生超声波。电气方式包括压电型、电动型等;机械方式有加尔统笛、液哨和气流旋笛等。它们所产生的超声波的频率、功率和声波特性各不相同,因而用途也各不相同。目前在近距离测量方面常用的是压电式超声波换能器。根据设计要求并综合各方面因素,本文采用STC89C52单片机作为控制器,用LCD12864显示测量距离。STC89C52测距仪的分辨率取决于对超声波传感器的选择。超声波传感器是一种采用压电效应的传感器,常用的材料是压电陶瓷。由于超声波在空气中传播时会有相当的衰减,衰减的程度与频率的高低成正比;而频率高分辨率也高,故短距离测量时应选择频率高的传感器,而长距离的测量时应用低频率的传感器。超声波接收LCD12864显示超声波发射扫描驱动 图2.1 超声波测距器系统设计框图本设计通过按键扫描是否启动测距,然后控制单片机发出一个脉冲是超声波发生器产生超声波,等到反射的回波数据被超声波接收器接收后送给单片机处理,最后在LCD液晶屏上显示测距结果。3、系统硬件设计硬件电路的设计主要包括单片机系统及显示电路、超声波测距电路三部分。单片机采用STC89C52,采用12MHz高精度的晶振,以获得稳定时钟频率,减小测量误差。单片机用P1.0端口输出超声波换能器所需的触发信号,利用外中断0口(P3.2)监测超声波接收电路输出的返回信号。显示电路采用LCD12864显示屏。3.1 STC89C52外围电路设计STC89C52是一种带8K字节闪烁可编程可檫除只读存储器的低电压,高性能COMOS8的微处理器,俗称单片机。该器件采用ATMEL搞密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。单片机STC89C52作为主控芯片,控制整个电路的运行。单片机外围需要一个复位电路,复位电路的功能是:系统上电时提供复位信号,直至系统电源稳定后,撤消复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。该设计在电源电压瞬间下降时可以使电容迅速放电,可令系统可靠复位。图3.1 单片机复位电路STC89C52中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别为该反向放大器的输入端和输出端。这个反向放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器。外接石英晶体(或陶瓷谐振器)及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。对外接电容C1、C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程度及温度稳定性。如果使用石英晶体,电容应该使用30pF。还可以使用外部时钟。这种情况下,外部时钟脉冲接XTAL1端,即内部时钟发生器的输入端, XTAL2应悬空。由于外部时钟信号是通过一个2分频触发器后作为内部时钟信号的,所以外部时钟信号的占空比没有特殊要求,但最小高电平持续时间和最大低电平持续时间应符合产品技术条件的要求。时钟电路的核心就是一个晶振,常用的晶振频率有6MHZ、12MHZ,51单片机最大的晶振频率为20MHZ。由于单片机的机器周期为晶振周期的12分频,故一般选用12MHZ的晶振,此时恰好得到的机器周期为1us。图3.2 时钟电路 图3.3单片机最小系统实物图 3.2 超声波测距模块电路设计这一部分采用DYP-ME007超声波测距模块。DYP-ME007超声波测距模块可提供 3cm-3.5m的非接触式距离感测功能,图1为DYP-ME007外观,包括超声波发射器、接收器与控制电路。其基本工作原理为给予此超声波测距模块一触发信号后发射超声波,当超声波投射到物体而反射回来时,模块输出一回响信号,以触发信号和回响信号间的时间差,来判定物体的距离。图3.4 DYP-ME007超声波测距模块DYP-ME007电气参数:电 气参数DYP-ME00 7 超声波模块工作电压DC 5V工作电流15mA工作频率40Hz最远射程3.5m最近射程3cm输入触发信号10uS 的 TTL 脉冲输出回响信号输出 TTL 电平信号,与射程成比例规格尺寸45*20*15mm模块接线:使用上只需要 5V 电源供应、0V 地线连接、触发信号输入、与回响信号输出等四支接脚。注:此模块不宜带电连接,若要带电连接,则先让模块的 GND 端先连接,否则会影响模块的正常工作。 图3.5 DYP-ME007模块接线图模块时序图:图3.6 超声波模块时序图你只需要提供一个短期的 10uS 脉冲触发信号。该模块内部将发出 8 个 40kHz周期电平并检测回波。一旦检测到有回波信号则输出回响信号。回响信号是一个脉冲的宽度成正比的距离对象。可通过发射信号到收到的回响信号时间间隔可以计算得到距离。公式: uS/58=厘米或者 uS/148=英寸。建议测量周期为 60ms以上,以防止发射信号对回响信号的影响.3.3 显示电路设计本设计采用的是无字库的LCD12864液晶屏显示模块。图3.7 12864硬件连接图VCC和GND是最基本的电源,一般接5V即可,还有就是关于VEE以及VL(很多种屏称作V0,不过都一样了),一般接法如上图所示即可,当LCD与单片机接线以及电源供给完毕以后,需要调节可变电阻的阻值,可以说这个决定了液晶屏是否显示。只有阻值在特定的位置区域以内才会显示。最后就是关于BL+和BL-了,这个是液晶屏的背光,一般直接接在VCC和GND上,当然加小电阻限流同时可以使用DA或者普通的IO口来控制会更好。4、系统软件设计 4.1 系统软件设计说明进行测量控制系统设计时,除了系统硬件设计外,大量的工作就是如何根据每个测量对象的实际需要设计应用程序。因此,软件设计在微机测量控制系统设计中占重要地位。对于本系统,软件设计更为重要。在单片机测量控制系统中,大体上可分为数据处理、过程控制两个基本类型。数据处理包括:数据的采集、数字滤波、标度变换等。过程控制程序主要是使单片机按一定的方法进行计算,然后再输出,以便达到测量控制目的。本软件设计主要是对距离进行测量、显示。因此,整个软件可分为按照硬件电路对单片机位定义;发射子程序;接收子程序;显示子程序;延时子程序等。4.2编程语言的选择本设计是硬件电路和软件编程相结合的设计方案,选择合适的编程语言是一个重要的环节。在单片机的应用系统程序设计时,常用的是汇编语言和C语言。汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高,而且执行速度快。但是不同的CPU,其汇编语言可能有所差异,即依赖于计算机硬件,程序可读性和可移植性比较差。C语言是编译型程序设计语言,兼顾高级语言的特点,并具备汇编语言的功能。C语言是一种结构化程序设计语言,它支持当前程序设计中广泛采用的由顶向下结构化程序设计技术。此外,C语言程序具有完善的模块程序结构。C语言执行效率没有汇编语言高,但语言简洁,使用方便,灵活,运算丰富,表达化类型多样化,数据结构类型丰富,具有结构化的控制语句,程序设计自由度大,有很好的可重用性,可移植性等特点。基于C语言的众多优点本设计选择此语言来编程。4.3超声波测距仪的算法设计图3.2.1示意了超声波测距的原理,即超声波发生器T在某一时刻发出一个超声渡信号,当这个超声波遇到被测物体后反射回来,就被超声波接收器R所接收到。这样只要计算出从发出超声波信号到接收到返回信号所用的时间,就可算出超声波发生器与反射物体的距离。距离的计算公式为:S=L/2=(VT)/2其中,S 为被测物与测距仪的距离,L为声波的来回的路程,V为声速,T为声波来回所用的时间。 图4.1 超声波测距原理图在启动发射电路的同时启动单片机内部的定时器T0,利用定时器的计数功能记录超声波发射的时间和收到反射波的时间。当收到超声波反射波时,接收电路输出端产生一个负跳变,在INT0或INT1端产生一个中断请求信号,单片机响应外部中断请求,执行外部中断服务子程序,读取时间差,计算距离。4.4 超声波发生子程序和超声波接收中断程序设计超声波发生子程序的作用是通过P2.6端口发送1个超声波启动信号,脉冲宽度为10s左右,同时把计数器T0打开进行计时。超声波发生子程序较简单,但要求程序运行准确,所以采用C语言编程。超声波测距仪主程序利用外中断0检测返回超声波信号,一旦接收到返回超声波信号(即INT0引脚出现低电平),立即进入中断程序。进入中断后就立即关闭计时器T0停止计时,并将测距成功标志字赋值1。如果当计时器溢出时还未检测到超声波返回信号,则定时器T0溢出中断将外中断0关闭,此次测距不成功。4.5 显示子程序设计LCD12864液晶显示屏有其自身的控制编程方法,我们只需要按照其方法编程就能显示出我们想要的字符和图形。本次使用的液晶是不带字库的,所以需要使用提取字模软件来提取显示所需的16*16点阵信息。4.6主程序流程图5、设计结果及分析设计的最终结果是使超声波测距仪能够产生超声波,实现超声波的发送与接收,从而实现利用超声波方法测量物体间的距离,以数字的形式显示测量距离。超声波测距器的软件设计主要由主程序、超声波发生子程序、超声波接收中断程序及显示子程序组成。 超声波测距的算法设计原理为超声波发生器T在某一时刻发出一个超声波信号,当这个超声波遇到被测物体后反射回来,就被超声波接收器R所接收到。这样只要计算出从发出超声波信号到接收到返回信号所用的时间,就可算出超声波发生器与反射物体的距离。硬件电路在使用的时候测距不太稳定,液晶屏显示有时候会不清晰。原因是液晶屏的两个背光脚没有接电阻就直接接在了电源和地上面。并且我连接所用的杜邦线也不太稳定。图5.1 软件仿真结果图5.2 硬件仿真结果6、使用说明它的硬件电路的设计主要包括单片机系统及显示电路、系统电源、超声波发射电路和超声波检测接收电路四部分。单片机采用STC89C52,采用12MHz高精度的晶振,以获得较稳定时钟频率,减小测量误差。单片机用P2.6端口输出超声波换能器所需的触发信号,利用外中断0口监测超声波接收电路输出的返回信号。显示电路采用LCD12864液晶屏,实现测距,并且在液晶屏上显示距离。使用时只需要按下启动键就可以开始测距,如果测距成功就会在液晶屏上显示相应的距离的数值,否则将不显示。7、课程设计体会做硬件的设计制作与焊接的时候,并没有遇到太多问题,只是用杜邦线的连接的地方出了些毛病,以致不能显示的很清晰,这一块儿主要是得耐心细致。需要注意各个输入、输出引脚,因为每个引脚都是不一样的,只有让各个引脚互相对应,才能得出准确的结果,任何一点小的误差都不可能得出正确的运行结果。写程序倒是基本上没什么难度,逻辑思维强一点就好了。回顾起此次单片机课程设计,我仍感慨颇多,的确,在这两个星期中,可以说得是苦多于甜,但是可以学到很多很多的的东西,不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。很郁闷的就是帮别人修改了好些程序,结果都符合要求,但自己却是最后一个验收的,尽管我需要做实物,却也没这么难吧!但我还是坚持到了最后,虽然做出来的实物还是有些不尽如人意,却也能基本符合要求了,也算给了我一些安慰。同时,特别感谢刘老师和王老师在这两个星期里陪伴着我们,帮我们解决一些疑难杂症。谨在此特别鸣谢。参考文献1、 8 曾屹单片机原理与应用M长沙:中南大学出版社,2009,1335 2、 9 郭天祥新概念51单片机C语言教程.入门、提高、开发EBOLhttp:wwwP 3、 8 Pual Scherz.发明者电子设计宝典M福建:福建地质印刷厂,2004,1505 附录程序清单:#include#include#include #include #define LCD_databus P1/LCD12864的8位数据口#define uint unsigned int#define uchar unsigned char sbit EN=P22; sbit RS=P20; sbit RW=P21; sbit CS2=P23; sbit CS1=P24;sbit pulse=P26; /产生脉冲引脚sbit Echo=P32; /回波引脚sbit key=P27;/启动发射引脚bit succeed_flag; /测量成功标志uint s;uchar ge,shi,bai,outcomeH,outcomeL ; /自定义变量unsigned char code E16=0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/00x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/10x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,/20x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,/30x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,/40x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,/50x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,/60x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,/70x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,/80x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,/90x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,/c0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,/m;uchar code HZ32= /*超 CB3AC */0x40,0x48,0x48,0x48,0xFF,0x48,0x48,0x42,0xA2,0x9E,0x82,0xA2,0xC2,0xBE,0x00,0x00,0x80,0x60,0x1F,0x20,0x7F,0x44,0x44,0x40,0x4F,0x48,0x48,0x48,0x48,0x4F,0x40,0x00,/*声 CC9F9 */0x04,0x14,0xD4,0x54,0x54,0x54,0x54,0xDF,0x54,0x54,0x54,0x54,0xD4,0x14,0x04,0x00,0x80,0x60,0x1F,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x03,0x00,0x00,0x00,/*波 CB2A8 */0x10,0x60,0x02,0x0C,0xC0,0x00,0xF8,0x88,0x88,0x88,0xFF,0x88,0x88,0xA8,0x18,0x00,0x04,0x04,0x7C,0x03,0x80,0x60,0x1F,0x80,0x43,0x2C,0x10,0x28,0x46,0x81,0x80,0x00,/*测 CB2E2 */0x10,0x60,0x02,0x8C,0x00,0xFE,0x02,0xF2,0x02,0xFE,0x00,0xF8,0x00,0xFF,0x00,0x00,0x04,0x04,0x7E,0x01,0x80,0x47,0x30,0x0F,0x10,0x27,0x00,0x47,0x80,0x7F,0x00,0x00,/*距 CBEE0 */0x00,0x3E,0x22,0xE2,0x22,0x3E,0x00,0xFE,0x22,0x22,0x22,0x22,0x22,0xE2,0x02,0x00,0x20,0x3F,0x20,0x1F,0x11,0x11,0x00,0x7F,0x44,0x44,0x44,0x44,0x44,0x47,0x40,0x00,/*仪 CD2C7 */0x00,0x80,0x60,0xF8,0x07,0x00,0x1C,0xE0,0x01,0x06,0x00,0xE0,0x1E,0x00,0x00,0x00,0x01,0x00,0x00,0xFF,0x00,0x80,0x40,0x20,0x13,0x0C,0x13,0x20,0x40,0x80,0x80,0x00,/*周 CD6DC */0x00,0x00,0xFE,0x82,0x92,0x92,0x92,0xFE,0x92,0x92,0x92,0x82,0xFE,0x00,0x00,0x00,0x80,0x60,0x1F,0x00,0x00,0x1E,0x12,0x12,0x12,0x1E,0x40,0x80,0x7F,0x00,0x00,0x00,/*鹏 CC5F4 */0x00,0xFE,0x22,0xFE,0x00,0xFE,0x22,0xFE,0x00,0xFC,0x16,0x25,0x84,0xFC,0x00,0x00,0x60,0x1F,0x22,0xBF,0x40,0x3F,0x82,0xFF,0x00,0x13,0x12,0x12,0x52,0x82,0x7E,0x00,/*: CA3BA */0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*离 CC0EB */0x04,0x04,0x04,0xF4,0x84,0xD4,0xA5,0xA6,0xA4,0xD4,0x84,0xF4,0x04,0x04,0x04,0x00,0x00,0xFE,0x02,0x02,0x12,0x3A,0x16,0x13,0x12,0x1A,0x32,0x42,0x82,0x7E,0x00,0x00, ; void delay_10us(uint n) /延时n个10us uint i; for(i=n;i0;i-) _nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); void Read_busy()/读“忙”函数-数据线的最高位D7为1则忙 P0=0x00;RS=0; RW=1; EN=1;while(P0 & 0x80);EN=0; void write_LCD_command(uchar value) /写命令函数 Read_busy(); /对LCD的每次读写都要读忙 RS=0; /选择命令 RW=0; /读操作 LCD_databus=value; EN=1; /EN由1-0锁存有效数据 _nop_(); _nop_(); EN=0; void write_LCD_data(uchar value)/写数据函数 Read_busy(); RS=1; /选择数据 RW=0; LCD_databus=value; EN=1; /EN由1-0锁存有效数据 _nop_(); _nop_(); EN=0;void Set_page(uchar page) /设置“页”LCD12864共8页,一页是8行 page=0xb8|page; /页的首地址为0xB8write_LCD_command(page); void Set_line(uchar startline) /设置显示的起始行 startline=0xC0|startline; /起始行地址为0xC0 write_LCD_command(startline); /设置从哪行开始:共0-63;一般从0 行开始显示 void Set_column(uchar column) /设置显示的列 column=column &0x3f; /列的最大值为64column= 0x40|column; /列的首地址为0x40 write_LCD_command(column); /规定显示的列的位置 void SetOnOff(uchar onoff) /显示开关函数:0x3E是关显示,0x3F是开显示 onoff=0x3e|onoff; /onoff:1-开显示;0-关显示write_LCD_command(onoff); void SelectScreen(uchar screen) /选择屏幕 switch(screen) case 0: CS1=0;CS2=0;break; /全屏 case 1: CS1=0;CS2=1;break;/左半屏 case 2: CS1=1;CS2=0;break;/右半屏 default:break; void ClearScreen(uchar screen) /清屏函数 uchar i,j;SelectScreen(screen); /0-全屏;1-左半屏;2-右半屏 for(i=0;i8;i+) /控制页数0-7,共8页 Set_page(i); Set_column(0); for(j=0;j64;j+) /控制列数0-63,共64列 write_LCD_data(0x00); /写入0,地址指针自加1 void init_LCD() /LCD的初始化 ClearScreen(0); /清屏SetOnOff(1); /开显示SelectScreen(0); /选屏Set_line(0); /开始行:0 void Display_ASCII(uchar screen,uchar page,uchar column,uchar a16,uchar h)/字符显示uchar i;SelectScreen(screen);Set_page(page);Set_column(column*8);for(i=0;i8;i+) /显示字符上半部分:8*8 write_LCD_data(*(ah+i); Set_page(page+1); /显示字符下半部分:8*8 Set_column(column*8);for(i=0;i8;i+) write_LCD_data(*(ah+i+8); void Display_HZ(uchar screen,uchar page,uchar column,uchar a32,uchar h)/汉字显示uchar i;SelectScreen(screen);Set_page(page); /写上半页:16*8 Set_column(column*16); /控制列for(i=0;i16;i+) /控制16列的数据输出 write_LCD_data(*(ah+i); /汉字的上半部分 Set_page(page+1); /写下半页:16*8 Set_column(column*16); /控制列for(i=0;i16;i+) /控制16列的数据输出 write_LCD_data(*(ah+16+i); /汉字的下半部分 void disp()Display_HZ(1,0,0,HZ,0);Display_HZ(1,0,1,HZ,1);Display_HZ(1,0,2,HZ,2);Display_HZ(1,0,3,HZ,3);Display_HZ(2,0,4,HZ,4);Display_HZ(2,0,5,HZ,5);/第一行显示“超声波测距仪Display_HZ(1,2,0,HZ,6);Display_HZ(1,2,1,HZ,7);Display_HZ(1,2,2,HZ,8);/周鹏: Display_ASCII(1,2,6,E,2);Display_ASCII(1,2,7,E,0);Display_ASCII(2,2,0,E,1);Display_ASCII(2,2,1,E,0);Display_ASCII(2,2,2,E,0);Display_ASCII(2,2,3,E,4);Display_ASCII(2,2,4,E,2);Display_ASCII(2,2,5,E,1);Display_ASCII(2,2,6,E,1);Display_ASCII(2,2,7,E,3);/2010042113Display_HZ(1,4,0,HZ,4);Display_HZ(1,4,1,HZ,9);Display_HZ(1,4,2,HZ,8);/距离:Display_ASCII(2,4,4,E,10);Display_ASCII(2,4,5,E,11);/cmvoid csbfsq() /超声波发生器if(key=0)delay_10us(1);if(key=0)pulse=1;delay_10us(1);pulse=0; /产生一个10us的脉冲,在pluse引脚TR0=1;void distance() /距离计算uint t;t=outcomeH*256+outcomeL;s=(172*t)/100;bai=s/100;s=s%100;shi=s/10;ge=s%10;void dingshiqi()/中断及定时器0初始化TMOD=0X01;TH0=0;TL0=0;EA=1;ET0=1; EX0=1;IT0=1;void main(void) /主程序 init_LCD();disp();dingshiqi();csbfsq();while(Echo=0);if(succeed_flag=1)distance();Display_ASCII(2,4,0,E,bai);Display_ASCII(2,4,1,E,shi);Display_ASCII(2,4,2,E,ge); void T_0() interrupt 1 /定时器0中断TR0=0;ET0=0;TH0=0;TL0=0; void INT_0() interrupt 0 /外部中断0,回波处理 TR0=0;EX0=0;ET0=0;EA=0;outcomeH=TH0;outcomeL=TL0;if(TH0=0X72)succeed_flag=1;4、20
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸设计 > 任务书类


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!