压力传感器仿真程序

合集下载

基于ATMEGA128单片机压力的测量--proteus仿真

基于ATMEGA128单片机压力的测量--proteus仿真

基于ATMEGA128单片机压力的测量--proteus仿真摘要:本文以mpx4250做为压力传感器摘要:摘要:本文以mpx4250做为压力传感器,通过测量输出端电压来计算实际的压力,使用atmega128单片机作为系统的cpu,来读取电压,并进行转换。

由于做实物不仅要耗费金钱,还要耗费大量的时间用来做板子,焊接元器件。

摘要:本文以MPX4250做为压力传感器,通过测量输出端电压来计算实际的压力,使用ATMEGA128单片机作为系统的CPU,来读取电压,并进行转换。

由于做实物不仅要耗费金钱,还要耗费大量的时间用来做板子,焊接元器件。

本系统采用了Proteus仿真,只需要画画电路图就可以做出类似实物的效果。

通过测试,只要选取合适的参数,基本上能正确的读出压力值,至于参数选取不合适,误差不会太大,对于广大初学单片机,或是对压力传感器比较模糊的初学者来说具有很大的学习价值。

仿真图:程序源代码:#include#include#define F_CUP 7372800UL#define uchar unsigned char#define uint unsigned intconstuintsegcode[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};uint dis_seg[]={0xF3,0,0,0};//数码管显示函数void display(void){uint i=0;for(i=0;i {PORTE=~_BV(i);PORTB=dis_seg[i];_delay_us(50);}}int main(void){int AD_Result,Pressure_Value;DDRB=0xff;PORTB=0xff;DDRE=0xff;PORTE=0xff;DDRF=0x00;PORTF=0xff;//AD相关设置ADCSRA=0xE6;_delay_ms(2);ADMUX=0x07;//通道选择while(1){AD_Result=ADCL+(ADCHPressure_Value=((AD_Result*5.0/1023.0-0.11)/5.0+0.04)/0.004;dis_seg[1]=segcode[Pressure_Value/100];dis_seg[2]=segcode[Pressure_Value0/10];dis_seg[3]=segcode[Pressure_Value];if(dis_seg[1]==0x3F){dis_seg[1]=0x00;if(dis_seg[2]==0x3F)dis_seg[2]=0x00;}display;}return 0; }说明:软件用的是GCC,压力芯片资料可以在网上找到。

压阻式压力传感器灵敏度的仿真方法

压阻式压力传感器灵敏度的仿真方法
Shanxi Provincial Key Laboratory of Dynamic Testing Technology,Taiyuan 030051,China)
Abstract:Sensitivity is one of the important performance indicators of the sensor.In order to accurately predict the sensitivity of the piezoresistive pressure sensor and overcome the insufficiency of the traditional center point calculation method,a simulation method based on the path integration and finite elementanalysis of the stress on the sensitive film was adopted.The output voltage under different pressure was obtained by calculating average change rate of the resistance using the line integration algorithm to the path of the resistor.As for the four⁃sided fixed square membrane model and the bottom⁃clamped C-type model,simulation was conducted and the results were compared with the actual value.The experiments show that the result of bottom⁃clamped C-type model is more accurate than that of four⁃sided fixed square membrane model,and the actual sensitivity of the sensor sample was 0.102 5 mV / kPa,which possess a relative error of less than 2%. Keywords:sensitivity;piezoresistive pressure sensor;finite element simulation analysis;sensitive film;line integral

传感器信号仿真系统用户手册

传感器信号仿真系统用户手册

传感器信号仿真系统用户手册湖北汽车工业学院汽车工程系2010年05月3日目 录一系统概述 (1)二系统硬件使用说明 (2)2.1系统基本结构概述 (2)2.2系统电源状态指示 (2)2.3系统工作状态指示 (3)2.4RS-232串行通讯接口 (3)2.5MC9S12XDT256最小应用系统 (4)2.6系统外部接口1 (4)2.7系统外部接口2 (4)2.8系统外部接口3 (5)2.9系统外部接口4 (5)2.10系统外部接口5 (6)2.11系统外部接口6 (6)三ABHS软件使用说明 (8)3.1软件安装 (8)3.2用户身份验证及注册 (9)3.3参数设置 (10)3.4在线编程功能 (12)3.5写标定值功能 (13)3.6示波器功能 (23)四HEV调试功能 (25)4.1通讯参数设置 (25)4.2启动检测功能 (26)4.3开关量信号控制 (27)4.4模拟量信号控制 (27)4.5脉冲量信号控制 (28)4.6输入信号检测 (28)4.7CAN网络调试 (29)五发动机硬件在环仿真功能 (30)5.1通讯参数设置 (30)5.2启动检测功能 (31)5.3开关量信号检测 (32)5.4模拟量信号检测 (32)5.5脉冲量信号检测 (21)5.6输入信号检测 (21)5.7发动机类型选择 (214)六CAN+通用调试 (36)6.1通讯参数设置 (36)6.2启动检测功能 (37)6.3开关量信号控制 (38)6.4模拟量信号控制 (38)6.5脉冲量信号控制 (39)6.6开关量输入信号检测 (39)6.7模拟量输入信号检测 (40)6.8脉冲量输入信号检测 (40)6.9CAN总线调试 (41)七系统MAP标定 (42)八系统外部接口定义 (58)8.1HEV调试模块外部接口定义 (58)8.2发动机硬件在环仿真模块外部接口定义 (60)8.3CAN+通用模块外部接口定义 (62)一、系统概述传感器信号仿真系统用于模拟各类型车辆常用传感器信号,一般配合其他目标控制系统使用,是汽车电子技术应用中理想的离线调试工具,尤其适合于复杂控制系统的初步开发、设计应用及控制策略的分析和验证。

压力传感器的实验教案:探究压力传感器测量压强的原理和方法

压力传感器的实验教案:探究压力传感器测量压强的原理和方法

前言随着科技的不断发展,许多新型传感器逐渐被应用到生产和生活中。

其中,压力传感器是一种非常常见的传感器。

本文将为大家介绍关于压力传感器的实验教案,希望能够帮助到大家。

第一部分:实验简介本次实验的目的是探究压力传感器测量压强的原理和方法,同时学习该传感器的基本使用方法。

在实验中,我们将使用Arduino开发平台来对压力传感器进行测试,并基于测试结果进行数据分析。

第二部分:实验步骤1.实验前准备准备材料:Arduino开发板、数字压力传感器、杜邦线、电阻器、USB数据线、计算机。

2.硬件接线将多个杜邦线连接到数字压力传感器的引脚上。

