導航:首頁 > 操作系統 > sht與單片機相連電路

sht與單片機相連電路

發布時間:2022-05-11 05:13:53

A. 多個SHT11怎麼用單匯流排跟單片機連接

// DHT21使用範例

//單片機 : AT89S52 或 STC89C52RC

// 功能 :串口發送溫濕度數據 波特率 9600

//硬體連接: P2.0口為通訊口連接DHT11,DHT11的電源和地連接單片機的電源和地,單片機串口加MAX232連接電腦

// 公司 :濟南聯誠創發科技有限公司

//

#include <reg51.h>

#include <intrins.h>

//

typedef unsigned char U8;

typedef signed char S8;

typedef unsigned int U16;

typedef signed int S16;

typedef unsigned long U32;

typedef signed long S32;

typedef float F32;

typedef double F64;

//

#define uchar unsigned char

#define uint unsigned int

#define Data_0_time 4

//----------------------------------------------//

//----------------IO口定義區--------------------//

//----------------------------------------------//

sbit P2_0 = P2^0 ;

sbit P2_1 = P2^1 ;

sbit P2_2 = P2^2 ;

sbit P2_3 = P2^3 ;

//----------------------------------------------//

//----------------定義區--------------------//

//----------------------------------------------//

U8 U8FLAG,k;

U8 U8count,U8temp;

U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;

U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;

U8 U8comdata;

U8 outdata[5]; //定義發送的位元組數

U8 indata[5];

U8 count, count_r=0;

U8 str[5]={"RS232"};

U16 U16temp1,U16temp2;

SendData(U8 *a)

{

outdata[0] = a[0];

outdata[1] = a[1];

outdata[2] = a[2];

outdata[3] = a[3];

outdata[4] = a[4];

count = 1;

SBUF=outdata[0];

}

void Delay(U16 j)

{ U8 i;

for(;j>0;j--)

{

for(i=0;i<27;i++);

}

}

void Delay_10us(void)

{

U8 i;

i--;

i--;

i--;

i--;

i--;

i--;

}

void COM(void)

{

U8 i;

for(i=0;i<8;i++)

{

U8FLAG=2;

//----------------------

P2_1=0 ; //T

P2_1=1 ; //T

//----------------------

while((!P2_0)&&U8FLAG++);

Delay_10us();

Delay_10us();

// Delay_10us();

U8temp=0;

if(P2_0)U8temp=1;

U8FLAG=2;

while((P2_0)&&U8FLAG++);

//----------------------

P2_1=0 ; //T

P2_1=1 ; //T

//----------------------

//超時則跳出for循環

if(U8FLAG==1)break;

//判斷數據位是0還是1

// 如果高電平高過預定0高電平值則數據位為 1

U8comdata<<=1;

U8comdata|=U8temp; //0

}//rof

}

//--------------------------------

//-----濕度讀取子程序 ------------

//--------------------------------

//----以下變數均為全局變數--------

//----溫度高8位== U8T_data_H------

//----溫度低8位== U8T_data_L------

//----濕度高8位== U8RH_data_H-----

//----濕度低8位== U8RH_data_L-----

//----校驗 8位 == U8checkdata-----

//----調用相關子程序如下----------

//---- Delay();, Delay_10us();,COM();

//--------------------------------

void RH(void)

{

//主機拉低18ms

P2_0=0;

Delay(180);

P2_0=1;

//匯流排由上拉電阻拉高 主機延時20us

Delay_10us();

Delay_10us();

Delay_10us();

Delay_10us();

//主機設為輸入 判斷從機響應信號

P2_0=1;

//判斷從機是否有低電平響應信號如不響應則跳出,響應則向下運行

if(!P2_0) //T !

{

U8FLAG=2;

//判斷從機是否發出 80us 的低電平響應信號是否結束

while((!P2_0)&&U8FLAG++);

U8FLAG=2;

//判斷從機是否發出 80us 的高電平,如發出則進入數據接收狀態

while((P2_0)&&U8FLAG++);

//數據接收狀態

COM();

U8RH_data_H_temp=U8comdata;

COM();

U8RH_data_L_temp=U8comdata;

COM();

U8T_data_H_temp=U8comdata;

COM();

U8T_data_L_temp=U8comdata;

COM();

U8checkdata_temp=U8comdata;

P2_0=1;

//數據校驗

U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);

if(U8temp==U8checkdata_temp)

{

U8RH_data_H=U8RH_data_H_temp;

U8RH_data_L=U8RH_data_L_temp;

U8T_data_H=U8T_data_H_temp;

U8T_data_L=U8T_data_L_temp;

U8checkdata=U8checkdata_temp;

}//fi

}//fi

}

