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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機倉庫監控系統濕度檢測電路+程序

[復制鏈接]
跳轉到指定樓層
樓主
內含仿真圖,程序源碼


單片機源程序如下:
  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.                 READSHT11();
  223.                 write_GETRH(0x80+0x47);        //放第二行字符的位置
  224.                 COMPENSATIONSHT();                                //數值轉換+顯示
  225.     putchar(0x02);
  226.         }
  227. }
復制代碼

所有資料51hei提供下載:
濕度.zip (67.69 KB, 下載次數: 19)


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文福利视频 | 国产偷录视频叫床高潮对白 | 日韩视频在线免费观看 | 国产精品一区久久久 | 国产天天操| 91在线视频网址 | av在线免费观看网址 | 国产日韩精品视频 | 久久久久91| 日韩不卡视频在线 | 国产福利网站 | 综合网视频| 国产一级淫片a直接免费看 免费a网站 | 国产精品久久久久久婷婷天堂 | 国产精品美女久久久久aⅴ国产馆 | 国产成人精品一区二区三区视频 | 91av视频在线观看 | 操久久| 超碰在线97国产 | 久久国产综合 | 美国一级黄色片 | 国产精品jizz在线观看老狼 | 国产成人精品av | 久久亚洲精品国产精品紫薇 | 91av在线视频观看 | 国产精品一区二区欧美 | аⅴ资源新版在线天堂 | 亚洲最大成人综合 | 中文字幕精品一区久久久久 | 麻豆国产一区二区三区四区 | 日韩中文字幕视频 | 久久一| 五月综合色啪 | 激情小视频 | 久久99精品国产麻豆婷婷 | 国产精品色一区二区三区 | 午夜成人在线视频 | 欧美日韩精品区 | 午夜免费成人 | 亚洲国产成人精品久久 | 欧产日产国产精品国产 |