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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5794|回復(fù): 4
收起左側(cè)

溫濕度傳感器sht20 STC15單片機(jī)驅(qū)動程序

  [復(fù)制鏈接]
ID:393141 發(fā)表于 2020-7-15 16:31 | 顯示全部樓層 |閱讀模式
溫濕度傳感器sht20驅(qū)動程序,IIC通訊,非常實(shí)用的C51驅(qū)動程序

單片機(jī)源程序如下:
  1. #include "STC15W4K32S4.h"
  2. #include <intrins.h>
  3. #include "sht20.h"
  4. #include "delay.h"


  5. #define uchar unsigned char
  6. #define uint  unsigned int



  7. // 測量分辨率 RH 12BIT、T 14BIT,測量時(shí)間RH 29ms、T 85ms
  8. // 測量分辨率 RH 8BIT、T 12BIT,測量時(shí)間RH 4ms、T 22ms
  9. // SCL 時(shí)鐘,延時(shí)2us

  10. sbit sda=P1^3;        //數(shù)據(jù)線
  11. sbit scl=P1^4;        //時(shí)鐘線




  12. void start(void)       //1 啟動
  13. {
  14.         sda=1;
  15.         delay2us();
  16.         scl=1;
  17.         delay2us();
  18.         sda=0;
  19.         delay2us();
  20.         scl=0;
  21.         delay2us();
  22. }


  23. void stop(void)       //2        停止
  24. {
  25.         sda=0;
  26.         delay2us();
  27.         scl=1;
  28.         delay2us();
  29.         sda=1;
  30.         delay2us();
  31.         scl=0;
  32.         delay2us();
  33. }


  34. void ACK (void)       //3         應(yīng)答
  35. {        
  36.         sda=0;
  37.         delay2us();

  38.         scl=1;
  39.         delay2us();               
  40.         scl=0;
  41.         delay2us();         
  42. }

  43. void noACK (void)     //非應(yīng)答
  44. {
  45.         scl=1;
  46.         delay2us();
  47.         sda=0;        
  48.         scl=0;
  49.         delay2us();
  50. }


  51. bit getACK(void)     //4        接受應(yīng)答
  52. {
  53.         bit ack1=0;

  54.         sda=1;
  55.         delay2us();        
  56.                   
  57.         scl=1;
  58.         delay2us();
  59.         
  60.         ack1=sda;

  61.         scl=0;
  62.         delay2us();

  63.         return ack1;        
  64. }


  65. void send(uchar DATA)   //5 發(fā)送一字節(jié)
  66. {
  67.         uchar Bit_Counter=8;
  68.         

  69.         while(Bit_Counter>0)
  70.         {
  71.                
  72.                 sda=(bit)(DATA&0x80);
  73.                 DATA<<=1;
  74.                                 
  75.                 scl=1;
  76.                 delay2us();
  77.                 scl=0;
  78.                 delay2us();
  79.                                          
  80.                 Bit_Counter--;
  81.         }
  82.         
  83. }  


  84. unsigned char Read()      //6        接受一字節(jié)
  85. {
  86.         unsigned char x=0,y=8;

  87.         sda=1;

  88.         while(y>0)
  89.         {
  90.                 scl=1;
  91.                 delay2us();


  92.                 if(sda)
  93.                 x=x|0x01;
  94.                 else
  95.                 x=x&0xfe;
  96.                

  97.                 scl=0;
  98.                 delay2us();
  99.                
  100.                 if(y>1)                        
  101.                 x=x<<1;

  102.                 y--;
  103.         }

  104.         return x;
  105. }


  106. void SHT2x_init()    // 1傳感器初始化&軟復(fù)位
  107. {
  108.         start();
  109.         send(add_w);
  110.         getACK();
  111.         send(RST_code);
  112.         getACK();
  113.         stop();
  114.         delay15ms();
  115.         sda=1;
  116.         scl=1;
  117. }


  118. unsigned char SHT2x_user_register()   // 2傳感器用戶寄存器讀取
  119. {
  120.         uchar register_data;

  121.         start();
  122.         send(add_w);
  123.         getACK();
  124.         send(user_code_r);
  125.         getACK();
  126.                         
  127.         start();
  128.         send(add_r);
  129.         getACK();
  130.         register_data=Read();
  131.         noACK();
  132.         stop();

  133.         return register_data;
  134. }


  135. void SHT2x_Resolution()          // 3 傳感器測量分辨率設(shè)置                                
  136. {                                // 測量分辨率設(shè)置RH 8 BIT、T 12 BIT,測量時(shí)間 RH4ms、T22ms
  137.         start();
  138.         send(add_w);
  139.         getACK();
  140.         send(user_code_w);
  141.         getACK();
  142.         send(0x3b);
  143.         getACK();
  144.         getACK();
  145.         stop();        
  146. }



  147. bit SHT2x_battery()             // 4傳感器低電壓檢測
  148. {                               // 此狀態(tài)在每次測量后更新
  149.         uchar battery;

  150.         start();
  151.         send(add_w);
  152.         getACK();
  153.         send(user_code_r);
  154.         getACK();
  155.                         
  156.         start();
  157.         send(add_r);
  158.         getACK();
  159.         battery=Read();
  160.         noACK();
  161.         stop();

  162.         battery=(battery&0x40)>>6;
  163.         return battery;
  164. }



  165. /***********測量結(jié)果***********/

  166. // 1 濕度測量
  167. // 啟動>>發(fā)送地址+寫操作>>接受ACK>>濕度測量命令>>接受ACK>>啟動>>發(fā)送地址+讀操作>>接受ACK>>測量時(shí)間延時(shí)>>讀取高位數(shù)據(jù)>>ACK>>讀取地位數(shù)據(jù)>>NO_ACK>>停止
  168. // 計(jì)算結(jié)果。返回結(jié)果
  169. unsigned int RH_Result()   
  170. {
  171.         unsigned int RH_Data;
  172.         unsigned long RH=0;        
  173.         start();
  174.         send(add_w);
  175.         getACK();
  176.         send(RH_code);
  177.         getACK();        
  178.         start();
  179.         send(add_r);
  180.         getACK();  
  181.         delay29ms();
  182.         RH_Data=Read();
  183.         ACK();         
  184.         RH_Data=RH_Data<<8;  
  185.         RH_Data=RH_Data|Read();
  186.         noACK();
  187.         stop();
  188.                
  189.         RH_Data=RH_Data&0xfffc;               
  190.         RH=RH_Data*12500L;
  191.         RH=RH>>16;
  192.         RH=RH-600;

  193.         return RH;
  194. }

  195. // 2 溫度測量
  196. // 啟動>>發(fā)送地址+寫操作>>接受ACK>>溫度測量命令>>接受ACK>>啟動>>發(fā)送地址+讀操作>>接受ACK>>測量時(shí)間延時(shí)>>讀取高位數(shù)據(jù)>>ACK>>讀取地位數(shù)據(jù)>>NO_ACK>>停止
  197. // 計(jì)算結(jié)果。返回結(jié)果

  198. unsigned int T_Result()
  199. {
  200.         unsigned int T_Data;
  201.         unsigned long T=0;        

  202.         start();
  203.         send(add_w);
  204.         getACK();
  205.         send(T_code);
  206.         getACK();                 
  207.         start();
  208.         send(add_r);
  209.         getACK();           
  210.         delay85ms();        

  211.         T_Data=Read();
  212.         ACK();        
  213.         T_Data=T_Data<<8;            
  214.         T_Data=T_Data|Read();
  215.         noACK();
  216.         stop();

  217.         T_Data=T_Data&0xfffE;               
  218.         T=T_Data*17572L;
  219.         T=T>>16;
  220.         T=T-4685;

  221.         return T;
  222. }  
