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

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

QQ登錄

只需一步,快速開始

搜索
查看: 4300|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

SHT11溫濕度傳感器仿真和源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
SHT11仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. #include <reg52.h>  //頭文件
  2. #include <intrins.h>
  3. #include <stdio.h> //
  4. #include <math.h>    //Keil library  

  5. //**************************************

  6. #define uchar unsigned char //定義一下方便使用
  7. #define uint  unsigned int //定義一下方便使用
  8. #define ulong unsigned long //定義一下方便使用


  9. #define TEMP_ML 0x03   //000   0001    1 溫度命令
  10. #define HUMI_ML 0x05   //000   0010    1 溫度命令
  11. unsigned char error  ;//全局錯(cuò)誤變量
  12. unsigned char ack  ;//全局應(yīng)答變量
  13. //float temp_zi  ;//全局應(yīng)答變量
  14. //float humi_zi  ;//全局應(yīng)答變量
  15. unsigned char temp_h  ;//全局應(yīng)答變量
  16. unsigned char temp_LL  ;//全局應(yīng)答變量

  17. unsigned  int  xianzhi_t=0;//溫度顯值
  18. unsigned  int  xianzhi_h=0;//濕度顯值


  19. uchar setzhi_h,setzhi_l;
  20. bit   setbz_h,setbz_l,setkey;


  21. sbit DATA =P2^6;//數(shù)據(jù)
  22. sbit SCK=P2^7;//時(shí)鐘
  23. sbit hot =P2^0;// 加熱
  24. sbit motor =P2^1;// 電機(jī)
  25. sbit speek =P2^2;// 聲音
  26. sbit set =P0^0;//  設(shè)置
  27. sbit setup =P0^1;//  設(shè)置+
  28. sbit setdown =P0^2;//  設(shè)置-

  29. sbit        gwei =P3^4;//個(gè)位
  30. sbit        swei =P3^3;//十位
  31. sbit        bwei =P3^2;//百位
  32. sbit        qwei =P3^1;//千位
  33. unsigned char code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//共陽(yáng)



  34. //*******************************基本驅(qū)動(dòng)程



  35. /////////////////
  36. //////////////////////


  37. char read() //讀一個(gè)字節(jié) 返回應(yīng)答信號(hào)
  38. //----------------------------------------------------------------------------------
  39. // reads a byte form the Sensibus and gives an acknowledge in case of "ack=1"
  40. {
  41.   unsigned char i,val=0;
  42.   temp_LL=0;
  43.   temp_h=0;
  44.   DATA=1;                           //釋放數(shù)據(jù)總線
  45.   for (i=0x80;i>0;i/=2)             //位移8位
  46.   { SCK=1;                          //上升沿讀入
  47.     if (DATA) val=(val | i);        //確定值  
  48.     SCK=0;                                          
  49.   }
  50.    DATA=0;                        //讀應(yīng)答信號(hào),有應(yīng)答為1,為應(yīng)答為0 通過(guò)CPU下拉為應(yīng)答
  51.   SCK=1;                            //第9個(gè)脈沖
  52.    _nop_(); _nop_(); _nop_();          //pulswith approx. 5 us
  53.   SCK=0;                                                   
  54.   DATA=1;                           //釋放數(shù)據(jù)總線
  55.   temp_h=val;
  56.   val=0;

  57. ////低8位/////////////////////////////

  58.     DATA=1;                           //釋放數(shù)據(jù)總線
  59.   for (i=0x80;i>0;i/=2)             //位移8位
  60.   { SCK=1;                          //上升沿讀入
  61.     if (DATA) val=(val | i);        //確定值  
  62.     SCK=0;                                          
  63.   }
  64.    DATA=1;//0;                        //不需要應(yīng)答 通過(guò)CPU下拉為應(yīng)答
  65.   SCK=1;                            //第9個(gè)脈沖
  66.    _nop_(); _nop_(); _nop_();          //pulswith approx. 5 us
  67.   SCK=0;                                                   
  68.   DATA=1;                           //釋放數(shù)據(jù)總線
  69.   temp_LL=val;

  70. }
  71. ////////////


  72.   char write(unsigned char value) //寫一個(gè)字節(jié) 返回應(yīng)答信號(hào)
  73. //---------------------------------------------------------
  74. {
  75.   unsigned char i ;
  76.    ack=0;  
  77.   for (i=0x80;i>0;i/=2)             //釋放數(shù)據(jù)總線
  78.   { if (i & value) DATA=1;          //寫入值
  79.     else DATA=0;                        
  80.     SCK=1;                          //上升沿寫入
  81.      _nop_(); _nop_(); _nop_();        //延時(shí)        
  82.     SCK=0;
  83.   }
  84.   DATA=1;                           //釋放數(shù)據(jù)總線
  85.   SCK=1;                            //第9個(gè)脈沖
  86.   if  (DATA==1) ack=1;
  87.                          //讀應(yīng)答信號(hào)
  88.   SCK=0;        
  89.   return ack;                     //error=1 表示沒有應(yīng)答
  90. }
  91. ////////

  92. void start_sht11(void)  //啟動(dòng)
  93. //--------------------------------------------------------
  94. {  
  95.    DATA=1; SCK=0;                   //數(shù)據(jù)為1,SCK=0
  96.     _nop_();
  97.    SCK=1;                          //第一個(gè)脈沖
  98.     _nop_();
  99.    DATA=0;                         //數(shù)據(jù)跌落
  100.     _nop_ ();
  101.    SCK=0;                         //完成一個(gè)脈沖
  102.     _nop_(); _nop_(); _nop_();
  103.    SCK=1;                         //再一個(gè)脈沖
  104.     _nop_();
  105.    DATA=1;                        //數(shù)據(jù)變?yōu)?                  
  106.     _nop_();
  107.    SCK=0;                         //完成該脈沖                  
  108. }


  109. //////////////////////////////////
  110. void sht_rest(void)  //復(fù)位
  111.    
  112. {  
  113.   unsigned char i;
  114.   DATA=1; SCK=0;                    //數(shù)據(jù)為1 時(shí)鐘為0
  115.   for(i=0;i<9;i++)                  //9 個(gè)脈沖為 復(fù)位
  116.   { SCK=1;
  117.     SCK=0;
  118.   }
  119.   start_sht11();                   //啟動(dòng)
  120. }

  121. ////////////////////////////////


  122.                           //測(cè)量溫度或者是溫度,返回校驗(yàn)值
  123.   text_a(unsigned char ml)
  124.         {
  125.                   unsigned int i;

  126.                   start_sht11();                   //啟動(dòng)
  127.                   write(ml);//寫入測(cè)溫度
  128.                  if (ack==1)
  129.                     {
  130.                             sht_rest() ;//復(fù)位
  131.                            write(ml);//寫入測(cè)溫度
  132.              }
  133.       
  134.           //判斷是否處于忙

  135.         //         DATA=1;//釋放數(shù)據(jù)總線
  136.       //for (i=0;i<65535;i++) if(DATA==0) break;

  137.          for (i=0;i<55535;i++){ if(DATA==0) break;else         {xianshi();} }


  138.                   read();//讀溫度


  139.   }


  140. /////////溫濕度處理//////

  141.     text_jishuan_temp11()
  142.         {
  143.            error=0;
  144.            ack=0;
  145.       sht_rest() ;//復(fù)位

  146.             text_a(TEMP_ML);

  147.       text_jishuan_temp();
  148.            key();
  149.              text_a(HUMI_ML);

  150.       text_jishuan_humi();


  151.           }

  152. /////

  153. //////////計(jì)算溫度////
  154. text_jishuan_temp()
  155. {
  156.     float aa=0,bb=0,temp_zi;
  157.         int   abcd=0;

  158. aa=(float)temp_h*256+(float)temp_LL;
  159. temp_zi=0.01*aa-40;

  160. //

  161. if  (temp_zi<0)
  162.     {
  163.           temp_zi=0;
  164.     }
  165.    temp_zi=temp_zi*10;
  166.    xianzhi_t=(int)temp_zi;//給顯示值

  167.    }
  168.   ///////計(jì)算濕度//////
  169.   text_jishuan_humi()
  170. {
  171.     float aa=0,bb=0,humi_zi;
  172.         int   abcd=0;

  173. aa=(float)temp_h*256+(float)temp_LL;

  174. bb=aa*aa*2.8/1000000;
  175. aa=0.0405*aa;
  176. aa=aa-4-bb;
  177. humi_zi=aa;

  178. //
  179.     humi_zi=humi_zi*10;
  180.    xianzhi_h=(int)humi_zi;
  181.    }



  182. ///////延時(shí)///////
  183. delay(int i)
  184. {
  185.    while(--i);     
  186.      
  187. }     

  188. ///////顯示處理///////
  189. xianshi()
  190. {   
  191.     int   abcd=0;
  192.     int i;
  193.   for (i=0;i<1;i++)
  194. {  
  195. abcd=xianzhi_h;
  196. gwei=1;
  197. swei=1;
  198. bwei=1;
  199. qwei=1;
  200. P1=dispcode[abcd/100];
  201.   qwei=0;
  202. delay(40);
  203.   qwei=1;
  204.   abcd=abcd%100          ;
  205. P1=dispcode[abcd/10];
  206. bwei=0;
  207. delay(40);
  208. bwei=1;

  209. if(setbz_h^setbz_l)
  210. {
  211.     if(setbz_h) abcd=setzhi_h;
  212.     if(setbz_l) abcd=setzhi_l;

  213.          P1=dispcode[abcd/10];
  214.           swei=0;
  215.          delay(40);
  216.           swei=1;
  217.          P1=dispcode[abcd%10];
  218.          gwei=0;
  219.          delay(40);
  220.          gwei=1;  

  221.   }
  222.   else
  223.   {
  224.          abcd=xianzhi_t;
  225.          P1=dispcode[abcd/100];
  226.           swei=0;
  227.          delay(40);
  228.           swei=1;
  229.           abcd=abcd%100        ;
  230.          P1=dispcode[abcd/10];
  231.          gwei=0;
  232.          delay(40);
  233.          gwei=1;  
  234.    }
  235. }
  236. }

  237.   doing()
  238.   {
  239.   char xianzhi_mi;
  240.    xianzhi_mi=xianzhi_t/10;
  241.    if((xianzhi_mi<setzhi_h)&(xianzhi_t>setzhi_l)) { motor=0;hot=0;speek=0;}
  242.    if(xianzhi_mi>setzhi_h)  { motor=1;hot=0;speek=1;}
  243.    if(xianzhi_mi<setzhi_l)  { motor=0;hot=1;speek=1;}
  244.   }


  245. key()
  246. {
  247.   if(set&setkey)
  248.   {
  249.      setkey=0;
  250.      if(setbz_l) {setbz_l=0;setbz_h=0;}
  251.          else
  252.          { if(!setbz_h) setbz_h=1;
  253.            else {setbz_h=0;setbz_l=1;}
  254.           }
  255.    }
  256.    if(!set)  setkey=1;

  257.   if(setup==0)
  258.   {
  259.       if(setbz_h==1)
  260.                { if (setzhi_h<=99) setzhi_h++;}
  261.       if(setbz_l==1)
  262.                { if ((setzhi_l<setzhi_h)&(setzhi_l<=99)) setzhi_l++;}
  263.   }                    

  264. if(setdown==0)
  265.   {
  266.       if(setbz_h==1)
  267.                { if ((setzhi_h>setzhi_l)&(setzhi_h>=1)) setzhi_h--;}
  268.       if(setbz_l==1)
  269.                { if (setzhi_l>=1) setzhi_l--;}
  270. ……………………

  271. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
SHT11溫濕度傳感器仿真.rar (76.84 KB, 下載次數(shù): 79)


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

使用道具 舉報(bào)

無(wú)效樓層,該帖已經(jīng)被刪除

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕一区二区三区四区五区 | 欧美日韩精品久久久免费观看 | 日韩高清国产一区在线 | 在线免费视频一区 | 成人a免费| 亚洲一区二区三区免费观看 | 九七午夜剧场福利写真 | 一区二区视频免费观看 | 国产欧美日韩综合精品一 | 毛片免费视频 | 日韩中文字幕视频在线观看 | 日韩高清成人 | www.日韩欧美 | 国产成人综合久久 | 91麻豆精品国产91久久久更新资源速度超快 | 97国产精品 | 日本网站免费在线观看 | 日本高清不卡视频 | 欧美夜夜 | 亚洲精品在线看 | 成人av免费 | 国产日韩欧美精品一区二区 | 国产精品1区2区3区 一区中文字幕 | 欧美日韩午夜精品 | 成人在线观看免费视频 | 日本天堂视频 | 欧州一区二区三区 | 亚洲国产一区二区三区在线观看 | 国产一级毛片精品完整视频版 | 中文字幕免费视频 | 国产高清视频一区 | 中文字幕视频在线 | 亚洲欧美综合精品久久成人 | 亚洲第1页| 7777在线视频免费播放 | 一区观看| 日韩播放 | 一级片在线视频 | 精品久久久久久亚洲精品 | 午夜性色a√在线视频观看9 | 99免费在线视频 |