//----------------------------------------------

//main()功能描述: AT89C51 11.0592MHz 串口發

//送溫濕度數據,波特率 9600

//----------------------------------------------

void main()

{

U8 i,j;

//uchar str[6]={"RS232"};

TMOD = 0x20; //定時器T1使用工作方式2

TH1 = 253; // 設置初值

TL1 = 253;

TR1 = 1; // 開始計時

SCON = 0x50; //工作方式1,波特率9600bps,允許接收

ES = 1;

EA = 1; // 打開所以中斷

TI = 0;

RI = 0;

SendData(str) ; //發送到串口

Delay(1); //延時100US(12M晶振)

while(1)

{

//------------------------

//調用溫濕度讀取子程序

RH();

//串口顯示程序

//--------------------------

str[0]=U8RH_data_H;

str[1]=U8RH_data_L;

str[2]=U8T_data_H;

str[3]=U8T_data_L;

str[4]=U8checkdata;

SendData(str) ; //發送到串口

//讀取模塊數據周期不易小於 2S

Delay(20000);

}//elihw

}// main

void RSINTR() interrupt 4 using 2

{

U8 InPut3;

if(TI==1) //發送中斷

{

TI=0;

if(count!=5) //發送完5位數據

{

SBUF= outdata[count];

count++;

}

}

if(RI==1) //接收中斷

{

InPut3=SBUF;

indata[count_r]=InPut3;

count_r++;

RI=0;

if (count_r==5)//接收完4位數據

{

//數據接收完畢處理。

count_r=0;

str[0]=indata[0];

str[1]=indata[1];

str[2]=indata[2];

str[3]=indata[3];

str[4]=indata[4];

P0=0;

}

}

}

B. 關於SHT11的編程

SHT11是瑞士Sensirion公司生產的具有I2C匯流排介面的單片全校準數字式相對濕度和溫度感測器。該感測器採用獨特的CMOSens TM技術,具有數字式輸出、免調試、免標定、免外圍電路及全互換的特點。文中對感測器的性能特點、介面時序與命令進行了詳細的闡述,給出了SHT11與單片機的介面電路及相應程序。 關鍵詞:數字式;溫濕度感測器;I2C匯流排;單片機1 概述溫濕度的測量在倉儲管理、生產製造、氣象觀測、科學研究以及日常生活中被廣泛應用,傳統的模擬式濕度感測器一般都要設計信號調理電路並需要經過復雜的校準和標定過程,因此測量精度難以保證,且在線性度、重復性、互換性、一致性等方面往往不盡人意。SHT11是瑞士Sensirion公司推出的基於CMOSensTM技術的新型溫濕度感測器。該感測器將CMOS晶元技術與感測器技術結合起來,從而發揮出它們強大的優勢互補作用。
2 性能特點SHT11溫濕度感測器的主要特性如下:●將溫濕度感測器、信號放大調理、A/D轉換、I2C匯流排介面全部集成於一晶元(CMOSensTM技術);●可給出全校準相對濕度及溫度值輸出;●帶有工業標準的I2C匯流排數字輸出介面;●具有露點值計算輸出功能;●具有卓越的長期穩定性;●濕度值輸出解析度為14位,溫度值輸出解析度為12位,並可編程為12位和8位;●小體積(7.65×5.08×23.5mm),可表面貼裝;●具有可靠的CRC數據傳輸校驗功能;●片內裝載的校準系數可保證100%互換性;●電源電壓范圍為2.4~5.5V;●電流消耗,測量時為550μA,平均為28μA,休眠時為3μA。

