单片机控制的数字气压计的设计与实现毕业论文

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

毕业设计(论文)
题目基于单片机的数字气压计的
设计与实现
系(院)
专业
班级班
学生
学号
指导教师
职称
二〇一三年六月十八日
独创声明
本人重声明:所呈交的毕业设计(论文),是本人在指导老师的指导下,独立进行研究工作所取得的成果,成果不存在知识产权争议。

尽我所知,除文中已经注明引用的容外,本设计(论文)不含任何其他个人或集体已经发表或撰写过的作品成果。

对本文的研究做出重要贡献的个人和集体均已在文中以明确方式标明。

本声明的法律后果由本人承担。

作者签名:
二〇一三年六月十八日
毕业设计(论文)使用授权声明
本人完全了解滨州学院关于收集、保存、使用毕业设计(论文)的规定。

本人愿意按照学校要求提交学位论文的印刷本和电子版,同意学校保存学位论文的印刷本和电子版,或采用影印、数字化或其它复制手段保存设计(论文);同意学校在不以营利为目的的前提下,建立目录检索与阅览服务系统,公布设计(论文)的部分或全部容,允许他人依法合理使用。

(论文在解密后遵守此规定)
作者签名:
二〇一三年六月十八日
基于单片机的数字气压计的设计与实现
摘要
数字气压计是用来测量压力由压力传感器,可以直接转换为检测到的电流或电压信号,最后通过显示器显示设计。

本设计介绍了压力传感器MPX4115气压计实时数字显示设备。

得到的模拟气压值再经过电压/频率的换算电路,最终在LCD中显示出来。

关键词:89C55单片机;MPX4115传感器;V/F转换器;液晶显示
Design and implementation of digital pressure meter based on Microcontroller
Abstract
Digital barometer is designed through the pressure sensor will be measure air pressure, transform for direct current or voltage signal can be detected, and finally displayed by the display of a design. MPX4115 by pressure sensors are introduced the design of the real-time display of digital atmospheric pressure meter system equipment. The simulation of the pressure value through the voltage/frequency conversion circuit, finally displayed in the LCD.
Keywords: 89C55 single chip microcomputer; MPX4115 sensor; V/F converter; Liquid crystal display (LCD)
目录
引言 (1)
第一章数字气压计系统论证 (2)
1.1数字气压计设计系统 (2)
1.2设计思路分析 (2)
1.2.1 设计方案一 (2)
1.2.2 设计方案二 (2)
1.2.3 设计单片机控制的数字气压计系统时的注意事项 (3)
第二章系统总体构造的设计 (4)
2.1 系统总体结构 (4)
2.2 A/D转换模块 (4)
2.3 MPX4115传感器模块 (6)
2.4数据处理模块 (7)
2.4.1数据处理模块电路的原理图 (7)
2.5显示模块 (11)
2.5.1 LCD1602显示器的介绍 (12)
2.6电源电路模块 (13)
2.7 本设计总体电路介绍 (14)
2.7.1 对于数据的转换计算 (15)
第三章程序的设计及系统调试与仿真 (16)
3.1 由频率算出电压值 (16)
3.2程序流程图 (16)
3.3关于keil4和proteus的介绍 (17)
3.4 程序仿真图如下 (18)
3.5 电路仿真如图所示 (20)
总结 (21)
参考文献 (22)
辞 (24)
引言
随着科学技术的发展,单片机技术、传感器技术以及计算机控制技术的发展正走向逐渐走向成熟。

人们的生活和工作也脱离不了科学技术的发展。

比如我们的电脑、手机、MP3等等我们日常生活中用到的各种电子设备,几乎都是在单片机的控制下完成的。

在我们的实际生活中,各种智能控制的仪器或者机器都是建立在单片机和传感器的基础上的。

在在实时监测和自动控制领域,设备和仪器,单片机智能方向已经称为一个不可避免的趋势。

这是一个技术进步的象征,也是社会和经济发展的需要。

传感器和单片机集成是最为普遍的一种控制系统。

随着现代科学技术和自动化智能控制技术的发展,传感器在人们的生活中的地位越来越高。

近年来,由于科技发展、环境影响以及人们的需要,传感器在各个部门起到的作用是不容小觑的。