连接方法如下:-GND连接到GND引脚;-VCC连接到VCC引脚;-Output连接到Arduino开发板的A0引脚。

在VCC和GND两个引脚之间,需要使用一个10KΩ 电阻器进行串联。

3. 软件编程打开Arduino开发平台,然后编写程序。

代码如下:void setup() {Serial.begin(9600);}void loop() {float voltage = analogRead(A0) * (5.0 / 1023.0);float pressure = (voltage - 0.5) * 100 / 4.5;Serial.print("Pressure: ");Serial.print(pressure);Serial.print(" kPa");delay(500);}将代码复制到Arduino开发平台中,然后上传到开发板中。

4. 实验过程将数字压力传感器置于实验台上,然后使用箍子将其夹在两个木板之间。

手轻按数字压力传感器的中央部位,然后观察监测结果。

数据即会从串口中输出。

第三部分:实验结果分析我们可以在串口监视器中看到输出结果。

通过实验测试和代码调整,我们可以得到数字压力传感器的输出值,进而得到压力值。

在计算机中,我们可以使用Excel表格进行数据分析和绘图。

传感器3D虚拟仿真软件使用说明书

传感器3D虚拟仿真软件使用说明书

TianhuangTeaching Apparatus天煌教仪版本号:V1.0传感器及应用系列传感器3D虚拟仿真软件使用说明书天煌教仪浙江天煌科技实业有限公司CONTENTS 目录1.系统配置(推荐) (3)1.1 硬件运行环境 (3)1.2 软件运行环境 (3)2.系统构成 (3)2.1系统框架 (3)2.2系统简介 (4)3.使用操作 (4)3.1软件启动 (4)3.2传感器 (5)3.2.1湿敏传感器主界面 (5)3.2.2产品说明界面 (6)3.2.3零件展示界面 (7)3.2.4装配演示界面 (8)3.2.5原理展示界面 (9)2使用说明书1.系统配置(推荐)1.1 硬件运行环境机型:PC及兼容机;CPU类型:Intel 酷睿双核以上;RAM(内存)大小:1G 以上;HD(硬盘)空间:剩余空间1G 以上;光盘驱动器:16 倍速以上;推荐显示分辨率与色彩:1280×102416 位色以上;独立显卡:512M以上显存。

1.2 软件运行环境Windows XP、Windows Vista、Windows 7 .如有不清楚的地方请直接发E-mail至sales@或拨打电话0571-********2.系统构成2.1系统框架《传感器3D虚拟仿真》软件系统框架如图2-1所示。

图2-1 《传感器3D虚拟仿真》软件系统框架结构32.2系统简介本系统采用全3D虚拟仿真技术,界面生动美观、易学易用,以此提高老师教学和学生学习的趣味性,加深学生对知识的理解和运用。

本系统通过产品说明、零件展示、装配演示、原理展示四个方面,讲述了霍尔传感器、压电传感器、湿敏传感器、气敏传感器、电涡流传感器、磁电传感器、差动电容传感器、差动变压器等八个常用传感器。

产品说明:从理论上简单介绍传感器的原理。

零件展示:单独展示传感器的各个组成元件,观察零件的结构、材质以及材质类型。

装配演示:以三维仿真的形式展示传感器的装配过程,让学生直观了解传感器的组成结构和装配方法。

传感器课课程设计仿真

传感器课课程设计仿真

传感器课课程设计仿真一、教学目标本课程旨在让学生了解和掌握传感器的基本原理、类型和应用,提高他们在实际工程中的分析和解决问题的能力。

具体目标如下:1.知识目标:•了解传感器的基本概念、原理和特性;•掌握不同类型传感器(如温度、压力、流量等)的工作原理和应用场景;•理解传感器信号的处理和分析方法。

2.技能目标:•能够正确选择和使用传感器进行数据采集;•能够使用仪器仪表进行传感器性能测试;•能够运用传感器技术解决实际工程问题。

3.情感态度价值观目标:•培养学生的创新意识和团队合作精神;•增强学生对工程实践的兴趣和责任感;•提高学生对科技发展的敏感度和适应能力。

二、教学内容本课程的教学内容主要包括传感器的基本概念、原理、类型和应用。

具体安排如下:1.传感器的基本概念和原理:介绍传感器的作用、分类和性能指标,阐述传感器的工作原理和信号处理方法。

2.常见传感器的类型和应用:详细讲解温度传感器、压力传感器、流量传感器等常见传感器的工作原理、特点和应用场景。

3.传感器信号的处理和分析:介绍传感器信号的处理方法,包括信号滤波、线性化、校准等,以及信号分析 techniques 在实际工程中的应用。

4.传感器在工程实践中的应用:通过案例分析,使学生了解传感器在各种工程领域中的应用,提高他们解决实际问题的能力。

三、教学方法为了提高教学效果,本课程将采用多种教学方法,包括:1.讲授法:通过讲解传感器的基本概念、原理和应用,使学生掌握传感器的相关知识。

2.讨论法:学生进行小组讨论,分享学习心得和经验,提高学生的思维能力和团队协作能力。

3.案例分析法:通过分析实际工程案例,使学生了解传感器在工程中的应用,提高他们解决实际问题的能力。

4.实验法:安排实验室实践活动,使学生在动手操作中掌握传感器的使用方法和技巧。

四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:选用权威、实用的教材,为学生提供系统的学习资料。

电容式压力传感器的检测电路及仿真

电容式压力传感器的检测电路及仿真

本科论文电容式压力传感器的检测电路及仿真摘要本文详细的描述了电容式压力传感器的结构,工作原理,特性,发展现状和趋势等。

并且在此基础上提出了电容式压力传感器的检测电路及其仿真方法,详细的分析了压力大小与电路输出电压之间的关系。

关键词:传感器,工作原理,特性,检测电路,发展I本科论文目录摘要 (I)1 绪论 (3)2 压力传感器的结构 (3)3 压力传感器的工作原理 (3)4 电容式压力传感器 (5)4.1 电容式传感器的原理及其分类 (5)4.1.1 电容式传感器的原理 (5)4.1.2 电容式传感器的分类 (6)4.2 电容式压力传感器的工作原理 (7)4.3 电容式压力传感器的特性 (7)4.4 电容式压力传感器的等效电路 (8)5 电容式压力传感器的检测电路 (9)5.1 检测电路 (9)5.2 结果分析 (11)5.3 影响电容传感器精度的因素及提高精度的措施 (12)5.3.1 边缘效应的影响 (12)5.3.2 寄生电容的影响 (12)5.3.3 温度影响 (12)6 电容式压力传感器的应用 (13)7 电容式压力传感器的发展 (13)8 结论 (14)致谢 (16)参考文献 (17)II本科论文1 绪论科学技术的不断发展极大地丰富了压力测量产品的种类,现在,压力传感器的敏感原理不仅有电容式、压阻式、金属应变式、霍尔式、振筒式等等但仍以电容式、压阻式和金属应变式传感器最为多见。