SHT11溫濕度感測器採用SMD(LCC)表面貼片封裝形式,管腳排列如圖1所示,其引腳說明如下:(1)GND:接地端;(2)DATA:雙向串列數據線;(3)SCK:串列時鍾輸入;(4)VDD電源端:0.4~5.5V電源端;(5~8)NC:空管腳。
3 工作原理SHT11的濕度檢測運用電容式結構,並採用具有不同保護的「微型結構」檢測電極系統與聚合物覆蓋層來組成感測器晶元的電容,除保持電容式濕敏器件的原有特性外,還可抵禦來自外界的影響。由於它將溫度感測器與濕度感測器結合在一起而構成了一個單一的個體,因而測量精度較高且可精確得出露點,同時不會產生由於溫度與濕度感測器之間隨溫度梯度變化引起的誤差。CMOSensTM技術不僅將溫濕度感測器結合在一起,而且還將信號放大器、模/數轉換器、校準數據存儲器、標准I2C匯流排等電路全部集成在一個晶元內。SHT11感測器的內部結構框圖如圖2所示。SHT11的每一個感測器都是在極為精確的濕度室中校準的。SHT11感測器的校準系數預先存在OTP內存中。經校準的相對濕度和溫度感測器與一個14位的A/D轉換器相連,可將轉換後的數字溫濕度值送給二線I2C匯流排器件,從而將數字信號轉換為符合I2C匯流排協議的串列數字信號。

