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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

我的課設(shè)內(nèi)容:基于89C51單片機(jī)SHT11溫濕度傳感器

[復(fù)制鏈接]
ID:316425 發(fā)表于 2018-4-25 18:38 | 顯示全部樓層 |閱讀模式
這是本學(xué)期我們兩周課程設(shè)計(jì)的內(nèi)容,因?yàn)槲业幕A(chǔ)不太好,所以基本電路比較簡(jiǎn)單,實(shí)現(xiàn)的功能也簡(jiǎn)單,希望對(duì)初學(xué)者能有一定的借鑒意義。圖片中有用Proteus仿真的截圖,附件中有源代碼。

仿真圖

仿真圖

SHT11.h文件:
  1. #ifndef __SHT11_H__
  2. #define __SHT11_H__

  3. /*************************
  4. SHT11相關(guān)命令
  5. **************************/
  6. #define uchar unsigned char
  7. #define uint  unsigned int

  8. #define TEM_TEST         0x03//溫度檢測(cè)命令
  9. #define HUM_TEST          0x05//濕度檢測(cè)命令
  10. #define REG_READ          0x07//讀寄存器
  11. #define REG_WRITE         0x06//寫寄存器
  12. #define FUNCTION_SET    0x01//設(shè)置SHT11的工作精度為8位/濕度 12位溫度
  13. /**************************
  14. SHT11端口定義
  15. ***************************/

  16. sbit SHT11_DATA=P3^1;
  17. sbit SHT11_SCK=P3^0;
  18. sbit P33=P3^3;
  19. sbit P32=P3^2;
  20. sbit P36=P3^6;
  21. sbit P37=P3^7;
  22. uchar flag_tempeture=0;  //顯示溫度位置的標(biāo)志
  23. uchar flag_humidity=0;     //顯示濕度位置的標(biāo)志
  24. uchar code str1[]={ 0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00};//溫度圖標(biāo)
  25. uchar code str6_sht11[]="%RH   ";
  26. uchar code str4_sht11[]="humi=";
  27. uchar code str2_sht11[]="temp=";
  28. uchar code str7_sht11[]="    ";//清除沒不要的顯示
  29. /***************************
  30. 函數(shù)名稱:Delay()
  31. 函數(shù)功能:SHT11內(nèi)部延時(shí)
  32. ****************************/
  33. void Delay()
  34. {
  35.     ;
  36.     ;
  37. }

  38. /***************************
  39. 函數(shù)名稱:Delay_Ms()
  40. 函數(shù)功能:SHT11檢測(cè)等待延時(shí)
  41. 函數(shù)說明:11ms/55ms/210ms 分別對(duì)應(yīng)8位/12位/14位 測(cè)量結(jié)果
  42. 對(duì)應(yīng)的形參為N 則延時(shí)Nms
  43. ****************************/
  44. void Delay_Ms(uint ms)    // ms延時(shí)函數(shù) (AT89C51 @ 11.0592MHz)
  45. {
  46. uint i;
  47. uchar j;
  48. for(i=0;i<ms;i++)
  49. {
  50.   for(j=0;j<200;j++);
  51.   for(j=0;j<102;j++);
  52. }
  53. }
  54. /**************************
  55. 函數(shù)功能:SHT11啟動(dòng)時(shí)序
  56. ***************************/
  57. void SHT11_Start()
  58. {
  59.     SHT11_SCK=1;
  60.     SHT11_DATA=1;
  61.     Delay();
  62.     SHT11_DATA=0;
  63.     Delay();
  64.     SHT11_SCK=0;
  65.     Delay();
  66.     SHT11_SCK=1;
  67.     Delay();
  68.     SHT11_DATA=1;
  69. }

  70. /******************************
  71. 函數(shù)名稱:SHT11_Sendbyte(uchar dat)
  72. 函數(shù)功能: 向SHT11發(fā)送8bite數(shù)據(jù)
  73. ******************************/
  74. void SHT11_Sendbyte(uchar dat)
  75. {
  76.     uchar i;
  77.     SHT11_SCK=0;
  78.     Delay();
  79.     for(i=0;i<8;i++)
  80.     {
  81.         if(dat&0x80)
  82.         {
  83.             SHT11_DATA=1;
  84.             Delay();
  85.         }
  86.         else
  87.         {
  88.             SHT11_DATA=0;
  89.             Delay();
  90.         }
  91.         dat=dat<<1;
  92.         SHT11_SCK=1;
  93.         Delay();
  94.         SHT11_SCK=0;
  95.     }
  96. }
  97. /*********************************
  98. 函數(shù)名稱SHT11_Answer():
  99. 函數(shù)功能:檢測(cè)SHT11的響應(yīng)信號(hào)(在第九個(gè)時(shí)鐘周期)
  100. ***********************************/
  101. void SHT11_Answer()
  102. {
  103.     SHT11_SCK=1;
  104.     Delay();
  105.     while(SHT11_DATA==1);
  106.     SHT11_SCK=0;
  107.     SHT11_DATA=1;
  108. }

  109. /************************************
  110. 函數(shù)名稱:SHT11_Test_Finish()
  111. 函數(shù)功能:檢測(cè)SHT11溫濕度檢測(cè)是否完畢
  112. *************************************/
  113. void SHT11_Test_Finish()
  114. {
  115.     while(SHT11_DATA==1);
  116. }

  117. /************************************
  118. 函數(shù)名稱:SHT11_Receivebyte()
  119. 函數(shù)功能:從SHT11接收8bite數(shù)據(jù)
  120. *************************************/
  121. uchar SHT11_Receivebyte()
  122. {
  123.     uchar i;
  124.     uchar dat;
  125.     SHT11_SCK=0;
  126.     Delay();
  127.     for(i=0;i<8;i++)
  128.     {   
  129.         SHT11_SCK=1;
  130.         Delay();
  131.         dat=dat<<1;
  132.         if(SHT11_DATA)
  133.         {
  134.             dat=dat|0x01;
  135.             Delay();
  136.         }
  137.         else
  138.         {
  139.             dat=dat&0xfe;
  140.             Delay();
  141.         }
  142.          SHT11_SCK=0;
  143.         Delay();
  144.     }
  145.     SHT11_DATA=1; //釋放數(shù)據(jù)總線
  146.     return(dat);   
  147. }

  148. /***********************************
  149. 函數(shù)名稱:MCU_Answer()
  150. 函數(shù)功能:單片機(jī)向SHT11發(fā)送應(yīng)答信號(hào)
  151. *************************************/
  152. void MCU_Answer()
  153. {
  154.      SHT11_SCK=0;
  155.     Delay();
  156.     SHT11_DATA=0;
  157.     Delay();
  158.     SHT11_SCK=1;
  159.     Delay();
  160.     SHT11_SCK=0;
  161.     Delay();
  162.     SHT11_DATA=1; //釋放數(shù)據(jù)總線 這條指令非常重要 不加的話導(dǎo)致單片機(jī)不能讀取低8位
  163. }
  164. /***********************************
  165. 函數(shù)名稱:SHT11_End()
  166. 當(dāng)接收兩個(gè)8byte數(shù)據(jù)后部接收CRC校驗(yàn)碼
  167. ************************************/
  168. void SHT11_End()
  169. {
  170.     SHT11_DATA=1;
  171.     SHT11_SCK=1;
  172.     Delay();
  173.     SHT11_SCK=0;
  174.     Delay();
  175. }

  176. /*************************************
  177. 函數(shù)名稱:void SHT11_Write_Register(uchar command ,uchar dat)
  178. 函數(shù)說明:向SHT11的狀態(tài)寄存器設(shè)置功能
  179.             command為REG_WRITE 0x06寫寄存器
  180.             dat為 設(shè)置SHT11的功能 可以設(shè)置檢測(cè)的數(shù)據(jù)位數(shù)
  181. */
  182. void SHT11_Write_Register(uchar command ,uchar dat)
  183. {
  184.     SHT11_Start();
  185.     SHT11_Sendbyte(command);
  186.     SHT11_Answer();
  187.     SHT11_Sendbyte(dat);
  188.     SHT11_Answer();
  189. }


  190. /***************************************
  191. 函數(shù)名稱:uchar SHT11_Read_Register(uchar command)
  192. 函數(shù)說明:command為REG_READ  0x07//讀寄存器
  193.             返回值為狀態(tài)寄存器的值
  194.          位6顯示當(dāng)前檢測(cè)完一次數(shù)據(jù)后電源供電情況
  195.             當(dāng)位6為0時(shí)表明VDD>2.47V 當(dāng)位6為1時(shí)表明VDD<2.47V即電量不足
  196.          位0表明當(dāng)前的測(cè)量分辨率
  197.          當(dāng)位0為1時(shí)表明測(cè)量精度:8位/濕度 12位溫度
  198.          當(dāng)位0為0時(shí)表明測(cè)量精度:12位濕度 14位溫度
  199.          默認(rèn)為0
  200. *******************************************/
  201. uchar SHT11_Read_Register(uchar command)
  202. {
  203.     uchar dat;
  204.     SHT11_Start();
  205.     SHT11_Sendbyte(command);
  206.     SHT11_Answer();
  207.     dat=SHT11_Receivebyte();
  208.     SHT11_End();
  209.     return(dat);
  210. }


  211. /***************************************
  212. 函數(shù)名稱:SHT11_Measure(uchar command,uint time);
  213. 函數(shù)功能:設(shè)置SHT11檢測(cè)功能,并返回相應(yīng)的檢測(cè)結(jié)果
  214. 函數(shù)說明:command形參用于設(shè)定溫度檢測(cè)還是濕度檢測(cè),
  215. time形參用于設(shè)定檢測(cè)過程中的等待時(shí)間,以確定檢測(cè)結(jié)果的位數(shù)
  216. 11ms/55ms/210ms 分別對(duì)應(yīng)8位/12位/14位
  217. ****************************************/
  218. uint SHT11_Measure(uchar command,uchar time)
  219. {
  220.     uint dat=0;
  221.     uchar data_high,data_low;
  222.     SHT11_Start();
  223.     SHT11_Sendbyte(command);
  224.     SHT11_Answer();
  225.     Delay_Ms(time);
  226.     SHT11_Test_Finish();
  227.     data_high=SHT11_Receivebyte();
  228.     MCU_Answer();
  229.     data_low=SHT11_Receivebyte();
  230.     SHT11_End();
  231.     dat=(dat|data_high);
  232.     dat=(dat<<8)|data_low;
  233.     return(dat);
  234. }

  235. /****************************************
  236. 函數(shù)名稱:Convert_Tempeture12bit(uint dat);
  237. 函數(shù)功能:將檢測(cè)到的數(shù)據(jù)轉(zhuǎn)化為相應(yīng)的溫度數(shù)據(jù)
  238. 函數(shù)說明:溫度轉(zhuǎn)換公式--T=d1+d2*SOt
  239.           公式中的參數(shù)d1=-40,d2=0.04
  240.           適用于12位測(cè)量精度
  241. */
  242. float SHT11_Convert_Tempeture12bit(uint dat)
  243. {
  244.     float tempeture1;
  245.     tempeture1=-40+0.04*dat;
  246.     if(tempeture1>23)
  247.      tempeture1=tempeture1+1;
  248.     if(tempeture1>55)
  249.      tempeture1=tempeture1+1;
  250.     if(P37==1)
  251.     {
  252.      if(tempeture1>=16&&tempeture1<30)
  253.      {
  254.       P33=1;
  255.       P32=0;
  256.      }
  257.      else
  258.      {
  259.       P33=0;
  260.       P32=1;
  261.      }
  262.     }
  263.     return(tempeture1);
  264. }


  265. /*****************************************
  266. 函數(shù)名稱:SHT11_Convert_Humidity8bit(uint dat,float temp)
  267. 函數(shù)功能:將檢測(cè)到的數(shù)據(jù)轉(zhuǎn)化為相應(yīng)的濕度數(shù)據(jù)
  268. 函數(shù)說明:相對(duì)濕度轉(zhuǎn)換公式-----RHline=C1+C2*SOrh+C3*SOrh*SOrh(檢測(cè)數(shù)據(jù)的線性化 SOrh為單片機(jī)接收到的數(shù)據(jù))
  269.                          -----RHtrue=(tempeture-25)*(t1+t2*SOrh)+RHline
  270.           公式中的參數(shù):C1=-4,C2=0,648,C3=-0.00072
  271.                       t1=0.01,t2=0.00128
  272.             適用于8位測(cè)量精度
  273. */
  274. uint SHT11_Convert_Humidity8bit(uint dat,float temp)
  275. {
  276.     float RHline,RHtrue;
  277.     uint r;
  278.     RHline=-4+0.648*dat-0.00072*dat*dat;
  279.     RHtrue=(temp-25)*(0.01+0.00128*dat)+RHline;
  280.     r=(RHtrue-3)*10+0.5;
  281.     if(P37==0)
  282.    {
  283.     if(r>=400&&r<600)
  284.     {
  285.       P33=1;
  286.     }
  287.     else
  288.     {
  289.      P33=0;
  290.     }
  291.     if(r>=600)
  292.     {
  293.       P32=1;
  294.     }
  295.     else
  296.     {
  297.      P32=0;
  298.     }
  299.    }
  300.     return(r);
  301. }
  302. #endif
  303. Display.c文件:
  304. #include <reg52.h>
  305. #include "SHT11.h"
  306. #define uchar unsigned char
  307. #define uint  unsigned int
  308. #define TEM_TEST         0x03//溫度檢測(cè)命令
  309. #define HUM_TEST          0x05//濕度檢測(cè)命令
  310. #define REG_READ          0x07//讀寄存器
  311. #define REG_WRITE         0x06//寫寄存器
  312. #define FUNCTION_SET    0x01//設(shè)置SHT11的工作精度為8位/濕度 12位溫度
  313. uchar DispData[4] = {0, 1, 2, 3};
  314. code uchar DispSegmentP0[10]={0x3f,0x06,0x1b,0x0f,0x26,0x2d,0x3d,0x07,0x3f,0x2f};
  315. code uchar DispSegmentP2[10]={0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x00,0x22,0x22};
  316.                           //  0    1   2    3    4   5   6    7   8    9  %
  317. code uchar DispCtrl[4] = {0xef, 0xdF, 0xbf ,0x7F};
  318. sbit P16=P1^6;
  319. sbit P26=P2^6;
  320. sbit P34=P3^4;   
  321. void Temp_delay(unsigned int j)
  322. {
  323. uchar i;
  324.   for(i=100;i>0;i--)
  325.   {
  326.    for(j;j>0;j--);
  327.   }
  328. }
  329. void Show(uchar  *Buffer)
  330. {
  331.     uchar i;

  332.      for    (i=0; i<4; i++)
  333.     {
  334.         P1 = DispCtrl[i];
  335.         P0 = DispSegmentP0[*Buffer];
  336.         P2 = DispSegmentP2[*Buffer];
  337.         if(P16==0)      
  338.         P26=1;
  339.         Temp_delay(2);
  340.         Buffer++;   
  341.     }
  342. }
  343. void  DispConvert(uchar *DispAddr, uint  Temp2Con)   
  344. {
  345.     DispAddr[0] = Temp2Con/1000;
  346.     DispAddr[1] = (Temp2Con - DispAddr[0]*1000)/100;
  347.     DispAddr[2] = (Temp2Con - DispAddr[0]*1000 - DispAddr[1]*100)/10;
  348.     DispAddr[3] = Temp2Con -  DispAddr[0]*1000 - DispAddr[1]*100 - DispAddr[2]*10;      
  349. }
  350. void main()
  351. {
  352. uint temp;
  353. uint dat;
  354. uint Hum;
  355. //float f;     
  356.    while(1)
  357.   {         
  358.    Show(DispData);
  359.    SHT11_Write_Register(REG_WRITE,FUNCTION_SET);
  360.    temp=SHT11_Measure(TEM_TEST,0x37);
  361.    temp=SHT11_Convert_Tempeture12bit(temp);   
  362.    dat=SHT11_Measure(HUM_TEST,0x0b);
  363.    Hum=SHT11_Convert_Humidity8bit(dat,temp);
  364.    if(P34==0)
  365.    {
  366.        P36=1;
  367.     P37=0;
  368.     DispConvert(DispData,Hum);
  369.    }
  370.    else
  371.    {
  372.        P36=0;
  373.     P37=1;
  374.     DispConvert(DispData,temp*10);
  375.    }
  376.   }   
  377. }