金属应变式压力传感器是一种历史较长的压力传感器,但由于它存在迟滞、蠕变及温度性能差等缺点,其应用场合受到了很大的限制。

压阻式传感器是利用半导体压阻效应制造的一种新型的传感器,它具有制造方便,成本低廉等特点,因此在非电物理量的测试、控制中得到了广泛的应用。

尤其是在航天、航空、常规武器、船舶、交通运输、冶金、机械制造、化工、轻工、生物医学工程、自动测量与计量、称量等技术领域。

电容式压力传感器是应用最广泛的一种压力传感器。

压力传感器结构设计与特性仿真

压力传感器结构设计与特性仿真

压力传感器结构设计与特性仿真发表时间:2019-01-02T16:17:06.307Z 来源:《知识-力量》2019年3月中作者:胡媛元杜西亮[导读] 本文设计了一种压阻式压力传感器,利用薄膜力学、挠度理论等相关知识分别计算出两种结构的最佳尺寸以及可以达到的最大理论应力,设计出一种双岛-梁膜结构。

(黑龙江大学,黑龙江哈尔滨 150000)摘要:本文设计了一种压阻式压力传感器,利用薄膜力学、挠度理论等相关知识分别计算出两种结构的最佳尺寸以及可以达到的最大理论应力,设计出一种双岛-梁膜结构。

用ANSYS有限元仿真软件静态仿真得到该结构可达到的最大应力为404.73MPa、最大位移为8.543μm,经分析该双岛-梁膜结构的灵敏度较高,并用控制变量法优化双岛-梁膜结构的尺寸。

关键词:压力传感器;灵敏度;双岛梁膜;ANSYS仿真1.前言MEMS压阻式压力传感器属于微型传感器的范畴,它广泛应用于汽车工业领域、航空航天领域及生物医疗领域。

压阻式压力传感器以其高灵敏度、良好的线性度及可重复性而著名。

压力传感器是整个传感装置领域消费数量最多、使用最广泛的器件之一,尤其是在工业自动化、环境保护和医疗器械等领域应用时,对传感器性能如灵敏度、线性度具有迫切的需求。

因此,研究更高性能的微压力传感器具有重要意义。

2.压阻式压力传感器理论分析与结构设计压阻式压力传感器的工作原理主要是利用半导体材料如硅、锗的压阻效应。

压阻效应是指当半导体材料在某个方向上受到外界应力的作用时,引起其材料内部能带结构发生变化,能谷的能量振动,将带来载流子相对能量的变化,从而使半导体电阻率发生一定变化。

压阻式压力传感器的测量方法是将作用在弹性膜片上的压力转化为膜片的应变,应变将造成膜片上电阻值的变化。

一般需将电阻的变化转化为电压的变化,并采用惠斯通电桥来测量这种变化。

3.优化结构的设计与仿真3.1 双岛-梁膜结构设计优化结构采用双岛-梁膜结构,在厚硅梁背面有两个岛,在该结构的前面,一个硅梁跨越硅岛并将硅膜分成两个对称的部分。

传感器仿真软件使用说明书

传感器仿真软件使用说明书

THSRZ-2型传感器系统综合实验装置仿真软件使用说明书THSRZ-2型传感器系统综合实验装置仿真软件 (2)实验一属箔式应变片――单臂电桥性能实验。

(3)实验二金属箔式应变片――半桥性能实验 (5)实验三金属箔式应变片――全桥性能实验 (6)实验四直流全桥的应用――电子秤实验 (7)实验五交流全桥的应用――振动测量实验 (8)实验六扩散硅压阻压力传感器差压测量实验 (10)实验七差动变压器的性能实验 (11)实验八动变压器零点残余电压补偿实验 (11)实验九励频率对差动变压器特性的影响实验 (13)实验十差动变压器的应用――振动测量实验 (14)实验十一电容式传感器的位移特性实验 (15)实验十二容传感器动态特性实验 (16)实验十三直流激励时霍尔式传感器的位移特性实验 (17)实验十四流激励时霍尔式传感器的位移特性实验 (18)实验十五霍尔测速实验 (19)实验十六霍尔式传感器振动测量实验 (20)实验十七磁电式转速传感器的测速实验 (22)实验十八压电式传感器振动实验 (24)实验十九电涡流传感器的位移特性实验 (24)实验二十被测体材质、面积大小对电涡流传感器的特性影响实验 (26)实验二十一电涡流传感器测量振动实验 (28)实验二十二光纤传感器的位移特性实验 (29)实验二十三光纤传感器的测速实验 (30)实验二十四光纤传感器测量振动实验 (32)实验二十五光电转速传感器的转速测量实验 (34)实验二十六 PT100温度控制实验 (34)实验二十七集成温度传感器的温度特性实验 (36)实验二十八铂电阻温度特性实验 (36)实验二十九热电偶测温实验 (38)实验三十 E型热电偶测温实验 (38)实验三十一热电偶冷端温度补偿实验 (39)实验三十二气敏传感器实验 (40)实验三十三湿敏传感器实验 (41)实验三十四转速控制实验 (43)THSRZ-2型传感器系统综合实验装置仿真软件一、概述本仿真软件主要是针对THSRZ-2型传感器系统综合实验装置配套的上位机软件而开发的,与“物理”、“传感器技术”、“工业自动化控制”、“非电测量技术与应用”、“工程检测技术与应用”等课程的教学实验配套使用,提供了真正实验前的模拟实验。

模拟量压力传感器实验指导书

模拟量压力传感器实验指导书