由於將感測器與電路部分結合在一起,因此,該感測器具有比其它類型的濕度感測器優越得多的性能。首先是感測器信號強度的增加增強了感測器的抗干擾性能,保證了感測器的長期穩定性,而A/D轉換的同時完成,則降低了感測器對干擾雜訊的敏感程度。其次在感測器晶元內裝載的校準數據保證了每一隻濕度感測器都具有相同的功能,即具有100%的互換性。最後,感測器可直接通過I2C匯流排與任何類型的微處理器、微控制器系統連接,從而減少了介面電路的硬體成本,簡化了介面方式。3.1 輸出特性(1)濕度值輸出SHT11可通過I2C匯流排直接輸出數字量濕度值,其相對濕度數字輸出特性曲線如圖3所示。由圖3可看出,SHT11的輸出特性呈一定的非線性,為了補償濕度感測器的非線性,可按如下公式修正濕度值:RHlinear=c1+c2SORH+c3SORH2式中,SORH為感測器相對濕度測量值,系數取值如下:12位:SORH:c1=-4,c2=0.0405,c3=-2.8×10-68位:SORH:c1=-4,c2=0.648,c3=-7.2×10-4(2)溫度值輸出由於SHT11溫度感測器的線性非常好,故可用下列公式將溫度數字輸出轉換成實際溫度值:T=d1+d2SOT當電源電壓為5V,且溫度感測器的解析度為14位時,d1=-40�d2=0.01,當溫度感測器的解析度為12位時,d1=-40�d2=0.04。(3)露點計算空氣的露點值可根據相對濕度和溫度值來得出,具體的計算公式如下:LogEW=(0.66077+7.5T/(237.3+T)+[log10(RH)-2]Dp=[(0.66077-logEW)×237.3]/(logEW-8.16077)3.2 命令與介面時序SHT11感測器共有5條用戶命令,具體命令格式見表1所列。下面介紹一下具體的命令順序及命令時序。

i2c匯流排數字式溫濕度感測器sht11及其在單片機系統的應用 來自: 免費論文網
表1 SHT11感測器命令列表命 令編 碼說 明測量溫度00011溫度測量測量濕度00101濕度測量讀寄存器狀態00111「讀」狀態寄存器寫寄存器狀態00110「寫」狀態寄存器軟啟動11110重啟晶元,清除狀態記錄器的錯誤記錄11毫秒後進入下一個命令(1)傳輸開始初始化傳輸時,應首先發出「傳輸開始」命令,該命令可在SCK為高時使DATA由高電平變為低電平,並在下一個SCK為高時將DATA升高。接下來的命令順序包含三個地址位(目前只支持「000」)和5個命令位,當DATA腳的ack位處於低電位時,表示SHT11正確收到命令。(2)連接復位順序如果與SHT11感測器的通訊中斷,下列信號順序會使串口復位:即當DATA線處於高電平時,觸發SCK 9次以上(含9次),此後應接著發一個「傳輸開始」命令。
表2 SHT11狀態寄存器類型及說明位類型說 明缺 省 7 保留0 6讀工檢限(低電壓檢查)X 5 保留0 4 保留0 3 只用於試驗,不可以使用0 2讀/寫加熱0關1讀/寫不從OTP重下載0重下載0讀/寫'1'=8位相對濕度,12位溫度解析度。'0'=12位相對濕度,14位濕度解析度012位相對濕度,14位濕度(3)溫濕度測量時序當發出了溫(濕)度測量命令後,控制器就要等到測量完成。使用8/12/14位的解析度測量分別需要大約11/55/210ms的時間。為表明測量完成,SHT11會使數據線為低,此時控制器必須重新啟動SCK,然後傳送兩位元組的測量數據與1位元組CRC校驗和。控制器必須通過使DATA為低來確認每一個位元組,所有的量均從右算,MSB列於第一位。通訊在確認CRC數據位後停止。如果沒有用CRC-8校驗和,則控制器就會在測量數據LSB後保持ack為高來停止通訊,SHT11在測量和通訊完成後會自動返回睡眠模式。需要注意的是:為使SHT11的溫升低於0.1℃�此時的工作頻率不能大於標定值的15%(如:12位精確度時,每秒最多進行3次測量)。測量溫度和濕度命令所對應的時序如圖4所示。
論文I2C匯流排數字式溫濕度感測器SHT11及其在單片機系統的應用來自

圖4
3.3 寄存器配置SHT11感測器中的一些高級功能是通過狀態寄存器來實現的,寄存器各位的類型及說明見表2所列。下面對寄存器相關位的功能說明:(1)加熱使晶元中的加熱開關接通後,感測器溫度大約增加5℃,從而使功耗增加至8mA@5V。加熱用途如下:●通過對啟動加熱器前後的溫、濕度進行比較,可以正確地區別感測器的功能;●在相對濕度較高的環境下,感測器可通過加熱來避免冷凝。(2)低電壓檢測SHT11工作時可以自行檢測VDD電壓是否低於2.45V,准確度為±0.1V。(3)下載校準系數為了節省能量並提高速度,OTP在每次測量前都要重新下載校準系數,從而使每一次測量節省8.2ms的時間。(4)測量解析度設定將測量解析度從14位(溫度)和12位(濕度)分別減到12位和8位可應用於高速或低功耗場合。

4 應用說明4.1 運行條件測量量程以外的溫度會使濕度信號暫時地偏移+3%。然後感測器會慢慢返回到校準條件。若將晶元在濕度小於5%環境下加熱24小時到90℃,晶元就會迅速恢復高相對濕度、高溫度環境的影響,但是,延長強度條件會加速晶元的老化。4.2 安裝注意事項由於大氣的相對濕度與溫度的關系比較密切,因此,測量大氣溫度時的要點是將感測器與大氣保持同一溫度,如果感測器線路板上有發熱元件,SHT11應與熱源保持良好的通風,為減少SHT11和PCB之間的熱傳導,應使銅導線最細並在其中加上窄縫,同時應避免使感測器在強光或UV下曝曬。感測器在布線時,SCK和DATA信號平行且相互接近,或信號線長於10cm時,均會產生干擾信息,此時應在兩組信號之間放置VDD或GND。
5 具體應用圖5是AT89C2051單片機與SHT11的介面電路。由於AT89C2051不具備I2C匯流排介面,故使用單片機通用I/O口線來虛擬I2C匯流排,並利用P1.0來虛擬數據線DATA,利用P1.1口線來虛擬時鍾線,並在DATA端接入一隻4.7kΩ的上拉電阻,同時,在VDD及GND端接入一隻0.1μF的去耦電容。下面給出與上述硬體電路配套的C51應用程序。#define DATA P1_1#define SCK P1_0#define ACK 1#define noACK 0#define MEASURE_TEMP 0x03 //測量溫度命令#define MEASURE_HUMI 0x05 //測量濕度命令//讀溫濕度數據char s-measure(unsigned char *p- value, un-signed char *p_checksum, unsigned char mode){unsigned char error=0;unsigned int i;s_transstart(); //傳輸開始switch(mode){caseTEMP:error+=s_write_byte(measure_temp);break;caseHUMI:error+=s_write_byte(measure_humi);break;default:break;}for(i=0;i<65535;i++) if(DATA==0) break;if (DATA) reeor+=1;*(p_value)=s_read_byte(ACK);*(p_value+1)=s_read_byte(ACK);*p_checksum=s_read_byte(noACK);return error;}//溫濕度值標度變換及溫度補償void calc_sth15(float *p_humidity,float *p_tempera-ture){const float c1=-4.0;const float c2=0.0405;const float c3=-0.0000028;const float t1=-0.01;const float t2=0.00008;float rh=×p_humidity;float t=×p_temperature;float rh_lin;float th_ture;float t_c;t_c=t×0.01-40;rh_lin=c3×rh×rh+c2×rh+c1;trh_ture=(t_c-25)×(t1+t2×rh)+rh_lin;×p_temperature=t-c;×p_humidity=rh_ture;}//從相對溫度和濕度計算露點char calc_dewpoint(float h,float t){float logex,dew_point;logex=0.66077+7.5×t/(237.3+t)+[log10(h)-2];dew_point=(logex-0.66077)×237.3/(0.66077+7.5-logex);return dew_point;}限於篇幅,上述程序中未給出傳輸開始、寫位元組數據、讀位元組數據函數。

C. 單片機控制SHT15溫濕度感測器的穩定電源怎麼弄

是TL431吧,精度達1%

D. 誰能發張溫濕度感測器sht11和單片機連接原理圖,現成的也可以


你可以按這個電路接。

E. 多個sht11能並聯到一個地址線嗎多個sht11感測器怎麼能連接到單片機上

SHT11沒有單獨的片選信號,也沒有標準的I²C地址識別功能,所以不能並聯數據線時鍾線使用。
多個SHT11隻能分別連接到單片機上,每個感測器佔用2根IO口(時鍾線若驅動能力足夠,並且線纜不太長,那麼可以共用)。
當然SHT11本身通信速率並不高、信息量也不大,一個單片機完全可以通過各種IO擴展方式擴出大量的IO連接很多的SHT11。連接兩三百個完全不成問題。

F. 誰能給個溫濕度感測器sht11和單片機連接圖 要具體的圖

這個很簡單的,給你一個參考

G. 求SHT11或DHT90溫室感測器晶元和MCS51單片機組成的測量電路及電路圖。越詳細越好!

我記得SHT11和DHT90除了供電以外,串列數據介面可以直接用IO引腳驅動
只是你需要按照通訊協議編寫程序

H. 空氣濕度感測器sht10與430單片機如何接線

SHT1X系列感測器,採用IIC通信協議,通過內部信號轉換模塊,將溫度、濕度等模擬量轉變成為數字量輸出。

該感測器系列一般使用4引腳對外輸出。430單片機與其相連時,主要連接感測器的DATA引腳和CLK引腳。參考電路圖如下:

I. 溫濕度感測器SHT10與51單片機連接電路

SHTl0的供電電壓為2.4~5.5 V。感測器上電後,要等待11ms,從「休眠」狀態恢復。在此期間不發送任何指令。電源引腳(VDD和GND)之間可增加1個100 nF的電容器,用於去耦濾波。

為避免數據發生沖突,MCU應該驅動DATA使其處於低電平狀態,而外部接1個上拉電阻將信號拉至高電平。

J. 誰能發張溫濕度感測器sht11和單片機連接原理圖,現成的也可以。謝謝

原理圖很簡單 就是把sht11的數據口和時鍾口就到單片機的兩個埠,關鍵是編程啊,下面一段是我之前寫的一段關於sht11的程序,希望能幫到你,有問題交流下的
#include <reg52.h> //頭文件
#include <intrins.h>
#include <stdio.h> //
#include <math.h> //Keil library

//**************************************

#define uchar unsigned char //定義一下方便使用
#define uint unsigned int //定義一下方便使用
#define ulong unsigned long //定義一下方便使用

#define TEMP_ML 0x03 //000 0001 1 溫度命令
#define HUMI_ML 0x05 //000 0010 1 溫度命令
unsigned char error ;//全局錯誤變數
unsigned char ack ;//全局應答變數
//float temp_zi ;//全局應答變數
//float humi_zi ;//全局應答變數
unsigned char temp_h ;//全局應答變數
unsigned char temp_LL ;//全局應答變數

unsigned int xian_t=0;//溫度顯值
unsigned int xian_h=0;//濕度顯值

uchar set_h,set_l;
bit setbz_h,setbz_l,setkey;

sbit DATA =P2^6;//數據
sbit SCK=P2^7;//時鍾
sbit hot =P2^0;// 加熱
sbit motor =P2^1;// 電機
sbit speek =P2^2;// 聲音
sbit set =P0^0;// 設置
sbit setup =P0^1;// 設置+
sbit setdown =P0^2;// 設置-

sbit gwei =P3^4;//個位
sbit swei =P3^3;//十位
sbit bwei =P3^2;//百位
sbit qwei =P3^1;//千位
unsigned char code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//共陽

//*******************************基本驅動程

/////////////////
//////////////////////

char read() //讀一個位元組 返回應答信號
//----------------------------------------------------------------------------------
// reads a byte form the Sensibus and gives an acknowledge in case of "ack=1"
{
unsigned char i,val=0;
temp_LL=0;
temp_h=0;
DATA=1; //釋放數據匯流排
for (i=0x80;i>0;i/=2) //位移8位
{ SCK=1; //上升沿讀入
if (DATA) val=(val | i); //確定值
SCK=0;
}
DATA=0; //讀應答信號,有應答為1,為應答為0 通過CPU下拉為應答
SCK=1; //第9個脈沖
_nop_(); _nop_(); _nop_(); //pulswith approx. 5 us
SCK=0;
DATA=1; //釋放數據匯流排
temp_h=val;
val=0;

////低8位/////////////////////////////

DATA=1; //釋放數據匯流排
for (i=0x80;i>0;i/=2) //位移8位
{ SCK=1; //上升沿讀入
if (DATA) val=(val | i); //確定值
SCK=0;
}
DATA=1;//0; //不需要應答 通過CPU下拉為應答
SCK=1; //第9個脈沖
_nop_(); _nop_(); _nop_(); //pulswith approx. 5 us
SCK=0;
DATA=1; //釋放數據匯流排
temp_LL=val;

}
////////////

char write(unsigned char value) //寫一個位元組 返回應答信號
//---------------------------------------------------------
{
unsigned char i ;
ack=0;
for (i=0x80;i>0;i/=2) //釋放數據匯流排
{ if (i & value) DATA=1; //寫入值
else DATA=0;
SCK=1; //上升沿寫入
_nop_(); _nop_(); _nop_(); //延時
SCK=0;
}
DATA=1; //釋放數據匯流排
SCK=1; //第9個脈沖
if (DATA==1) ack=1;
//讀應答信號
SCK=0;
return ack; //error=1 表示沒有應答
}
////////

void start_sht11(void) //啟動
//--------------------------------------------------------
{
DATA=1; SCK=0; //數據為1,SCK=0
_nop_();
SCK=1; //第一個脈沖
_nop_();
DATA=0; //數據跌落
_nop_ ();
SCK=0; //完成一個脈沖
_nop_(); _nop_(); _nop_();
SCK=1; //再一個脈沖
_nop_();
DATA=1; //數據變為1
_nop_();
SCK=0; //完成該脈沖
}

//////////////////////////////////
void sht_rest(void) //復位

{
unsigned char i;
DATA=1; SCK=0; //數據為1 時鍾為0
for(i=0;i<9;i++) //9 個脈沖為 復位
{ SCK=1;
SCK=0;
}
start_sht11(); //啟動
}

////////////////////////////////

//測量溫度或者是溫度,返回校驗值
text_a(unsigned char ml)
{
unsigned int i;

start_sht11(); //啟動
write(ml);//寫入測溫度
if (ack==1)
{
sht_rest() ;//復位
write(ml);//寫入測溫度
}

//判斷是否處於忙

// DATA=1;//釋放數據匯流排
//for (i=0;i<65535;i++) if(DATA==0) break;

for (i=0;i<55535;i++){ if(DATA==0) break;else {xianshi();} }

read();//讀溫度

}

/////////溫濕度處理//////

text_jishuan_temp11()
{
error=0;
ack=0;
sht_rest() ;//復位

text_a(TEMP_ML);

text_jishuan_temp();
key();
text_a(HUMI_ML);

text_jishuan_humi();

}

/////

//////////計算溫度////
text_jishuan_temp()
{
float aa=0,bb=0,temp_zi;
int abcd=0;

aa=(float)temp_h*256+(float)temp_LL;
temp_zi=0.01*aa-40;

//

if (temp_zi<0)
{
temp_zi=0;
}
temp_zi=temp_zi*10;
xian_t=(int)temp_zi;//給顯示值

}
///////計算濕度//////
text_jishuan_humi()
{
float aa=0,bb=0,humi_zi;
int abcd=0;

aa=(float)temp_h*256+(float)temp_LL;

bb=aa*aa*2.8/1000000;
aa=0.0405*aa;
aa=aa-4-bb;
humi_zi=aa;

//
humi_zi=humi_zi*10;
xian_h=(int)humi_zi;
}

///////延時///////
delay(int i)
{
while(--i);

}

///////顯示處理///////
xianshi()
{
int abcd=0;
int i;
for (i=0;i<1;i++)
{
abcd=xian_h;
gwei=1;
swei=1;
bwei=1;
qwei=1;
P1=dispcode[abcd/100];
qwei=0;
delay(40);
qwei=1;
abcd=abcd%100 ;
P1=dispcode[abcd/10];
bwei=0;
delay(40);
bwei=1;

if(setbz_h^setbz_l)
{
if(setbz_h) abcd=set_h;
if(setbz_l) abcd=set_l;

P1=dispcode[abcd/10];
swei=0;
delay(40);
swei=1;
P1=dispcode[abcd%10];
gwei=0;
delay(40);
gwei=1;

}
else
{
abcd=xian_t;
P1=dispcode[abcd/100];
swei=0;
delay(40);
swei=1;
abcd=abcd%100 ;
P1=dispcode[abcd/10];
gwei=0;
delay(40);
gwei=1;
}
}
}

doing()
{
char xian_mi;
xian_mi=xian_t/10;
if((xian_mi<set_h)&(xian_t>set_l)) { motor=0;hot=0;speek=0;}
if(xian_mi>set_h) { motor=1;hot=0;speek=1;}
if(xian_mi<set_l) { motor=0;hot=1;speek=1;}
}

key()
{
if(set&setkey)
{
setkey=0;
if(setbz_l) {setbz_l=0;setbz_h=0;}
else
{ if(!setbz_h) setbz_h=1;
else {setbz_h=0;setbz_l=1;}
}
}
if(!set) setkey=1;

if(setup==0)
{
if(setbz_h==1)
{ if (set_h<=99) set_h++;}
if(setbz_l==1)
{ if ((set_l<set_h)&(set_l<=99)) set_l++;}
}

if(setdown==0)
{
if(setbz_h==1)
{ if ((set_h>set_l)&(set_h>=1)) set_h--;}
if(setbz_l==1)
{ if (set_l>=1) set_l--;}
}

}

//系統初始化///
csh()
{
P0=0XFF;
P1=1;
P2=0;
P3=0XFF;
}

/////////////////////////////////
///////////////////////
main()
{

set_h=22;//設置高溫
set_l=20;//設置低溫

csh();//系統初始化
while(1)
{
text_jishuan_temp11();//測溫濕度
//xianshi();//顯示
doing();//處理
key();//鍵處理
// xianshi();//顯示

}
}

閱讀全文

與sht與單片機相連電路相關的資料

熱點內容
壓縮機風扇電機轉速慢 瀏覽:86
文件伺服器如何查看訪問人員 瀏覽:125
絕佳買賣指標加密 瀏覽:756
git分支編譯 瀏覽:154
51單片機c語言應用程序設計實例精講 瀏覽:560
華為安卓手機編譯器 瀏覽:46
怎樣在打開微信前加密 瀏覽:664
旺旺聊天記錄怎麼加密 瀏覽:411
王安憶長恨歌pdf 瀏覽:619
mobile文件夾可以卸載嗎 瀏覽:280
什麼是2通道伺服器 瀏覽:346
mc正版怎麼開伺服器地址 瀏覽:408
樂高解壓朋友圈 瀏覽:14
linux軟raid性能 瀏覽:368
貼片機編程軟體下載 瀏覽:360
mooc大學樂學python答案 瀏覽:408
怎麼投訴途虎app 瀏覽:37
安卓重力感應怎麼關 瀏覽:721
我的世界ios怎麼建伺服器地址 瀏覽:759
伺服器埠ip都是什麼意思 瀏覽:263