找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5957|回复: 23
收起左侧

基于DHT11和2.2寸液晶屏的温湿计设计 超简单

  [复制链接]
ID:362076 发表于 2019-2-26 19:25 | 显示全部楼层 |阅读模式
本帖最后由 凌净清河 于 2019-2-26 19:27 编辑

本帖子中DHT11的驱动函数和我另一个设计中的函数相同,直接copy过来的。

http://www.51hei.com/bbs/dpj-127755-1.html

DHT11温湿计模块是广大毕设者相当熟悉的了,最近有朋友需要,随手做了一个最简单的温湿计。
设计采用176X220 2.2寸TFT屏、STC12C5A60S2核心板以及DHT11等组成。
QQ截图20190226190659.png

设计使用的TFT样式如下所示:
显示屏样式 176X220.png


由于核心板上提供这款TFT的直插接口,故只需要连接DHT11到任一未占用的IO上即可。就像这样:
QQ图片20190226185933.jpg
需要注意的是,DHT11的数据线需要上拉10K电阻,这个电阻我焊在了DHT11的引脚上,并用热缩管罩住了。
QQ截图20190226190855.png

显示部分的程序参照淘宝上店家的例程,很方便就能够进行需要的显示,但是我的程序中对TFT驱动程序还是做了一定程度的精简,没有使用到的功能都删除了,为了节省flash,移植也方便。