復(fù)制代碼

所有資料51hei提供下載:
sht20 driver.zip (53.54 KB, 下載次數(shù): 283)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:119977 發(fā)表于 2020-12-8 10:43 | 顯示全部樓層
我想問一個(gè)問題 負(fù)溫度怎么表示的
回復(fù)

使用道具 舉報(bào)

ID:554837 發(fā)表于 2021-5-22 19:39 | 顯示全部樓層
感謝大佬提供的代碼
回復(fù)

使用道具 舉報(bào)

ID:90613 發(fā)表于 2021-9-22 13:14 | 顯示全部樓層
哎,看錯(cuò)了,單程AHT20了,SHT20太貴了用不起。。。。
回復(fù)

使用道具 舉報(bào)

ID:837601 發(fā)表于 2021-10-27 08:31 | 顯示全部樓層
請問SHT85能用這個(gè)程序嗎
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 伦理午夜电影免费观看 | 天天色天天射天天干 | 久久国产精品无码网站 | 性一区 | 人人澡视频| 久久午夜精品福利一区二区 | 日本中文字幕在线观看 | 久久久免费电影 | 四色成人av永久网址 | 91大神新作在线观看 | 99看片网| 97免费视频在线观看 | 日韩精品一区二区三区第95 | 欧美jizzhd精品欧美巨大免费 | 天天干天天爱天天操 | 日韩一区二区免费视频 | 精品免费国产一区二区三区 | 久久久久久久亚洲精品 | 亚洲视频国产视频 | 国产精品久久亚洲7777 | 国产美女久久 | 黄色在线观看网址 | 真人女人一级毛片免费播放 | 亚洲第一黄色网 | 午夜av电影 | 91亚洲精| 久久成人18免费网站 | 欧美一区二 | 97精品视频在线 | 久久福利 | 在线欧美日韩 | 精品一区二区在线视频 | 欧美成人a∨高清免费观看 91伊人 | 免费在线看黄视频 | 欧美日韩国产一区二区三区 | 99视频入口 | 日韩精品一区二区三区免费观看 | 国产婷婷| 亚洲成人精品国产 | 国产一区亚洲 | av黄色网|