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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32驅動溫濕度傳感器SHT3X的代碼,自己在用的,能用。

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


單片機源程序如下:
  1. #include "sht3x.h"
  2. #include "mdelay.h"


  3. // SHT3x用到的IO腳
  4. #define  SCL      PBout(6)
  5. #define  SDAOUT   PBout(7)
  6. #define  SDAIN    PBin(7)


  7. // SHT3x的地址(ADDR引腳已經硬件接地)
  8. #define  SLAVEADDRESS    0x88       //  ( 0x44<<1 )


  9. // SHT3x管腳初始化
  10. void Sht3x_Init(void)
  11. {
  12.         RCC->APB2ENR |= (1<<3);   // PB口時鐘使能
  13.         GPIOB->ODR |= (3<<6);     // PB6、PB7輸出高電平
  14.         GPIOB->CRL &= 0x00ffffff; // PB6、PB7設為開漏輸出
  15.         GPIOB->CRL |= 0x77000000;
  16. }


  17. static void SDAsetOUT(void)
  18. {
  19.         GPIOB->CRL &= 0x0fffffff; // 設置為開漏輸出
  20.         GPIOB->CRL |= 0x70000000;
  21. }


  22. static void SDAsetIN(void)
  23. {
  24.         GPIOB->CRL &= 0x0fffffff; // 設置為三態輸入
  25.         GPIOB->CRL |= 0x40000000;
  26. }


  27. static void I2C_Start(void)
  28. {
  29.   SDAsetOUT();

  30.   SDAOUT = 1;                // 拉高數據線
  31.   SCL = 1;                   // 拉高時鐘線
  32.   udelay(5);                 // 延時
  33.   SDAOUT = 0;                // 產生下降沿
  34.   udelay(5);                 // 延時
  35.   SCL = 0;                   // 拉低時鐘線
  36. }


  37. static void I2C_Stop(void)
  38. {
  39.   SDAsetOUT();

  40.   SDAOUT = 0;                // 拉低數據線
  41.   SCL = 1;                   // 拉高時鐘線
  42.   udelay(5);                 // 延時
  43.   SDAOUT = 1;                // 產生上升沿
  44.   udelay(5);                 // 延時
  45. }


  46. static void I2C_SendACK(u8 ack)
  47. {
  48.   SDAsetOUT();

  49.   SDAOUT = ack;              // 寫應答信號
  50.   udelay(5);
  51.   SCL = 1;                   // 拉高時鐘線
  52.   udelay(5);                 // 延時
  53.   SCL = 0;                   // 拉低時鐘線
  54.   SDAOUT = 1;
  55.   udelay(20);                // 延時
  56. }


  57. static u8 I2C_RecvACK(void)
  58. {
  59.   u8 temp;

  60.   SDAsetIN();

  61.   SCL = 1;                   // 拉高時鐘線
  62.   udelay(5);                 // 延時
  63.   temp = SDAIN;              // 讀應答信號
  64.   SCL = 0;                   // 拉低時鐘線
  65.   udelay(5);                 // 延時

  66.   return temp;
  67. }


  68. static void I2C_SendByte(u8 dat)
  69. {
  70.   u8 i;

  71.   SDAsetOUT();

  72.   for ( i=0; i<8; i++ )      // 8位計數器
  73.   {
  74.     SDAOUT = ( dat&0x80 ) ? 1 : 0 ;
  75.         dat <<= 1;
  76.     SCL = 1;                 // 拉高時鐘線
  77.     udelay(5);               // 延時
  78.     SCL = 0;                 // 拉低時鐘線
  79.     udelay(5);               // 延時
  80.   }
  81.   I2C_RecvACK();             // 接收ACK
  82. }


  83. static u8 I2C_RecvByte(void)
  84. {
  85.   u8 i;
  86.   u8 dat = 0;

  87.   for ( i=0; i<8; i++ )      // 8位計數器
  88.   {
  89.     dat <<= 1;
  90.     SCL = 1;                 // 拉高時鐘線
  91.     udelay(5);               // 延時
  92.     dat |= SDAIN;            // 讀數據               
  93.     SCL = 0;                 // 拉低時鐘線
  94.     udelay(5);               // 延時
  95.   }

  96.   return dat;
  97. }


  98. void SHT3X_GetTempAndHumi(u16 cmd, s16 *temp, u16 *humi)
  99. {
  100.   u8 bytes[2];
  101. //  u8 checksum;
  102.   u16 temperature,humidity;
  103.   
  104.   I2C_Start();                    // 起始信號
  105.   I2C_SendByte( SLAVEADDRESS );   // 發送設備地址+寫信號
  106.   I2C_SendByte( cmd>>8 );         // 發送16BIT的命令碼
  107.   I2C_SendByte( cmd&0x00ff );
  108.   //mdelay( 30 );                   // 延時等待傳感器檢測溫濕度
  109.   mdelay(20);
  110.   
  111.   I2C_Start();
  112.   I2C_SendByte(SLAVEADDRESS+1);   // 發送設備地址+讀信號
  113.   bytes[0] = I2C_RecvByte();      // 讀取溫度
  114.   I2C_SendACK( 0 );
  115.   bytes[1] = I2C_RecvByte();      //
  116.   I2C_SendACK( 0 );
  117.   //checksum = I2C_RecvByte();      // 讀取CRC
  118.   I2C_RecvByte();                 // 讀取CRC
  119.   I2C_SendACK( 0 );
  120.   temperature = bytes[0];
  121.   temperature <<= 8;
  122.   temperature |= bytes[1];
  123.   
  124.   bytes[0] = I2C_RecvByte();      // 讀取濕度
  125.   I2C_SendACK( 0 );
  126.   bytes[1] = I2C_RecvByte();      //
  127.   I2C_SendACK( 0 );
  128.   //checksum = I2C_RecvByte();      // 讀取CRC
  129.   I2C_RecvByte();                 // 讀取CRC
  130.   I2C_SendACK( 1 );
  131.   humidity = bytes[0];
  132.   humidity <<= 8;
  133.   humidity |= bytes[1];

  134.   I2C_Stop();                     // 發送停止信號
  135.   
  136.   *temp = ((s32)temperature*1750)/65535-450;     // 將溫度原始數據轉換成攝氏度數據
  137.   *humi = ((u32)humidity*1000)/65535;           // 將濕度原始數據轉換成相對濕度
  138. }

