找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2776|回复: 0
收起左侧

单片机+DHT11+1602显示屏+Proteus仿真+JDY-31 SPP蓝牙模块资料

[复制链接]
ID:761006 发表于 2020-11-28 15:43 | 显示全部楼层 |阅读模式
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.png

Altium Designer画的PCB图如下:(51hei附件中可下载工程文件)
51hei.png

单片机源程序如下:
  1. /*********************************************************************************
  2.   本实验仅限学习交流  AT89C52  12Mhz DHT11 LCD1602
  3.    接线如下
  4.    DHT11_DQ = P2^0
  5.    LCD1602_E= P2^7
  6.    LCD1602_RW=P2^5
  7.    LCD1602_RS=P2^6
  8.    D0—D7接到P0口
  9.    本实验没有用到DHT的校验位Check_Init,想使用校验位,定义一个变量t,t=HUMI_Buffer_Int+HUMI_Low_Int+TEM_Buffer_Int+TEM_Low_Int;
  10.    判断t与Check_Init是否相等。
  11.          本实验只显示了整数部分,小数部分没显示,小数部分显示和整数部分显示一样,类别进行。
  12. *********************************************************************************/
  13. #include"dht11.h"
  14. #include"reg52.h"
  15. #include"lcd.h"
  16. unsigned char dis[]="RH:";        //湿度字符串
  17. unsigned char dis1[]="TEMP:"; //温度字符串
  18. unsigned char i;
  19. int main()
  20. { LcdInit();           //1602初始化
  21. DHT11_Init();           //DHT11初始化
  22. while(1)
  23. {
  24.    DHT11_Read();  //DHT11数值读取
  25.    LcdWriteCom(0x80);//第一列第一个字符
  26.    for(i=0;i<3;i++)
  27.    {
  28.            LcdWriteData(dis[i]); //显示“RH:”
  29.    }
  30.    LcdWriteData(HUMI_Buffer_Int/10+0x30);        //显示湿度的十位
  31.    LcdWriteData(HUMI_Buffer_Int%10+0x30);        //显示湿度的个位
  32.    LcdWriteData(0x25);                                                //显示字符“%”
  33.    LcdWriteCom(0x80+0x40);                                        //第二行第一个
  34.    for(i=0;i<5;i++)
  35.    {
  36.                    LcdWriteData(dis1[i]);                           //显示字符“TEMP”
  37.    }
  38.    LcdWriteData(TEM_Buffer_Int/10+0x30);   //显示温度的十位
  39.    LcdWriteData(TEM_Buffer_Int%10+0x30);   //显示温度的个位
  40.    LcdWriteData(0xDF);
  41.    LcdWriteData(0x43);                                   //显示字符“%”
  42. }


  43. }
复制代码
  1. #include "DHT11.h"

  2. //定义变量
  3. unsigned char HUMI_Buffer_Int = 0;            //湿度高位
  4. unsigned char HUMI_Low_Int=0;                        //湿度低位
  5. unsigned char TEM_Buffer_Int = 0;                //温度高位
  6. unsigned char TEM_Low_Int=0;                        //温度低位
  7. unsigned char Check_Init=0;                                //检验位
  8. //****************************************************
  9. //MS延时函数(12M晶振下测试)
  10. //****************************************************
  11. void DHT11_delay_ms(unsigned int n)
  12. {
  13.         unsigned int  i,j;
  14.         for(i=n;i>0;i--)
  15.         {
  16.         for(j=112;j>0;j--);
  17.         }
  18. }
  19. //****************************************************
  20. //延时函数
  21. //****************************************************
  22. void DHT11_Delay( unsigned int n )
  23. {
  24.         unsigned int i;
  25.         for(i = 0 ; i < n ; i++ );
  26. }

  27. //****************************************************
  28. //初始化DHT11
  29. //****************************************************
  30. bit DHT11_Init()
  31. {
  32.         bit Flag_DHT11 = 1;
  33.         DHT11_DQ = 0;
  34.         DHT11_delay_ms(25);                        //延时>18ms

  35.         DHT11_DQ = 1;
  36.         DHT11_Delay(2);                                //延时20~40us

  37.         DHT11_Delay(2);                                
  38.         Flag_DHT11 = DHT11_DQ;               
  39.         DHT11_Delay(2);                                //DHT11响应总时间80us

  40.         DHT11_Delay(4);                                //DHT11拉高信号80us

  41.         return Flag_DHT11;               
  42. }

  43. //****************************************************
  44. //读一个字节DHT11数据
  45. //****************************************************
  46. unsigned char DHT11_Read_Byte()
  47. {
  48.         unsigned char i,dat,j;
  49.         while( DHT11_DQ == 1 );
  50.         for( i = 0 ; i < 8 ; i++ )
  51.         {
  52.                 while( DHT11_DQ == 0 );        
  53.                 dat <<= 1;
  54.                 for( j = 0 ; DHT11_DQ == 1 ; j++);
  55.                 if( j < 10 )
  56.                         dat &= 0xfe;                //低位清零
  57.                 else
  58.                         dat |= 0x01;                //低位置一
  59.         }
  60.         return dat;
  61. }

  62. //****************************************************
  63. //读取温湿度值,存放在TEM_Buffer和HUMI_Buffer
  64. //****************************************************
  65. void DHT11_Read()
  66. {
  67.         if( DHT11_Init() == 0 )
  68.         {
  69.                 HUMI_Buffer_Int = DHT11_Read_Byte();                   //读取湿度的整数值
  70.                 HUMI_Low_Int=DHT11_Read_Byte();                                //读取湿度的小数值
  71.                 TEM_Buffer_Int = DHT11_Read_Byte();                        //读取温度的整数值
  72.                 TEM_Low_Int=DHT11_Read_Byte();                    //读取温度的小数值
  73.                 Check_Init=DHT11_Read_Byte();                                //读取校验和
  74.                 DHT11_Delay(3);                                        //DHT11拉低总线50us

  75.                 DHT11_DQ = 1;                                        //释放总线                        
  76.         }        
  77. }
复制代码


所有资料51hei提供下载:
仿真程序资料.7z (5.09 MB, 下载次数: 108)

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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