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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

RS485溫濕度變送器(導軌式)stm32串口解析代碼+相關資料

  [復制鏈接]
跳轉到指定樓層
樓主
最近做設計用到了這個溫濕度變送器,自己寫的代碼以及網上搜集的一些資料進行了統一整理。


資料包括溫濕度變送器說明書,配置測試上位機,以及usb轉485驅動,通訊歷程(西門子SmartPLC,組態王等)。
此變送器可采用pc軟件labview等(需485轉usb)進行解析,或單片機串口解析(需485轉ttl)以及plc等進行解析數據,本貼采用STM32F1進行解析,其他單片機只需更改串口解析函數即可完成移植。
顯示部分采用0.96oled 7針spi 。解析速率可根據需求通過調整發送間隔時間即可。
連接示意圖如下:


運行結果如下:
單片機源程序如下:
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "oled.h"
  4. #include "bmp.h"
  5. #include "led.h"
  6. #include "usart.h"        
  7. #include "key.h"
  8. int main(void)
  9. {
  10.      SystemInit();
  11.      delay_init();
  12.      OLED_Init();
  13.      LED_Init();
  14.      KEY_Init();
  15.      USART3_Init(9600);        
  16.      Bling(3);                                                
  17.      delay_ms(1000);
  18.      NVIC_Configuration();
  19.     display();
  20.   while(1)
  21.   {
  22.      Ask_temperature_data();
  23.      delay_ms(50);
  24.      Ask_humidity_data();
  25.      delay_ms(1000);
  26.   }
  27. }
  28. /**************接線說明*******************
  29. ********顯示屏***************************
  30. //              GND  電源地
  31. //              VCC  3.3v電源
  32. //              D0   PC3(SCL)
  33. //              D1   PC2(SDA)
  34. //              RES  PC1
  35. //              DC   PC0
  36. //              CS   GND  
  37. ********串口******************************
  38. **              USART3_TX                                  -->        PB10
  39. **              USART3_RX                                  -->        PB11
  40. 溫濕度變送器解析
  41. 溫度: °
  42. 濕度: %
  43. *****************************************/
  44. void Ask_temperature_data(void)
  45. {
  46.   ask_data=1;
  47.   USART3_Send(0x01);
  48.   USART3_Send(0x03);
  49.   USART3_Send(0x00);
  50.   USART3_Send(0x01);
  51.   USART3_Send(0x00);
  52.   USART3_Send(0x01);
  53.   USART3_Send(0xD5);
  54.   USART3_Send(0xCA);
  55. }

  56. void Ask_humidity_data(void)
  57. {
  58.   ask_data=2;
  59.   USART3_Send(0x01);
  60.   USART3_Send(0x03);
  61.   USART3_Send(0x00);
  62.   USART3_Send(0x00);
  63.   USART3_Send(0x00);
  64.   USART3_Send(0x01);
  65.   USART3_Send(0x84);
  66.   USART3_Send(0x0A);
  67. }
  68. void display(void)
  69. {                        
  70.   Draw_Logo1();
  71.   write_16_16_CN(0,0,0);    //溫
  72.   write_16_16_CN(16,0,1);   //濕
  73.   write_16_16_CN(32,0,2);   //度
  74.   write_16_16_CN(48,0,4);   //變
  75.   write_16_16_CN(64,0,5);   //送
  76.   write_16_16_CN(80,0,6);   //器
  77.   write_16_16_CN(96,0,7);   //解
  78.   write_16_16_CN(112,0,8);  //析        
  79.   write_16_16_CN(0,3,0);    //溫
  80.   write_16_16_CN(16,3,2);   //度
  81.   LCD_P8x16Str(32,3,":");
  82.   write_16_16_CN(0,6,1);    //濕
  83.   write_16_16_CN(16,6,2);   //度
  84.   LCD_P8x16Str(32,6,":");
  85. }
復制代碼

溫濕度變送器解析code.zip (308.13 KB, 下載次數: 115)
說明書.zip (547.16 KB, 下載次數: 85) 溫濕度配置軟件.zip (4.92 MB, 下載次數: 94)
其他資料.zip (8.2 MB, 下載次數: 99)

代碼評論后可見,資料齊全!

