找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4179|回复: 1
打印 上一主题 下一主题
收起左侧

怎么把DHT11转化到的数字 转化成实际温度和湿度 求思路

[复制链接]
跳转到指定楼层
楼主
ID:286423 发表于 2018-3-24 22:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近写的代码,用调试助手hex模式显示的不是真实温度和湿度 ,怎么能用1206液晶显示 真实的温度 湿度呢 求思路...或者有没有转化的公式啥的??
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:155507 发表于 2018-3-25 16:32 | 只看该作者
  1. //做了一个DHT11温湿度传感器的1602的显示,用8051做的,换成60s2的片子以后不行了...
  2. //我想应该是机械周期的事吧,应该怎么改呢,大家有遇到的帮帮我、、、这是简单的显示程序:
  3. //STC  延时比ATMEL  快了6~8倍,改一下DELAY的值就行了
  4. //这个你得该延时,因为8051是12T的时钟周期而60S2是1T的
  5. //这是一个延时的问题,把延时改一下就好了

  6. #include <STC12C5A60S2.h>
  7. #define uchar unsigned char
  8. #define uint unsigned int
  9. /*引脚定义*/
  10. uchar code table[]="0123456789";
  11. sbit en=P2^1;
  12. sbit rs=P2^0;
  13. sbit io=P1^1;

  14. /*定义变量*/
  15. uchar data_byte=0, count, SHISHI, SHIGE, WENSHI, WENGE;
  16. uint TH_data, TL_data, RH_data, RL_data, CK_data;
  17. uint TH_temp, TL_temp, RH_temp, RL_temp, CK_temp;
  18. uchar num;

  19. /*延时程序*/
  20. void delayms(unsigned int xms)
  21. {        
  22.         uint i,j;
  23.         for(i=xms;i>0;i--)
  24.                 for(j=110;j>0;j--);
  25. }        

  26. /*10微妙延时程序*/
  27. void delay1()
  28. {
  29.         unsigned char i;
  30.         for(i=0; i<3; i++);
  31. }

  32. /*写命令*/
  33. void command(uchar com)
  34. {
  35.         rs=0;
  36.         P0=com;
  37.         en=1;
  38.         delayms(5);
  39.         en=0;
  40.         delayms(5);
  41. }

  42. /*写数据*/
  43. void information(uchar date)
  44. {
  45.         rs=1;
  46.         P0=date;
  47.         en=1;
  48.         delayms(5);
  49.         en=0;
  50.         delayms(5);
  51. }

  52. /*初始化*/
  53. void init()
  54. {
  55.         en=0;
  56.         command(0x38);//设置16x2显示,5x7点阵,8位数据接口
  57.         command(0x0c);//设置开显示,不显示光标
  58.         command(0x06);//写一个字符后地址指针加一
  59.         command(0x01);//显示清零,数据指针清零
  60. }

  61. /**********************DHT11模块**********************/
  62. uchar receive_byte()//接收一个字节
  63. {
  64.         uchar i,temp;
  65.         for(i=0;i<8; i++)
  66.         {
  67.                 count = 2;
  68.                 while((!io) && count++)//等待50us低电平结束并防止死循环
  69.                         temp = 0;
  70.                 delay1();
  71.                 delay1();
  72.                 delay1();
  73.                 if (io==1)
  74.                 {  
  75.                         temp = 1;
  76.                         count = 2;
  77.                         while(io && count++);
  78.                 }
  79.                 else
  80.                 temp = 0;
  81.                 data_byte<<=1;
  82.                 data_byte|=temp;
  83.         }
  84.         return (data_byte);
  85. }

  86. /*DHT11开始函数*/
  87. void read_io()//开始信号读数据并校验
  88. {
  89.         io = 0;
  90.         delayms(18);//主机拉低18ms
  91.         io=1;//DATA总线由上拉电阻拉高 主机延时20us
  92.         delay1();
  93.         delay1();
  94.         delay1();
  95.         delay1();
  96.         io = 1;//主机设置为输入高电平判断从机响应信号
  97.         if(!io)
  98.         {  
  99.                 count = 2;  
  100.                 while((!io)&&count++);//判断DHT11发出80us低电平响应信号是否结束
  101.                 count = 2;
  102.                 while(io && count++);//判断DHT11拉高总线80us高电平是否结束
  103.                 RH_temp = receive_byte();  
  104.                 RL_temp = receive_byte();  
  105.                 TH_temp = receive_byte();  
  106.                 TL_temp = receive_byte();  
  107.                 CK_temp = receive_byte();
  108.                 io = 1;
  109.                 num = (RH_temp+RL_temp+TH_temp+TL_temp);//数据校验
  110.                 if(num==CK_temp)
  111.                 {
  112.                         RH_data=RH_temp;
  113.                         RL_data=RL_temp;
  114.                         TH_data=TH_temp;  
  115.                         TL_data=TL_temp;
  116.                         CK_data=CK_temp;  
  117.                 }
  118.         }
  119.         //湿度整数部分
  120.         SHISHI =  RH_data/10;
  121.         SHIGE  =  RH_data%10;
  122.         //温度整数部分
  123.         WENSHI =(char) TH_data/10;
  124.         WENGE = (char) TH_data%10;
  125. }

  126. /*主函数*/
  127. void main()
  128. {
  129.         P4SW=0x70;
  130.         init();
  131.         while(1)
  132.         {        
  133.                 read_io();
  134.                 command(0x80);
  135.                 information(table[WENSHI]);
  136.                 command(0x81);
  137.                 information(table[WENGE]);
  138.         }
  139. }



复制代码

评分

参与人数 1黑币 +6 收起 理由
smilexiaoxiao + 6 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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