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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3338|回復: 1
收起左側

MAX487+SHT11單片機遠程倉庫濕度控制系統仿真與源碼

[復制鏈接]
ID:278999 發表于 2018-5-6 11:09 | 顯示全部樓層 |閱讀模式
單片機C語言實戰開發之遠程MAX487+SHT11倉庫濕度控制系統內有c51源碼和proteus仿真圖,測試100%通過
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png 0.jpg


單片機源程序如下:
  1. //****************************************************
  2. //SHT11溫度+濕度傳感器,測量結果用LCD1602顯示
  3. //操作的關鍵部分是1.對照SHT11的時序圖操作
  4. //                  2.數值的轉換
  5. //                  3.對SHT11的誤差進行線性補償
  6. //****************************************************
  7. #include <AT89X52.h>
  8. #include <intrins.h>
  9. #include <stdio.h>

  10. sbit SCK=P2^4;
  11. sbit DATA=P2^5;
  12. sbit LCD_RS=P2^0;
  13. sbit LCD_EN=P2^2;


  14. unsigned char RH_H,RH_L;            //接收的濕度的高位數據和低位數據
  15. unsigned int i,j;
  16. unsigned char dispbuf[4];


  17. void delay(unsigned int z)
  18. {
  19.     unsigned int x,y;
  20.     for(x=z;x>0;x--)
  21.         for(y=110;y>0;y--);
  22. }
  23. void write_GETRH(unsigned char GETRH)
  24. {
  25.     LCD_RS=0;
  26.     P0=GETRH;
  27.     delay(1);
  28.     LCD_EN=1;
  29.     delay(1);
  30.     LCD_EN=0;
  31. }

  32. void write_DATA(unsigned char *date)
  33. {
  34.     unsigned char n;
  35.     for(n=0;n<0x40;n++)
  36.     {
  37.         if(date[n]=='*')break;        //檢測,如果字符輸入"*",就終止
  38.         LCD_RS=1;
  39.         P0=date[n];
  40.         delay(5);
  41.         LCD_EN=1;
  42.         delay(5);
  43.         LCD_EN=0;
  44.     }
  45. }

  46. void init()
  47. {
  48.     LCD_EN=0;
  49.     write_GETRH(0x38);
  50.     write_GETRH(0x0c);
  51.     write_GETRH(0x06);
  52.     write_GETRH(0x01);
  53. }

  54. //在SCK上發送n個脈沖信號
  55. void nSCKPulse(unsigned int n)           
  56. {
  57.     for(i=n;i>0;i--)
  58.     {
  59.         SCK=0;
  60.         SCK=1;
  61.     }
  62. }
  63. //啟動SHT11
  64. void STARTSHT11()                  
  65. {
  66.     SCK=1;
  67.     DATA=0;
  68.     SCK=0;
  69.     SCK=1;
  70.     DATA=1;
  71.     SCK=0;
  72. }
  73. //獲得濕度數據
  74. void GETRH(unsigned char GETRH)                //測量濕度
  75. {
  76.     unsigned char bei=0x80;
  77.     DATA=1;
  78.     SCK=0;    //下面可以開始
  79.     for(i=8;i>0;i--)
  80.     {
  81.         if(GETRH&bei)
  82.         {
  83.             DATA=1;
  84.             SCK=1;
  85.             SCK=0;
  86.         }
  87.         else
  88.         {
  89.             DATA=0;
  90.             SCK=1;
  91.             SCK=0;
  92.         }
  93.         bei=bei/2;
  94.     }
  95. }
  96. //對SHT11進行讀操作
  97. void READSHT11()                       
  98. {
  99.     unsigned char temp;
  100.     RH_H=0;
  101.     RH_L=0;
  102.     for(i=0;i<4;i++)    //4個脈沖沒數據
  103.     {
  104.         SCK=1;
  105.         SCK=0;
  106.     }
  107.     for(i=4;i>0;i--)    //接收RH高4位數據
  108.     {
  109.         SCK=1;
  110.         temp=0x01;
  111.         if(DATA==1)
  112.         {
  113.             temp=(temp<<(i-1));    //右移動
  114.             RH_H=RH_H+temp;   
  115.         }
  116.         SCK=0;
  117.     }
  118.     DATA=0;                //拉低
  119.     SCK=1;
  120.     SCK=0;
  121.     DATA=1;                //釋放
  122.     for(i=8;i>0;i--)    //接收RH低4位數據
  123.     {
  124.         SCK=1;
  125.         temp=0x01;
  126.         if(DATA==1)
  127.         {
  128.             temp=(temp<<(i-1));    //右移動
  129.             RH_L=RH_L+temp;   
  130.         }
  131.         SCK=0;
  132.     }
  133.     P1=RH_H;
  134.     P3=RH_L;
  135.     DATA=0;                //拉低
  136.     SCK=1;
  137.     SCK=0;
  138.     DATA=1;                //釋放(不做CRC校驗,就此結束)
  139. }
  140. //階乘函數
  141. long FACTORIAL(int n)
  142. {   
  143.     long nn=1;
  144.     for(;n>0;n--)
  145.     {
  146.         nn=10*nn;
  147.     }
  148.     return(nn);
  149. }
  150. //SHT11的補償算法
  151. void COMPENSATIONSHT()                  
  152. {
  153.     unsigned long ii;
  154.     char m;
  155.     ii=((((RH_H*256+RH_L)-221)*318878)/100000);

  156.     if(ii>5000)
  157.     {
  158.         ii=ii+((10000-ii)*620/5000);
  159.     }
  160.     else
  161.     {
  162.         ii=ii+ii*620/5000;
  163.     }
  164. //  printf("%f\n",ii);
  165.     for(m=4;m>=0;m--)
  166.     {
  167.         if(m==1)
  168.         {
  169.             write_DATA(".*");
  170.         }
  171.         LCD_RS=1;
  172.         P0=(int)(ii/FACTORIAL(m))+0x30;
  173.         if(m==4&P0==0x30)
  174.         {
  175.             P0=0x20;
  176.         }
  177.         if(m==4&P0==0x31)
  178.         {
  179.             write_DATA("100.00*");
  180.             break;
  181.         }
  182.         if(m==3&P0==0x30)
  183.         {
  184.             P0=0x20;
  185.         }
  186.         delay(5);
  187.         LCD_EN=1;
  188.         delay(5);
  189.         LCD_EN=0;
  190.         ii=ii-((int)(ii/FACTORIAL(m)))*FACTORIAL(m);
  191.     }
  192.     write_DATA("%*");
  193. }

  194. void InitUart(void)
  195. {
  196.     SCON = 0x50;                                  //工作方式1
  197.     TMOD = 0x21;
  198.     PCON = 0x00;
  199.     TH1 = 0xfd;                                   //使用T1作為波特率發生器
  200.     TL1 = 0xfd;
  201.     TI = 1;
  202.     TR1 = 1;                                      //啟動T1                        //啟動T1
  203. }
  204. void main()
  205. {         
  206.     init();
  207.   InitUart();
  208.     write_GETRH(0x80+0x03);            //放第一行字符的位置
  209.     write_DATA("Humidity*");
  210.     write_GETRH(0x80+0x42);            //放第二行字符的位置
  211.     write_DATA("%RH*");
  212.     while(1)
  213.     {
  214.         nSCKPulse(10);                //復位
  215.         STARTSHT11();                //啟動
  216.         GETRH(0x05);                //測濕度命令
  217.         SCK=1;
  218.         while(DATA);            //ack為低成功,繼續
  219.         SCK=0;                    //一直都為低
  220.         DATA=1;
  221.         while(DATA);            //等待300毫秒
  222. ……………………

  223. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
遠程倉庫濕度控制系統.rar (67 KB, 下載次數: 47)

評分

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

查看全部評分

回復

使用道具 舉報

ID:170346 發表于 2018-8-15 11:43 | 顯示全部樓層
壓縮文件壞的,無法打開
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美在线a| 欧美一区二区综合 | 91精品麻豆日日躁夜夜躁 | 夜夜操操操| 国产精品免费看 | 超碰日韩| 日韩aⅴ片 | 亚洲精品小视频在线观看 | 男人av网 | 午夜国产一级片 | 精品综合网 | 国产精品九九 | 91一区二区三区在线观看 | 国产精品亚洲欧美日韩一区在线 | av毛片| 欧美一区二区三区国产 | 亚洲高清视频在线 | 性高朝久久久久久久3小时 av一区二区三区四区 | 欧美自拍一区 | 91在线看| 亚洲精品自在在线观看 | 成人午夜网站 | 国产精品影视在线观看 | 国产成人久久 | 日日爱夜夜操 | 国产美女视频黄a视频免费 国产精品福利视频 | 久久久人| 欧美日韩一区二区在线 | 亚洲国产区 | 日本不卡在线视频 | 久久久久国产精品人 | 欧美亚洲成人网 | 丝袜毛片| 日韩中文字幕 | 亚洲在线视频 | 欧美欧美欧美 | 91一区| 一级a性色生活片久久毛片波多野 | 日韩一区二区三区四区五区 | 日韩国产黄色片 | 国产精品99久久久久久www |