当然在工业生产自动化、安全防卫、能源交通、环境保护、灾害预测、医疗卫生等方面所研发的各种传感器,在全球化科技发展中创造了巨大的贡献。

其中很重要的一种就是:数字气压计的设计为气象预测和气候的判定提供了准确的信息。

[6]
传统的数字气压计存在的问题还是很多的。

如低精度,表明稳定性差,而设计的微处理器控制的数字气压计,而不是一个复杂的电路和控制系统,设计易于使用,实
时显示稳定性好,精度高,抗干扰能力,和技术规格的测量压力已经大大提高。

因此,对于单片机控制的数字气压计的设计有非常重要的意义。

[8]
第一章数字气压计系统论证
1.1数字气压计设计系统
数字气压计系统:以AT89C55单片机为微控制器,利用气压传感器实现气压检测,测量外界大气压,以及LM016L液晶显示器来来显示当前地域或者空间的气压值。

1.2设计思路分析
1.2.1 设计方案一
使用SCM的主人,获得的压力传感器模拟信号,再经过A / D转换后,由微处理器控制的监控系统,并最终发送一个信号到单片机控制系统,然后通过显示。

原理框图如下:
图1-1方案一原理图
1.2.2 设计方案二
采用AT89C55单片机为核心,将获得的信号交由A/D转换器处理后直接送到单片机,最终由显示器显示出来。

原理原理框图如下:
图1-2方案二原理图
综上所述,两种方案虽然电路设计方面相似,但是我们可以看到方案二的设计更为简单快捷,而且相对于方案一来说性价比高。

因此我们选择第二种方案。

1.2.3 设计单片机控制的数字气压计系统时的注意事项
在数字气压计的设计过程中,我们要注意一下几个方面。

➢根据正确的方案和参数选择合适的压力传感器。

➢对于A/D转换器的选择,要考虑抗干扰的问题以及设计起来要简单。

➢对于单片机和A/D转换器的电路连接要合理,不能繁琐。

➢对于信息的采集和显示要迅速且实时显示效果要好。

第二章系统总体构造的设计
2.1 系统总体结构
本系统的整体结构框图如图2-3所示。

图2-3基于单片机控制的数字气压计系统结构整体框图
由图2-3可知,整个系统的工作流程如下。

被测信号是电压输出,不能直接由微控制器控制。

因此,通过V / F转换器模块的压力传感器输出模拟电压信号转换为数字脉冲(其频率与输入电压成线性变化)。

单片机接收到脉冲信号处理,使用线性关系相应的电压和频率公式计算实际压力值,最后通过液晶显示电路显示。

[3]
2.2 A/D转换模块
单片机接受传感器的电压值为模拟信号,因此要将模拟信号转换为单片机可以识别的数字信号。

在本文中,基于各种原因,我选择了V / F转换器LM331芯片构成的A / D转换电路。

目前,控制信息处理应用程序主要是A / D转换技术,各种测量仪器通过A / D 转换器技术使准确的检测结果,因此最受欢迎的。

然而,在一些远距离数据传输需求,准确和更度有限的资金情况下正常的A / D转换技术成本不高,所以我们想到一个V / F变换器代替A / D转换装置。

作为MPX4115压力传感器是一个模拟电压输出,有必要对A / D转换器的单片机识别和处理。

在A / D转换,利用LM331芯片包含电压
/频率(V / F)转换电路对模拟电压数字处理。

V / F转换器是一个模拟电压信号转换成频率信号,精度高和信号稳定性。

V/F转换器件与单片机接口有以下特点:
(1)接口简单。

占用单片机存资源少。

抗干扰性能好。

有较强的抗干扰能力。

(2)有利于远距离传输。

通过一定的调制将无线传输变成光传输。

这样就在远距离传输过程中是信号准确且不失真。

含芯片LM331的V/F转换器如图2-4
CmpIn(7脚):比较器电压输入脚。

输出低通滤波后的V/F转换的电压。

VCC(8脚):电源脚。

可采用单、双电源供电,输入电压5~40V。

2.3 MPX4115传感器模块
这个传感器讲高级的微电机技术和薄膜镀金属结合起来。

还未高水准模拟输出信号提供了一个均衡压力。

[7]
它的实物图如图所示:
气压传感器MPX4115的各引脚如下:
[9]
气压传感器仿真图如下图所示:
2.4数据处理模块
LM331是通过频率和压力计算压力值。

