超声波流量计的研究与设计毕业设计_第1页
超声波流量计的研究与设计毕业设计_第2页
超声波流量计的研究与设计毕业设计_第3页
超声波流量计的研究与设计毕业设计_第4页
超声波流量计的研究与设计毕业设计_第5页
已阅读5页,还剩37页未读, 继续免费阅读

下载本文档

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

文档简介

1、超声波流量计的研究与设计目录第一章 概述 31.1 流量计的发展及现状 31.2 超声波流量计的测量原理 3第二章 超声波流量计的总体设计思想 32.1 超声波换能器 32.1.1 原理 32.1.2 选择及安装方式 42.2 时差法测量 42.3 多脉冲测量方法 5第三章 超声波流量计的硬件设计 73.1 整体硬件系统设图 73.2 超声波发射电路设计 73.3 超声波接收电路设计 83.4 超声波顺逆流发射和接收控制电路设计 103.5 计数电路的设计 113.6 LCD12864 显示电路设计 123.7 参数输入电路设计 133.8 主从单片机之间的电路设计 14第四章 系统软件设计

2、154.1 主单片机软件设计 154.2 从单片机程序设计 164.3 主从单片机之间采用中断方式进行通信,发送数据流程图174.4 INT0 中断服务子程序设计 184.5 键盘子程序 184.5.1 键盘扫描主程序流程图 184.5.2 按键预处理子程序流程图 194.5.3 键值处理子程序流程图204.6 超声波换能器收、发射电路控制子程序设计21第五章 系统软件的仿真和调试22附件一:电路图 24附件二:主单片机程序 25附件三:从单片机程序 34参考文献 37致谢38概述1.1 流量计的发展及现状流量计作为计量仪表,在工业生产过程,能源计量,环境保护工程,交通运输,生物 技术,科学实

3、验等领域起着越来越重要的作用。随着科技的日新月异,新型流量计也 如雨后春笋般涌现出来, 现流量计的种类有转子流量计、 节流式流量计、 细缝流量计、 容积流量计、电磁流量计、超声波流量计等。其中,超声波流量计,集计算机和传感器技术于一身,将声学的研究成果与现代电子 技术结合在一起,可以用于多种液体的测量。同时,超声波流量计可以实现非接触式 测量且测量方法简单、精度高、可用于大口径的测量。超声波流量计以其独有的优点 证明了其实际的应用价值和广阔的市场前景。1.2 超声波流量计的测量原理一般来讲,超声波流量计由超声波换能器、电子线路及流量显示和累积系统三部 分组成。超声波流量计的电子线路包括发射、接

4、收、信号处理和显示电路。其测量过 程大致为: 超声波流量计中的超声波发射电路将电信号转换成超声波信号发射到待测 流体中,随后超声波接收电路接受超声波经放大后转换成电信号,此时的电信号载有 待测液体流速的信息,将其送到显示和累积系统进行显示 累积和计算,即可检测到 液体流速,从而得到流量,检测过程完成。根据检测原理的不同,超声波流量计大致可分传播速度差法 ( 包括:直接时差法、 时差法、相位差法、频差法 ) 波束偏移法、多普勒法、相关法、空间滤波法及噪声法 等类型。其中以时差法和多普勒效应法使用最为广泛,测量精确度也相对较高。 下面简单介绍一下这 两种方法 :时差法是利用超声波在流体中的传播速度

5、随流体的速度变化而变化的原理来测 量的。通过测量超声波顺流和逆流传播的时间差厶t来计算流速v,而后根据Q=s*v可计算出流量。时差法流量计主要应用于单相液体,适合于工业上洁净用水测量。多普勒效应法是利用超声波在传播过程中由于流体中存在的悬浮颗粒或气泡的 反射使其发生频移的多普勒效应来测量的。主要用于一些杂志颗粒较大的多相流体, 适用于杂质较多且分布均匀的流体测量。本设计中采用时差法测量。二 超声波流量计的总体设计思想2.1 超声波换能器2.1.1 原理 换能器是一种能量转换装置,可以将一种形式的能转换成另一种形式的能。在声 学领域,换能器主要实现电声转换。超声波换能器是以超声波为检测手段实现能