程序主函数:

  1. #include<STC12C5A60S2.H>
  2. #include "GUI.c"
  3. sbit DHT=P2^7;//DHT11模块
  4. //运行数组
  5. unsigned char disp[5]={0,0,0,0,0};//温度每一位、湿度每一位
  6. //运行变量
  7. unsigned char Data_Receive[5];

  8. /************************************************************
  9. 名称:基于2.2寸屏和DHT11的温湿计
  10. 平台:STC12C5A60S2核心板

  11. 简介:显示采用2.2寸TFT 176X220彩色液晶显示温度和湿度;
  12.         测量部分采用DHT11模块,模块信息如下:
  13.         ASAIR
  14.         -----
  15.         NA:DHT11
  16.         OC:3.3-5.5V
  17.         U1:5-95%RH
  18.         U2:-20-60℃
  19.         U3:±5%RH±2℃
  20.         SN:8180H3985

  21. 程序编写:凌净清河
  22. 硬件制作:凌净欣羽
  23. 文稿排版:凌净欣羽

  24. 日期:2019年2月26日
  25. 注意:设计仅做正温度处理。
  26. 注意:核心板上的晶振频率为11.0592MHz,移植时注意修改延时。
  27. 所属:新矿城学习基地#2019
  28. ************************************************************/

  29. void Delay20ms()                //@11.0592MHz
  30. {
  31.         unsigned char i, j, k;

  32.         i = 1;
  33.         j = 216;
  34.         k = 35;
  35.         do
  36.         {
  37.                 do
  38.                 {
  39.                         while (--k);
  40.                 } while (--j);
  41.         } while (--i);
  42. }

  43. void Delay30us()                //@11.0592MHz
  44. {
  45.         unsigned char i;

  46.         i = 80;
  47.         while (--i);
  48. }

  49. void sys_init()
  50. {
  51.         Lcd_Init();
  52.         LCD_LED=1;
  53.         Lcd_Clear(BLACK);
  54. }

  55. void DHT_Collect()//温度采集函数
  56. {
  57.         unsigned char i,j;//for循环变量
  58.         unsigned char t;//超时判断
  59.         unsigned char dat8=0;//一次读取的8位数据,需要读5次
  60.         unsigned int CheckValue=0;//校验和
  61.         
  62.         DHT=0;//主机发起始信号
  63.         Delay20ms();//主机拉低总线至少18ms
  64.         DHT=1;//主机拉高总线20~40us
  65.         Delay30us();
  66.         
  67.         t=80;//设置超时等待时间
  68.         while(DHT&&t--);//等待DHT11拉低总线
  69.         if(t==0)//超时
  70.         {
  71.                 DHT=1;
  72.         }
  73.         t=250;//设置超时等待时间
  74.         while(!DHT&&t--);//等待DHT11拉高总线
  75.         if(t==0)//超时
  76.         {
  77.                 DHT=1;
  78.         }
  79.         t=250;//设置超时等待时间
  80.         while(DHT&&t--);//等待DHT11拉低总线
  81.         if(t==0)//超时
  82.         {
  83.                 DHT=1;
  84.         }

  85.         for(j=0;j<5;j++)//5次读取
  86.         {
  87.                 for(i=0;i<8;i++)//1次8个位
  88.                 {
  89.         //等待50us开始时隙
  90.                         t=150;//设置超时等待时间
  91.                         while(!DHT&&t--);//等待DHT11拉高总线
  92.                         if(t==0)//超时
  93.                         {
  94.                                 DHT=1;
  95.                         }
  96.                         t=0;//记录时间清零
  97.                         while(DHT&&++t);//等待并记录高电平持续时间
  98.                         dat8<<=1;
  99.                         if(t>30)//高电平持续时间较长(70us)
  100.                         dat8+=1;//传输值为1
  101.                 }
  102.                 Data_Receive[j]=dat8;
  103.         }
  104.         
  105.         Delay30us();//等待DHT11拉低50us
  106.         Delay30us();
  107.         DHT=1;

  108.         for(i=0;i<4;i++)
  109.         {
  110.                 CheckValue+=Data_Receive[i];//计算校验值
  111.         }
  112.         if((unsigned char)CheckValue==Data_Receive[4])//比对
  113.         {
  114.                 disp[0]=Data_Receive[2]/10;
  115.                 disp[1]=Data_Receive[2]%10;
  116.                 disp[2]=Data_Receive[3]%10;
  117.                 disp[3]=Data_Receive[0]/10;
  118.                 disp[4]=Data_Receive[0]%10;
  119.         }
  120. }

  121. void main()
  122. {
  123.         sys_init();
  124.         GUI_BOX_K(0,0,219,175,GRAY0);
  125.         GUI_BOX_K(4,4,215,171,BLUE);
  126.         Gui_DrawFont_GBK24(39,8,YELLOW,BLACK,"无线温湿度计");
  127.         Gui_DrawLine(35,34,185,34,BLUE);
  128.         Gui_DrawFont_GBK16(5,36,WHITE,BLACK,"    本作品使用DHT11模块和");
  129.         Gui_DrawFont_GBK16(5,54,WHITE,BLACK,"彩色液晶模块,完成温湿度采");
  130.         Gui_DrawFont_GBK16(5,72,WHITE,BLACK,"集和显示。");
  131.         GUI_BOX_K(8,90,211,167,BLUE);
  132.         
  133.         Gui_DrawFont_GBK24(10,100,YELLOW,BLACK,"温度");
  134.         GUI_Char24(58,100,YELLOW,BLACK,CChar4);//:
  135.         
  136.         Gui_DrawFont_GBK24(10,130,YELLOW,BLACK,"湿度");
  137.         GUI_Char24(58,130,YELLOW,BLACK,CChar4);//:
  138.         while(1)
  139.         {
  140.                 DHT_Collect();
  141.                
  142.                 GUI_Num24(82,100,GREEN,BLACK,disp[0]);
  143.                 GUI_Num24(106,100,GREEN,BLACK,disp[1]);
  144.                 GUI_Char24(130,100,GREEN,BLACK,CChar2);//.
  145.                 GUI_Num24(154,100,GREEN,BLACK,disp[2]);
  146.                 GUI_Char24(178,100,YELLOW,BLACK,CChar1);//℃
  147.                
  148.                 GUI_Char24(82,130,YELLOW,BLACK,CChar0);//空格
  149.                 GUI_Num24(106,130,GREEN,BLACK,disp[3]);
  150.                 GUI_Num24(130,130,GREEN,BLACK,disp[4]);
  151.                 GUI_Char24(154,130,YELLOW,BLACK,CChar0);//空格
  152.                 GUI_Char24(178,130,YELLOW,BLACK,CChar3);//%
  153.         }
  154. }
复制代码


欢迎进群:873434536,虽人数暂时较少,但群内氛围很好,有任何关于51学习中的问题,来一起讨论吧~!

资料下载:
【程序】
基于DHT11和2.2寸液晶屏的温湿计设计 凌净清河.zip (70.42 KB, 下载次数: 101)

评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:362076 发表于 2019-3-1 17:22 | 显示全部楼层
对了,才想起来,设计原本是打算做无线的,但是后来需求变了,改为有线测量,标题就没换回来,这个算是设计的BUG,看到的情知悉。
回复

使用道具 举报

ID:64089 发表于 2019-2-27 09:05 | 显示全部楼层
占个沙发,学习点1:DTH11的学习;2:液晶显示的学习,不错。

评分

参与人数 1黑币 +16 收起 理由
凌净清河 + 16 下载补贴

查看全部评分

回复

使用道具 举报

ID:487549 发表于 2019-3-9 19:09 | 显示全部楼层
很棒的帖子呀,对我很有用

评分

参与人数 1黑币 +16 收起 理由
凌净清河 + 16 下载补贴