选择设计AT89C55为核心,包括算术和控制逻辑组成。

AT89C55是一种低能、高性能单片机,其重点是一个常见的八个中央处理器和闪存单元。

强大的单片机AT89C55以其高成本,可以灵活地应用于各种控制领域。

[10]
2.4.1数据处理模块电路的原理图
AT89C55是一个低压、高性能的8位单片机,芯片的CMOS包含20 k字节,可以反复阅读可重写的Flash程序存和256字节的随机存取数据存储器(RAM),设备使用爱特梅尔公司公司,生产的高密度非易失性存储器技术,兼容标准通过mcs—51汇编语言指令集,块置万能8中央处理器和闪存单元,强大的单片机AT89C55可以为您提供许多更复杂的系统控制应用程序。

[5]
.
THR 6R-C 5IOUT 1
REFI 2GND
4U2
主电源及时钟引脚:
(1)Vcc(40脚):接+5V电源。

(2)Vss(20脚):接地。

(3)XTAL1(19脚):提供单片机控制信号。

(4)XTAL2(18脚)接振荡器的反向输出端控制引脚:
(1)RST复位输入。

(2)ALE/PROG:当访问外部程序或数据存储器,此端口是一个地址锁存器启动信号。

当此端口为低8地址字节。

编程闪存设备,这个端口还用于程序脉冲输入。

(3)PSEN:程序存允许输出控制终端是一个外部程序存储器读出选通。

每当一个外部存储器取指令,然后将会有两次PSEN每个机器周期有效。

两个脉冲输出。

此外,当外部存访问,和一些这两个PSEN信号不出现。

(4)EA/VPP:希望只访问外部存储器的CPU,EA港口必须保持接地。

如果EA端口连接VCC,那么CPU执行部程序存指令。

输入/输出引脚:
此类引脚包括P0口、P1口、P2口和P3口。

P0口:当外部数据或程序访问存,它将把地址和数据总线复用,激活当访问部上拉电阻。

在Flash编程过程,P0端口将接收指令;而在校准过程必须是一个外部上拉电阻。

P1口:在编写一个端口部P1高高挽起,可以用来作为输入,P1端口是接地的,
将会有电流输出,这是因为包含部停下电阻器。

在FLASH编程和验证,P1端口接收8地址。

P2口:端口是一个上拉电阻P2与一个8位双向I / O端口,P2港口输出缓冲区可以接收四个TTL栅电流,当P2端口通过写“1”,部上拉电阻器把它销和作为输入。

因为作为输入,外部销将拉低P2端口和输出电流。

这是因为有一个部拉的缘故。

当P2端口访问外部程序或16位外部数据存储器地址,P2端口发送输出地址高八。

在给定的地址“1”,因为部上拉电阻优势当八地址外部数据存储器读写,P2端口输出的特殊功能寄存器。

P3口:此端口是一组P3端口与一个部上拉电阻8位双向I / O端口,可以得到输出4 TTL栅电流。

当P3端口写“1”,部上拉电阻为高,然后可以用来作为输入。

作为输入,由于外部下拉到地面,因为原因P3港口拉输出电流(TTL)。

(1)P0(P0.0~P0.7)CPU的数据输入和输出都要通过此端口。

(2)P1(P1.0~P2.7)是一个8位准双向I/O口,含有上拉电阻。

(3)P2(P2.0~P2.7)地址总线高八位与此端口复用。

(4)P3口:P3港口针脚8与部上拉电阻双向I / O端口,可以得到输出4 TTL 栅电流。

当P3端口写“1”,他们是在部把高,并作为输入。

作为输入,由于外部到低,P3端口将输出电流(生病),这是由于拉的缘故。

[4]
P3口作为AT89C52的一些特殊功能口P3口功能表,如下表1.1所示
表2-9 AT89C55的一些特殊功能口P3口功能表
2.5显示模块
数据显示模块,我选择了液晶显示器,显示是其主要优势是相对晶体管体积小、功耗低、超薄轻质显示容丰富等。

在SCM系统已经被广泛的应用。

液晶显示器可以分为三个类别根据功能:Biduan字符点阵液晶显示器、液晶显示器、点阵液晶显示器、光两种可以显示数字、字符等,和图形点阵液晶显示器可以显示字符和图形。