本貼為原創,轉載請注明出處!
時間:2020/11/
祝好!

評分

參與人數 2黑幣 +80 收起 理由
luliang02003 + 30
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:97678 發表于 2020-11-12 14:55 | 只看該作者
好東西,看看是不是完整的資料!!!!!!!!!!!!
回復

使用道具 舉報

板凳
ID:235691 發表于 2020-11-12 15:32 | 只看該作者
資料完整就好了。
回復

使用道具 舉報

地板
ID:721056 發表于 2020-11-16 18:34 | 只看該作者
gpdt3209 發表于 2020-11-12 15:32
資料完整就好了。

資料齊全
回復

使用道具 舉報

5#
ID:811405 發表于 2020-11-17 15:24 | 只看該作者
好東西,值得一看
回復

使用道具 舉報

6#
ID:19198 發表于 2020-11-19 23:23 | 只看該作者
老規矩,先回后下!!!!!!!
回復

使用道具 舉報

7#
ID:733865 發表于 2020-11-21 20:08 | 只看該作者
好想法,求看源碼
回復

使用道具 舉報

8#
ID:59423 發表于 2020-11-29 15:17 | 只看該作者
多謝分享,正在使用溫度變送器
回復

使用道具 舉報

9#
ID:409674 發表于 2020-11-29 17:50 | 只看該作者
參考下,看是否能用51代替 。
回復

使用道具 舉報

10#
ID:721056 發表于 2020-12-1 08:50 來自手機 | 只看該作者
zxianyu 發表于 2020-11-29 17:50
參考下,看是否能用51代替 。

配置下51的串口加幾個變量就可以
回復

使用道具 舉報

11#
ID:929006 發表于 2021-7-11 10:34 | 只看該作者
好東西,正在學習485,一些東西不明白。
回復

使用道具 舉報

12#
ID:929006 發表于 2021-7-11 10:37 | 只看該作者
哪個附件是源碼。第一個嗎?
回復

使用道具 舉報

13#
ID:929006 發表于 2021-7-11 10:39 | 只看該作者
樓主,改造成STC89C52啊,IIC接口的OLED屏
回復

使用道具 舉報

14#
ID:890487 發表于 2021-7-11 21:14 | 只看該作者
正好需要 學習一下 謝謝樓主
回復

使用道具 舉報

15#
ID:409674 發表于 2021-7-20 10:06 | 只看該作者
這個變送器買了也有一段時間,現在學習使用。
回復

使用道具 舉報

16#
ID:929006 發表于 2021-7-22 21:10 | 只看該作者
大佬看下我的程序,用51單片機讀溫濕度數據
/*****************************main.c 文件程序源代碼*****************************/
#include <reg52.h>
#include <intrins.h>


/* 數碼管顯示配置,可以不看 */
typedef unsigned char u8;
u8 code smgduan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};

unsigned int wendu_H=0x00;                 //溫度值高4位字節
unsigned int wendu_L=0x00;                 //溫度值低4位字節
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

/* 485通信 */
unsigned char len;
unsigned char pdata buf[40]={0x01,0x03,0x02,0x00,0x00,0x03,0x04,0x73};

sbit RS485_DIR=P1^7;
bit flagFrame = 0;  //幀接收完成標志,即接收到一幀新數據
bit flagTxd = 0; //單字節發送完成標志,用來替代 TXD 中斷標志位
unsigned char cntRxd = 0;   //接收字節計數器
unsigned char pdata bufRxd[64];  //接收字節緩沖區
unsigned char TORH=0;
unsigned char TORL=0;

/* 延遲函數,數碼管顯示調用 */
void delay(unsigned int t,unsigned int u)
{
        unsigned int i,j;
    for(i=0;i<t;i++)
        for(j=0;j<u;j++);
}


/* 串口配置函數,baud-通信波特率 */
void ConfigUART(unsigned int baud)
{
        SCON = 0x50; //配置串口為模式 1
        TMOD &= 0x0F; //清零 T1 的控制位
        TMOD |= 0x20; //配置 T1 為模式 2
        TH1 = 256 - (12000000/12/32)/baud; //計算T1重載值,12M晶振
        TL1 = TH1;     //初值等于重載值
        ET1 = 0; //禁止 T1 中斷
        ES  = 1;       //使能串口中斷
        TR1 = 1; //啟動 T1
}

