找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3818|回复: 4
收起左侧

STC12C5A60S2的DHT22以及MQ-2的1602显示程序

[复制链接]
ID:86862 发表于 2018-5-11 22:41 | 显示全部楼层 |阅读模式
这个程序是本人写的,可在1602显示,烟雾与温湿度显示程序。经测试,可用

单片机源程序如下:
  1. #include"main.h"

  2. sbit DHT22_DATA = P2^0;
  3. unsigned char a,b,c,d,check=1;  //8bit温度整数数据+8bit温度小数数据+8bit湿度整数数+8bit湿度小数数据+8bit校验和
  4. unsigned int R,T;

  5. unsigned char n;

  6. void delay500us(void)   //误差 -0.054253472222us
  7. {
  8.     unsigned char a,b;
  9.     for(b=251;b>0;b--)
  10.         for(a=4;a>0;a--);
  11.     _nop_();  //if Keil,require use intrins.h
  12. }

  13. void delay20us(void)   //误差 -0.016637731481us
  14. {
  15.     unsigned char a,b;
  16.     for(b=1;b>0;b--)
  17.         for(a=52;a>0;a--);
  18.     _nop_();  //if Keil,require use intrins.h
  19. }


  20. char Read_Byte()
  21. {
  22.         char temp,tmp;
  23.         unsigned char i;
  24.         for(i=0;i<8;i++)
  25.         {
  26. //                delay20us();
  27.                 n = 2;
  28.                 while((!DHT22_DATA)&&n++); //等待50us间隔低电平响应结束
  29.                 if(n == 1) return 0;
  30.                 delay20us();delay20us();   //26-28us高电平为‘0’,70us高电平为‘1’
  31.                 tmp = 0;
  32.                 if(DHT22_DATA) tmp = 1;
  33.                 n = 2;
  34.                 while(DHT22_DATA&&n++);  //若位为1,等待高电平结束
  35.                 if(n == 1) return 0;
  36.                 temp <<= 1;
  37.                 temp |= tmp;
  38.         }
  39.         return temp;
  40. }

  41. unsigned char DHT22_Read()
  42. {   
  43.         DHT22_DATA = 0;
  44.         delay500us();                                                        //拉低500us
  45.         DHT22_DATA = 1;
  46.         delay20us();delay20us();                           //延时20-40us等待响应信号
  47.         DHT22_DATA = 1;
  48.         if(!DHT22_DATA)
  49.         {
  50.                 n = 2;
  51.                 while((!DHT22_DATA)&&n++);                        //等待80us低电平响应结束
  52.                 if(n == 1) return 0;
  53.                 delay20us();delay20us();delay20us();
  54.                 n = 2;
  55.                 while(DHT22_DATA&&n++);                                //等待80s高电平等待结束
  56.                 if(n == 1) return 0;
  57.                 a = Read_Byte();
  58.                 b = Read_Byte();
  59.                 c = Read_Byte();
  60.                 d = Read_Byte();
  61.                 check = Read_Byte();
  62.                 DHT22_DATA = 1;
  63.                 if(check != a+b+c+d) return 0;
  64.         }
  65.         R = a*256+b;
  66.         T = c*256+d;
  67.         return 1;
  68. ……………………

  69. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
烟雾温湿度可用.zip (60.03 KB, 下载次数: 181)
回复

使用道具 举报

ID:324109 发表于 2018-5-17 19:12 | 显示全部楼层
老铁,在12MHz晶振上怎么改,还有就是mq-2你定义的那个脚
回复

使用道具 举报

ID:104846 发表于 2018-8-17 11:41 | 显示全部楼层
支持一下!
回复

使用道具 举报

ID:441222 发表于 2019-2-27 14:13 | 显示全部楼层
在做一个MQ-2传感器的程序,正好参考上了
回复

使用道具 举报

ID:585455 发表于 2019-7-24 19:01 | 显示全部楼层
感謝分享
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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