[13]
本设计选择相对负担得起的字符LCD1602液晶显示器可以显示两行16字符,使用+ 5 V电源,电路结构简单、廉价和有一个高成本和应用结果。

显示器部分的电路如图2-10所示:
D 7
14
D 613D 512D 411D 310D 29D 18D 07
E 6
R W 5R S 4V S S 1V D D 2V E E
3
LCD1
LM016L
23456789
1RP1
RESPACK-8
+5
+5
图2-10 显示模块原理图
2.5.1 LCD1602显示器的介绍
LCD1602是一种专门用来显示字母、数字、符号等点阵式LCD ,实物如图2.8所示。

图2.11 LCD 显示器实图
LCD1602的外围引脚及作用:
第1脚:VSS为接地电源;
第2脚:VDD为+5V正电源;
第3脚:V0是调整对比度的液晶显示器端口,和积极的供应连接使弱对比,当功率将停飞,但对比最高对比度太高会产生“重影”,因此,可以用来连接一个10 k电位器来调整对比度;
第4脚:RS是寄存器选择端口,当您选择数据寄存器当此端口连接到高级别,指令寄存器在选择这个端口是低;
第5角:RW读写信号线是高当第二个端口将读操作,当第二个端口与低写操作。

当RS和RW可以写同时接地指示或显示的地址,当RS与低,可以读取时RW连接到VCC 忙信号当RS与VCC,可以写数据;
第6脚:E端口功能的客户端,当E终端端口从高到低,LCD模块将执行命令;;
第7-14脚:D0~D7是8位双向数据线;
第15~16脚:空脚。

2.6电源电路模块
由于数据转换模块是核心设备LM331为+ 15 V,但SCM,MPX4115和其他芯片需要+ 5 V电源,它还需要特别设计,以满足供电电路Zhengge系统功率需求。

电源电路连接如图2-12所示:
图2-12 电源电路模块图
2.7 本设计总体电路介绍
我们AT89C55单片机作为整个系统的核心,通过压力传感器对空气压力信号采集、控制、放大和其他加工参数自动获得完整的空气压力,最后数字显示等等。

在这个过程中需要用一个定时器部单片机AT89C55被测量,然后处理软件模块,a / D转换结果。

[14]
本设计总体电路图如图2-13所示:
图2-13 总体设计电路图
2.7.1 对于数据的转换计算
在此电路中,电压Vin 和输出脉冲FO 的频率fo 的转换关系满足公式(1)。

Fo=Kvin (1) 其中,
K=RtCt R Rs L 1
09.21•
•, Rs=R2+R3 (2)
电路中Rt 、Ct 和RL 值通常是6.8,0.01 k Ωpf 和100 k Ω,Rs 由一个固定电阻器R2和R3串联电路,其中一个变量,R2,R3 22 k Ω阻力最大的12 k Ω,调节可变电阻R3电阻Rs 可以实现增益调节电路开关。

[1]
第三章 程序的设计及系统调试与仿真
3.1 由频率算出电压值
信号每一步的变换过程如下:
第一步,通过压力传感器测量压力成电压输出MPX4115 MPX4115显示芯片数据显示输出电压输出电压和大气压力P 之间的关系一样
输出电压= VCC(0.01 p - 0.09) (3) 哪里是+ 5 V 电压,所以我们可以得到:
输出电压= 5(0.01 p - 0.09) (4)
第二步,MPX4115输出电压输出电压和输入电压Vin 转变什么,阿文,和佛的一致性作为最后一章的公式(1)下面。

综合式(1)和式(4),根据VOUT=Vin,可得:
P=01.009
.05 K
fo =K fo 20+9 (5)
式(5)中,fo 为频率,P 为压强,K 为V/F 转换增益,令K 值为2000。

在软件中,根据式(5)算出气压值P 。

[11] 3.2程序流程图
单片机实现数字气压计的程序流程如图3-14所示
等待定时中断
图3-14程序流程图[12]
3.3关于keil4和proteus的介绍
Keil软件是C51软件公司研究开发。

51系列单片机C语言兼容软件开发系统,与之相比,C语言在功能成为、结构、可读性、可维护性是显而易见的,所以容易学习的目的。

您可以完成编程、编译、连接、调试、仿真所以整个开发过程。