二、实验原理
模拟量压力传感器的特性曲线中有零点漂移。零点漂移可以通过校准压力传感器来检 测。零点漂移,或零点信号的作用是检查传感器的功能以及桥式放大器的连接,特别是在自 动化系统中。模拟量压力传感器产生一个电信号,这个电信号与被测量的压力值成比例。在 压力传感器的特性曲线的帮助下,可以非常精确地在任何一点确定未知压力的大小。
7
读取实验内容2和3特性曲线的每个信号,将这些值填入练习表的表格8-3中。
五、注意事项
万用表上的电压和电流输入端的连接导线必须在每个测量点上进行转换。也可以使用两个万 用表。
8
附录 8
表格 8-1 电压特性曲线真值表
p(bar)
0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
7
1
8
1
9
2
1
1
8
名称 过滤、调压组件(二联件),40μm 模拟量压力传感器(10V/20mA)
分气块 气缸
力传感器 桥式放大器 模拟信号转换板 电压-电流转换开关 数字万用表 台式稳压电源(24V DC/4.5A) 铝合金实验板
橡胶底角
四、实验内容
1、连接力传感器和双作用气缸 连接过滤、调压组件(二联件),40μm。
四、实验内容
1、连接压力传感器(5V/20mA) 与10V/20mA传感器并联连接在分气块上。
图8-2 气动连接图
5
图8-3 气动回路图 在实验内容2和3中,电气连接至模拟信号转换板上。 模拟量压力传感器5V/20mA 通过模拟信号转换口连接至万用表的供给电压口。
图 8-4 实验接线图 虚线表明只有一个万用表,不能同时进行电流和电压的测量。
6

压力传感器软件设计

压力传感器软件设计

2软件设计2.1 系统应用程序组成本设计采用C语言编程,编译环境为keil UV3。

keil c51 是美国Keil Software 公司出品的51 系列兼容单片机C 语言软件开发系统,和汇编相比,C 在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。

Keil c51 软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows 界面。

另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到keil c51 生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。

在开发大型软件时更能体现高级语言的优势。

Keil C51 可以完成编辑、编译、连接、调试、仿真等整个开发流程。

开发人员可用IDE 本身或其它编辑器编辑C 或汇编源文件,然后分别有C51 及A51 编辑器编译连接生成单片机可执行的二进制文件(.HEX),然后通过单片机的烧写软件将HEX 文件烧入单片机内。

软件主要三个方面:一是初始化系统;二是按键检测;三是数据采集、数据处理并进行显示。

这三个方面的操作分别在主程序中来进行。

程序采用模块化的结构,这样程序结构清楚,易编程和易读性好,也便于调试和修改。

程序结构如图10所示。

图10 程序结构2.2 主程序流程图系统程序固化在STC12C5A60S2内部的flash存储器中,分为主程序和若干子程序。

主程序的功能是系统初始化,管理和调用各个子程序。

本设计的程序流程图如图11所示。

图11 程序流程图2.3 AD采样程序块本文设计的STC12C5A60S2片内AD程序如下:#include "config.h"//---------------------------------------------------------------------// SPEED1 SPEED0 A/D转换所需时间#define AD_SPEED 0x60 // 0110,0000 1 1 90 个时钟周期转换一次,// CPU工作频率21MHz时 A/D转换速度约 300KHz //#define AD_SPEED 0x40 //0100,0000 1 0 140 个时钟周期转换一次//#define AD_SPEED 0x20 //0010,0000 0 1 280 个时钟周期转换一次//#define AD_SPEED 0x00 //0000,0000 0 0 420 个时钟周期转换一次//---------------------------------------------------------------------unsigned int get_AD_result(unsigned char channel){unsigned char AD_finished=0; //存储 A/D 转换标志ADC_RES = 0; //A/D 转换结果高8位ADC_RESL = 0; //A/D 转换结果低2位channel &= 0x07; //0000,0111 清0高5位ADC_CONTR = AD_SPEED;_nop_();ADC_CONTR|=0xE0; //1110,0000清ADC_FLAG,ADC_START位和低三位ADC_CONTR |= channel; //选择 A/D 当前通道_nop_();ADC_CONTR |= 0x80; //启动 A/D 电源delay(1); //使输入电压达到稳定ADC_CONTR |= 0x08; //0000,1000 令 ADCS = 1, 启动A/D 转换AD_finished = 0;while (AD_finished == 0 ) //等待A/D转换结束{AD_finished = (ADC_CONTR & 0x10); //0001,0000 测试A/D转换结束否}ADC_CONTR &= 0xE7; //1111,0111 清 ADC_FLAG 位, 关闭A/D转换return (ADC_RES<<2|ADC_RESL);//返回转换后的结果}2.4 液晶显示程序块本文设计的1602液晶操作程序如下:/*****************************************************函数名:WriteDataLCD()功能:向1602写数据说明:入口参数:WDLCD返回值:无*****************************************************/void WriteDataLCD(unsigned char WDLCD){ReadStatusLCD(); //检测忙LCD_Data = WDLCD;LCD_RS = 1;LCD_RW = 0;LCD_E = 0; //若晶振速度太高可以在这后加小的延时LCD_E = 0;LCD_E = 0; //延时LCD_E = 1;}/*****************************************************函数名:WriteCommandLCD()功能:向1602写指令说明:入口参数:WDLCD,BuysC返回值:无*****************************************************/void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC为0时忽略忙检测{if (BuysC) ReadStatusLCD(); //根据需要检测忙LCD_Data = WCLCD;LCD_RS = 0;LCD_E = 0;LCD_E = 0;LCD_E = 0;LCD_E = 1;}/***************************************************** 函数名:ReadDataLCD()功能:从1602读数据说明:入口参数:无返回值:LCD_Data*****************************************************/ unsigned char ReadDataLCD(void){LCD_RS = 1;LCD_RW = 1;LCD_E = 0;LCD_E = 0;LCD_E = 0;LCD_E = 1;return(LCD_Data);}/***************************************************** 函数名:ReadStatusLCD()功能:读取1602状态说明:如果为忙,则一直等到非忙为止入口参数:无返回值:LCD_Data*****************************************************/ unsigned char ReadStatusLCD(void){LCD_Data = 0xFF;LCD_RW = 1;LCD_E = 0;LCD_E = 0;LCD_E = 0;LCD_E = 1;delay_18B20(200);// Delay5Ms(); //检测忙信号 proteus仿真时,延迟5MS,关闭while循环while (LCD_Data&Busy) //硬件使用时,不延迟,打开while循环return(LCD_Data);}/*****************************************************函数名:LCDInit()功能:1602初始化说明:入口参数:无返回值:无*****************************************************/void LCDInit(void){LCD_Data = 0;WriteCommandLCD(0x38,0); //三次显示模式设置,不检测忙信号Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,0);Delay5Ms();WriteCommandLCD(0x38,1); //显示模式设置,开始要求每次检测忙信号WriteCommandLCD(0x08,1); //关闭显示WriteCommandLCD(0x01,1); //显示清屏WriteCommandLCD(0x06,1); // 显示光标移动设置WriteCommandLCD(0x0C,1); // 显示开及光标设置}/*****************************************************函数名:DisplayOneChar()功能:按指定位置在1602显示一个字符说明:X为列,Y为行,DData为字符入口参数:X,Y,DData返回值:无*****************************************************///按指定位置显示一个字符void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData){Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;X |= 0x80; //算出指令码WriteCommandLCD(X, 0); //这里不检测忙信号,发送地址码WriteDataLCD(DData);}/*****************************************************函数名:DisplayListChar()功能:按指定位置在1602显示一串字符说明:X为列,Y为行,*DData为字符串入口参数:X,Y,DData返回值:无*****************************************************/void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData){unsigned char ListLength;ListLength = 0;Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1while (DData[ListLength]!='\0') //若到达字串尾则退出if (X <= 0xF) //X坐标应小于0xF{DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符ListLength++;X++;}}}/*****************************************************函数名:Delay5Ms()功能:5ms延时说明:入口参数:无返回值:无*****************************************************/void Delay5Ms(void){unsigned int TempCyc = 5552;while(TempCyc--);}/*****************************************************函数名:Delay400Ms()功能:400ms延时说明:入口参数:无返回值:无*****************************************************/void Delay400Ms(void){unsigned char TempCycA = 5;unsigned int TempCycB;while(TempCycA--)TempCycB=7269;while(TempCycB--);}}。

