找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4135|回复: 5
收起左侧

STC12C5A60S2+DHT11温湿度传感器+数码管

[复制链接]
ID:256751 发表于 2017-12-3 13:00 | 显示全部楼层 |阅读模式
附件文件为c,h的文本格式。
0.png

单片机源程序如下:
  1. /************************************************
  2. 项  目:温、湿度测量程序
  3. 单片机:STC12C5A60S2
  4. 传感器:DHT11
  5. 日  期:04.09
  6. ************************************************/

  7. #include <stc12c5a60s2.h>
  8. #include "delay.h"

  9. #define uint unsigned int
  10. #define uchar unsigned char

  11. sbit io = P2^0;                        //定义数据端口

  12. uchar data_byte;                //定义全局变量
  13. uchar RH,RL,TH,TL;                //定义全局变量

  14. unsigned char code DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};        // 显示段码值0~9
  15. uchar  TempData[5];                         //存储显示值的全局变量

  16. /******************** DHT11测试模块**********************/
  17. void start()                        //开始信号
  18. {
  19.         io=1;
  20.         delayus(10);
  21.         io=0;
  22.         delayms(30);                //10~60之间
  23.         io=1;
  24.         delayus(100);                //关键时间:35-250之间
  25. }

  26. /**********************接收一个字节**********************/
  27. uchar receive_byte()                       
  28. {
  29.         uchar i,temp,count;
  30.         for(i=0;i<8;i++)
  31.         {
  32.                 count=2;
  33.                 while((!io)&&count++)               
  34.                 temp=0;
  35.                 delayus(150);                                //关键时间:10~23之间
  36.                 if(io==1)temp=1;
  37.                 count=2;
  38.                 while((io)&&count++);
  39.                 if(count==1)break;
  40.                 data_byte<<=1;
  41.                 data_byte|=temp;
  42.         }
  43.         return data_byte;
  44. }

  45. /************************接收数据************************/

  46. void receive()                                       
  47. {
  48.         uchar T_H,T_L,R_H,R_L,check,num_check;
  49.         uchar count;

  50.         start();                                        //开始信号               
  51.         io=1;       
  52.         if(!io)                                                //读取DHT11响应信号
  53.         {
  54.                 count=2;
  55.                 while((!io)&&count++);        //DHT11高电平80us是否结束
  56.                 count=2;
  57.                 while((io)&&count++);               
  58.                 R_H=receive_byte();
  59.                 R_L=receive_byte();
  60.                 T_H=receive_byte();
  61.                 T_L=receive_byte();       
  62.                 check=receive_byte();
  63.                
  64.                 io=0;                                       
  65.                    delayms(1);                                //拉低延时               
  66.                 io=1;               
  67.                 num_check=R_H+R_L+T_H+T_L;
  68.                        
  69.                 if(num_check=check)
  70.                 {
  71.                         RH=R_H;
  72.                         RL=R_L;
  73.                         TH=T_H;
  74.                         TL=T_L;
  75.                         check=num_check;               
  76.                 }               
  77.         }
  78. }

  79. /**********************************************************************
  80.                                                         显示子函数
  81. **********************************************************************/
  82. void display()
  83. {       
  84.           P2=0xef;
  85.         P0=TempData[0];               
  86.         delayms(20);
  87.         P2=0xff;
  88.        
  89.         P2=0xdf;
  90.         P0=TempData[1];       
  91.         delayms(20);
  92.         P2=0xff;

  93.         P2=0xbf;
  94.         P0=TempData[2];
  95.         delayms(20);
  96.         P2=0xff;

  97.         P2=0x7f;
  98.         P0=TempData[3];       
  99.         delayms(20);
  100.         P2=0xff;
  101. }

  102. /*******************************************************************
  103.                                                定时器初始化子函数
  104. *******************************************************************/
  105. void InitTimer(void)                       
  106. {                                                                                                                                          
  107.         TMOD |= 0x01;                          //定义定时器T0,工作方式1   

  108.         TH0=(65536-20000)/256;
  109.         TL0=(65536-20000)%256;                        //50ms

  110.         ET0=1;
  111.         TR0=1;
  112.         EA = 1;                                //开总中断
  113.        
  114. }

  115. /***************************主函数**************************/
  116. void main()
  117. {
  118.         P0M0=0xFF;                                                //定义P0口为推挽输出 1111 1111
  119. //        P2M0=0xF0;                                                //定义P2.4 ~ P2.7口为推挽输出  1111 0000

  120.         InitTimer();

  121.         delayms(10);
  122.        
  123.         while(1)
  124.         {       
  125.                
  126.                 receive();               
  127.                
  128.                 TempData[0]=DuanMa[RH/10];                               
  129.                 TempData[1]=DuanMa[RH%10];                                                               
  130.                
  131.                 TempData[2]=DuanMa[TH/10];                       
  132.                 TempData[3]=DuanMa[TH%10];
  133.                
  134.                 delayms(20);
  135. ……………………

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

所有资料51hei提供下载:
程序文件.rar (1.94 KB, 下载次数: 159)
回复

使用道具 举报

ID:231936 发表于 2017-12-6 17:09 | 显示全部楼层
请传电路图参考
回复

使用道具 举报

ID:139071 发表于 2018-2-7 11:07 | 显示全部楼层
非常给力,顶顶顶
回复

使用道具 举报

ID:306141 发表于 2018-4-17 16:16 | 显示全部楼层
谢谢分享,下来看看怎么样
回复

使用道具 举报

ID:649542 发表于 2019-11-27 23:07 | 显示全部楼层
感谢分享,很不错!
回复

使用道具 举报

ID:649542 发表于 2019-11-27 23:08 | 显示全部楼层
感谢分享,很不错
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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