久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4172|回復: 2
打印 上一主題 下一主題
收起左側

基于SHT31的溫濕度液晶顯示變送器(含完整程序代碼)

[復制鏈接]
跳轉到指定樓層
樓主

         傳感器介紹: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)

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:337280 發表于 2022-8-3 15:30 | 只看該作者
能在這個論壇分享程序嗎?沒有C幣
回復

使用道具 舉報

無效樓層,該帖已經被刪除
地板
ID:1129758 發表于 2024-9-23 08:26 | 只看該作者
內容不在了,能再上一下嗎
回復

使用道具 舉報

5#
無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天狠狠| 激情a | 欧美成人h版在线观看 | 国产一区二区三区精品久久久 | 亚洲天堂色 | 中文字幕 亚洲一区 | 久久精品国产亚洲 | 欧美性大战久久久久久久蜜臀 | 日韩在线观看一区二区三区 | 日韩精品在线观看一区二区三区 | 成人午夜精品 | 日日综合 | 日韩一区二区av | 国产精品久久久久久一区二区三区 | 伊人一二三| h视频免费在线观看 | 精品av | 国产精品99久久久久久www | 午夜影院污 | 伊人二区 | 一区二区三区免费网站 | 久久伊人一区 | 亚洲高清免费 | 精品欧美乱码久久久久久1区2区 | 日韩一区中文字幕 | 国产精品国产成人国产三级 | 亚洲一区二区三区四区视频 | 久久国产激情视频 | 国产成人99久久亚洲综合精品 | 九九热免费观看 | 日韩视频专区 | av中文在线观看 | 亚洲 欧美 另类 综合 偷拍 | 黑人精品xxx一区一二区 | 国产大片黄色 | 亚洲乱码一区二区三区在线观看 | 亚洲高清在线 | avmans最新导航地址 | 欧美日韩一区二区在线 | 中文精品视频 | 国产日韩久久 |