压力传感器仿真程序

压力传感器仿真程序

#i ncl u d e<r e g51.h> #include<intrins.h>#include<absacc.h>#include<math.h>#defineucharunsignedchar#defineuint unsignedint#defineBUSY0x80//常量定义#defineDATAPORTP0//ADC0832的引脚sbitADCS=P3^5;sbitADDI=P3^7;sbitADDO=P3^7;sbitADCLK =P3^6;sbitLCM_RS=P2 ^0;sbitLCM_RW=P2^ 1;sbitLCM_EN=P2^2;//ADC0832chipseclect //ADC0832kin//ADC0832kout//ADC0832clocksignalucharad_data;//采样值存储sbitAlarm_led_red=P1^5;//超过压力表量程最大值红色led报警定义sbitAlarm_led_green= P1^6;//低于压力表量程最小值绿色led报警定义//adc采样值存储单元charpress_data;//标度变换存储单元unsignedcharad_alarm;//报警值存储单元unsignedcharpress_bai=0;//显示值百位unsignedcharpress_shi=0;//显示值十位unsignedcharpress_ge=0;//显示值个位unsignedcharpress_dot=0;//显示值十分位ucharcodestr0[]={"Press:.kpa"};ucharcodestr1[]={"CheckBYJack"};voiddelay(uint);voidlcd_wait(void);voiddelay_LCM(uint); //LCD 延时子程序voidinitLCM(void); //LCD 初始化子程序voidlcd_wait(void); //LCD检测忙子程序voidWriteCommandLCM(ucharWCLCM,ucharBusyC);//写指令到ICM子函数voidWriteDataLCM(ucharWDLCM);//写数据到LCM子函数voidDisplayOneChar(ucharX,ucharY,ucharDData);//显示指定坐标的一个字符子函数voidDisplayListChar(ucharX,ucharY,ucharcode*DData);//显示指定坐标的一串字符子函数voiddisplay(void);//系统显示子函数ucharAdc0832(unsignedcharchannel);voidalarm(void);voiddata_pro(void);/**********mainfuncation************/voidmain(void){delay(500); //系统延时500ms启动// ad_data=0; //采样值存储单元初始化为0initLCM();WriteCommandLCM(0x01,1); //清显示屏DisplayListChar(0,0,str0);DisplayListChar(0,1,str1);while(1){ad_data=Adc0832(0); //采样值存储单元初始化为0alarm();data_pro();display();}}/********* 延时K*1ms,12.000mhz**********/voiddelay(uintk){uinti,j;for(i=0;i<k;i++){for(j=0;j<60;j++){;}}}/********** 写指令到 ICM子函数************/voidWriteCommandLCM(ucharWCLCM,ucharBusyC) {if(BusyC)lcd_wait();DATAPORT=WCLCM;LCM_RS=0; // 选中指令存放器LCM_RW=0; // 写模式LCM_EN=1;_nop_();_nop_();_nop_();LCM_EN=0;}/********** 写数据到 LCM子函数************/voidWriteDataLCM(ucharWDLCM){lcd_wait(); //检测忙信号DATAPORT=WDLCM;LCM_RS=1; // 选中数据存放器LCM_RW=0; // 写模式LCM_EN=1;_nop_();_nop_();_nop_();LCM_EN=0;}/***********lcm 内部等待函数*************/ voidlcd_wait(void){DATAPORT=0xff; //读LCD前假设单片机输出低电平,而读出LCD为高电平,那么冲突,Proteus仿真会有显示逻辑黄色LCM_EN=1;LCM_RS=0;LCM_RW=1;_nop_();_nop_();_nop_();while(DATAPORT&BUSY){LCM_EN=0;_nop_();_nop_();LCM_EN=1;_nop_();_nop_();}LCM_EN=0;}/**********LCM 初始化子函数***********/voidinitLCM(){DATAPORT=0;delay(15);WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号delay(5);WriteCommandLCM(0x38,0);delay(5);WriteCommandLCM(0x38,0);delay(5);WriteCommandLCM(0x38,1); //8bit 数据传送,2行显示,5*7字型,检测忙信号WriteCommandLCM(0x08,1); //关闭显示,检测忙信号WriteCommandLCM(0x01,1); //清屏,检测忙信号WriteCommandLCM(0x06,1); //显示光标右移设置,检测忙信号WriteCommandLCM(0x0c,1); //显示屏翻开,光标不显示,不闪烁,检测忙信号}/****显示指定坐标的一个字符子函数****/voidDisplayOneChar(ucharX,ucharY,ucharDData){Y&=1; X&=15;if(Y)X|=0x40; X|=0x80;//假设y为1〔显示第二行〕,地址码//指令码为地址码 +0X80+0X40WriteCommandLCM(X,0);WriteDataLCM(DData);}/******* 显示指定坐标的一串字符子函数*****/voidDisplayListChar(ucharX,ucharY,ucharcode*DData){ucharListLength=0;Y&=0x01;X&=0x0f;while(X<16){DisplayOneChar(X,Y,DData[ListLength]);ListLength++;X++;}}/***************** 系统显示子函数*****************/voiddisplay(void){WriteCommandLCM(0x0c,1); //显示屏翻开,光标不显示,不闪烁,检测忙信号DisplayListChar(0,0,str0);DisplayListChar(0,1,str1);DisplayOneChar(7,0,press_bai+0x30);DisplayOneChar(8,0,press_shi+0x30);DisplayOneChar(9,0,press_ge+0x30);DisplayOneChar(11,0,press_dot+0x30);delay(1000);//稳定显示}/************读ADC0832函数************/采集并返回ucharAdc0832(unsignedcharchannel) //AD 转换,返回结果{uchari=0;ucharj;uintdat=0;ucharndat=0;if(channel==0)channel=2;if(channel==1)channel=3;ADDI=1;_nop_();_nop_();ADCS=0;// 拉低CS端_nop_();_nop_();ADCLK=1;// 拉高CLK端_nop_();_nop_();ADCLK=0;// 拉低CLK端,形成下降沿 1_nop_();_nop_();ADCLK=1;// 拉高CLK端ADDI=channel&0x1;_nop_();_nop_();ADCLK=0;// 拉低CLK端,形成下降沿 2_nop_();_nop_();ADCLK=1;// 拉高CLK端ADDI=(channel>>1)&0x1;_nop_();_nop_();ADCLK=0;// 拉低CLK端,形成下降沿 3ADDI=1;// 控制命令结束_nop_();_nop_();dat=0;for(i=0;i<8;i++) {dat|=ADDO;// 收数据ADCLK=1;_nop_();_nop_();ADCLK=0;// 形成一次时钟脉冲_nop_();_nop_();dat<<=1;if(i==7)dat|=ADDO;}for(i=0;i<8;i++){j=0;j=j|ADDO;// 收数据ADCLK=1;_nop_();_nop_();ADCLK=0;// 形成一次时钟脉冲_nop_();_nop_();j=j<<7;ndat=ndat|j;if(i<7)ndat>>=1;}ADCS=1;// 拉低CS端ADCLK=0;// 拉低CLK端ADDO=1;// 拉高数据端,回到初始状态dat<<=8;dat|=ndat;return(dat); //returnadk}voiddata_pro(void){unsignedinttemp;float press;if(14<ad_data<243) //当压力值介于15kpa到115kpa之间时,遵循线性变换{intvary=ad_data; //y=(115-15)/(243-13)*X+15kpa press=((10.0/23.0)*vary)+9.3; //测试时补偿值为temp=(int)(press*10); //放大10倍,便于后面的计算press_bai=temp/1000;press_shi=(temp%1000)/100;press_ge=((temp%1000)%100)/10;press_dot=((temp%1000)%100)%1 0;//取压力值百位//取压力值十位//取压力值个位//取压力值十分位}}/***************** 报警子函数*******************/voidalarm(void){if(ad_data>=243)//如果当前压力值大于115kpa,{Alarm_led_red=0;}//那么启动报警else{Alarm_led_red=1;}//关闭报警}。

