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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

DHT11溫濕度檢測器 基于51單片機的proteus仿真+代碼

  [復制鏈接]
跳轉到指定樓層
樓主
給大伙分享一個最近的學習成果:基于51單片機的溫濕度仿真 程序加proteus 8.0的版本 1602液晶屏顯示
dht11溫濕度系統仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include <reg52.h>          /////////////頭文件
  2. ////////////////////////////////////////////////////////////////////////////
  3. void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);
  4. void ConfigTimer0(unsigned int ms);
  5. unsigned char IntToString(unsigned char *str, int dat);
  6. extern bit Start18B20();
  7. extern bit Get18B20Temp(int *temp);
  8. extern void InitLcd1602();         
  9. bit DHT_Start();        
  10. void aj (void);
  11. bit DHT_ByteRead(unsigned char *dat);
  12. /////////////////////////////////////////////////////////////////////
  13. sbit K1=P1^4;           ///引腳聲明
  14. sbit K2=P1^5;
  15. sbit K3=P1^6;
  16. sbit K4=P1^7;
  17. sbit M1=P1^0;
  18. sbit M2=P1^1;
  19. sbit M3=P1^2;
  20. sbit M4=P1^3;

  21. sbit D1=P2^7;
  22. sbit D2=P2^6;

  23. sbit KD1=P2^3;
  24. sbit KD2=P2^4;

  25. /////////////////

  26. /////////////////////////////  數組命名
  27. int SD,WD,x,xx,SDC,WDC,PWM1,PWM2;
  28. int KK1,KK2;
  29. int wdg=40,wdd=20,sdg=80,sdd=60;
  30. bit SZ,JB;
  31. bit flag1s = 0;          //1s定時標志
  32. unsigned char T0RH = 0;  //T0重載值的高字節
  33. unsigned char T0RL = 0;  //T0重載值的低字節
  34.   /////////////////////////////////        延時子程序
  35. void delay ()
  36. {
  37. x=99999;
  38. while(x--);
  39. }
  40.    /////////////////////////////////
  41. void main()          ////////////////主程序
  42. {                 

  43.     bit tmp;
  44.     unsigned char str[12];
  45.          unsigned char DHT[5];
  46.   ////初始化///////////////////////
  47.     EA = 1;            //開總中斷
  48.     ConfigTimer0(10);  //T0定時10ms
  49.     InitLcd1602();     //初始化液晶
  50.         M1=0; M1=0;M2=0;M3=0;D1=0;D2=0;
  51. ////////////////////////////////////
  52.   DHT_Start();
  53.   delay();
  54.   delay();
  55.     delay();

  56.   delay();

  57.     while (1)
  58.     {
  59.         LcdShowStr(0, 0, "WD");        //顯示到液晶屏上
  60.         LcdShowStr(0, 1, "SD");        //顯示到液晶屏上

  61.     LcdShowStr(5, 0, "H");        //顯示到液晶屏上
  62.         LcdShowStr(5, 1, "H");        //顯示到液晶屏上

  63.         
  64.         LcdShowStr(9, 0, "L");        //顯示到液晶屏上
  65.         LcdShowStr(9, 1, "L");        //顯示到液晶屏上
  66.         if (flag1s)  //每秒更新一次溫度
  67.         {
  68.            
  69.                         
  70.                str[0] = (wdg/10)%10 + '0';  //十位轉為ASCII碼
  71.            str[1] = (wdg%10) + '0';  //個位轉為ASCII
  72.            str[2] = '\0';
  73.                LcdShowStr(6, 0, str);

  74.                    str[0] = (wdd/10)%10 + '0';  //十位轉為ASCII碼
  75.            str[1] = (wdd%10) + '0';  //個位轉為ASCII
  76.            str[2] = '\0';
  77.                LcdShowStr(10,0, str);

  78.                    str[0] = (sdg/10)%10 + '0';  //十位轉為ASCII碼
  79.            str[1] = (sdg%10) + '0';  //個位轉為ASCII
  80.            str[2] = '\0';
  81.                LcdShowStr(6, 1, str);

  82.                    str[0] = (sdd/10)%10 + '0';  //十位轉為ASCII碼
  83.            str[1] = (sdd%10) + '0';  //個位轉為ASCII
  84.            str[2] = '\0';
  85.                LcdShowStr(10, 1, str);

  86.                 DHT_Start();
  87.                         tmp=DHT_ByteRead(&DHT);
  88.                    if(tmp==1)
  89.                    {
  90.                    str[0] = (DHT[0]/10)%10 + '0';  //十位轉為ASCII碼
  91.            str[1] = (DHT[0]%10) + '0';  //個位轉為ASCII
  92.                LcdShowStr(2, 1, str);

  93.                    str[0] = (DHT[2]/10)%10 + '0';  //十位轉為ASCII碼
  94.            str[1] = (DHT[2]%10) + '0';  //個位轉為ASCII
  95.            str[2] = '\0';
  96.                LcdShowStr(2,0, str);

  97.                    WD= DHT[2];
  98.                    SD=DHT[0];
  99.                    }
  100.         }


  101.                 ////////////////////超熱警報
  102.                 if(wdg<=WD)
  103.                 {
  104.                 WDC=WD-wdg+2;
  105.                  M1=1;
  106.                 }
  107.                 else M1=0;

  108.                 if(wdd>=WD)
  109.                 {
  110.                 WDC=wdd-WD+2;
  111.                  M2=1;
  112.                 }
  113.                 else M2=0;

  114.                 if(sdg<=SD)
  115.                 {
  116.                 SDC=SD-sdg+2;
  117.                  M3=1;
  118.                 }
  119.                 else M3=0;

  120.                 if(sdd>=SD)
  121.                 {
  122.                 SDC=sdd-SD+2;
  123.                  M4=1;
  124.                 }
  125.                 else M4=0;

  126.                 if(wdg<=WD||wdd>=WD)
  127.                 {
  128.                   PWM1++;
  129.                   if(PWM1<WDC)
  130.                   D1=1;
  131.                   if(PWM1>=WDC)
  132.                    D1=0;
  133.                   if(PWM1==10)
  134.                   PWM1=0;
  135.                 }
  136.       if(wdg>WD&&wdd<WD&&KK1==0)
  137.             D1=0;

  138.                 if(sdg<=SD||sdd>=SD)
  139.                 {
  140.                   PWM2++;
  141.                   if(PWM2<SDC)
  142.                   D2=1;
  143.                   if(PWM2>=SDC)
  144.                    D2=0;
  145.                   if(PWM2==10)
  146.                   PWM2=0;
  147.                 }
  148.                 if(sdg>SD&&sdd<SD&&KK2==0)
  149.          D2=0;
  150.                 /////////////////////////////按鍵設置
  151.                  aj();
  152.                   //////////////////////////////////////////////
  153.          }
  154. }

  155. void aj (void)
  156. {

  157. if(KD1==0)
  158. {
  159.   delay();
  160.   KK1++;
  161.   if(KK1==1)
  162.    D1=1;
  163.    if(KK1>=2)
  164.    {
  165.     D1=0;
  166.         KK1=0;
  167.    }
  168. }


  169. if(KD2==0)
  170. {
  171.   delay();
  172.   KK2++;
  173.   if(KK2==1)
  174.    D2=1;
  175.    if(KK2>=2)
  176.    {
  177.     D2=0;
  178.         KK2=0;
  179.    }
  180. }
  181.                  if(K1==0)
  182.                 {
  183.                    xx++;
  184.                   delay();
  185.                   if(xx==1)
  186.                     LcdShowStr(12, 0, "WDH");        //顯示到液晶屏上
  187.                   if(xx==2)
  188.                     LcdShowStr(12, 0, "WDL");        //顯示到液晶屏上  
  189.                   if(xx==3)
  190.                     LcdShowStr(12, 0, "SDH");        //顯示到液晶屏上
  191.                   if(xx==4)
  192.                     LcdShowStr(12, 0, "SDL");        //顯示到液晶屏上
  193.                 if(xx>=5)
  194.                 xx=0;                                                   
  195.                 }
  196.                 if(K2==0)
  197.                 {

  198.                 if(xx==1)
  199.                 {
  200.                   LcdShowStr(12, 1, "WD+");        //顯示到液晶屏上
  201.                   wdg++;
  202.                 }
  203.                                 if(xx==2)
  204.                 {
  205.                   LcdShowStr(12, 1, "WD+");        //顯示到液晶屏上
  206.                   wdd++;
  207.                 }
  208.                                 if(xx==3)
  209.                 {
  210.                   LcdShowStr(12, 1, "SD+");        //顯示到液晶屏上
  211.                   sdg++;
  212.                 }
  213.                                 if(xx==4)
  214.                 {
  215.                   LcdShowStr(12, 1, "SD+");        //顯示到液晶屏上
  216.                   sdd++;
  217.                 }

  218.                   delay();
  219.                 }

  220.                 if(K3==0)
  221.                 {
  222.                                  if(xx==1)
  223.                 {
  224.                   LcdShowStr(12, 1, "WD-");        //顯示到液晶屏上
  225.                   wdg--;
  226.                 }
  227.                                 if(xx==2)
  228.                 {
  229.                   LcdShowStr(12, 1, "WD-");        //顯示到液晶屏上
  230.                   wdd--;
  231.                 }
  232.                                 if(xx==3)
  233.                 {
  234.                   LcdShowStr(12, 1, "SD-");        //顯示到液晶屏上
  235.                   sdg--;
  236.                 }
  237.                                 if(xx==4)
  238.                 {
  239.                   LcdShowStr(12, 1, "SD-");        //顯示到液晶屏上
  240.                   sdd--;
  241.                 }
  242.                   delay();
  243.                 }
  244.                  if(K4==0)
  245.                 {

  246.                   delay();
  247.                   xx=0;
  248.                   InitLcd1602();     //初始化液晶
  249.                 }
  250. }
  251. /* 整型數轉換為字符串,str-字符串指針,dat-待轉換數,返回值-字符串長度 */
  252. unsigned char IntToString(unsigned char *str, int dat)
  253. {
  254.     signed char i = 0;
  255.     unsigned char len = 0;
  256.     unsigned char buf[6];
  257.    
  258.     if (dat < 0)  //如果為負數,首先取絕對值,并在指針上添加負號
  259.     {
  260.         dat = -dat;
  261.         *str++ = '-';
  262.         len++;
  263.     }
  264.     do {          //先轉換為低位在前的十進制數組
  265.         buf[i++] = dat % 10;
  266.         dat /= 10;
  267.     } while (dat > 0);
  268.     len += i;     //i最后的值就是有效字符的個數
  269.     while (i-- > 0)   //將數組值轉換為ASCII碼反向拷貝到接收指針上
  270.     {
  271.         *str++ = buf[i] + '0';
  272.     }
  273.     *str = '\0';  //添加字符串結束符
  274.    
  275. ……………………

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

所有資料51hei提供下載:
溫濕度檢測.zip (198.88 KB, 下載次數: 2525)


評分

參與人數 17黑幣 +119 收起 理由
秦六木· + 6 絕世好帖!
DIY電子 + 10 測試了下很好 謝謝分享 資料留存先
With_commands + 4 PROGRAM! The With Commands - Electronics
肉夾饃111 + 1 贊一個!
wolovestudy + 1 絕世好帖!
jqc + 1 很給力!
dumplings + 5 很給力!
云云 + 5 很給力!
dgxiong + 5 很給力!
zx果子 + 5 贊一個!
LNBOW + 1 絕世好帖!
森眸暖光 + 5 贊一個!
759072231 + 5 贊一個!
劉大陽 + 5 很給力!
jikunpeng + 5
初秋夜微涼 + 5 贊一個!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:212476 發表于 2017-6-19 10:52 | 只看該作者
你好  請問一下你的proteus里面怎么有DHT11的  為什么我的沒有  是版本的問題嗎
回復

使用道具 舉報

板凳
ID:213289 發表于 2017-6-21 12:29 | 只看該作者
我最近在做基于單片機溫室大棚溫濕度報警程序設計。。小白一個完全不懂
回復

使用道具 舉報

地板
ID:216914 發表于 2017-7-4 13:29 | 只看該作者
請問這個實現的功能是怎樣的呢
回復

使用道具 舉報

5#
ID:89286 發表于 2017-7-5 04:32 | 只看該作者
thanks for sharing
回復

使用道具 舉報

6#
ID:117930 發表于 2017-7-5 23:01 | 只看該作者
學習學習
回復

使用道具 舉報

7#
ID:216466 發表于 2017-7-6 13:21 | 只看該作者
已下載測試。
回復

使用道具 舉報

8#
ID:231272 發表于 2017-9-5 22:22 | 只看該作者
已下載測試。
回復

使用道具 舉報

9#
ID:231272 發表于 2017-9-5 22:50 | 只看該作者
學習學習已下載測試。
回復

使用道具 舉報

10#
ID:231969 發表于 2017-9-11 19:17 | 只看該作者
學習一下!!!!
回復

使用道具 舉報

11#
ID:79544 發表于 2017-9-12 09:24 | 只看該作者
感謝分享學習啦!!!!!!!!!!
回復

使用道具 舉報

12#
ID:234206 發表于 2017-9-19 20:26 | 只看該作者
proteus7.7版本里是沒有DHT11的。
回復

使用道具 舉報

13#
ID:186710 發表于 2017-9-22 23:41 | 只看該作者
工程文件不能用 proteus打開啊!
回復

使用道具 舉報

14#
ID:234650 發表于 2017-9-23 08:29 | 只看該作者
為什么我沒能找到dsn文件
回復

使用道具 舉報

15#
ID:228939 發表于 2017-10-7 12:16 | 只看該作者
下載了
回復

使用道具 舉報

16#
ID:238080 發表于 2017-10-9 18:00 | 只看該作者
很實用 不錯
回復

使用道具 舉報

17#
ID:245026 發表于 2017-11-1 18:57 | 只看該作者
學習下不知道是哪個版本的proteus,現在版本的差別很大
回復

使用道具 舉報

18#
ID:20324 發表于 2017-11-6 08:28 | 只看該作者
學習一下,謝呀
回復

使用道具 舉報

19#
ID:246388 發表于 2017-11-7 00:18 | 只看該作者
為什么proteus8會打開不了文件,一打開就直接關閉
回復

使用道具 舉報

20#
ID:107680 發表于 2017-11-26 22:48 | 只看該作者
學習下不知道是哪個版本的proteus,現在版本的差別很大DE1
回復

使用道具 舉報

21#
ID:256170 發表于 2017-12-1 16:28 | 只看該作者
謝謝分享,很好的資料,正在研究DHT11,一定好好學習下。
回復

使用道具 舉報

22#
ID:253385 發表于 2017-12-7 16:13 | 只看該作者
程序下載進單片機為什么全部是高電平?
回復

使用道具 舉報

23#
ID:262778 發表于 2017-12-17 18:22 | 只看該作者
一直仿真不了DHT11,想學習一下
回復

使用道具 舉報

24#
ID:268397 發表于 2017-12-28 18:48 | 只看該作者
很棒,謝謝~
回復

使用道具 舉報

25#
ID:274459 發表于 2018-1-10 18:48 | 只看該作者
能發我郵箱嗎?1628015612@qq.com
回復

使用道具 舉報

26#
ID:274518 發表于 2018-1-16 23:30 | 只看該作者
你好,想求一下pcb圖可以嗎,實在是畫不出來
回復

使用道具 舉報

27#
ID:287315 發表于 2018-3-3 22:51 | 只看該作者
請問如何制作DHT11的仿真模型?
回復

使用道具 舉報

28#
ID:279589 發表于 2018-3-11 16:47 | 只看該作者
學習學習!
回復

使用道具 舉報

29#
ID:288877 發表于 2018-3-16 22:35 | 只看該作者
每次都是  PDS.exe已停止運行 是什么鬼 各位大佬
回復

使用道具 舉報

30#
ID:272082 發表于 2018-3-21 22:39 | 只看該作者
大B 發表于 2017-11-7 00:18
為什么proteus8會打開不了文件,一打開就直接關閉

我也是,下載了一個,proteus 8.0 打不開文件,一打開就關閉
回復

使用道具 舉報

31#
ID:272082 發表于 2018-3-21 22:40 | 只看該作者
xiaosong1234 發表于 2018-3-16 22:35
每次都是  PDS.exe已停止運行 是什么鬼 各位大佬

我也是,不知道怎么回事
回復

使用道具 舉報

32#
ID:193865 發表于 2018-4-1 00:11 | 只看該作者
學習學習
回復

使用道具 舉報

33#
ID:305728 發表于 2018-4-11 11:20 | 只看該作者
很給力!學習學習
回復

使用道具 舉報

34#
ID:300185 發表于 2018-4-12 02:30 | 只看該作者
為什么溫度高低和濕度高低控制的都是同一個設備,不應該是溫度高時是通風設備,溫度低是是加熱設備嗎?
回復

使用道具 舉報

35#
ID:249397 發表于 2018-4-13 17:29 | 只看該作者
最近在做一個設計需要用到溫濕度檢測,感覺挺好
回復

使用道具 舉報

36#
ID:308438 發表于 2018-4-15 11:11 | 只看該作者
贊一個!
回復

使用道具 舉報

37#
ID:309581 發表于 2018-4-16 20:37 | 只看該作者
最近在做溫濕度報警儀,感謝分享
回復

使用道具 舉報

38#
ID:309596 發表于 2018-4-17 08:50 | 只看該作者
小白一只,下載下來研究很久還是不會。
回復

使用道具 舉報

39#
ID:274244 發表于 2018-4-21 11:06 | 只看該作者
給樓主點贊
回復

使用道具 舉報

40#
ID:312929 發表于 2018-4-21 11:54 | 只看該作者
ybfq 發表于 2017-6-19 10:52
**** 作者被禁止或刪除 內容自動屏蔽 ****

這個是自己命名的
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩一区二区在线视频 | 国产精品一区二区三区在线 | 高清亚洲 | 国产在线麻豆精品入口 | 亚洲精品资源 | aaaaaaa片毛片免费观看 | 久久精品无码一区二区三区 | 日韩欧美国产不卡 | 亚洲国产二区 | 中文字幕欧美一区 | 久久久久一区二区三区四区 | 国产精品人人做人人爽 | 欧美视频区 | 午夜视频免费在线观看 | 欧美精品一区二区三区在线 | 日韩视频在线一区 | 国产福利精品一区 | 天天操夜夜操 | 日韩一区二区在线视频 | 国产 欧美 日韩 一区 | 日韩在线观看中文字幕 | 亚洲三区在线观看 | 国产在线观看一区二区三区 | 99久视频 | 精品国产第一区二区三区 | 日本超碰| 一区二区在线不卡 | 国产成人在线免费 | 国产亚洲欧美在线 | 久色网| 国精日本亚洲欧州国产中文久久 | 成人小视频在线观看 | 日韩在线免费视频 | 日韩在线视频观看 | 日本大片在线播放 | 精品九九| 1区2区视频 | 黄色日本视频 | 成年男女免费视频网站 | 欧美日韩三区 | 天天天天操 |