本科毕业设计(论文)
题目:某型矿用负压力传感器软件设计
院 (系): 电子信息工程学院 专 业: 自动化 班 级: 050403 学 生: 史媛 学 号: 050403130 指导教师: 王青岳
2009年 6月
目录
中文摘要 ................................................ 4 ABSTRACT ................................................ 5 1 绪论 ................................................. 6
1.1课题背景及发展状况........................................... 6
1.1.1课题背景 ............................................... 6 1.1.2 发展状况............................................... 6 1.2 研究意义 .................................................... 6 1.3 国内外相关领域的研究情况 .................................... 7 1.4 研究内容 .................................................... 8
2 系统硬件设计 ......................................... 9
2.1 系统总体硬件方案 ............................................ 9 2.2 负压传感器工作过程简述 ...................................... 9 2.3 AT89C52单片机概述.......................................... 10 2.4 MPM185压力传感器简介....................................... 10
3 系统软件设计方案 .................................... 11
3.1 软件设计方案 ............................................... 11 3.2 主程序流程图设计 ........................................... 11
3.2.1 单片机中断初始化...................................... 11 3.2.2 参数初始化............................................ 12 3.2.3主程序工作过程 ........................................ 12
4 系统自检模块设计 ..................................... 14
4.1 系统自检模块设计 ........................... 错误!未定义书签。
5 红外协议及其通信过程 ................................. 15
5.1 红外遥控发射电路简介 ....................................... 15 5.2 红外通信协议 ............................................... 16
6 调试菜单设计 ........................................ 18
6.1 调试菜单红外接收部分 ....................................... 18
6.1.1 红外接收器HS0038B .................................... 18 6.1.2 红外接口接收红外信息.................................. 18 6.2 四位数码管显示 ............................................. 20
6.2.1 LED显示器 ............................................ 20 6.2.2 LED显示的基本原理 .................................... 21 6.2.3 四位数码管显示过程.................................... 21 6.3调试菜单的其他功能.......................................... 23
7 压力采集的实现 ...................................... 24
7.1 双积分A/D转换电路简介 ..................................... 24 7.2 压力采集的软件设计 ......................................... 24
8 数据处理 ............................................ 27
8.1 压力转换为电压 ............................................. 27
8.1.1 信号调理电路.......................................... 27 8.1.2 信号调理电路的输入输出关系推倒....................... 27 8.2 电压转换为负压力 ........................................... 28 8.3 输出频率实现 .............................................. 29
9 软件开发及调试环境................................... 30
9.1操作系统.................................................... 30 9.2程序开发语言................................................ 30 9.3模块化编程.................................................. 31
10 总 结 .............................................. 32 致谢 ................................................... 33 参考资料和文献 ......................................... 34 附录 ................................................... 35
某型矿用负压传感器软件设计
摘要
矿井测试技术早已广泛地应用于地下水、油、气田的开发生产上,是整个地下水、油、气田勘探与开发的一个重要组成部分。为了搞清地下水、油、气资源,必须通过试油、试气、测温、测压工作来获取各项资料,为制定合理的开采制度和开发方案提供科学依据。矿井下压力变化情况较为复杂,工作环境也较为恶劣,面对如此复杂的环境,传统的井下测试仪已经很难达到对井下压力快速准确的采样。矿井下的压力测试关乎井下安全,因此必须在保证工作安全的情况下进行工作,矿用负压传感器对于维持井下生产安全有实际意义。
本课题所涉及的压力传感器可以满足井下压力测试的基本要求,采用红外线遥控调校,密封性能良好,仪器具有多种信号输出制式,通过四位LED显示输出结果,可与国内各种监测系统配套使用。
关键词:单片机、压力传感器、输出信号制式、数据采样、红外线遥控
A certain type of pressure sensor used in the mine software
design
ABSTRACT
Mine testing technology has been widely used in underground water, oil, gas
field development and production for a long time.It is an important component on the entire underground water , oil, gas exploration and development.In order to make clear the groundwater, oil, gas, Must pass testing, testing, temperature and pressure of work to obtain information, for the development of rational exploitation of the system and development programs to provide a scientific basis.The pressure under the mine is more complex and the working environment is more serious too.In the face of such a complex environment, the traditional underground testing has been difficult to achieve fast and accurate pressure on the underground sampling.The test of pressure under mine is very important.It is necessary to ensure work safety in the conduct of the work of mining underground pressure sensors to maintain the production of meaningful security.
The issues involved in the pressure sensor can meet the basic requirements for testing.It is used of infra-red remote to control the pressure sensor,good sealing performance.Instrument has a wide range of standard signal output, through the four LED display output results, with the use of various monitoring systems.
Key words: SCM 、pressure sensor、signal output、Data Storage 、infra-red remote
1 绪论
1.1课题背景及发展状况
1.1.1课题背景
地下的资源储量非常丰富,石油、煤炭等都是国家工业的命脉,而获得这些资源的前提是要做好准确的井下探测工作,井下温度、压力变化复杂,传统的井下压力测试系统不能做到快速、准确的采集与分析,无法确保井下工作的安全与高效率,导致一些井下事故时有发生。因此,摆在工程勘探人员面前的一个很现实的问题就是:如何准确地对井下不断变化的压力进行采样与分析,评定井下工作的安全性、可操作性,如何解决井下压力的变化对井下工作造成的不便成为困扰管理者的一大难题。随着科学技术的不断进步,单片机的广泛应用,井下探测也有了更多的思路,方法。基于课题该需求,研制矿井下负压传感器系统,以准确、快速的数据采集,分析,让工作人员了解井下的真实情况,制定相应的方案,保证井下工作安全、有序、高效的进行。 1.1.2 发展状况
压力传感器是随着传感器技术及电子电路技术的发展而不断发展和成熟起来的。压力传感器具有体积小,重量轻,工作频带宽,灵敏度和精确度高等等特点,随着目前与其配套的后续仪器,如电荷放大器等技术的日益提高,这种传感器在声学,医学,力学,宇航等方面越来越得到广泛的应用。国外的压力传感器已经系列化和标准化,压力的测量范围较之以前有了很大的提高,精度和稳定度越来越精确,误差在不断减小。毫无疑问,传感器技术已经成为21世纪的核心技术,许多国家对它进行优先研究,开发和应用。作为全球常规传感器和技术方面的领先供应商,kavlico公司推出了一系列密封型工业用压力传感器,这些传感器性能可靠,安全过压能力达到了满量程的2倍以上,能够用于具有较大过压峰值的场合。
1.2 研究意义
地上的资源基本已被勘测殆尽,为了满足日益增长的人民日常生活和国家不断发展进步的需要,实现社会、经济的可持续性发展,储量丰富的地下资源的勘
探与开发将富有战略的意义。为了使管理者、工作人员更有效、安全的开展井下的工作,有必要开发研制出一种能够准确、快速采集与分析井下压力变化的电子压力测量系统。该系统将在传统的压力测量系统的基础上,改进单片机性能,引入FLASH存储单元,高度智能化,更加便于工作人员制定工作流程和及时的对数据进行分析决策,杜绝了工作人员因无法科学、准确的掌握井下压力数据变化对工作的影响而导致一些不该有的事故发生。这个系统可以提高井下探测工作的规范化及科学管理水平,有效地保障了井下工作的安全、有序的进行。井下探测已与我们的生活息息相关,做好井下探测工作,对个人与国家都具有巨大的战略意义。
1.3 国内外相关领域的研究情况
我国试井技术的应用始于上个世纪五十年代中期,近五十年来有了很大的
发展。玉门油田是我国最先开展试井工作的油田,上个世纪六十年代初,大庆 油田的发现和开发,十分重视录取第一手资料,充分利用压力资料指导油田的开发,这一期间我国试井技术有了迅速的发展。上个世纪八十年代以来,随着我国引进一批高精度的常规试井仪表、设备,以及电子压力测试系统、地层测试仪等先进设备,使我国的测试技术装备状况有了很大的改观,试井工作也有了巨大的发展。试井工作领域由开发扩展到勘探,由单井测试扩展到一定控制面积内的多井测试。随着电子压力产品的引进,促进了国产井下仪器的发展。除了机械式压力计的性能指标不断完善提高外,振弦式、固阻式等电子压力传感器的研制经取得巨大的成功。
随着国外电子压力产品的引进,国内压力测量仪器在上个世纪九十年代初期就陆续发展起来了,其中以阿达尔,凯山等系列电子压力计为代表。目前,国内电子压力产品水平大抵在第一、第二代之间。而且由于国内生产的压力传感器的水平不高,高温电子器件的筛选不严格,压力计外筒材料一般等因素,决定了国产压力测量仪器的整体性能和水平偏低。但是国产电子压力测量仪器的最大优点是价格低廉,操作软件是纯中文的,反便了用户的现场操作。
2006年4月5日,大庆油田公司测试技术服务分公司科研人员自行研制成功的水平井测试仪。目前,该仪器已在大庆油田成功录取了两口水平井地下资料,实现了油田水平井测试零的突破。
自贡长山盐矿卤井,采用试井技术处理岩盐卤井事故。即通过对井下浓度、温度、压力等的测试,可获取修井前卤井事故的有关参数,判断确定油套管的破裂位置,为合理地制定修治事故井提供科学的依据。
智能井技术是实现数字化油田的主要构成部分,近年来发展迅速,得到广泛关注。据2004年统计,世界上采用智能井技术的油井已接近200口。贝克石油工具、壳牌、威德福和斯伦贝谢等公司都投入了研发和应用。
Q-技术是斯伦贝谢西方地球物理公司经过近十年开发出的应用于海洋、陆
地、海底区域的一套专利地震技术,包括Q-LANd、Q-Marine、Q-ReseRVoir和Q-Seabed等系列技术,支持陆上、海上和井下地震数据采集与现场处理。Q-技术2001年由斯伦贝谢公司推出,通过不断更新,2004年得到全面推广应用。该技术通过综合大量单一传感器记录的数字波形,改变了以往使用的数字检波器或A-D转换器,可以记录较以往更多道数据,获得优化的地震波场采集和处理结果。
1.4 研究内容
LED显示测量的压力值,红外遥控对该压力传感器进行调校;设计红外接受调试菜单程序;编写单片机对频率型AD电路的采集程序,使得输出信号频率满足200-1000HZ, 5-15HZ, 5-155HZ, 0-155 HZ, 5-205HZ, 0-200HZ。
通过四位
2 系统硬件设计
2.1 系统总体硬件方案
18VDC 电源电压稳压 模块 5VDC AD转换电路 单片机 四位LED数码管显示 负压传感器 信号调理电路 红外接口 输出制式 信号调理 图2-1 系统总体硬件设计方案
2.2 负压传感器工作过程简述
本仪器硬件原理的方案如图2-1所示,硬件部分主要由电源电压稳压模块,负压传感器,信号调理电路,AD转换电路,89C52单片机,数码管显示电路,红外接口电路等组成。电源稳压模块将关联设备送来的电压稳压为5V,供给整机电路使用。负压传感器启动后,把测量到的井下压力差转化为电压信号,并将检测到的电压信号送到信号调理电路,信号调理电路的作用,是把传感器的信号进行转换和放大,使其更适合进一步处理和传输。将处理后的电压信号送到A/D转换电路,该A/D转换电路是由一个积分型运放配合4051多路开关共同实现的,通过单片机定时器对积分电路充放电时间的计量最终得到信号的数字值供单片机使用。红外接口电路主要是为负压传感器的调试使用。当需要进行调试时,使用红外接口遥控器对传感器进行调试设定,数码管显示方式进入调试菜单界面,调试菜单具体包括输出信号制式设定,压力的零偏满偏标定,量程设置等。数码管显示电路将结果显示出来,显示电压和负压力。
2.3 AT89C52单片机概述
由于本系统的设计特性,我们选择的处理器是52系列单片机中的AT89C52,因为它的低功耗特性非常适合于矿用负压传感器这样的小型便携式测量仪,而且它具有功能强大的通信模块,中断功能设计也符合该仪器的硬件设计要求。下面简要介绍一下AT89C52系列单片机。
AT89C52是美国ATMEL公司生产的低电压,高性能COMOS8位单片机片内含有8K bytes的可反复擦写的只读存储器。该装置采用Atmel的高密度非易失性内存技术,符合行业标准80C51和80C52指令集和引脚。芯片上的Flash程序存储器具有可重新编程的功能,该芯片和CPU相结合组成一个功能强大的微机。它具有强大的中断功能,6个中断向量,包括2个外部中断(INT0和INT1),3个定时器中(定时器0,1,2),一个串行中断。AT89C52单片机具有以下特征: • 与MCS-51单片机产品兼容
• 8K字节在系统可编程Flash存储器 • 1000次擦写周期
• 全静态操作:0Hz~33MHz • 三级加密程序存储器 • 32个可编程I/O口线 • 三个16位定时器/计数器 • 八个中断源
• 全双工UART串行通道 • 低功耗空闲和掉电模式 • 掉电后中断可唤醒 • 看门狗定时器 • 双数据指针 • 掉电标识符
2.4 MPM185压力传感器简介
MPM185型TO-8封装压阻式压力敏感元件,采用先进的离子注入工艺和微机械加工工艺,制成了具有惠斯顿电桥和精密力学结构的硅敏感元件,以TO-8的形式封装被测压力通过压力接口作用在硅敏感元件上,实现了所加压力与输出电压信号的线性转换。经激光修调的厚膜电阻网络补偿了敏感元件的温度性能。适用于安装在印刷电路板或空间狭小的场合,对压力敏感元件结构材料相兼容的液体或气体的表压、绝压和差压的检测。
3 系统软件设计方案
3.1 软件设计方案
自检程 序模块 矿用压力传感器软件模块 负压检 测模块 调试菜 单模块 LED显 示模块 输出频 率模块 图3-1 系统软件设计方案
系统的软件设计主要包括系统自检程序设计,负压检测程序设计,四位LED显示程序设计,调试子程序程序设计等,软件框图如图3-1所示。其中,系统自检程序设计主要是对基准电压和电源电压进行检测。负压检测程序设计对电压和负压进行检测,包括单片机对频率型A/D电路的的采集程序。四位数码管显示程序设计通过四位数码管将检测到的负压力值显示出来。输出频率要满足一定的要求。
3.2 主程序流程图设计
3.2.1 单片机中断初始化
中断都是在运行主程序时发生的,是主程序的随机事件,是否允许发生以及如何发生,都要在主程序中预先设置,这就是中断初始化。该设计中的中断初始化主要包括对AT89C52单片机的中断允许控制寄存器IE和三个定时器的计数初值和工作方式进行初始化。首先允许所有的中断,设置中断允许控制寄存器,外部中断采用脉冲触发,设置ITO=1.该设计过程中采用的A/D转换电路通过单片机定时器对积分电路的充放电时间的计量从而得到信号的数字信息供单片机使用,因此必须对三个定时器进行初始化。定时器0和定时器1都采用方式1,定时器0的计数初值为0,定时器1的计数初值设置为62036,定时器0和定时器1都用作定时用。定时器2采用16位自动重载定时方式,计数初值设置为0.
3.2.2 参数初始化
参数初始化主要包括输出信号制式初始化,量程标定系数初始化,零偏电压标定系数初始化,满偏电压标定系数初始化。输出信号制式初始化主要是对输出频率进行设定,该设计要求输出信号频率满足200-1000HZ,5-15HZ,0-150HZ, 5-205HZ,0-200HZ。量程标定初始化对传感器的压力上限值进行设定,不同的输出频率对应不同的压力范围。
传感器的标定是指利用标准设备产生已知标准量,或用标准量来确定传感器输出电路与非电量之间关系的过程。该设计主要对传感器进行静态标定,该负压传感器输入量为压力,输出量为电压,通过输入量和输出量之间的关系对传感器进行标定。零偏电压标定时,测量传感器零偏时对应的电压值,通过传感器标定公式K=(2500.0-传感器零偏输出电压)/122.0,确定传感器零偏电压的标定系数。满偏电压标定时,测量传感器满偏时对应的电压值,确定传感器满偏电压的标定系数。传感器的线性系数可以通过传感器满偏输出电压与传感器满偏压力值的比值来确定。 3.2.3主程序工作过程
系统上电后,先完成对单片机的中断初始化,然后系统开始对系统电源进行自检,判断电源电压和基准电压是否正常。当电压正常时,进行参数初始化,包括输出信号制式初始化,量程标定系数初始化,零偏电压标定系数初始化,满偏电压标定系数初始化,然后通过红外接口对负压传感器进行调试,若红外键值显示Key-on,进入调试菜单进行调试,否则进行负压检测显示。当电压不正常时,返回并再次对电源电压和基准电压进行检测。负压检测显示是该设计最主要的部分,仪器的主要功能都在这部分实现。主程序流程图如图3-2所示。
图3-2 主程序流程图
4 系统自检模块设计
系统自检是传感器很重要的一项功能,它要将传感器的主要部件(电源)检测一次并显示主要的工作参数。在该设计中它主要对基准电压和电源电压进行检测。
系统自检是对电源电压和基准电压进行检测并判断电源电压和基准电压是否正常。AT89C52单片机P1口的P10,P11,P12作为输出控制X4051多路开关的三个地址输入端C,B,A。当三个地址输入端全为高电平时,地选通,对电容充电。当C=0,B=0,A=0时,测量电源电压,通过单片机定时器对积分电路充放电时间的计量得到电压的数字值,若该电压值小于4.2V或者大于5.2V,则电源电压故障;当C=0,B=0,A=1时,测量基准电压,若经转化的电压值小于2.2V或者大于2.6V,则基准电压故障,否则则正常。系统自检模块的流程图如图4-1所示。
开始
测量电源电压
电压<4.2 N 或>5.2
Y 测量基准电压
电源电压故障 电压<2.2或>2.6
N
正常
Y 基准电压故障 图4-1 系统自检程序流程图
5 红外协议及其通信过程
红外线遥控是目前使用最广泛的一种通信和遥控手段。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,许多小型电器装置上也纷纷采用红外线遥控。工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。
5.1 红外遥控发射电路简介
CX9012是用一块用于红外遥控系统中的专用发射集成电路,采用CMOS工艺制造。它具有32个功能键,若配合用户编码的变化则可提供256种不同的发射码,另外CX9012还提供6种双重按键功能。CX9012的管脚设置和外围应用线路都进行了优化,以方便PCB版的布图和低成本的要求。它具有以下特点: • 高性能的CMOS工艺,低功耗 • 内置振荡电路 • 外围元件少
• 32个功能按键,8种用户编码(相当于可提供256种不同的发射码) • 发射信号的LED指示 (1)振荡线路部分
CX9012的振荡线路由振荡器输出管脚OSCO与输入管脚OSCI间接一只455kHz的陶瓷谐振器及2个100pf的接地电容所组成,其振荡频率为455kHz。没有按键操作时,该振荡电路停振处于待机状态以减少功率消耗。当有按键操作时,振荡电路开始起振,有发射码输出,按键释放后,电路停振重新处于待机状态。
(2) 振荡频率部分
图5-1 振荡线路图
CX9012的振荡频率为455kHz,经内部的12分频电路,得到频率为37. 9~39.2kHz,占空比为1/3的调制载波。455kHz的振荡频率另经256分频,得到系统的基本工作时钟为1.78kHz。调制载波的频率(fc)及内部工作时钟周期(Tm)与振荡频率(fosc)的对应关系如下式表示: fc=(1/12) × fosc (占空比:1/3)
Tm=256/fosc。(Tm:一个高电平脉冲的宽度)
5.2 红外通信协议
协议的目的是给收发双方一个约定,使其能够进行同步,并正确的收发数据。红外通讯的关键在于红外数据的同步,能够正确识别接收到的红外信息代表何意义。本设计中的红外通讯系统采用帧协议。
如下图所示,CX9012一帧完整的发射码由引导码,用户码和键数据码三部分组成。引导码由一个4.5ms的高电平脉冲及4.5ms的低电平脉冲组成;八位的用户编码被连续发送两次;八位的键数据码也被连续发送两次,第一次发送的是键数据码的原码,第二次发送的是键数据码的反码。
图5-2 红外信息发送帧格式
如上图所示,CX9012一帧完整的发射码由引导码,用户码和键数据码三部分组成。引导码由一个4.5ms的高电平脉冲及4.5ms的低电平脉冲组成;八位的用户编码被连续发送两次;八位的键数据码也被连续发送两次,第一次发送的是键数据码的原码,第二次发送的是键数据码的反码。
图5-3 引导码及位“0”和位“1”的波形
CX9012的发射码采用脉冲位置调制方式(PPM)来进行编码。这样的编码方式效率高,抗干扰性能好。
红外信息在发射的过程中,首先会对引导码进行检测,如果引导码超时,则该信息发送失败,要求重新发送;如果引导码正确,则会重复发送两次用户编码,第二次发送的用户编码作为校验码,检测用户编码是否发送正确;如果用户编码正确,则会连续发送两次八位的键值代码,第一次发送的键值代码的原码,第二次发送的是键值代码的反码,反码作为校验码,检验键值是否发送正确,如果发送错误,则发送失败,重新进行发送。该协议采用多次校验的方式,对发送的数据代码多次进行校验,保证发送的信息的正确性。
6 调试菜单设计
当需要对负压传感器进行调试时,使用红外接口遥控器对传感器进行调试设定,数码管显示方式进入调试菜单界面,调试菜单具体包括输出信号制式设定,压力的零偏满偏标定,量程设置等。
6.1 调试菜单红外接收部分
6.1.1 红外接收器HS0038B
红外遥控器每按下一个键,即产生具有不同数字编码的脉冲,这种代码指令调制在38KHZ的载波上,激励红外光二极管产生具有脉冲串的红外波,通过空间的传送到受控机内的遥控接收器。
该设计中采用了HS0038B红外接收器,它是能够接收红外信号的小型化接收器件,它的环氧包装可以作为红外过滤器,因此不需要再加红外过滤装置。HS0038B最主要的优点是,即使在干扰很强的环境中,它的输出还是很稳定的。HS0038B还具有以下的特点:
• 光检测器及前置放大器封装在一起
• 内部过滤器采用PCM(脉冲编码调制)频率 • 兼容TTL和CMOS • 输出功耗低
• 改进的屏蔽电场干扰
• 合适的无线电脉冲长度>=10周期 • 耗电量低
• 能很好的屏蔽环境光
• 连续的数据传输(800bit/S)
单片机通过外中断INT1引脚对HS0038B的输出信号进行处理,因此红外接收部分应将HS0038B的输出引脚和单片机的外部中断引脚INT1连接在一起。 6.1.2 红外接口接收红外信息
Y 开始 开定时器1,计数清零 INT1==0? N 关定时器1 N 结束 红外脉冲接收完毕 重发 引导码有效 Y 定时器清零,红外时间置N 脉冲个数<33? Y INT1==0? Y N 启动定时器,红外时间置红外时间加Y INT1==1? 红外时间超时? N N 关定时器1 红外时间加1 Y N 红外时间超时? INT1高电平时间<560? 红外时间置零 N 超时返回 Y 红外时间置零 Y 接收到0 接收到1 图6-2 外部中断1服务程序框图
超时返回 定时器清零,红外脉冲数加 该设计中的红外遥控器有4个按键,分别为开始(KEY-ON),上调(KEY-UP),下调(KEY-DOWN),退出(KEY-CONV),它们的键值代码分别为 KEY_ON 0x10109867 KEY_CONV 0x1010906f KEY_UP 0x101000ff KEY_DOWN 0x1010609f
KEY-ON键表示启动遥控设置,该键按下后,便进入调试菜单:KEY_CONV表示放弃遥控设置并结束本轮遥控操作;KEY-UP和KEY-DOWN分别表示加上或者减去一个数,用于输入数字的调整。
图6-1 数据传送波形
红外信息接收的过程是,开始接收时,先对单片机的定时器1计数清零,开定时器1,设置红外接收完毕标志位为0,然后对引导码进行检验,如果接收引导码的时间超过了规定的最大接收时间,则该次发送出错,重新进行发送。如果引导码有效,则允许继续发送。对定时器1清零,判断红外脉冲个数是否超过32,如果超过32,则设置红外接收完毕标志位为1,红外接收完毕;如果红外脉冲个数小于32,则继续接收信息。在接收的过程中,要不断的对接收时间进行查询,如果超过了接收红外信息规定的最大时间,超时返回。根据高电平脉冲的长度判断是接收到0还是1。接收完1位信息后定时器1计数初值清零,红外脉冲个数加1,重复以上的操作。外部中断1服务程序框图如图6-2所示。
32位红外信息全部接收完毕,红外接收完毕标志位置1,数码管根据红外接收的代码做显示,如果红外遥控的KEY-ON键按下,数码管显示1000;如果红外遥控的KEY-CONV键按下,数码管显示2000;如果KEY-UP键按下,数码管显示3000;KEY-DOWN键按下,数码管显示4000.
6.2 四位数码管显示
6.2.1 LED显示器
LED是能将电信号转换为光信号的电致发光器件。由条形发光二极管组成“8”自行的LED显示器,也称数码管。8段数码管是在7段发光二极管的基础上再加一个原点型发光二极管,用于显示小数点。在使用中,为了给发光二极管加驱动电压,它们有一个公共引脚,公共引脚有共阴极和共阳极两种接法,该负
压传感器的设计中采用用阳极接法,使用时阳极公共引脚节+5V电压,这样阴极引脚上加低电平的发光二极管即可导通点亮,而加高电平的则不点亮。 6.2.2 LED显示的基本原理
用单片机驱动数码管有很多种方法,按显示方式分,有静态显示和动态显示,静态显示是显示驱动电路具有输出锁存功能,单片机将要显示的数据送出后不再控制LED,只到下次显示时再传送一次新的显示数据。静态显示的数据稳定,占用的CPU时间少。动态显示要CPU时刻对显示器器件进行数据刷新,显示数据有闪烁感,占用CPU时间多。
这两种显示方式各有利弊:静态显示虽然数据显示稳定,占用的CPU时间少,但每个显示单元都需要单独的显示驱动电路,使用的电路硬件较多;动态显示虽然有闪烁感,占用CPU时间多,但使用的硬件电路少,能节省线路板空间。 动态显示电路的接口电路是把所有数码管的8个笔画段A-G,DP的同名端连在一起,而每个数码管的公共端COM是各自独立的受I/O线控制。CPU向字段输出口送出字形码时,所有的显示器接收到相同的字形码,但究竟是哪个数码管亮,则取决于COM端,而这一端是由I/O控制的,可以自行决定显示哪一位。 在轮流点亮扫描过程中,每位数码管的点亮时间是极为短暂的,约1ms左右,但由于人的视觉暂留现象以及发光二极管的余晖效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。
由于动态显示方案具有一定的实用性,也是目前单片机数码管显示中较为常用的一种显示方法,所以在本次设计中采用动态显示方案。 6.2.3 四位数码管显示过程
开始 十位数码管选通 千位数码管选通
Led-code=led[m1]
N m5==2? m5==4? N Y Y
Led-code=led[m3] 点亮十位小数点 点亮千位小数点
显示千位数 显示十位数 延迟2ms 延迟2ms
百位数码管选通 各位数码管选通 N m5==3?
Led-code=led[m4] Y Led-code=led[m2]
点亮百位小数点 显示百位数 显示个位数 延迟2ms 延迟2ms 6-3 四位数码管逐位显示流程图 负压传感器采用四位数码管显示方式显示电压和负压力值。本设计中数码管有两种显示方式,分别位4位数码管逐位显示和4位数码管十进制数显示。 4位数码管逐位显示的过程是,先选中千位数数码管的位选,查询小数点位,如果小数点位在千位,点亮千位小数点,再显示千位数;如果小数点不在千位,则直接显示千位数。数码管的点亮时间约为1-2ms,延时子程序延时2ms;再选中百位数码管的位选,重复以上的操作,只到个位的位选信号选中,直接显示个位数。该显示过程的流程图如图6-3所示。
4位数码管十进制数显示的过程是,根据计算四位数个位数的算法计算出
要显示的四位数的个位数,选中个位数数码管的位选,显示个位数,延时2ms;计算出四位数的十位数,选中十位数数码管的位选,如果小数点位在十位,点亮十位小数点,显示十位数,反之则直接显示十位数;重复以上的操作分别计算出百位数和千位数并分别显示。
6.3调试菜单的其他功能
调试菜单具体包括输出信号制式设定,压力的零偏满偏标定,量程设置等。调试菜单可以分为菜单0-菜单8共9个子菜单。
菜单0是对输出信号制式进行设置,当KEY-CONV键未按下的时候,开始进行调试,如果按键KEY-ON按下,红外键值和输出信号制式清零并返回;如果KEY-UP键按下,输出信号制式自加1,若输出信号制式等于9,则置为0;如果KEY-DOWN键按下,输出信号制式自减1,若输出信号制式等于0,则置为9;最后将输出信号制式写入存储器5045的OX1fa地址中。
菜单1是写入传感器的机号,如果机号已经写入,则读取机号并显示;如果从未写入机号,则该菜单要分别写入机号的千位,百位,十位和个位,并分别存放在存储器5045的OX1fe,OX1fd,OX1fc,OX1fb地址中。
菜单2和菜单3是要读取并显示基准电压和电源电压。 菜单4是对传感器类型进行设置。
菜单5是对该传感器的量程进行设置,当KEY-CONV键未按下的时候,开始进行调试,如果按键KEY-ON按下,红外键值清零,量程置1并返回;如果KEY-UP键按下,量程自加1,若量程等于6,则置为1;如果KEY-DOWN键按下,量程自减1,若量程等于0,则置为6;最后将量程写入存储器5045的OX1f9地址中。
菜单6是对小数点进行调试,当KEY-CONV键未按下的时候,开始进行调试,如果按键KEY-ON按下,红外键值清零,小数点置1并返回;如果KEY-UP键按下,小数点自加1,若量程等于4,则置为1;如果KEY-DOWN键按下,量程自减1,若量程等于1,则置为4;最后将量程写入存储器5045的OX1f8地址中。
菜单7是对零偏电压进行标定,根据传感器标定公式计算出零偏标定系数,将传感器零偏电压的高8位和低8位分别存放在存储器5045的OX1f6和OX1f7地址中。
菜单8是对满偏电压进行标定,把传感器满偏压力的千位,百位,十位,个位分别写入存储器5045的OX1f5,OX1f4,OX1f3,OX1f2地址中。将传感器满偏电压的高8位和低8位分别存放在存储器5045的OX1f1和OX1f0地址中。
7 压力采集的实现
7.1 双积分A/D转换电路简介
该设计中的A/D转换电路是一种间接A/D转换电路,它首先将输入的模拟电压信号转换成与之成比例的频率信号,然后在一个固定的时间间隔内对得到的频率信号计数,所得到的计数结果就是正比于输入模拟电压的数字量,因此也将这种A/D转换器称为压频A/D转换器。从理论上讲这种AD的分辨率几乎可以无限增加,只要采样的时间能够满足输出频率分辨率要求的累积脉冲个数的宽度。其优点是分辩率高、功耗低、价格低,但是需要外部计数电路共同完成A/D转换。 负压传感器MPM185将采集到的压力信号转换成电压信号,经过信号调理电路,把该电压信号进行转换和放大,使其更适合进一步处理和传输。将处理后的电压信号送到A/D转换电路,该设计中的A/D转换电路是由一个积分型运放配合4051多路开关共同实现的,通过单片机定时器对积分电路充放电时间的计量最终得到信号的数字值供单片机使用。
7.2 压力采集的软件设计
52系列的单片机具有3个16位的定时器(T0,T1和T2),用片内16位的定时器外接运放,电压比较器实现双积分A/D转换。电压比较器可以将模拟信号转换为二进制代码,只有低电平和高电平两种状态。52单片机的P10、P11、P12作为输出,控制4051多路开关的输入选择,INT0作为中断输入口,捕捉LM324电压比较器的输出电平跳变。当4051的三个地址输入端C,B,A都为高电平时,多路开关的地选通,积分器输入接地,使得输入电压通过积分电阻向电容充电,设充电时间为T,根据电容积分公式得出充电时间,充电时间大约为30ms;当C=0,B=0,A=0时,多路开关X0选通,输入电压为电源电压,通过A/D转换电路计算电源电压;当C=0,B=0,A=1时,多路开关X1选通,输入电压为基准电压,通过A/D转换电路计算基准电压;当C=0,B=1,A=0时,多路开关X2选通,输入信号为经过信号调理电路处理后的电压,通过A/D转换电路和电压比较器输出脉冲序列,该脉冲序列通过单片机处理后得到电压信号的数字值。
进行充电时,关INT0,置C=1,B=1,A=1,开定时器1(设置定时器1工作在定时方式),对电容进行充电;充电完毕后,打开INT0,置C=0,B=1,A=0,定时器1输出低电平时,对输入电压进行积分,定时器2进行计时,完成一次双积分A/D转换。程序流程框图如图7-1所示。
开始 4051地选通,对电容充电 T1=0,定时器2清零 多路开关0选通 N N 开关1选通 Y Y
定时器2清零 计算负压力值 测电源电压 测基准电压 测量负压力 N T1==0? Y 启动定时器2 Y INT0==1N 关定时器2 结束 图7-1 负压检测框图
设电容充电至饱和的时间为T,定时器2计时的时间为t,经两级放大后的电 压为pressure-voltage,负压力值为pressure,sensor_K为传感器的线性系数。
开始
t=(TH2*256+TL2)*2
pressure-voltage=3700.0*5940.0
Pressure-voltage=/t Pressure-voltage+=1000
pressure=(2500.0-pressure-voltage)/122.0
Pressure/=sensor_K
图7-2 负压力值的计算
8 数据处理
8.1 压力转换为电压
8.1.1 信号调理电路
MPM185压力传感器将采集到的压力信号转换为电压信号,由于传感器输出
的信号往往存在温漂、信号比较小及非线性等问题,因此它的信号通常不能被控制元件直接接收,这样来,信号调理电路就成为数据采集系统中不可缺少的一部分,只有经过信号调理电路处理后的电压信号才能送入下一级进行处理。
信号调理用一个恒压源或者恒流源激励电桥,产生一个电信号。这种电信号通常很微弱并且受到噪声、失调和增益误差的影响。在对电桥的输出信号数字化处理之前,必须先将其进行放大和失调处理以便与数模转换器(ADC)的输入范围相匹配,然后再滤除噪声。要精确地从高共模电压中检测出微弱的差分输出电压,放大器要有高的共模抑制比。
本设计中的信号调理电路主要是对传感器采集到的信号进行放大,使得能很好的应用到下级电路中。
8.1.2 信号调理电路的输入输出关系推倒Ru11A1R1u0A3AR2RfBRR1u12A2RfUO2 图8-1 三级运放构成的放大器
如上图所示的放大电路中,运放放大器A1的同向输入端ui1接传感器的负输出端,运放放大器A2的同向输入端ui2接传感器的正输出端,电阻R1=30K,R2=1K,Rf=30K,R=15K.
根据虚短虚断原则,uA=ui1,uB=ui2,因而有
R2(),也就是 2R1R2u01uo22R11=()(ui1ui2),所以输出电压 u01uo2R2RfRf2R11=()=()(), uoRu01uo2RR2ui1ui2ui1ui2=
设uidui1ui2,则有
uo=Rf2R1(1)uid,uo就是经信号调理电路处理后的电压。 RR28.2 电压转换为负压力
图8-2 双积分型A/D转换电路
双积分型A/D的转换操作分两步进行:
第一步:令多路开关的地址输入端C=1,B=1,A=1,多路开关的地选通,积分
1Tdt,器对电容充电,该积分的输入电压为1.0V。根据公式voRC0vivo5V,vi1.0V,算得正向积分时间T=29.7ms。
第二步:当电容电压充电至5V,令多路开关的地址输入端C=1,B=1,A=0,多路开关的通道2选通,开始对电压进行反向积分。设电压为V,则有T11T2vdt0.5,可以推倒出T2和电压的关系。 vi0RCRCR8.3 输出频率实现
RS-232-C接口(又称 EIA RS-232-C)在各种现代化自动控制装置上应用十分广泛,是目前最常用的一种串行通讯接口。它是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的全名是“据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”,该标准规定采用一个25个脚的DB25连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定,一般只使用3~9根引线。
通过RS-232串行通信标准总线接口将频率信号输出。
9 软件开发及调试环境
9.1操作系统
操作系统是管理计算机软硬件资源的一个平台,没有它,任何计算机都无 法正常运行。在个人电脑发展史上,出现过许多不同的操作系统,其中最为常 用的有五种:DOS, windows, Linux, Unix/Xenix, OS/II等。
Windows操作系统,勿用置疑是当今最为流行的操作系统,它主要具有以 下优点:
(1)直观、高效的面向对象的图形用户界面,易学易用。从某种意义上说, Windows用户界面和开发环境都是面向对象的。用户采用“选择对象, 操作对象”这种方式进行工作。比如要打开一个文档,我们首先用鼠标或键盘选择该文档,然后从右键菜单中选择“打开”操作,打开该文档口。这种操作方式模拟了现实世界的行为,易于理解、学习和使用。
(2)用户界面统一、友好、漂亮。Windows应用程序大多符合IBM公司提 出的CUA (Common User Access)标准,所有的程序拥有相同的或相似的基本外观,包括窗口、菜单、工具条等。用户只要掌握其中一个,就不难学会其他软件,从而降低了用户培训学习的费用。
(3)丰富的与设备无关的图形操作。Windows的图形设备接口(GDI)提供了丰富的图形操作函数,可以绘制出诸如线、圆、框等的几何图形,并支持各种输出设备。设备无关意味着在针式打印机上和高分辨率的显示器上都能显示出相同效果的图形。多任务。Windows是一个多任务的操作环境,它允许用户同时运行多个应用程序,或在一个程序中同时做几件事情。每个程序在屏幕上占据一块矩形区域,这个区域称为窗口,窗口是可以重叠的。用户可以移动这些窗口,或在不同的应用程序之间进行切换,并可以在程序之间进行手工和自动的数据交换和通信。由于Windows操作系统具有以上突出的优点,Windows平台上的软件开发和程序设计已成主流。
9.2程序开发语言
本课题选择C语言进行开发编程。C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具有汇编语言的功能。它有较高的可移植性,提供了种类丰富的运算符和数据类型,极大的方便了程序设计,同时它有功能丰富的库函数,运算速度快,编译效率高,且可以直接实现对系统硬件的控制。目前使
用C语言进行程序设计已成为软件开发的一个主流,用C语言开发系统可以大大缩短开发周期,明显增强程序的可读性,便于改进和扩充。使用C语言进行单片机系统开发,编程者可以专注于应用软件部分的设计,不必将大量 的精力花在内存分配等底层工作上,从而大大加快了软件开发的速度。
9.3模块化编程
模块化程序设计是一种经典的程序设计技术,它的出发点是把一个复杂的系统软件,分解为若干个功能模块,每个模块执行单一的功能,并且具有单入口和单出口结构。模块化程序设计的传统方法是建立在把系统功能分解为程序过程和宏指令的基础上。这种分解会在程序中产生许多容易理解的过程。
模块化程序设计主要有两种方法:一种是自底向上的模块化设计,一种是自顶向下的模块化设计。
第一种方法,首先对最低层模块进行编码、测试和调试。这些模块正常工作后,就可以用它们来开发较高层模块。即在编写主程序前,先开发各个子程序,然后,用一个测试用的主程序来测试每一个子程序。这种方法是汇编语言设计的常用方法。
第二种方法,首先对最高层进行编码、测试和调试。为了测试这些最高层模块,可以用“结点”来代替还未编码的较低层模块,这些结点的输入和输出满足程序的说明部分要求,但功能少的多。该方法一般适合用高级语言来设计程序。 上述两种方法各有优缺点,在自底向上开发中,高层模块设计中的根本错误也许要很晚才能发现。在自顶向下开发中,程序的大小和性能往往要开发关键性的低层模块时才会表现出来。实际工作中,最好使用两种方法结合起来。先开发高层模块和关键性低层模块,并用“结点”来代替以后开发的不太重要的模块。
10 总 结
在此学期的毕业设计中我学习了MPM185压力传感器以及其他所用的芯片,对软件设计有了更深刻的认识。在此期间学习到了很多东西,也认识到自己不足之处。经过这段时间的学习和工作,了解了一个实际中的系统,不管是在理论方面还是在实践方面自己都有了不小的进步。通过这次设计以前学到的理论知识得到很好的应用,使我在更好的把理论知识与实践结合起来。
在本次设计过程中通过上网、图书馆查阅了大量的相关资料,学到更多的知识、扩大了知识面、提高了知识水平,更重要的是学会了如何围绕一个问题进行查找资料。对电路原理的分析和设计,巩固了以前学习的专业知识,对模拟电路、数字电路有了更深的理解。通过C语言的编程,使我对软件的编程有了更深的理解。
总之,通过这次毕业设计自己受益匪浅。
致谢
衷心地感谢导师王青岳老师在本人做毕业设计时的关心、指导和教诲!王老师不论是在工作上还是学习上,都兢兢业业、一丝不苟;在教书育人方面更是认真负责,能根据不同情况针对不同个人分配和指导不同的学习内容和毕业设计任务。即使在平时繁忙的工作和科研中也还定时不定时、定期地在我的毕业设计中给予具体的指导和帮助。王老师对真理的追求、对工作和生活的态度永远值得我们学习!
在做毕业设计期间,我始终是在王老师全面、具体的指导下进行的,由于我软件基础比较差,王老师更是耐心细致的进行了辅导。从小到一个模块的功能介绍,大至在程序调试过程中,无一不细致入微。在做毕业设计过程中,本人不仅学到了和设计有关方面的内容,而且还从王老师处学到了许多课本上学不到的知识和技能!
真心的感谢王老师所提供的良好环境,使我能够顺利完成毕业论文工作。也要感谢我的学友和朋友们对我的关心、帮助和鼓励。
最后感谢在百忙之中对作者的论文进行评审并提出宝贵意见的老师们。
参考资料和文献
[1].传感器应用及其电路精选,北京:电子工业出版社,1992.2 [2]方佩敏.新编传感器原理-应用-电路详解,北京:电子工业出版社,1994.1
[3]丁镇生.传感器及其遥控遥测技术应用,北京:电子工业出版社,2003.1 [4]孙以材.压力传感器的设计,制造与应用,北京:冶金工业出版社,2000,4
[5]徐惠民,安德宁.单片微型计算机原理,接口与应用,北京:北京邮电学院出版社,1990,2
[6]李秉操,张登举,傅寿英等.单片机接口技术及其在工业控制中的应用,西安:陕西电子编辑部,1991
[7]唐俊杰,高秦生,俞光昀.微型计算机原理及应用,北京:高等教育出版社,1993
[8]胡汉才.单片机原理及其接口技术,北京:清华大学出版社,1996,1 [9]谭浩强.C语言程序设计(第二版),北京:清华大学出版社,2000 [10]肖全兴.矿井通风安全管理预警系统的研究【J】矿业安全与环保,1993,(03)
[11]李钢,陈开岩,聂百胜.矿井通风系统CAD技术研究【J】辽宁工程技术大学学报,2005,(06)
[12]王海桥.示综气体测量理论及在矿井通风中的应用【J】工业安全与防尘,2000,(02)
[13]L.A.Piegl,W.Tiller,L.A.Piegl,W.Tiller. Surface approximation to scanned dataSurface approximation to scanned data[J] The Visual ComputerKey words: Data app, 2000,16, (7) :386~395.
[14]Sherman M H. Tracer-gas techniques for measuring ventilation in a single zone .Building and Environment. 1990,254, 25(4) :365
[15]Rao.Guthikonda V .Microprocessors and micro computer system. Van nostrand Reinhold Company,1982
附录
#include /******************************************************************* X5045相关宏定义 ******************************************************************/ #define WREN 0x06 //写使能 #define WRDI 0x04 //写禁止 #define WRSR 0x01 //写状态寄存器 #define RSDR 0x05 //读状态寄存器 #define X5045_WRITE_1 0x02 //写存储器 #define X5045_WRITE_2 0x0a #define X5045_READ_1 0x03 //读存储器 #define X5045_READ_2 0x0b #define KEY_ON 0x10109867 #define KEY_CONV 0x1010906f #define KEY_UP 0x101000ff #define KEY_DOWN 0x1010609f #define GAIN 5940.0 //标定增益 /******************************************************************** 接口定义 ********************************************************************/ sbit LED_FIRST =P2^0; sbit LED_SECOND=P2^1; sbit LED_THIRD =P2^2; sbit LED_FOURTH=P2^3; sbit X5045_CS=P2^4; sbit X5045_SO=P2^5; sbit X5045_SI=P2^6; sbit X5045_SCK=P2^7; sbit ic4051_A=P1^2; sbit ic4051_B=P1^1; sbit ic4051_C=P1^0; /******************************************************************** 全局变量 ********************************************************************/ unsigned char code led[20]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xa7,0xa1,0x86,0x8e,0xaf,0x91,0xf7,0xff}; //0-9,a-f,r,y,_,灭 unsigned char integral_saturation=1; //积分饱和指示 unsigned char infrared[30]; unsigned char infrared_count=0; //红外脉冲计个数 unsigned long infrared_code=0; //红外脉冲代码 unsigned long infrared_code_temp=0; unsigned char infrared_available; //红外接收完毕标记 unsigned int pressure_vol_disp; //压力对应的电压值 unsigned char semaphore_flag=0; //输出信号制 unsigned char dimension ; //量程 unsigned char dot_bit; //小数点位 unsigned char press_kilobit; unsigned char press_hunbit; unsigned char press_tensbit; unsigned char press_indibit; unsigned int pressure_disp; //负压力值显示 float sensor_voltage_0; //传感器零偏输出电压 float sensor_voltage_full; //传感器满偏输出电压 float press_offset; //传感器满偏压力值 float sensor_K=1 ; //传感器线性系数 unsigned int frequency_upper_limit; //频率范围上限 unsigned int frequency_lower_limit; //频率范围下限 unsigned int press_upper_limit; //压力范围上限值 /********************************************************* 主程序 **********************************************************/ main() { unsigned char error=0,i; dot_bit=4; x5045_write_byte(0x1ff,0); interrup_init(); //中断初始化 error=inspect_self(); //系统电源自检 while(error!=0) //有故障显示:\"Err+类型\" { for(i=0;i<25;i++) { led_disp_location(0x0e,16,16,error,0); } led_disp_location(19,19,19,19,0); delay_ms(150); } value_init(); while(1) { if(infrared_code_temp==KEY_ON) { debug_menu(); value_init(); } else { pressure_disp=pressure_measure(2,0); //pressure_vol_disp=pressure_measure(2,1); //led_disp_decimal(pressure_vol_disp,dot_bit); delay_ms(2); } } } /******************************************************************** 函数名: void infrared_disp(unsigned char m) * 功能描述:红外接收信号查询、显示 ********************************************************************/ void infrared_disp(unsigned char m) { if(m==1) //红外接收有效位查询 { infrared_available=0; } else //根据上一次红外接收的代码做显示 { switch(infrared_code_temp) { case KEY_ON:led_disp_decimal(1000,dot_bit); break; case KEY_CONV:led_disp_decimal(2000,dot_bit); break; case KEY_UP:led_disp_decimal(3000,dot_bit); break; case KEY_DOWN:led_disp_decimal(4000,dot_bit); break; } } } /******************************************************************** 函数名: void int1(void) interrupt 2 using 1 * 功能描述:红外接口接收红外信息程序 ********************************************************************/ void int1(void) interrupt 2 using 1 { int infrared_time; unsigned int time_receive; TH0=0; TL0=0; //定时器1计数值清0 TR0=1; //开定时器1 infrared_available=0; //接受有效标记位初始化 infrared_count=0; //接收红外脉冲个数初始化 while(INT1==0); //INT1仍为低电平时等待 TR0=0; //INTT1变高电平时关闭定时器1 time_receive=TH0*256+TL0; if(time_receive<2000) { return; //引导码无效 } TH0=0; TL0=0; time_receive=0; infrared_code=0; //红外键值初始化 infrared_time=0; while(infrared_count<33) { while(INT1==0) //低电平时等待 { infrared_time++; if(infrared_time>10000) { infrared_time=0; return;} //超时返回 } TR0=1; //INT1为高电平启动定时器1 infrared_time=0; while(INT1==1) //仍为高电平时等待 { infrared_time++; if(infrared_time>10000) { infrared_time=0; return;} //超时返回 } TR0=0; //低电平时关定时器1 time_receive=TH0*256+TL0; //计算高电平的时间 if(time_receive<560) //接收到0 { infrared_code<<=1;} else //接收到1 { infrared_code=(infrared_code<<1)|0x01; } //10109867h on //1010906fh con //101000ffh up //1010609fh down TH0=0; TL0=0; //接收完一位信息后计数初值清0 infrared_count++; } infrared_available=1; //接收完32位红外信息 infrared_code_temp=infrared_code; } /******************************************************************** 函数名:void led_disp_location(unsigned char m1,unsigned char m2,unsigned char m3,unsigned char m4,unsigned char m5) * 功能描述:4位数码管逐位显示 ********************************************************************/ void led_disp_location(unsigned char m1,unsigned char m2,unsigned char m3,unsigned char m4,unsigned char m5) { unsigned char led_code; LED_FIRST=1; LED_SECOND=1; LED_THIRD=1; LED_FOURTH=0; if(m5==4) { led_code=(led[m1])&0x7f; } //点亮千位小数点 else { led_code=led[m1];} P0=led_code; //最高位代码 delay_ms(2); LED_FIRST=1; LED_SECOND=1; LED_THIRD=0; LED_FOURTH=1; if(m5==3) { led_code=(led[m2]&0x7f); }//点亮百位小数点 else {led_code=led[m2]; } P0=led_code; delay_ms(2); LED_FIRST=1; LED_SECOND=0; LED_THIRD=1; LED_FOURTH=1; if(m5==2) {led_code=(led[m3]&0x7f);} //点亮十位小数点 else { led_code=led[m3];} P0=led_code; delay_ms(2); LED_FIRST=0; LED_SECOND=1; LED_THIRD=1; LED_FOURTH=1; led_code=led[m4]; P0=led_code; delay_ms(2); } /******************************************************************** 函数名:unsigned int pressure_measure(unsigned char channel_4051,unsigned char disp_type) * 功能描述:压力测量子程序 ********************************************************************/ unsigned int pressure_measure(unsigned char channel_4051,unsigned char disp_type) { unsigned long idata t2_time; float idata temp; unsigned int idata pressure_voltage,pressure; integral_saturation=1; //积分饱和 ic4051_A=1; ic4051_B=1; ic4051_C=1; //4051地选通 TL1=0; TH1=0xc5; //计数初值50432<50686(29.7ms) //确保积分电容充电至5V,去积分饱和 T1=0; TR1=1; //启动定时器1 while(integral_saturation==1)//积分饱和时等待 { if(disp_type==0) {led_disp_decimal(pressure_disp,dot_bit);} else {led_disp_decimal(pressure_vol_disp,dot_bit);} } t2_time=0; TR2=0; if(channel_4051==0) {ic4051_A=0; ic4051_C=0; ic4051_B=0; //通道0选择,测量电源电压 } else { if(channel_4051==1) { ic4051_A=1; ic4051_C=0; ic4051_B=0; //通道1选择,测量基准电压 } else { ic4051_A=0; ic4051_C=0; ic4051_B=1; } } while(T1); //T1输出高电平时等待 TR2=1; //T1输出低电平时启动定时器2 while(INT0) //INT0高电平时等待 { } TR2=0; if(disp_type==0) { led_disp_decimal(pressure_disp,dot_bit);} else { led_disp_decimal(pressure_vol_disp,dot_bit);} t2_time=(TH2*256+TL2)*2; temp=3700.0*5940.0; temp=temp/t2_time; pressure_voltage=temp+1000; /* temp=pressure_voltage/1000.0; temp=((2.5-temp)/122.0)*1000.0*1000.0; temp=(temp-sensor_voltage_0)/sensor_K;*/ temp=((2500.0-pressure_voltage)/122.0); temp=(temp-sensor_voltage_0)/sensor_K; pressure=(int)temp; TF2=0; TL2=0; TH2=0; if(disp_type==0) { return (pressure);} else { return (pressure_voltage);} } 因篇幅问题不能全部显示,请点此查看更多更全内容