压力传感器程序

压力传感器程序

#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit CLK=P2^4;sbit START=P2^5;sbit EOC=P2^6;sbit OE=P2^7;uchar code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管段码uchar code dispcode1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//带小数点编码void delay(uint n){uint i,j;for(j=0;j<n;j++)for(i=121;i>0;i--);}void start(){START=0;START=1;START=0; //启动转换}uint read(){uint date;float temp,press;OE=0;P1=0xff;//读取AD数据之前先给其全写1while(EOC==0);OE=1;date=P1;OE=0;if(14<date<243) //当压力值介于15kpa到115kpa之间时,遵循线性变换{int vary=date; //y=(115-15)/(243-13)*X+15kpapress=((10.0/23.0)*vary)+10; //测试时补偿值为10temp=press*10; //放大10倍,便于后面的计算}return temp;}void display(uint a){uchar a1=0,a2=0,a3=0;a1=a/1000;a2=(a%1000)/100;a3=((a%1000)%100)/10;P3=0x10;P0= dispcode[a1];delay(5);P3=0x20;P0= dispcode[a2];delay(5);P3=0x40;P0= dispcode[a3];delay(5);}/*****************报警子函数*******************//*void alarm(void){if(ad_data>=244) //如果当前压力值大于115kpa,{ Alarm_led_red=0; } //则启动red led报警else{ Alarm_led_red=1; } //关闭red led 报警if(ad_data=13) //如果当前压力值小于15kpa { Alarm_led_green=0; } //则启动green led报警else{ Alarm_led_green=1; } //关闭green led 报警} */void main(){uint a;TMOD=0x02;TH0=0x14;TL0=0x00;IE=0x82;TR0=1;while(1){start();a=read();display(a);}}//T0为0808提供脉冲void Timer0_INT() interrupt 1{CLK=~CLK;}//{0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x66,0x21,0x06,0x0e,0x0c, 0x09,0x11}//共阳极带小数点编码//{0xbf,0x86,0xdb,0xcf,0xeb,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0x99,0xde,0xf9,0xf1,0xf3,0xf6, 0xee}//共阴极带小数点编码。

(精校版)压力传感器HX711程序

(精校版)压力传感器HX711程序

(完整word版)压力传感器HX711程序编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整word版)压力传感器HX711程序)的内容能够给您的工作和学习带来便利。

同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。

本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整word版)压力传感器HX711程序的全部内容。

#include<reg52。

h〉#define uchar unsigned char#define uint unsigned int#define ulong unsigned longuchar code table[]="0123456789";uchar code table1[]=”.Kg";sbit lcden=P3^4;sbit lcdrs=P3^5;sbit ADDO=P2^3;sbit ADSK=P2^4;sbit beep=P2^2;uint shiqian,qian,bai,shi,ge; ulong zhl;void delay(uint ms){uint i,j;for(i=ms;i〉0;i-—)for(j=110;j〉0;j——);}void write_com(uchar com){lcdrs=0;P1=com;delay(10);lcden=1;delay(5);lcden=0;}void init(){lcden=0;write_com(0x38);//0011 1000 显示模式 16*2显示,5*7点阵,8位数据接口write_com(0x0c);//0000 1100 开显示不显示光标光标不闪烁write_com(0x06);//0000 0110 当读或写一字符后地址指针加一且光标加一,显示不移动write_com(0x01);//0000 0001 显示清零数据指针清零}void write_data(uchar date){lcdrs=1;P1=date;delay(10);lcden=1;delay(5);lcden=0;}void display(){ulong tamp,zhl;if(zhl>0||zhl〈16777216)//进行判断是否满足条件{tamp=((zhl*298)/100000)—24714;//进行AD转换计算shiqian=tamp/10000; //进行计算qian=tamp%10000/1000;bai=tamp%10000%1000/100;shi=tamp%10000%1000%100/10;ge=tamp%10000%1000%100%10;write_com(0x80+0x05); //表示使用哪个1602中的地址显示write_data(table[shiqian]); // 显示值delay(50);write_com(0x80+0x06); //表示使用哪个1602中的地址显示write_data(table[qian]); // 显示值delay(50); //延时,主要是用来解决显示屏是否忙还是不忙write_com(0x80+0x07);write_data(table1[0]);delay(50);write_com(0x80+0x08);write_data(table[bai]);delay(50);write_com(0x80+0x09);write_data(table[shi]);delay(50);write_com(0x80+0x0A);write_data(table[ge]);delay(50);write_com(0x80+0x0B);write_data(table[1]);delay(50);write_com(0x80+0x0C);write_data(table1[2]);delay(50);}else{uint z;for(z=0;z<=15;z++)//判断条件是否超出量程,报警。