查看全部评分

回复

使用道具 举报

ID:317383 发表于 2019-3-10 08:27 | 显示全部楼层
作品很棒,赞!!

评分

参与人数 1黑币 +16 收起 理由
凌净清河 + 16 下载补贴

查看全部评分

回复

使用道具 举报

ID:284488 发表于 2019-3-11 21:25 | 显示全部楼层
学习了,感谢楼主的分享。并感恩楼主的仁心照顾黑币较少的人也能够下载附件。

评分

参与人数 1黑币 +16 收起 理由
凌净清河 + 16 黑币补贴

查看全部评分

回复

使用道具 举报

ID:493495 发表于 2019-3-18 20:51 | 显示全部楼层
最近有一个课程设计,正好参考一下啦,拿走了

评分

参与人数 1黑币 +16 收起 理由
凌净清河 + 16 黑币补贴

查看全部评分

回复

使用道具 举报

ID:337487 发表于 2019-3-18 23:20 | 显示全部楼层
谢谢楼主的分享,正在学习LCD显示可以学习学习。

评分

参与人数 1黑币 +16 收起 理由
凌净清河 + 16 黑币补贴

查看全部评分

回复

使用道具 举报

ID:490458 发表于 2019-3-24 16:05 | 显示全部楼层
谢谢楼主分享,正在学习51电子,正好参考楼主设计思路。

评分

参与人数 1黑币 +16 收起 理由
凌净清河 + 16 黑币补贴

查看全部评分

回复

使用道具 举报

ID:478730 发表于 2019-3-28 09:03 | 显示全部楼层
作品很棒,赞!!

评分

参与人数 1黑币 +16 收起 理由
凌净清河 + 16 黑币补贴

查看全部评分

回复

使用道具 举报

ID:478730 发表于 2019-3-28 09:05 | 显示全部楼层
谢谢楼主分享,正在学习51电子,正好参考

评分

参与人数 1黑币 +16 收起 理由
凌净清河 + 16 黑币补贴

查看全部评分

回复

使用道具 举报

ID:403562 发表于 2019-4-5 21:01 | 显示全部楼层
我是个新手,我想具体了解DHT11模块的应用,与编程
谢谢大佬

评分

参与人数 1黑币 +12 收起 理由
NPC-1024 + 12 黑币补贴(小号)

查看全部评分

回复

使用道具 举报

ID:604575 发表于 2019-8-28 09:50 来自手机 | 显示全部楼层
楼主还在么,求补贴。
回复

使用道具 举报

ID:362076 发表于 2019-8-28 13:27 | 显示全部楼层
1931670332 发表于 2019-8-28 09:50
楼主还在么,求补贴。

怎么啦,需要补什么?
回复

使用道具 举报

ID:604575 发表于 2019-8-29 14:21 来自手机 | 显示全部楼层
凌净清河 发表于 2019-8-28 13:27
怎么啦,需要补什么?

没有黑币了。。想下载附件,非常感谢

评分

参与人数 1黑币 +7 收起 理由
凌净清河 + 7 我给黑币数量被限制了。。

查看全部评分

回复

使用道具 举报

ID:101205 发表于 2019-8-29 15:31 | 显示全部楼层
学习下,谢谢楼主
回复

使用道具 举报

ID:618778 发表于 2019-10-2 13:21 | 显示全部楼层
作品很棒,很适合新手学习
回复

使用道具 举报

ID:738997 发表于 2020-4-27 08:12 来自手机 | 显示全部楼层
楼主辛苦了,如果做了可以在手机上显示的话就更好了
回复

使用道具 举报

ID:512651 发表于 2020-4-27 11:17 | 显示全部楼层
谢谢楼主分享,非常棒!
回复

使用道具 举报

ID:809501 发表于 2020-7-30 12:52 | 显示全部楼层
楼主,请问用STC89C52可以做这个吗?

评分

参与人数 1黑币 +5 收起 理由
凌净清河 + 5 肯定可以,只是速度会慢一些

查看全部评分

回复

使用道具 举报

ID:884042 发表于 2022-4-3 22:27 | 显示全部楼层
检测温度直接用一块彩屏?楼主有点奢侈了呀
回复

使用道具 举报

ID:1015584 发表于 2022-4-4 14:43 | 显示全部楼层
群里有这个资料吗,这儿下载积分不够
回复

使用道具 举报

ID:1017008 发表于 2022-4-9 16:11 | 显示全部楼层
GUI.c是??
回复

使用道具 举报

ID:824664 发表于 2023-3-14 22:10 | 显示全部楼层
谢谢分享,美观使用,好好学习。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表