新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于MPX4105數(shù)字氣壓計設(shè)計

基于MPX4105數(shù)字氣壓計設(shè)計

作者: 時間:2016-11-18 來源:網(wǎng)絡(luò) 收藏
單片機不僅可以用于溫度測量,也可以用來測量氣壓這類非電信號,就要用到氣壓傳感器。氣壓傳感器的原理是將氣壓信息轉(zhuǎn)換為電流或者電壓輸出,轉(zhuǎn)換后的電壓或者電流常為模擬信號,因此還必須進行A/D轉(zhuǎn)換,以滿足單片機的接口需要。在學(xué)習(xí)了溫度傳感器的是使用后,結(jié)合MPX4105氣壓傳感器,學(xué)習(xí)了數(shù)字氣壓機的設(shè)計。

本文引用地址:http://butianyuan.cn/article/201611/315964.htm

主要器件:

1、AT89C52單片機芯片,采集、控制、處理傳感器的氣壓信息。

2、MPX4105集成壓力傳感器。

3、電壓/頻率轉(zhuǎn)換器為LM331高精度V/F轉(zhuǎn)換芯片。

4、三端低電流線性穩(wěn)壓芯片MC78L05輸出穩(wěn)定的+5v電壓。

試驗流程圖:

試驗電路圖:

試驗程序代碼:

//DigAirPress.h程序

#ifndef_DIGAIRPRESS_H//防止DigAirPress.h被重復(fù)引用

#define_DIGAIRPRESS_H

#include //引用標(biāo)準(zhǔn)庫的頭文件

#include

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define K 2000// K為V/F轉(zhuǎn)換增益常數(shù)

uchar PressVal;//氣壓值

uchar count;//計數(shù)器

#endif

// DigAirPress.c程序

#include "DigAirPress.h"

void display();

/*定時器0中斷*/

void timer0() interrupt 1 using 1

{

uint x,y;

uint fo;

ET0 = 0;//關(guān)閉定時器0中斷

count++;

if (count == 10)// 500ms

{

TR1 = 0;//停止計數(shù)器1

count = 0;

x = TH1;

y = TL1;

/*計算頻率值,由于是500ms所以需乘以2 */

fo = (x*256+y)*2;

/*根據(jù)推算出來的公式P=20fo/K+9計算氣壓值*/

PressVal = (uint)(20*(float)(fo)/K+9);

/*顯示函數(shù),將計算出的PressVal值通過5位數(shù)碼管(4位數(shù)字和1位小數(shù)點)

顯示出來,顯示精度為0.1,即保留小數(shù)點后一位。此函數(shù)本例中略去。*/

display();

/*計數(shù)器1清0 */

TH1 = 0;

TL1 = 0;

}

/*重置TH0和TL0 */

TH0 = -50000/256;

TL0 = -50000%256;

ET0 = 1;//打開定時器0中斷

TR1 = 1;//啟動計數(shù)器1

return;

}

/*主程序*/

void main(void)

{

EA = 1;

ET0 = 1;//打開定時器0中斷

/*設(shè)置T1為16位計數(shù)器,T0為16位定時器*/

TMOD = 0x51;

/*定時器0為50ms定時*/

TH0 = -50000/256;

TL0 = -50000%256;

/*定時器1從0開始計數(shù)*/

TH1 = 0;

TL1 = 0;

TR0 = 1;//啟動定時器0

TR1 = 1;//啟動計數(shù)器1

count = 0;

/*開始無限循環(huán),等待中斷到來*/

while (1);

}

void display(void)

{

//本例中略去

}



關(guān)鍵詞: MPX4105數(shù)字氣壓

評論


技術(shù)專區(qū)

關(guān)閉