基于传感器MPX4115的智能压力检测系统设计与仿真

基于传感器MPX4115的智能压力检测系统设计与仿真
理图 ...........................................................19 3.4.3 LCD1602原理 ...............................................................................19 3.5 电源模块、数据下载模块及报警模块...............................................22 4 仿真工具介绍 ...............................................................................................24 4.1单片机C语言........................................................................................24 4.2 Keil软件介绍 ......................................................................................25 4.3 Proteus软件介绍 .................................................................................25 4.3 Protel99介绍........................................................................................26 5 软件系统设计 ...............................................................................................28 5.1 程序流程图 .........................................................................................28 5.2气压值计算 ..........................................................................................29 6 系统的调试与仿真 .......................................................................................30 6.1 系统仿真电路图 .................................................................................30 6.2 系统仿真结果 .....................................................................................32 总结 ..................................................................................................................35 致谢 ..................................................................................................................36 参考文献 ..........................................................................................................37 附件1 系统整体框图 .......................................................................................38 附件2 系统Protel图..........................................................................................39 1 电路原理图 ............................................................................................39 2 PCB 版图................................................................................................40 附件3 程序代码 ...............................................................................................41

数字压力计的仿真设计

数字压力计的仿真设计

目录1. 概述1.1 压力传感器简介————————————————21.2 总体设计方案—————————————————22.硬件电路的设计2.1 传感器的选型—————————————————32.2 传感器接口电路设计——————————————32.3 最小系统设计—————————————————42.4模数转换电路设计———————————————52.5 显示电路设计—————————————————62.6 电源电路设计—————————————————73.软件部分的设计3.1 程序设计及分析————————————————74.仿真及结果4.1 仿真图————————————————————125.设计小结—————————————————————146.参考文献—————————————————————151.概述1.1 压力传感器简介压力传感器是工业实践中最为常用的一种传感器,其广泛应用于各种工业自控环境,涉及水利水电、铁路交通、智能建筑、生产自控、航空航天、军工、石化、油井、电力、船舶、机床、管道等众多行业,而我们通常使用的压力传感器主要是利用压电效应制造而成的,这样的传感器也称为压电传感器。

压电传感器中主要使用的压电材料包括有石英、酒石酸钾钠和磷酸二氢胺。

其中石英(二氧化硅)是一种天然晶体,压电效应就是在这种晶体中发现的,在一定的温度范围之内,压电性质一直存在,但温度超过这个范围之后,压电性质完全消失(这个高温就是所谓的“居里点”)。

由于随着应力的变化电场变化微小(也就说压电系数比较低),所以石英逐渐被其他的压电晶体所替代。

而酒石酸钾钠具有很大的压电灵敏度和压电系数,但是它只能在室温和湿度比较低的环境下才能够应用。

磷酸二氢胺属于人造晶体,能够承受高温和相当高的湿度,所以已经得到了广泛的应用。

压电效应是压电传感器的主要工作原理,压电传感器不能用于静态测量,因为经过外力作用后的电荷,只有在回路具有无限大的输入阻抗时才得到保存。

压力传感器仿真平台软件的设计

压力传感器仿真平台软件的设计

压力传感器仿真平台软件的设计
郭长旭;庞士信;张治国;李新
【期刊名称】《仪表技术与传感器》
【年(卷),期】2009(000)B11
【摘要】基于VisualC++和ANSYS有限元软件,开发了压力传感器仿真平台分析软件。

借助VisualC++前台开发友好、方便、易用的人机交互界面,对压力传感器隔离膜片仿真分析,建立仿真平台,为压力传感器在膜片设计上提供了理论依据。

根据输入参数自动生成APDL代码文本,然后在ANSYS中运行该APDL代码文本,分析结果可直接在程序中查看。