其开发流程步骤如下:
开启uVision4,建立工程文件并且从器件数据库里挑选出项目具体实际使用的器件。

建立新的源程序,并且把这个源文件添加到工程中。

为单片机添加且设置启动代码。

设置硬件想过的选项。

编译程序并最终生成可以下载到单片机用的HEX文件。

[15]
Proteus和其他单片机仿真软件是不同的,它不仅可以仿真单片机CPU的工作,而且还能模拟芯片外围电路工作。

因此,在仿真和调试程序,特别关注不再是某些语句执行单片机寄存器和存容的变化,但从工程角度直视工作程序运行和电路的过程和结果。

对于这个仿真,从某种意义上说,是由一个实验和工程应用脱节的现象和矛盾。

Proteus提供了一个相对广泛的测试信号用于测试电路。

这些测试信号和包括模拟和数字信号。

单片机的硬件和软件调试,多变的人提供了两个方法:一是影响系统的整体实现,一个是软件一步一步调试,这两个方法依赖于特定的环境下使用。

[2]
3.4 程序仿真图如下
图3-15 程序仿真图
3.5 电路仿真如图所示
CMIN
7THR 6R-C 5IOUT 1REFI 2FOUT
3
GND 4VCC 8
U2
LM331
D 7
14
D 613D 512D 411D 310D 29D 18D 07E
6
R W 5R S 4V S S 1V D D 2V E E
3
LCD1
LM016L
23456789
1
RP1
RESPACK-8
VI
3
VO 1
G N D
2
U3
78L05
R5
6.8k
+15
C4
10uF
+5
+15
C8
R6
100k
R4
10k
C10
1uF
102.3
345621
M1
MPX4115
C11
50pF
R7
51k
+5
C5
0.1uF
C3
22pF
C2
22pF +5
X1
CRYSTAL
R1
10k
+5
+5
C7
150u
61%
RV1
12k
R66
100k
XTAL2
18
XTAL1
19
ALE 30EA
31
PSEN 29RST
9
P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.0/T21P1.1/T2EX 2P1.23P1.34P1.45P1.56P1.67P1.78
P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD
17
P3.6/WR 16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1
AT89C55
C9
0.1uF
R10
100k
12
U4:A
74LS04
C14
10uF
图 3-16 整体仿真图
总结
本文介绍了基于单片机的数字大气压计系统的设计,对于正格硬件电路和软件程序设计做了具体的分析,介绍了关于数字大气压计的设计方案和原理,加深对52单片机的结构、特点等只是的了解,并给出主程序设计的流程图,更加只管的把设计呈现出来,最后用Keil软件和Proteus软件分别对程序和电路进行仿真,验证了设计的正确性和合理性。

本设计使用89 c55单片机和MPX4115压力传感器进行数据收集,和V / F转换器LM331为数据处理,容易使用,精度高,显示的简单性和灵活性,稳定性好,易于扩展功能,等等。

避免了传统的气压计的精度较低,如缺乏一个单一的显示。

参考文献
[1] 艳玲,亚丽《基于MPX4115》芯片的数字气压计设计[J].中国仪器仪表,2007.9
[2] 周润景.基于Proteus的电路及单片机系统设计与仿真[M].:航空航天大学,2006.5
[3] 红卫.单片机应用系统设计实例与分析[M].航空航天大学
[4] 毅刚.单片机原理及应用[M].:高等教育,2003.6
[5] 余锡存,.单片机原理及接口技术[M].:电子科技大学
[6] 林琳,金玲《便携式气压计的电路与系统设计》[J].程度气象学院学报2000.8
[7] 王化祥,淑英,《传感器原理与应用》,[M],,大学,2007.2
[8] 王晓岚,《浅谈数字气压计的设计》,[J]. 科技信息,2011.10
[9] 唐文彦,《传感器》,[M],,机械工业,2007
[10] 袁捷,波,平《基于单片机89C55的气压高度计系统的设计和应用》,[J],机电工程.2005.10
[11] 智《低功耗数字气压计的设计》,[J],航空工业学院学报2007.3
[12] 绍祥,胡爱华.《基于单片机控制的数字气压计设计与实现》,[J],国外电子元器件,2004.7
[13]CAOWandan,PANLian,HURui,rmationScienceandEngineeringInstit ute,WuhanUniversity of Scienceand
Technology,Wuhan,Hubei,China,430081.Design of an Intelligent DigitalBarometer Based on AVR[A].Proceedings of the 8th Internati onal Symposiumon Testand Measurement(Volume)[C].International Academic PublishersLtd, 2009.(86)
[14] Chen CH. Signal processing and pattern recognition in nondestructive evaluation of materials [M]. Berlin:Sp ringer2Verlag, 1988(56)
[15] M. M. Kaila. A High Temperature Superconductor (HTSC) Hot Electron (HE) THz Heterodyne Thermal Sensor (HTS): Computational Analysis of Conversion Gain in [J]. Journal of Superconductivity: Incorporating Novel Magnetism, 2002, Vol.15 (3).