復(fù)制代碼


基于89C51單片機(jī)SHT11溫濕度傳感器電路圖于程序作者.doc

145 KB, 下載次數(shù): 38, 下載積分: 黑幣 -5

代碼

回復(fù)

使用道具 舉報(bào)

ID:431243 發(fā)表于 2018-12-18 13:44 | 顯示全部樓層
兄弟有課設(shè)論文嗎
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品片 | 久久精品中文 | 成人黄视频在线观看 | 日本激情一区二区 | 欧美不卡网站 | 久久久久一区二区三区 | 黄色网址免费在线观看 | 国产高清免费视频 | 日日操av | 古典武侠第一页久久777 | 国产精品大片在线观看 | 免费视频一区 | 中文久久 | 91精品国产91久久久久久密臀 | 欧美日韩久 | 伊人春色成人网 | 精品区 | 中文字幕亚洲精品 | 亚洲女人的天堂 | 久久99久久久久 | 亚洲精品国产a久久久久久 中文字幕一区二区三区四区五区 | 国产免费va| 国产精品久久久久久久久久久免费看 | 精品不卡 | 国产成人免费 | 精品久久久久久国产 | 久久综合伊人一区二区三 | av网站免费观看 | 国产成人a亚洲精品 | 狠狠草视频 | 久久久亚洲一区 | 天堂视频中文在线 | 亚洲成色777777在线观看影院 | 欧美黑人狂野猛交老妇 | 精品久久久久久久久久久久久久 | 国产成人综合网 | 久久国产精品99久久久大便 | 国产激情91久久精品导航 | 国产亚洲成av人片在线观看桃 | 国产高清视频 | 一级日批片 |