【总页数】3页(P252-254)
【作者】郭长旭;庞士信;张治国;李新
【作者单位】沈阳仪表科学研究院,辽宁沈阳110043;沈阳工业大学,辽宁沈阳110023
【正文语种】中文
【中图分类】TP391
【相关文献】
1.压力传感器仿真平台软件的设计 [J], 郭长旭;庞士信;张治国;李新
2.一种姿轨控软件仿真测试平台的遥测解析软件设计与实现 [J], 魏冬冬;胡逸琳;叶竹;刘叶盛;李芳芳
3.是德科技推出首款集仿真/设计/测试于一身的设计测试软件平台 [J], 是德科技
4.CRH2动车组网络仿真平台中的终端装置仿真软件设计 [J], 赵敏;刘旺晖;倪文波;
王雪梅;陈发启
5.以计算机仿真软件为平台的电子电路仿真设计 [J], 奚素霞
因版权原因,仅展示原文概要,查看原文内容请购买。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#i n c l u d e<r e g51.h>#include<intrins.h>#include <absacc.h>#include <math.h>#define uchar unsigned char#define uint unsigned int#define BUSY 0x80 //常量定义#define DATAPORT P0//ADC0832的引脚sbit ADCS =P3^5; //ADC0832 chip seclectsbit ADDI =P3^7; //ADC0832 k insbit ADDO =P3^7; //ADC0832 k outsbit ADCLK =P3^6; //ADC0832 clock signalsbit LCM_RS=P2^0;sbit LCM_RW=P2^1;sbit LCM_EN=P2^2;uchar ad_data; //采样值存储sbit Alarm_led_red =P1^5; //超过压力表量程最大值红色led 报警定义sbit Alarm_led_green=P1^6; //低于压力表量程最小值绿色led 报警定义//adc采样值存储单元char press_data; //标度变换存储单元unsigned char ad_alarm; //报警值存储单元unsigned char press_bai=0; //显示值百位unsigned char press_shi=0; //显示值十位unsigned char press_ge=0; //显示值个位unsigned char press_dot=0; //显示值十分位uchar code str0[]={"Press: . kpa "};uchar code str1[]={" Check BY Jack "};void delay(uint);void lcd_wait(void);void delay_LCM(uint);//LCD延时子程序void initLCM( void);//LCD初始化子程序void lcd_wait(void);//LCD检测忙子程序void WriteCommandLCM(uchar WCLCM,uchar BusyC); //写指令到ICM子函数void WriteDataLCM(uchar WDLCM); //写数据到LCM子函数void DisplayOneChar(uchar X,uchar Y,uchar DData); //显示指定坐标的一个字符子函数void DisplayListChar(uchar X,uchar Y,uchar code *DData); //显示指定坐标的一串字符子函数void display(void); //系统显示子函数uchar Adc0832(unsigned char channel);void alarm(void);void data_pro(void);/**********main funcation************/void main(void){delay(500); //系统延时500ms启动// ad_data=0; //采样值存储单元初始化为0initLCM( );WriteCommandLCM(0x01,1); //清显示屏DisplayListChar(0,0,str0);DisplayListChar(0,1,str1);while(1){ad_data =Adc0832(0); //采样值存储单元初始化为0alarm();data_pro();display();}}/*********延时K*1ms,12.000mhz**********/void delay(uint k){uint i,j;for(i=0;i<k;i++){for(j=0;j<60;j++){;}}}/**********写指令到ICM子函数************/void WriteCommandLCM(uchar WCLCM,uchar BusyC){if(BusyC)lcd_wait();DATAPORT=WCLCM;LCM_RS=0; // 选中指令寄存器 LCM_RW=0; // 写模式LCM_EN=1;_nop_();_nop_();_nop_();LCM_EN=0;}/**********写数据到LCM子函数************/void WriteDataLCM(uchar WDLCM){lcd_wait( ); //检测忙信号DATAPORT=WDLCM;LCM_RS=1; // 选中数据寄存器LCM_RW=0; // 写模式LCM_EN=1;_nop_();_nop_();_nop_();LCM_EN=0;}/***********lcm内部等待函数*************/void lcd_wait(void)DATAPORT=0xff; //读LCD前若单片机输出低电平,而读出LCD为高电平,则冲突,Proteus仿真会有显示逻辑黄色LCM_EN=1;LCM_RS=0;LCM_RW=1;_nop_();_nop_();_nop_();while(DATAPORT&BUSY){ LCM_EN=0;_nop_();_nop_();LCM_EN=1;_nop_();_nop_();}LCM_EN=0;}/**********LCM初始化子函数***********/void initLCM( ){DATAPORT=0;delay(15);WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号delay(5);WriteCommandLCM(0x38,0);delay(5);WriteCommandLCM(0x38,0);delay(5);WriteCommandLCM(0x38,1); //8bit数据传送,2行显示,5*7字型,检测忙信号 WriteCommandLCM(0x08,1); //关闭显示,检测忙信号WriteCommandLCM(0x01,1); //清屏,检测忙信号WriteCommandLCM(0x06,1); //显示光标右移设置,检测忙信号WriteCommandLCM(0x0c,1); //显示屏打开,光标不显示,不闪烁,检测忙信号}/****显示指定坐标的一个字符子函数****/void DisplayOneChar(uchar X,uchar Y,uchar DData){Y&=1;X&=15;if(Y)X|=0x40; //若y为1(显示第二行),地址码+0X40X|=0x80; //指令码为地址码+0X80WriteCommandLCM(X,0);WriteDataLCM(DData);}/*******显示指定坐标的一串字符子函数*****/void DisplayListChar(uchar X,uchar Y,uchar code *DData){uchar ListLength=0;Y&=0x01;X&=0x0f;while(X<16){DisplayOneChar(X,Y,DData[ListLength]);ListLength++;X++;}}/*****************系统显示子函数*****************/void display(void){WriteCommandLCM(0x0c,1); //显示屏打开,光标不显示,不闪烁,检测忙信号DisplayListChar(0,0,str0);DisplayListChar(0,1,str1);DisplayOneChar(7,0,press_bai+0x30);DisplayOneChar(8,0,press_shi+0x30);DisplayOneChar(9,0,press_ge +0x30);DisplayOneChar(11,0,press_dot+0x30);delay(1000); //稳定显示}/************读ADC0832函数************///采集并返回uchar Adc0832(unsigned char channel) //AD转换,返回结果{uchar i=0;uchar j;uint dat=0;uchar ndat=0;if(channel==0)channel=2;if(channel==1)channel=3;ADDI=1;_nop_();_nop_();ADCS=0;//拉低CS端_nop_();_nop_();ADCLK=1;//拉高CLK端_nop_();_nop_();ADCLK=0;//拉低CLK端,形成下降沿1_nop_();_nop_();ADCLK=1;//拉高CLK端ADDI=channel&0x1;_nop_();_nop_();ADCLK=0;//拉低CLK端,形成下降沿2_nop_();_nop_();ADCLK=1;//拉高CLK端ADDI=(channel>>1)&0x1;_nop_();_nop_();ADCLK=0;//拉低CLK端,形成下降沿3ADDI=1;//控制命令结束_nop_();_nop_();dat=0;for(i=0;i<8;i++){dat|=ADDO;//收数据ADCLK=1;_nop_();_nop_();ADCLK=0;//形成一次时钟脉冲_nop_();_nop_();dat<<=1;if(i==7)dat|=ADDO;}for(i=0;i<8;i++){j=0;j=j|ADDO;//收数据ADCLK=1;_nop_();_nop_();ADCLK=0;//形成一次时钟脉冲_nop_();_nop_();j=j<<7;ndat=ndat|j;if(i<7)ndat>>=1;}ADCS=1;//拉低CS端ADCLK=0;//拉低CLK端ADDO=1;//拉高数据端,回到初始状态dat<<=8;dat|=ndat;return(dat); //return ad k}void data_pro(void){unsigned int temp;float press;if(14<ad_data<243) //当压力值介于15kpa到115kpa 之间时,遵循线性变换{int vary=ad_data;//y=(115-15)/(243-13)*X+15kpapress=((10.0/23.0)*vary)+9.3; //测试时补偿值为9.3temp=(int)(press*10); //放大10倍,便于后面的计算press_bai=temp/1000; //取压力值百位press_shi=(temp%1000)/100; //取压力值十位press_ge=((temp%1000)%100)/10; //取压力值个位press_dot=((temp%1000)%100)%10; //取压力值十分位 }}/*****************报警子函数*******************/void alarm(void){if(ad_data>=243) //如果当前压力值大于115kpa, { Alarm_led_red=0; } //则启动报警else{ Alarm_led_red=1; } //关闭报警}(注:文档可能无法思考全面,请浏览后下载,供参考。

相关文档
最新文档