傳感器介紹:SHT-31是一款低成本環境溫濕度檢測模塊。
工作電壓 2.4-5.5v 功耗小,體積小,采用DFN封裝工藝。
其工作原理,是通過單片機讀取溫度濕度數據,IIC通信方式輸出。
特點:體積小,高性價比,IIC通信。
主要應用:遠程遙測裝置,通風和空調系統,溫控器,恒濕器等。
顯示器:產品上常用的LCD12864液晶顯示屏:JLX12864G-086-PN
根據本資料可以設計制作出一個高精度的溫濕度計,程序里面有算法補償處理。另外本人將模塊溫濕度值與標準表對比,數值幾乎一致,溫度相差±0.1℃,相對濕度相差±0.2%RH,說明設計的精度還是很不錯的。
先看下硬件接線圖和原理圖:
使用到的顯示器LCD12864是 JLX12864G-086-PN;資料介紹:(某一個寶搜索 晶聯訊電子 找到12864G-086-PC)
下面看下程序部分:
主函數部分:
c
#include "system.h"
#include "sht3x.h"
#include "math.h"
#include "i2c_hal.h"
#include "lcd12864.h"
#include <intrins.h>
ft temperature; // 溫度 [°C]
ft humidity; // 濕度 [%RH]
unsigned char datas[7]={ 0,0,0,0,0,0,0,};
void Delay100us(unsigned int j);
void SHT3X_Init(u8t i2cAddress);
void SHT3X_SetI2cAdr(u8t i2cAddress);
etError SHT3X_GetTempAndHumi(ft* temperature, ft* humidity,
etRepeatability repeatability, etMode mode,
u8t timeout);
void Write_IIC_Byte(unsigned char IIC_Byte); //顯示靜態字符函數
void Display_Init()
{
display_char(1,32,16,16,10); //顯示:溫濕度計
display_char(1,48,16,16,11);
display_char(1,64,16,16,12);
display_char(1,80,16,16,13);
display_char(4,43,8,16,15); //默認符號為正 8*16
display_char(4,0,16,16,10); //顯示: 溫度:
display_char(4,16,16,16,12);
display_char(4,32,9,16,14);
display_char(4,108,16,16,17); //顯示 ℃
display_char(7,0,16,16,11); //顯示: 濕度:
display_char(7,16,16,16,12);
display_char(7,32,9,16,14);
display_char(7,98,9,16,18); //顯示: %RH
display_char(7,107,9,16,19);
display_char(7,116,9,16,20);
}
void Display_TH(int a,int b) //顯示動態值:溫濕度值
{
if(a<0)
{
display_char(4,43,8,16,21); //符號為正 8*16
a=abs(a); //取絕對值
}
else
{
display_char(4,43,8,16,15); //符號為正 8*16
}
datas[0]=a/1000; //溫度
datas[1]=a%1000/100;
datas[2]=a%1000%100/10;
datas[3]=a%1000%100%10;
datas[4]=b/100; //濕度
datas[5]=b%100/10;
datas[6]=b%100%10;
display_char(4,53,11,16,datas[0]); //溫度值xx.xx
display_char(4,64,11,16,datas[1]);
display_char(4,75,8,16,16); //小數點
display_char(4,83,11,16,datas[2]);
display_char(4,94,11,16,datas[3]);
display_char(7,53,11,16,datas[4]); //濕度值xx.x
display_char(7,64,11,16,datas[5]);
display_char(7,75,8,16,16);
display_char(7,83,11,16,datas[6]);
}
int main(void)
{
SHT3X_Init(0x44) ; //傳感器初始化,IIC地址默認為0x44
initial_lcd();
delay(100);
clear_screen(); //清屏
Display_Init(); //顯示靜態字符,“溫濕度計”等
while(1)
{
int a,b;
etError error;
I2c_StartCondition(); //iic通信開始信號
if(SHT_SDA != 0){} // 錯誤,一直等待
//50:等待時鐘擴展的等待時間
error =SHT3X_GetTempAndHumi(&temperature, &humidity, REPEATAB_HIGH, MODE_CLKSTRETCH, 50);
I2c_StopCondition();
a=floor(temperature*100); //溫度值放大100倍,顯示2未小數
b=floor(humidity*10) ; //溫度值放大10倍
Display_TH(a,b); //lcd刷新顯示溫濕度值
delay(1000); //延時2s
}
}
```
上面的display_char(4,53,11,16,datas[0]);是我經過多次調試得到的最佳顯示效果:既要字體大充分利用顯示區域,又要排版美觀合理,還是花了一點時間。
通過這次設計,對個人能力又有了一定程度的提高;后續考慮做一個便攜式的溫濕度計,在日常生活和工作中都會有用處:采用CR2032電池和USB供電共存的供電方式,顯示器采用雙排8字段式液晶屏QYT12429,可用1621芯片驅動。芯片采用STC8H1K08即可,因為使用到的硬件資源并不多。
最后把設計完整的程序代碼奉上:[點此獲取](https://download.csdn.net/download/weixin_43412560/17952889)
|