void DelayX10us(unsigned char t)
{
do{
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  }while(--t);
}

/* 串口數據寫入,即串口發送函數,buf-待發送數據的指針,len-指定的發送長度 */

void UartWrite(unsigned char *buf, unsigned char len)
{
        RS485_DIR=1;
    while (len--)  //循環發送所有字節
    {
        flagTxd = 0;       //清零發送標志
        SBUF = *buf++;     //發送一個字節數據
        while (!flagTxd); //等待該字節發送完成
    }
        DelayX10us(5);
        RS485_DIR=0;
}

/* 串口數據讀取函數,buf-接收指針,len-指定的讀取長度,返回值-實際讀到的長度 */
unsigned char UartRead(unsigned char *buf, unsigned char len)
{
    unsigned char i;
     
    if (len > cntRxd)  //指定讀取長度大于實際接收到的數據長度時,
   {                     //讀取長度設置為實際接收到的數據長度
       len = cntRxd;
   }
   for (i=0; i<len; i++)  //拷貝接收到的數據到接收指針上
   {
       *buf++ = bufRxd[i];
   }
   cntRxd = 0;  //接收計數器清零
   return len;  //返回實際讀取長度
}

/* 串口接收監控,由空閑時間判定幀結束,需在定時中斷中調用,ms-定時間隔 */
void UartRxMonitor(unsigned char ms)
{
    static unsigned char cntbkp = 0;
    static unsigned char idletmr = 0;

    if (cntRxd > 0)  //接收計數器大于零時,監控總線空閑時間
    {
        if (cntbkp != cntRxd)  //接收計數器改變,即剛接收到數據時,清零空閑計時
        {
            cntbkp = cntRxd;
            idletmr = 0;
        }
        else                      //接收計數器未改變,即總線空閑時,累積空閑時間
        {
            if (idletmr < 30) //空閑計時小于 30ms 時,持續累加
            {
                idletmr += ms;
                if (idletmr >= 30) //空閑時間達到 30ms 時,即判定為一幀接收完畢
                {
                    flagFrame = 1;  //設置幀接收完成標志
                }
            }
        }
    }
    else
    {
        cntbkp = 0;
    }
}

/* 串口中斷服務函數 */
void InterruptUART() interrupt 4
{
    if (RI)  //接收到新字節
    {
        RI = 0;  //清零接收中斷標志位
        if (cntRxd < sizeof(bufRxd)) //接收緩沖區尚未用完時,
        {                                 //保存接收字節,并遞增計數器
            bufRxd[cntRxd++] = SBUF;
        }
    }
    if (TI)  //字節發送完畢
    {
        TI = 0;   //清零發送中斷標志位
        flagTxd = 1;  //設置字節發送完成標志
    }
   
}

void ConfigTimer0(unsigned int ms)
{
    unsigned long tmp;
        tmp=12000000/12;          //12M晶振
        tmp=(tmp*ms)/1000;
        tmp=65536-tmp;
        tmp=tmp+33;
        TORH=(unsigned char)(tmp>>8);
        TORL=(unsigned char)tmp;
        TMOD&=0xF0;
        TMOD|=0x01;
        TH0=TORH;
        TL0=TORL;
        ET0=1;
        TR0=1;
}

void main()
{
EA=1;
ConfigTimer0(1);
ConfigUART(2400);         //設置波特率2400
delay(200,500);
UartWrite(buf,len);         //向傳感器發送命令,01 03 02 00 00 03 04 73
if (flagFrame) //有命令到達時,讀取處理該命令
    {
       flagFrame = 0;
       len = UartRead(buf, sizeof(buf));  //將接收到的命令讀取到緩沖區中
        }
wendu_H=bufRxd[3];                //數據幀第4字節是溫度值高位,
wendu_L=bufRxd[4];                //數據幀第5字節是溫度值低位。
while (1)                                //以下為數碼管顯示溫度值,16進制表示
{
        LSA=0;
    LSB=1;
    LSC=1;
        P0=smgduan[wendu_H%16];
        delay(10,5);
        LSA=1;
    LSB=1;
    LSC=1;
        P0=smgduan[wendu_H/16];
        delay(10,5);
        LSA=0;
    LSB=0;
    LSC=1;
        P0=smgduan[wendu_L%16];
        delay(10,5);
        LSA=1;
    LSB=0;
    LSC=1;
        P0=smgduan[wendu_L/16];
        delay(10,5);
}               
}