6、量转 换的器件。在发射超声波时,超声波换能器将电能转换为声能,在接收时,则将声能 转换为电能。目前常用的是压电超声波换能器,它利用压电材料的压电效应,采用适出的发射 电路把电能加到发射换能器的压电元件上,使其产生超声波振动。超声波以某一角度 射入流体中传播,然后由接收换能器接收,并经压电元件变为电能,以便检测。发射3换能器利用压电元件的逆压电效应,而接收换能器则是利用压电效应。2.1.2选择及安装方式超声波流量计负责超声波的发送和接收,因此其选择与安装方式直接影响测量的精度。超声波换能器常见的有收发一体式和收发分体式两种。其中收发一体式及发送器和接收器一体的换能器,即既可发送超声波,又可接收超

7、声波;收发分体式是发送 器发送超声波,接收器用作接受超声波。本设计中采用收发一体式,以方便顺流和逆 流的测量。对于超声波流量计来说,换能器通常三种测量方法:Z法(透过法卜V法(反射法卜X法(交叉法)等。本设计中采用了 v型安装方式,它可以消除管路安装地点使换 能器安装间隔受到限制引起的误差,并且可以扩大声程,提高准确性。2.2时差法测量下面介绍一下用 V型安装时利用时差法的计算方法:42图中为V型安装方式,超声波换能器Ti及T2装在管道一侧一定距离处。它们是都收发一体式的换能器。假定:被测流体流速是 v,液体管道内径为d,超声波在流体中的传播速度(v=0时)是c,超声波发射时的方向与管轴间的夹

8、角为;。因为超声波换能器被安置在管壁外侧,超声波在管壁中传播需要时间,用.0表示。顺流时:Ti发射超声波,超声波在流体中顺流传播,经时间t1后被T2接收ti2dcos= +C vsin逆流时:T2发射超声波,超声波在流体中逆流传播,经时间t2后被Ti接收t22d cos71C -vsin -时间差:-1 = t2 - t14dv tanC2 -v2sin2 r又因为一般情况下,v很小,贝V C2 >>v2 sin2v,因此,可将上式简化为:4dvta nB :t 之2 7 =2 . 2 v sin r求解,c24d tan 二流速为:2.3 多脉冲测量方法一般所需测量的流体流速常常

9、是每秒几米,对比而言,声波在液体中的传播速度(约为1500m /s左右)很大。被测流体流速 (流量)变化带给声速的变化量最大也是10 3数量级.若要求测量流速的准确度为1 %,则对声速的测量准确度需为10-5 -10-6数量级,现在的技术在单次测量中不可能达到这样的测量效果。因此,该设计中使用了多脉冲测量的方法。不但降低了测量的难度,更易获得精确的数据,还可以在 测量时结合多脉冲测量方法的特点,利用概率论和数理统计等相关理论对测量时差法做出合理估计,从而确保流量测量的精度。多脉冲测量的示意图多脉冲测量就是利用超声波的多次发射和接收过程,对某一物理量进行测量的方法。 顺流时:如a图所示,Ti发射

10、超声波,超声波在流体中顺流传播,经时间鮎后被T2接收,。而后,其中一部分代替触并将其转化为电信号,再进行其他操作(放大、整形等) 发信号触发T1再次发射超声波。如此循环 N次。N次循环所用时间:(.(i)为第i次的.0)Nt3八 Ntii=1逆流时:如b图所示,T2发射超声波,超声波在流体中逆流传播,经时间t2后被Ti接收,而后与顺流时相似。N次循环所用时间:(i)为第i次的.0)Nt4 二' (i) Nt2i =1时间差:当两图中的发射电路、放大电路等用完全相同的电路,并且超声波换能器的发射接收性能稳定一致时,只要 N足够大,由于统计效应的出现,上述两次声循环的延时(是延迟时间)总和

11、是相等的,即:NN二 M'(i)-r.曰于是:这样,时间差 过不再用去测量难以准确计量的微小时间t1和t2,而是改测相对较大的时间t3和t4。用这种多脉冲声循环法对微小时间进行累积后,现有的电子线路就容易测量t3、t4,时间差氏的准确测量就变的容易了三超声波流量计的硬件设计3.1、整体硬件系统设计框图V3.2、超声波发射电路设计单片机系统发出发射启动信号,以控制超声波换能器发射超声波信号。本部分电路采用单脉冲发射电路,由脉冲发生、放大电路构成,单片机发出的方波信号经过三极管放大和变 压器升压后,达到足够的功率后驱动换能器产生超声波。具体电路图如下:超声波换能器发射出超声波信号后,会经过

12、管壁和待测流体传播到接收换能器,中间有杂质和气泡,信号不稳定且强度不断减少, 处理。设计中,采用二级放大和带通滤波。 第一级放大电路采用低噪声高速放大器 一级放大电路图如下:所以需要对接收到的超声波信号进行滤波和放大MAX410接收到的超声波信号,经过电阻从 ,MAX410的2、3脚输入,放大后的信号由 MAX410的 6脚输出,输出的信号一路送到带通滤波器进行滤波处理,另一路反馈到ICICD4046用来完成锁相,以保持相位。超声波信号经过一级放大后,用MAX275带通滤波器滤波之后送到二级放大电路,进行第二次放大。带通滤波电路设计如下图:严电KABPOABPOBLPIALPIBBPIABPI

13、BLPOALPO®FCAFCB+ >斗1B161519超声波信号经过一级放大之后和带通滤波器之后,信号还比较小,采用具有较高的增益宽带积INA128放大器,进行二级放大,放大的超声波信号送到计数电路。二级放大电路图 如下:接带通谑波电蹈V?&接计数电路EM-OUTRGRGREFIXj128寸C?R10KCAP3.4、超声波顺逆流发射和接收控制电路设计 电路图如下:LJ4超声波换能器发射接收的方向由三个双刀双置的继电器开关K1/K2/K3控制,继电器K1为总开关,如果 K1导通,通过K2和K3的导通和关闭情况来控制换能器 T1和T2哪个为发 射,哪个为接收。三个继电器的状

14、态分别由单片机的三个位口线来控制。3.5、计数电路的设计单片机晶振频率取为12MHz通过Pi.5、Pi.6和Pi.7控制固体继电器的通断,进而控制超声波顺流发射或逆流发射,而Pi.o则对各计数器清零,P 1.2发出启动信号。分频计数器 4040满,将在INTl端产生一个下降沿,向单片机申请外部中断。单片机通过P2.0和P2.1分别使能两片74LS245,从Po 口读入其中的计数值。由于超声波发射和接收的次数N可以通过编程来控制,N值不会太大,故计数电路选用4片74S196芯片串接就可满足需要。计数部分的电路图如下所示:anI从单片机发射电路HnIuHEm1曲JOJdJHJdMJn-r n01

15、_Of Of w.UPma*anJHBjwn播EjhhinI:u.i.3.6 LCD12864显示电路设计8192 个基于ST7902的12864汉字图形点阵液晶显示模块,可显示汉字及图形,内置 中文汉字、128个字符及64X256点阵显示RAM其主要技术指标和显示特性如下:电源:VDD 3.3V+5V (内置升压电路,无需负压);显示内容:128列*64行显示颜色:黄绿显示角度:6: 00钟直视LCD 类型:STN与MCI接口: 8位或4位并行/3位串行配置LED背光多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等LCD12864显示电路设计如下图:GMTTi液晶接口3.7参数输入电

16、路设计键盘是人机对话的重要组成部分,本设计中使用了10个数字键和6个功能键:选择修改管道直径、选择修改夹角、增一键、减一键、确认开始键和修改键。键位设计图和矩阵式 键盘的电路图分别如下:P3.0 RXP键位设计图P3.4 KclockP3.5 RSIP3.6 *RP3.7P3 J 5S5rO S7P3.2P3.3S9p-o OS10rOSiln-O OSI 2y O1r-0 O1rO O1S13S14i4S15矩阵式键盘电路设计图r-0 S163.8主从单片机之间的电路设计本设计采用了主从单片机协同工作的方式。接口连接方式是主从串行通信连接方式。串行口在工作方式 0下工作时,本质上是一个移位寄

17、存器,SBUF为移位寄存器的输入、输出寄存器,外部引脚 RXD为数据的输入/输出端,外部引脚 TXD用来提供数据的同步脉冲,移 位脉冲为外部晶体频率的 1/12.串行口的工作方式 0不支持双工的工作方式,因此在同一时 刻只能够进行数据发送或接收操作。这种工作方式导致速度比较慢,但是在数据传输不太多的情况下,串行通信是非常方便的,通信速率可达1MB/S。(1)数据发送当向SBUF写入一个字节的数据之后,串行口在下一个机器周期开始时把数据串行发送到外部引脚 RXDLh,首先发送字节数据的最低位,同时,外部引脚TXD上会给出一个时钟信号,该时钟信号频率为单片机工作频率的1/12,在机器周期的第6节拍

18、起始时变高,在第 3节拍到来时变低,在第 6节拍的后半段进行一次数据移位操作。当SBUF内的8位数据发送完成后,串行口将置位TI,申请串行口中断,并且只有在TI被清除后才能够进行下一个字节的发送。(2 )数据接收在REN标志位和RI标志同时为零后的下一个机器周期,串行口将1010 1010写入接收缓冲寄存器,准备接收数据。当外部数据引脚TXD上的时钟信号到达后,串行口在该机器周期的第 5节拍的后半段对 RXD上的数据进行一次采集,并且将该数据送入接收缓冲寄存器。当完成一个字节的数据接收后,置位RI并且申请一个串行中断,只有在RI被清除之后才能够进行下一次接收。主从单片机之间的连接方式如下图所示

19、:主单片机ToND DRxTX从单片机四系统软件设计超声波流量计的软件设计包括主从单片机两个部分,主单片机部分主要完成参数的设定,流量的计算,测量结果的显示;从单片机部分主要完成超声波收发电路的控制,传播时间的测量,数据的检验和传输等。4.1主单片机软件设计主单片机软件部分主要包括参数处理程序、计算子程序、键盘处理子程序、显示子程序、串行通信子程序等。流量计开启后主单片机先执行系统初始化子程序,包括初始化单片机的系统参数、程序运行中所需的常数等, 并自动进入参数设置状态, 然后向从单片机发送命令;参数设置完成后,进入主单片机程序的测量及参数显示状态,在这一状态中程序不断扫描键盘,根据键入的命令

20、跳转到相应的子程序模块。主程序程序设计流程图如下所示:4.2从单片机程序设计从单片机部分完成超声波收发电路的控制、测量数据的采集、检验和传输,其软件流 程图如下图所示:系统进行测量前,先要进行自检,检查系统各部分工作是否正常,接着与主单片机进行通讯,接收主单片机传送来的参数,并将参数存放在存储器中,以便测量时使用。当接收到主单片机的测量命令后, 从单片机开始进行传播时间的测量,检验传播时间的可靠性, 并将这些数据通过串口送到主单片机进行计算。主从单片机之间的通讯采用中断方式,在从单片机接到停止测量命令后结束测量过程,等待主单片机发送新的命令。4.3主从单片机之间采用中断方式进行通信,发送数据流

21、程图如下图所示主从单片机数据发送子程序流程图4.4 INTO中断服务子程序设计如下/ INT中断服务. 子程序 .INTO中断服务子程序流程图4.5键盘子程序键盘子程序包括三个部分:键盘扫描子程序、键盘预处理子程序、键值处理子程序。键盘扫描是对键盘的按键位置进行判断,并读取相应按键的键号,根据按键号执行相应的动作。4.5.1键盘扫描主程序流程图系统采用了行列式键盘,其行列扫描程序流程图如下图所示:键盘扫描子程序流程图4.5.2按键预处理子程序流程图:由于在按键过程中,可能同时按下多个键或者一个键也没有按下,因此扫描 过键盘后需要进行按键的预处理,按键预处理子程序流程图如下图所示:V "

22、;按键预处理子程序设定初始按键返回码为无标码0x55 延时消除抖动按键是否松开?依次检测键盘扌扫描标志返回无按码0x55irkeyFlag是否多位置1 ?是否无位置1 ?-T N某位置1 某键被按返回此键标识码按键预处理子程序流程图4.5.3键值处理子程序流程图16个按键的处理,本设计中有0 9共10个数字键按键处理子程序的作用是对 和A F六个功能键:A:选择修改管道直径键;B:选择修改夹角键;C:增一键;D:减一键;E:确认开始键;F:修改键。键值处理子程序流程图如下图所示:NY调键盘测试按键处理如果键按下如果键按下1Flagc=1Flagd=1YN如果键按下FlaY,NYYd=d+1NF

23、lagFlagd=1如果键按下如果键按下Flag 仁1Flag2=1N返回Yc=c+1c=c-1YFlagd=?;键值处理子程序流程图4.6超声波换能器收发射电路控制子程序设计本设计中,两个完全相同的超声波换能器需要通过单片机进行发射接收的切换,以实现顺逆流传播的时差测量。其控制流程图如下所示:”.-超声波换能器发射接收 吒-.切换控制总开关打开P1.7=1P1.5=1 P1.6=0使丁!发射,T2接收P1.5=0 P1.6=1使T2发射,T!接收P1.2=1 P1.2=0P1.2=1P1.2=1 P1.2=0P1.2=1P1.2=P1.2=0P1.2=1P1.2=1P1.2=OP1.2=1*

24、有中断P1.2=P1.2=0P1.2=1P1.2=P1.2=0P1.2=1有中断计数器清零 P1.0=0计数器清零 P1.0=0*调数据处理子程序 循环是否:三次返回循环超声波换能器收发控制电路控制流程图五系统软件的仿真和调试单片机开发过程中都要有编程器,硬件开发器,开发软件,指令系统,芯片使用 说明书等。随着科学的进步,开发手段多种多样。C51程序的编写和编译链接等过程 可以在开发工具“ Keil C51”的环境下进行。工作原理就是利用模拟开发软件在计算 机上实现对单片机的硬件模拟,指令模拟,运行状态模拟,从而完成应用软件开发全 过程。另外一个优点就是可以不需要硬件就进行全软件仿真, 一切调

25、试好后将程序烧 入芯片,再将芯片插入硬件系统,就可使用了。调试过程如下: 首先建立一个项目,选择要保存项目的路径,并输入项目文件名,保存; 选择单片机类型(本设计选择 Ateml89C52),选定CPU型号后,单击“确定”;接下来创建 程序文件,在弹出的编辑窗口中输入C51源程序;输入完成后,选择路径保存“.C ”文件;将创建的程序文件添加到项目中去; 程序文件添加完毕后, 将鼠标指向 “ Target 1 ”并单击右键,再单击“ Options for Target Target 1 '”选择“ Target ”标签 进行相关设置;最后单击“ Buile Target ”选项,开始对

26、项目中的程序文件进行编译 连接,没有错误之后,系统就会生成与项目文件同名的可执行代码及用于EPROMS程的Hex文件。将生成的HEX文件下载到单片机系统中,就可以运行相应的程序。附件一:电路图-从单片机整体电路图附件二:主单片机程序#include<reg51.h> #include<math.h> #include<absacc.h> #define uchar unsigned char #define uint unsigned int / 显示部分定义和初始化数据口 液晶使能控制 寄存器选择输入 液晶读 / 写控制 串 / 并方式控制/* LCD显示

27、只需用 P3的4个位口,端口定义如下 */#define LCD_data P0/sbit LCD_EN = P3A2;/sbit LCD_RS =卩3人5;/sbit LCD_RW = P3A6;/sbit LCD_PSB = P3A7;/uchar code dis1 = "直径 : .cm"uchar code dis2 = "角度 : .度 "uchar code dis3 = "流速 : .m/s"uchar code dis4 = "流量 : .mA3/s"uchar data_d3 ="00

28、0" uchardata_jiao3="000"uchardata_v4="0000"uchardata_q4="0000"ucharflag=0,key=0; /按键标识、标号doubletc;/时间差#define delayNOP(); _nop_();_nop_();_nop_();_nop_(); uchar IRDIS2;uchar IRCOM4;void delay0(uchar x); /x*0.14MSvoid lcd_pos(uchar X,uchar Y); /确定显示位置/ 键盘部分定义和初始化uch

29、ar temp,key_num,getkey;sbit flag_sure=0;/ 确认键的标志位/1. 延时函数/void delay(int ms)while(ms-)uchar i;for(i=0;i<250;i+)_nop_();_nop_();_nop_();_nop_();/2. 按键键值获取函数/ 按键程序只需用 P2 口114*4 的键盘从 P2 口接入:P2_1-P2_3接左边4个键,P2_4-P2_7 接上4个键 uchar key_num()P2=0xfe;/ 使 P2_1=0temp=P2;temp=temp&0xf0; if(temp!=0xf0)del

30、ay(10); if(temp!=0xf0)switch(temp)case 0xe0:key_num=0;break;case 0xd0:key_num=1;break;case 0xb0:key_num=2;break;case 0x70:key_num=3;break;P2=0xfd;temp=P2;temp=temp&0xf0; if(temp!=0xf0)delay(10); if(temp!=0xf0)switch(temp)case 0xe0:key_num=4;break;case 0xd0:key_num=5;break;case 0xb0:key_num=6;bre

31、ak;case 0x70:key_num=7;break;P2=0xfb;temp=P2; temp=temp&0xf0; if(temp!=0xf0) delay(10); if(temp!=0xf0) switch(temp)case 0xe0: key_num=8;break;case 0xd0: key_num=9;break;case 0xb0: key_num=10;break;/设置直径case 0x70: key_num=11;break;/设置角度P2=0xf7;temp=P2;temp=temp&0xf0;if(temp!=0xf0)delay(10);if

32、(temp!=0xf0)switch(temp)case 0xe0:key_num=12;break;/将直径和角度清零case 0xd0:flag_sure=1;break;/sure 确认标志位case 0xb0:key_num=14;break;/加 1 建case 0x70:key_num=15;break;/减 1 建return key_num;/3. 对按键值进行处理子函数void key_do()uint i;while(1)getkey=key_num();/ 调用键值函数 if(getkey=10&&flag_sure=1)/ 如果键值为 10 则设置直径

33、d 的大小 flag_sure=0;/ 将确认标志位清零 delay(1);/ 延时 1ms for(i=0;i<3;i+)getkey=key_num();delay(1);if(getkey<9)/ 必须是 0-9 之间的数据data_di=getkey;/ 将设定的直径送到数组中delay(10);getkey=key_num();/ 再次调用键值函数,获取新的键值 if(getkey=11&&flag_sure=1)/ 如果键值为 12 则,设置安装角度的大 小flag_sure=0; delay(1);/ 延时 1ms for(i=0;i<3;i+)

34、 getkey=key_num(); delay(1);if(getkey<9) / 如果是 0-9 之间的数据则赋给对应的数 组data_jiaoi=getkey;/ 将设定的角度送到数组中 delay(10); if(getkey=12)/ 如果键值为 12,则清所设定的直径和角度参数delay(1);/ 延时 1msfor(i=0;i<3;i+)data_di=0x00;/ 参数清零 data_jiaoi=0x00;/4.lcd 显示子程序/ 检查LCD忙状态/ lcd_busy 为 1 时,忙,等待。 Lcd_busy 为 0 时 , 闲,可写指令与数据/bit lcd_b

35、usy()bit result;LCD_RS = 0;LCD_RW = 1;LCD_EN = 1;delayNOP();result = (bit)(P0&0x80);LCD_EN = 0;return(result);/ 写指令数据到 LCD/ RS=L , RW=L丘=高脉冲,。0-。7=指令码。/void lcd_wcmd(uchar cmd)while(lcd_busy();/首先判断 lcd 是否处于忙的状态LCD_RS = 0;/ 通过RS.RW.EN的设置,进入写指令状态LCD_RW = 0;LCD_EN = 0;_nop_();/ 空操作,延时作用_nop_();P0

36、= cmd;/从 P0 口度读入指令delayNOP();LCD_EN = 1;/ 使能发送delayNOP();/ 等待发送完毕LCD_EN = 0; / 发送完毕后关关闭/ 写显示数据到 LCD/ RS=H , RW=L 丘=高脉冲,D0-D7=据。/void lcd_wdat(uchar dat)while(lcd_busy();/lcd_busy() =1, 则处于忙状态,就等待LCD_RS = 1;/ 设置RS.RW.EN进入写数据状态LCD_RW = 0;LCD_EN = 0;P0 = dat;/从 P0 口读入数据delayNOP();LCD_EN = 1;/将数据存储到 LCD

37、的ROM中delayNOP();LCD_EN = 0;/ LCD 初始化设定/void lcd_init()LCD_PSB = 1;/并口方式lcd_wcmd(0x34);/扩充指令操作delay(5);lcd_wcmd(0x30);/基本指令操作delay(5);lcd_wcmd(0x0C);/显示开,关光标delay(5);lcd_wcmd(0x01);/清除LCD的显示内容delay(5);/ 显示位置设定/void lcd_pos(uchar X,uchar Y)uchar pos;if (X=0)X=0x80;else if (X=1)X=0x90;else if (X=2)X=0x

38、88;else if (X=3)X=0x98;pos = X+Y ; lcd_wcmd(pos); / 显示地址 / 延时 x*0.14ms 子程序/void delay0(uchar x) /x*0.14MSuchar i;while(x-)for (i = 0; i<13; i+) / LCD 显示子程序 lcd_disp()/void lcd_disp()uchar i;delay(10); / 延时wela=0;dula=0;/ 将要现实的数据赋值给对应的数据组中的位分别留给每一行dis16=data_d0;/ 空出 dis18,dis28,dis38,dis48 的小数点显示d

39、is17=data_d1;dis19=data_d2;dis26=data_jiao0;dis37=data_jiao1;dis49=data_jiao2;dis36=data_v0;dis37=data_v1;dis39=data_v2;dia310=data_v3;dis46=data_q0;dis47=data_q1;dis49=data_q2;dis410=data_q3;lcd_init(); / 初始化 LCDlcd_pos(0,0); /i = 0;while(dis1i != '0') / lcd_wdat(dis1i);i+;lcd_pos(1,0); /i

40、= 0;while(dis2i != '0')lcd_wdat(dis2i); / i+;lcd_pos(2,0); /i = 0;while(dis3i != '0')lcd_wdat(dis3i); / i+;lcd_pos(3,0); /i = 0;while(dis4i != '0')lcd_wdat(dis4i); / i+;while(1);设置显示位置为第一行的第 1 个字符显示字符设置显示位置为第二行的第 1 个字符显示字符设置显示位置为第三行的第 1 个字符显示字符设置显示位置为第四行的第 1 个字符显示字符/5. 主单片机流速

41、流量计算子程序js()double v,q;uint v1,q1v=(C*C*tc)/(4*d*tane);/ 将 tc 带入计算流速q=pi*d*d*v/4;/ 计算流量v1=v*100;/ 将 #。#格式的流速和流量乘上 100,方便赋值 q1=q*100;data_v0=v1/1000;/ 将得到的值分别赋给对应的位: 2个整数, 2 个小数;第 个数字为十位数data_v1=(v1%1000)/100;/ 第 2 个显示个位数字 data_v2=(v1%100)/10;/ 第 3 个显示十分位 data_v3=v1%10; / 第 4 个显示百分位 data_q0=q1/1000;/

42、data_q1=(q1%1000)/100;data_q2=(q1%100)/10;data_q3=q1%10;/6. 主程序:完成参数的设置,流量和流速的计算和显示void main()p0=0xff;/ 第一部分:初始化p2=0xff;P1X=1 不向从单片机发送测量命令IT0=0;/ 外部中断 INTO, 为低电平触发方式EX0=1;/ 允许外部中断 INTO 申请中断EA=1;/ 打开总的中断开关ES=1;/ 打开串口中断开关TMOD=0x20;定时器1工作在方式三,作为波特率发生器TR1=1;/ 开定时器TH1=0xf3H;/ 根据波特率设置初值TL1=0xf3H;RI=1;/ 串口

43、中断接收申请标志位SCON=0x50;串口工作在方式一PCON=0x80;速率加倍,波特率为 4.8Kwhile(1)key_num();/ 调用键盘扫描子程序 , 获取键值key_do();/ 调用键值处理函数:设置管道直径和安装角度lcd_disp();/将设置的参数显示出来js();/ 调用数据处理子程序 : 计算流速和流量lcd_disp();/调用显示子程序,显示流量和流速/ 串口中断程序 :将时间差读出void serial() interrupt 4 using 1RI=0;/ 软件清除串口中断标志位tc=SBUF;/ 读出数据delay(10);附件三:从单片机程序#inclu

44、de<reg51.h>#include<math.h>#include<absacc.h>#include<stdio.h>#include<stdlib.h>#define uchar unsigned char#define uint unsigned intbit flag1=0;/顺流结束标志位bit flag2=0;/逆流结束标志位bit send_flag=0;/ 从向主单片机发送数据标志位 double tc;/ 全局变量,时间差/1. 延时函数/void delay(int ms)while(ms-)uchar i;f

45、or(i=0;i<250;i+)_nop_();_nop_();_nop_();_nop_();/ 发送数据子程序 : 将时间差 tc 通过函数 printf() 发送到串口 transmit_data()/ 调用发送数据函数,将时间差 tc 传给主单片机 if(send_flag=1)SBUF=tc;/ 先将时间差 tc 送到缓冲器printf(tc);/ while(TI=0); / TI=0; / send_flag=0;/发送 tc等待发送完成清除发送中断 TI 标志,准备下一次发送将标志位清零/ 从单片主程序:收发电路的控制,获取单次时间tc ,将 tc 传给主单片机void

46、main() P0=0xff;p1_0=0;/ 对计数器清零 p1_1=1;/ 不向主单片机申请中断 p1_5=0;/ 先将继电器开关关闭 p2_0=1;/ 关闭上一个锁存器 p2_1=1; / 关闭下一个锁存器 IT1=0;/ 外部中断 INT1, 为低电平触发方式 EX1=1;/ 允许外部中断 INT1 申请中断 EA=1;/ 打开总的中断开关 ES=1;/ 打开串口中断开关TMOD=0x20;/ 定时器 1工作在方式三,作为波特率发生器 TR1=1;/ 开定时器TI=1;/ 串口中断发送申请标志位SCON=0x50;/ 串口工作在方式一PCON=0x80;/ 速率加倍,波特率为 4.8K

47、 TH1=0xf3H;/ 根据波特率设置初值TL1=0xf3H;while(1) p1_2=1;/ 启动发射信号p1_5=1;/ 顺流发射 N 次delay(50);延时50ms,等待顺流发射时,计数结束flag1=1;/ 顺流发射结束标志位p1_0=0;/ 计数器清零,以便逆流时重新计数delay(1);p1_2=1;/ 再次开启动信号p1_5=0;逆流发射N次delay(50);延时50ms,等待四逆流发射时,计数结束flag2=1;/ 逆流发射结束标志位p1_2=0;/关闭启动信号transmit_data()/ 调用发送数据函数,将时间差 tc 传给主单片机 / 外部中断 1 的子程序

48、:获取时间差 tcvoid INT1() interrupt 2 using 1long int n1,n2,ta;long int n11,n22,tb;if(flag1=1)/ 如果顺流发射结束flag1=0;/ 标志位清零p1_2=0;/ 关闭启动信号 p2_0=1;/ 关闭上一个锁存器 p2_1=0 ; / 打开下一个锁存器 n1=P0;/ 读入高位数据 p2_0=0;/ 打开上一个锁存器 p2_1=1 ; / 关闭下一个锁存器 n2=P0;/ 读入低位数据 ta=(n1*100+n2)*10;/ 计算顺流发射时间 , 单位为 ns p2_0=1;/ 关闭上一个锁存器 p2_1=1 ;

49、 / 关闭下一个锁存器if(flag2=1)/ 如果逆流发射结束 flag2=0;/ 标志位清零p1_2=0;/ 关闭启动信号 p2_0=1;/ 关闭上一个锁存器 p2_1=0 ; / 打开下一个锁存器 n11=P0;/ 读入高位数据 p2_0=0;/ 打开上一个锁存器 p2_1=1 ; / 关闭下一个锁存器 n22=P0;/ 读入低位数据 tb=(n11*100+n22)*10;/ 计算逆流发射时间 , 单位为 ns p2_0=1;/ 关闭上一个锁存器 p2_1=1 ; / 关闭下一个锁存器ns 转化为秒 s tctc=(tb-ta)/1000/1000/1000/1024;/ 求出单次时间

50、差,将纳秒 send_flag=1;/ 发送标志位:告诉从单片机可以向主单片机发送参考文献【 1】杜清府,刘海检测原理与传感技术山东大学出版社 2008【 2】曹琳琳,曹巧媛单片机原理及接口技术国防科技大学出版社2005【 3】周兴华 单片机智能化产品 C 语言设计实例详解北京航空航天大学出版社 2006【 4】邵贝贝 单片机嵌入式应用的在线开发方法清华大学出版社【 5】周润景 , 徐宏伟 , 丁莉单片机电路设计、分析与制作机械工业出版社 2010 【 6】陈汝全 单片机实用技术电子工业出版社 1922【 7】李珩 , 杨杉 , 欧大生 电路设计与制板 2004【8】谷树忠,刘文洲,姜航 Al

51、tium Designer 教程:原理图、PCB设计与仿真 电子工业出版社 2010【 9】韩国栋 , 赵月飞 , 娄建安 Altium Designer Winter 09 电路设计入门与提高 化学工业出版社 2010【10】周润景,张丽敏,王伟Altium Desig ner原理图与 PCB设计电子工业出版社 2009【 11 】肖峻等 收发同体型超声测距系统设计传感器技术 2003【 12】 孟立凡,郑宾,侯文 超声测距换能器级收发电路的研究华北工学院学报2001【13】王彦文,刘清基于 MA275的有源带同滤波器的设计与应用武汉理工大学学报 2005【 14】郭颖,王志刚,邓永德用AT89C2051 设计超声波流量计河北工业大学 天津 300130【 15】陈晓燕, 韩君等超声波流量计测量精度的修正与探讨 内蒙古电力技术 2003【 16】董德明,彭新荣超声波流量计的原理及应用机电产品开发与创新2009【 17】李明伟等一种高精度时差法超声波流量计仪器仪表学报2007【 18】高建亭,王璐芳单片机在超声波流量计中的应用河北工业大学成人教育学院学报 2001致谢 首先感谢学校和学院,为我们提供了一个良好的科技实践创新平台,让我们

温馨提示

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

评论

0/150

提交评论