本次毕业设计让我感触很深。

首先让我明白了这四年来学的东西是远远不够的,光有理论知识是不行的,实践才是最为重要的东西。

在这期间我感受到同学的友情和帮助以及老师对我的指导让我受益终生。

电子类的设计只有经过无数次试验和调试才会有产品的出现。

在毕业设计过程中遇到了不少困难和麻烦,在指导老师和同学们的大力帮助和支持下,特别是胡春华老师的指导和监督,让我找到了更好的方法完成设计。

在毕业设计的过程中,我们有艰辛的付出和让人想放弃的困难,当然更多是给我们丰收的喜悦,知识固然得到了巩固和条,我相信在实践中的切身体会将使我在以后的工作和学习中终身受用。

实践是检验真理的唯一标准,经过几年的理论学习和这次在即将走向工作岗位的时候能将理论与实践相结合来锻炼自己是一种很大的提高。

在这里真心感我的指导老师胡春华老师,也感在设计过程中帮助我的同学。

最后,再次感我的指导老师和我的同学们。

同时也感学校给我们提供了良好的硬件设施和实验条件。

你们。

附录:
#include<stdio.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned char
#define K 2000 //K为转换增益常数,K取值2000
uint Pa; //定义气压值Pa
uchar T0count;
uchar Timecount;
bit flag;//定义1s标志位
unsigned long x;
sbit LCD_RS=P2^0;
sbit LCD_E=P2^1;
sbit LCD_RW=P2^2;
#define LCD_DATA P0//定义单片机P0口作为LCD液晶显示位选码
uchar code LcdBuf1[]={"welcome to use!"};
uchar code LcdBuf2[]={"Pressure test!"};//LCD显示容,定义到代码段uchar temp[8];
uchar dispbuf[8]={0,0,0,0,0,0,10,10};
//函数声明
void lcd_init(void);
void displa_string(uchar x,uchar*);
void disp_selec(unsigned char bit_sdelec,unsigned char seg);
void delay(uint z)//延时 1ms
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/*************************************
**函数名称:dellay
**入口函数:h(unsigned int 型)
**出口参数:无
**功能描述:短暂延时,使用11.0592晶体,约0.01MS **************************************/
void dellay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
/*************************************
**函数名称:WritedataLcd
**入口参数:wdata (unsigned char 型)
**出口参数:无
**功能描述:写数据到LCD
******************************************/
void WriteDataLcd(unsigned char wdata)
{
LCD_RS=1;
LCD_DATA=wdata;
dellay(10);//短暂延时,代替检测忙状态
LCD_E=1;
dellay(10); //短暂延时,代替检测忙状态 LCD_E=0;
}
/***********************************
**函数名称:WriteCommandLcd
**入口函数:wdata(unsigned char 型)
**出口参数:无
**功能描述:写命令到LCD
*************************************/
void WriteCommandLcd(unsigned char wdata) {
LCD_RS=0;
LCD_DATA=wdata;
dellay(10);//短暂延时,代替检测忙状态 LCD_E=1;
dellay(10);//短暂延时,代替检测忙状态 LCD_E=0;
}
void lcd_init()
{
LCD_E=0;
WriteCommandLcd(0x38);
WriteCommandLcd(0x38);//显示模式设置
WriteCommandLcd(0x08);//关闭显示
WriteCommandLcd(0x0c);//显示开及光标设置
WriteCommandLcd(0x06);//显示光标移动设置
WriteCommandLcd(0x01);//显示清屏
WriteCommandLcd(0x90);//显示开及光标移动设置
}
/****************************************************************** **函数名称:display_xy
**入口参数:x(unsigned char 型),y(unsigned char 型)
**出口参数:无
**功能描述:设置光标位置,x是列号,y是行号
*******************************************************************/ void display_xy(unsigned char x,unsigned char y)
{
if(y==1)
x+=0x40;
x+=0x80;
WriteCommandLcd(x);
}
/*********************************************************************** *****
**函数名称:display_char
**入口参数:x(unsigned char 型),y(unsigned char 型),dat(unsigned char 型)
**出口参数:无
**功能描述:在具体位置显示显示单个字符,x是列号,y是行号
************************************************************************ ***/
void display_char(unsigned char x,unsigned char y ,unsigned char dat) {
display_xy(x,y);
WriteDataLcd(dat);
}
// While(*s)
/*********************************************************************** ***
**函数名称:display_string
**入口参数:x(unsigned char 型),y(unsigned char 型),s(指针型)
**出口参数:无
**功能描述:在具体位置显示显示字符串,以/0结束,x是列号,y是行号
************************************************************************ ***/
void display_string(unsigned char x,unsigned char y,unsigned char*s) {
display_xy(x,y);
while(*s)
{
WriteDataLcd(*s);
s++;
}
}
void main(void)
{
unsigned char i;
LCD_RW=0;
delay(10);
lcd_init();
display_string(0,0,LcdBuf1);//显示第一行,从第三个位置开始
display_string(0,1,LcdBuf2);//显示第二行,从第0个位置开始
delay(300);
TMOD=0X15;//初始化定时器工作方式,T1为定时器,时基为50MS,T0为计时器,T0、T1均工作于方式1
TH0=0;
TL0=0;//初始化定时器0值
TH1=(65525-50000)/256;//初始化定时器1值
TL1=(65535-50000)%256;
TR1=1;//启动定时器1
TR0=1;//启动定时器0
ET0=1;//定时器0使能
ET1=1;//定时器1使能
EA=1;//总中断允许
WriteCommandLcd(0x01);//显示清屏
while(1)
{
if(flag==1)//1S标志到
{
flag=0;//清1S标志
x=T0count*65536+TH0*256+TL0;//计算频率值
Pa=(20*(float)(x)/K+9)*10; //计算气压值,并将气压值乘以10;
for(i=0;i<8;i++) //循环八次
{
temp[i]=0; //降八个显示缓冲区清零
{
i=0;
while(x/10)//计算每一位数值缓冲区
{
temp[i]=x%10;
x=x/10;
i++;
}
temp[i]=x;
for(i=0;i<6;i++)//循环六次
{
dispbuf[i]=temp[i];//将数值缓冲区中的数存入显示缓冲区
}
for(i=0;i<6;i++) //循环六次
display_char(i+5,0,dispbuf[5-i]+'0');
display_string(12,0,"HZ");
for(i=0;i<8;i++)//循环八次
{
temp[i]=0;//将八个显示缓冲区清零
}
i=0;
while(Pa/10)//计算每一位数值缓冲区
{
temp[i]=Pa%10;
Pa=Pa/10;
i++;
}
temp[i]=Pa;
for(i=0;i<6;i++);//循环六次
}
dispbuf[i]=temp[i];//将数值缓冲区中的数存入显示缓冲区}
display_string(9,1,"PA");
display_char(6,1,dispbuf[3]+'0');
display_char(7,1,dispbuf[2]+'0');
display_char(8,1,dispbuf[1]+'0');
display_char(9,1,'.');
display_char(10,1,dispbuf[0]+'0');
Timecount=0;//20次计数值清零
T0count=0;//脉冲计数值清零
TH0=0;//T0计数值清零
TL0=0;//T0计数值清零
TR0=1;//再次启动下一次的计数
}
}
}
void t0(void) interrupt 1 using 0
{
T0count++;//定时器0中断,满65536个脉冲,则T0count++; }
void t1(void)interrupt 3 using 1
{
TH1=-50000/256;//重新规定TH计数初值为50ms
TL1=-50000%256;
Timecount++;
if(Timecount==20)//如果满足20哥50MS,即1S到
{
TR0=0; //定时器0停止
Timecount=0;//时间标志位清零
flag=1; //1S标志位置1 }
}。

相关文档
最新文档