復制代碼

所有資料51hei提供下載:
sht3x.zip (1.65 KB, 下載次數: 232)


評分

參與人數 1黑幣 +10 收起 理由
jipinxlm + 10 很給力!

查看全部評分

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

使用道具 舉報

沙發
ID:95821 發表于 2018-7-12 09:32 | 只看該作者
如果單獨測溫度比較簡單,用LM35直接ADC測電壓就好,濕度麻煩
回復

使用道具 舉報

板凳
ID:95821 發表于 2018-7-12 13:50 | 只看該作者
濕敏電阻也好像也以用ADC方式測出電壓換算.
回復

使用道具 舉報

地板
ID:406408 發表于 2018-10-10 10:51 來自手機 | 只看該作者
學習了,謝謝樓主。
回復

使用道具 舉報

5#
ID:259898 發表于 2018-10-11 20:04 | 只看該作者
你是用什么顯示的
回復

使用道具 舉報

6#
ID:259898 發表于 2018-10-11 20:09 | 只看該作者
你好,你是用什么來顯示的
回復

使用道具 舉報

7#
ID:386032 發表于 2018-10-25 09:52 | 只看該作者
找了很久了,多謝分享
回復

使用道具 舉報

8#
ID:386032 發表于 2018-10-25 09:53 | 只看該作者

你好,你是用什么來顯示的啊
回復

使用道具 舉報

9#
ID:443400 發表于 2018-12-10 16:05 | 只看該作者
想知道你的16位命令碼是什么,我照著寫了,但是SHT不回應答信號
回復

使用道具 舉報

10#
ID:466736 發表于 2019-1-11 21:58 | 只看該作者
謝謝分享
回復

使用道具 舉報

11#
ID:256512 發表于 2019-1-26 23:15 | 只看該作者
濕度一直是百分百是為何
回復

使用道具 舉報

12#
ID:165814 發表于 2019-5-29 12:10 | 只看該作者
謝謝樓主
回復

使用道具 舉報

13#
ID:234294 發表于 2019-6-28 13:54 | 只看該作者
官方代碼太復雜了
回復

使用道具 舉報

14#
ID:510449 發表于 2019-6-28 18:07 | 只看該作者
學習了,謝謝
回復

使用道具 舉報

15#
ID:510449 發表于 2019-6-28 18:08 | 只看該作者
學習了,謝謝樓主!!1
回復

使用道具 舉報

16#
ID:160072 發表于 2020-2-26 11:22 | 只看該作者
謝謝了 分享精神值得贊賞
回復

使用道具 舉報

17#
ID:696780 發表于 2020-2-29 02:05 | 只看該作者
SHT3X學習中,感謝樓主分享
回復

使用道具 舉報

18#
ID:358536 發表于 2020-5-10 22:37 | 只看該作者
謝謝分享點贊
回復

使用道具 舉報

19#
ID:674365 發表于 2020-8-18 15:31 | 只看該作者
這是屬于用GPIO口模擬的IIC嗎
回復

使用道具 舉報

20#
ID:893494 發表于 2022-5-15 18:04 | 只看該作者
用什么顯示的?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产999精品久久久久久 | av在线免费网 | 国产视频三级 | 久久精品网 | 日本精品视频在线 | 久久九七 | 美国一级片在线观看 | 免费精品 | 狠狠综合久久av一区二区小说 | 午夜看片网站 | 精品久久99 | 亚洲国产成人久久综合一区,久久久国产99 | 自拍视频网 | 亚州av| 特黄色毛片 | 国产精品69久久久久水密桃 | 在线观看国产视频 | 欧美专区日韩专区 | 天天影视网天天综合色在线播放 | 成人亚洲在线 | 日韩精品免费 | 亚洲一区二区三区 | 国产高清视频在线观看 | 美女天天干天天操 | 请别相信他免费喜剧电影在线观看 | 麻豆精品国产91久久久久久 | 国产精品永久 | 欧美操操操 | 免费成人高清在线视频 | 九色在线观看 | 欧美日韩国产高清 | 久久精品色欧美aⅴ一区二区 | 亚洲国产一区二区在线 | 日韩精品 电影一区 亚洲 | 99视频在线 | 久久精品国产久精国产 | 亚洲成人精品免费 | 91精品国产综合久久精品 | 国产乱码精品一区二区三区忘忧草 | 亚洲精品欧美一区二区三区 | 欧美日韩综合一区 |