void InterruptTimer0() interrupt 1
{
    TH0 = TORH;  //重新加載重載值
    TL0 = TORL;
    UartRxMonitor(1);  //串口接收監控
}
回復

使用道具 舉報

17#
ID:929006 發表于 2021-8-14 23:20 | 只看該作者
本帖最后由 wsh123456789 于 2021-8-16 18:28 編輯

看貼的人不能說下嗎?MAX485的方向引腳接哪里?
回復

使用道具 舉報

18#
ID:929006 發表于 2021-8-16 19:38 | 只看該作者
MAX485的方向引腳接哪里?程序未定義啊
回復

使用道具 舉報

19#
ID:721056 發表于 2021-11-7 14:14 | 只看該作者
wsh123456789 發表于 2021-8-14 23:20
看貼的人不能說下嗎?MAX485的方向引腳接哪里?

好久沒看論壇了,你是用485模塊?
回復

使用道具 舉報

20#
ID:929006 發表于 2021-11-7 23:45 | 只看該作者
wbaisen 發表于 2021-11-7 14:14
好久沒看論壇了,你是用485模塊?

MAX485模塊
回復

使用道具 舉報

21#
ID:929006 發表于 2021-11-8 00:03 | 只看該作者
wbaisen 發表于 2021-11-7 14:14
好久沒看論壇了,你是用485模塊?

是的。我用MAX485模塊,不知道你的程序里,方向引腳是接單片機的哪個管腳哦?急!
回復

使用道具 舉報

22#
ID:929006 發表于 2021-11-9 20:35 | 只看該作者
這個程序好像不完整啊,讀取的溫度,濕度沒有經過處理,沒有顯示啊
回復

使用道具 舉報

23#
ID:1066371 發表于 2023-3-13 16:28 | 只看該作者
求源碼
回復

使用道具 舉報

24#
ID:1094506 發表于 2023-9-25 16:06 | 只看該作者
好東西,看看是不是完整的資料!!!!!!!!!!!!
回復

使用道具 舉報

25#
ID:543424 發表于 2023-10-14 12:13 | 只看該作者
用過這個模塊,485觸摸屏通訊。做實驗這個模塊好像只能顯示溫度,沒有開關量控制協議
回復

使用道具 舉報

26#
ID:1067504 發表于 2024-10-25 22:11 來自手機 | 只看該作者
先收藏,有幣再來下
回復

使用道具 舉報

27#
ID:30165 發表于 2024-12-22 10:09 | 只看該作者
最近剛好在學習這個  非常感謝給了一條思路
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕在线中文 | 欧美精品乱码99久久影院 | 成人网在线看 | 黄色在线免费观看 | 在线播放中文字幕 | 夜夜爽99久久国产综合精品女不卡 | 免费在线观看成人av | 欧美国产日韩在线观看 | 国产成人一区二区三区久久久 | 99色在线视频| 精品久久久久久久久久久久久久久久久 | 另类亚洲视频 | 91精品国产777在线观看 | 色婷婷久久久亚洲一区二区三区 | 久久免费观看视频 | 国产亚洲网站 | 四虎午夜剧场 | 成人在线国产 | 中文字幕视频网 | 亚洲 91 | 久久久久99 | 欧美成人一区二区三区 | 成人国产午夜在线观看 | 色资源在线 | 亚洲一区二区精品视频 | 激情av免费看 | 天天干亚洲 | 欧美性极品xxxx做受 | 国产成人精品免费 | 欧美老妇交乱视频 | 亚洲精品在线国产 | 日本在线播放一区二区 | 欧美中文字幕在线观看 | 国产一区二区 | 欧美激情综合五月色丁香小说 | 中文字幕一区二区三区四区五区 | 午夜免费网站 | 国产精品污www一区二区三区 | 欧美精品成人一区二区三区四区 | 逼逼视频 | 亚洲精品视频一区 |