超声波测距仪课程设计说明书(编辑修改稿)内容摘要:

软件设计在微机测量控制系统设计中占重要地位。 对于本系统,软件设计更为重要。 在单片机测量控制系统中,大体上可分为数据处理、过程控制两个基本类型。 数据处理包括:数据的采集、数字滤波、标度变换等。 过程控制程序主要是使单片机按一定的方法进行计算,然后再输出,以便达到测量控制目的。 本软件设计主要是对距离进行测量、显示。 因此, 整个软件可分为按照硬件电路对单片机位定义;发射子程序;接收子程序;显示子程序;延时子程序等。 8 编程语言的选择 本设计是硬件电路和软件编程相结合的设计方案,选择合适的编程语言是一个重要的环节。 在单片机的应用系统程序设计时,常用的是汇编语言和 C 语言。 汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。 其主要优点是占用资源少、程序执行效率高 ,而且执行速度快。 但是不同的 CPU,其汇编语言可能有所差异,即依赖于计算机硬件,程序可读性和可移植性比较差。 C 语言是编译型程序设计语言,兼顾 高级语言的特点,并具备汇编语言的功能。 C 语言是一种结构化程序设计语言,它支持当前程序设计中广泛采用的由顶向下结构化程序设计技术。 此外, C 语言程序具有完善的模块程序结构。 C 语言执行效率没有汇编语言高,但语言简洁,使用方便,灵活,运算丰富,表达化类型多样化,数据结构类型丰富,具有结构化的控制语句,程序设计自由度大,有很好的可重用性,可移植性等特点。 基于 C 语言的众多优点本设计选择此语言来编程。 超声波测距仪的算法设计 图 示意了超声波测距的原理,即超声波发生器 T 在某一时刻发出一个超声渡信号,当这个 超声波遇到被测物体后反射回来,就被超声波接收器 R 所接收到。 这样只要计算出从发出超声波信号到接收到返回信号所用的时间,就可算出超声波发生器与反射物体的距离。 距离的计算公式为: S=L/2=(V△ T)/2 其中, S 为被测物与测距仪的距离, L 为声波的来回的路程, V 为声速,△ T 为声波来回所用的时间。 图 超声波测距原理图 在启动发射电路的同时启动单片机内部的定时器 T0,利用定时器的计数功能记录超声波发射的时间和收到反射波的时间。 当收到超声 波反射波时,接收电路输出端产生一个负跳变,在 INT0 或 INT1 端产生一个中断请求信号,单片机响应外部中断请求,执行外部中断服务子程序,读取时间差,计算距离。 超声波发生子程序和超声波接收中断程序设计 超声波发生子程序的作用是通过 端口发送 1 个超声波启动信号,脉冲宽度为 10μ s 左右,同时把计数器 T0 打开进行计时。 超声波发生子程序较简单,但要求程序运行准确,所以采用 C 语言编程。 超声波测距仪主程序利用外中断 0 检测返回超声波信号,一旦接收到返回超声波信号(即 INT0 引脚出现低电平),立即进入中断程序。 进入中断后就立即关闭计时器 T0停止计时,并将测距成功标志字赋值 1。 如果当计时器溢出时还未检测到超声波返回信号,则定时器 T0 溢出中断将外中断 0 关闭,此次测距不成功。 9 显示子程序设计 LCD12864 液晶显示屏有其自身的控制编程方法,我们只需要按照其方法编程就能显示出我们想要的字符和图形。 本次使用的液晶是不带字库的,所以需要使用提取字模软件来提取显示所需的 16*16 点阵信息。 主程序流程图 设计结果及分析 设计的最终结果是使超声波测距仪能够产生超声波,实现超声波的发送与接收,从而实现 利用超声波 10 方法测量物体间的距离,以数字的形式显示测量距离。 超声波测距器的软件设计主要由主程序、超声波发生子程序、超声波接收中断程序及显示子程序组成。 超声波测距的算法设计原理为超声波发生器 T 在某一时刻发出一个超声波信号,当这个超声波遇到被测物体后反射回来,就被超声波接收器 R 所接收到。 这样只要计算出从发出超声波信号到接收到返回信号所用的时间,就可算出超声波发生器与反射物体的距离。 硬件电路在使用的时候测距不太稳定,液晶屏显示有时候会不清晰。 原因是液晶屏的两个背光脚没有接电阻就直接接在了电源和地上面。 并且我连 接所用的杜邦线也不太稳定。 图 软件仿真结果 11 图 硬件仿真结果 使用说明 它的硬件电路的设计主要包括单片机系统及显示电路、系统电源、超声波发射电路和超声波检测接收电路四部分。 单片机采用 STC89C52,采用 12MHz 高精度的晶振,以获得较稳定时钟频率,减小测量误差。 单片机用 端口输出超声波换能器所需的触发信号,利用外中断 0 口监测超声波接收电路输出的返回信号。 显示电路采用 LCD12864 液晶屏,实现测距,并且在液晶屏上显示距离。 使用时只需要按下启动键就可 以开始测距,如果测距成功就会在液晶屏上显示相应的距离的数值,否则将不显示。 课程设计体会 做硬件的设计制作与焊接的时候,并没有遇到太多问题,只是用杜邦线的连接的地方出了些毛病,以致不能显示的很清晰,这一块儿主要是得耐心细致。 需要注意各个输入、输出引脚,因为每个引脚都是不一样的,只有让各个引脚互相对应,才能得出准确的结果,任何一点小的误差都不可能得出正确的运行结果。 写程序倒是基本上没什么难度,逻辑思维强一点就好了。 回顾起此次单片机课程设计,我仍感慨颇多,的确,在这两个星期中,可以说得是苦多于甜,但是可以学到很多很多的的东西,不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。 很郁闷的就是帮别人修改了好些程序,结果都符合要求,但自己却是最后一个验收的,尽管我需要做实物,却也没这么难吧。 但我还是坚持到了最后,虽然做出来的实物还是有些不尽如人意,却也能基本符合要求了,也算给了我一些安慰。 同时,特别感谢刘老师和王老师在这两个星期里陪伴着我们,帮我们解决一些疑难杂症。 谨在此特别鸣谢。 12 参考文献 [8] 曾 屹 . 单片机原理与应用 [M]. 长沙 : 中南大学 出版社, 2020, 1~ 335 [9] 郭天祥 . 新概念 51 单片机 C 语言教程 .入门、提高、开发 [EB/ OL]. :// . [8] Pual [M]. 福建:福建地质印刷厂, 2020,1~505 13 附录 程序清单: include include include include define LCD_databus P1 //LCD12864 的 8 位数据口 define uint unsigned int define uchar unsigned char sbit EN=P2^2。 sbit RS=P2^0。 sbit RW=P2^1。 sbit CS2=P2^3。 sbit CS1=P2^4。 sbit pulse=P2^6。 //产生脉冲引脚 sbit Echo=P3^2。 //回波引脚 sbit key=P2^7。 //启动发射引脚 bit succeed_flag。 //测量成功标志 uint s。 uchar ge,shi,bai,outeH,outeL。 //自定义变量 unsigned char code E[][16]={ 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。