找回密码
 立即注册

QQ登录

只需一步,快速开始

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

stc15智能家居源码(温湿度传感器、光照传感器、空气质量传感器)

[复制链接]
跳转到指定楼层
楼主
ID:323323 发表于 2018-5-6 11:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
温湿度传感器、光照传感器、空气质量传感器

单片机源程序如下:
  1. #include "stc15.h"
  2. #include "string.h"
  3. #include "i2c.h"
  4. #include "stdio.h"  
  5. #include "uart.h"
  6. #include "normal.h"
  7. #include "string.h"
  8. #include <stdio.h>
  9. #include <intrins.h>

  10. unsigned char buf[40]={0};
  11. #define uchar unsigned char
  12. #define uint unsigned int
  13. uint hum,temp;
  14. uchar hum_h,hum_l,temp_h,temp_l,check;
  15. uchar bai,shi,ge,bail,shil,gel;
  16. char i=0;
  17.        


  18. sbit dht=P1^3;
  19. sbit in1=P2^1;
  20. sbit in2=P2^2;
  21. sbit in3=P2^3;
  22. sbit in4=P2^4;
  23. sbit zongxian=P2^5;
  24. sbit fenxian=P2^6;



  25. void delay(unsigned int time)
  26. {
  27.          unsigned char a,b;
  28.         for(;time>0;time--)
  29.                 for(b=4;b>0;b--)
  30.                         for(a=113;a>0;a--);
  31. }


  32. void delay2(uint t)
  33. {
  34.         unsigned char i;
  35.         for(t;t>0;t--)
  36.         {
  37.                 _nop_();
  38.                 i = 25;
  39.                 while (--i);
  40.         }
  41. }


  42. //void delay2(uint i)
  43. //{
  44. // while(i--);
  45. //}
  46. void delay1(uint z)
  47. {
  48. uint x,y;
  49. for(x=z;x>0;x--)
  50. for(y=110;y>0;y--);
  51. }
  52. void star()        //开始接受信号
  53. {
  54. dht=0;
  55. delay2(5);
  56. dht=1;
  57. delay2(4);
  58. while(!dht);
  59. while(dht);

  60. }
  61. uchar read_byte() //读取接受的信号
  62. {
  63.   uchar n,byte=0,dat;
  64.   for(n=0;n<8;n++)
  65.   {
  66.    while(!dht);
  67.    delay2(4);
  68.    dat=0;
  69.    if(dht)
  70.     dat=1;
  71.    while(dht);
  72.         byte<<=1;
  73.         byte|=dat;
  74.        
  75.    }
  76.    return byte;
  77. }
  78. void read_hum_temp()
  79. {
  80.    star();
  81.    hum_h=read_byte();
  82.    hum_l=read_byte();
  83.    temp_h=read_byte();
  84.    temp_l=read_byte();
  85.    check=read_byte();
  86.    while(!dht);
  87.    dht=1;

  88. }
  89. void shujvzhuanhua() //数据转化
  90. {
  91. uchar a;
  92. a=hum_h+hum_l+temp_h+temp_l;
  93. if(a==check)
  94. {
  95.   hum=temp=0;
  96.   hum=((hum|hum_h)<<8)|hum_l;
  97.   temp=((temp|temp_h)<<8)|temp_l ;
  98.   bai=temp/100+0x30;
  99.   shi=temp%100/10+0x30;
  100.   ge=temp%10+0x30;
  101.   bail=hum/100+0x30;
  102.   shil=hum%100/10+0x30;
  103.   gel=hum%10+0x30;

  104. }
  105. else
  106.   bai=shi=ge=bail=shil=gel=0;

  107. }
  108. void chuankou2() interrupt 8
  109. {       
  110.         R2I_RST();
  111.         T2I_RST();
  112.         i=S2BUF;
  113.         if(i=='s')
  114.         {
  115.                 P53=0;
  116.                
  117.                
  118.         }
  119.         if(i=='j')       
  120.         {
  121.                 P52=0;
  122.         }
  123.        
  124.         if(i=='g')
  125.         {
  126.                 zongxian=0;
  127.                 delay_ms(1);
  128.                 fenxian=0;
  129.                
  130.         }
  131.     if(i=='m')
  132.         {
  133.                 zongxian=1;
  134.                 fenxian=1; //检测下降沿
  135.        
  136.         }
  137. }


  138. //void delay1(unsigned int x)
  139. //{
  140. //        while(x--);
  141. //}
  142. void main()
  143. {
  144.         int i;
  145.         unsigned char raw_data[13]={0};
  146.         uint32_t Lux=0;
  147.         uint16_t data_16[2]={0};
  148.         CLK_DIV=0x00;
  149.         P1M0=0x00;
  150.         P1M1=0x00;
  151.         P2M0=0xff;
  152.         P2M1=0x00;//驱动电机模块需要大电流,推挽输出
  153.         P3M0=0x00;
  154.         P3M1=0x00;
  155.         P5M0=0xff;
  156.         P5M1=0x00;
  157.         P53=1;
  158.         P52=1;
  159.         uart1_int();
  160.         uart2_int();
  161.         IE2=0x00;
  162.         SCL=1;
  163.         SDA=1;
  164.         EA_ON();
  165.         ES_OFF();
  166.         ES2_OFF();
  167.         zongxian=1;
  168.         fenxian=1;
  169.         while(1)
  170.         {       
  171.                
  172.                 if(Single_ReadI2C(0xb6,0x00,raw_data,4))   //光照
  173.             {
  174.                      data_16[0]=(((uint16_t)raw_data[0])<<8)|raw_data[1];
  175.                         data_16[1]=(((uint16_t)raw_data[2])<<8)|raw_data[3];
  176.                         Lux=(((uint32_t)data_16[0])<<16)|data_16[1];
  177.                 }
  178.                 delay_ms(1100);
  179.                
  180.                 delay_ms(1);

  181.                 read_hum_temp();
  182.                 shujvzhuanhua();
  183.                 ES2_OFF();
  184.                 P53=1;
  185.                 P52=1;
  186.                 printf("t3.txt=\"%f\"\xff\xff\xff",hum/10.0);
  187.                 printf("t1.txt=\"%f\"\xff\xff\xff",temp/10.0);
  188.                 printf("t5.txt=\"%f\"\xff\xff\xff",Lux/100.0);
  189.                 printf("add 1,0,%f\xff\xff\xff",hum/10.0);
  190.                 printf("add 1,1,%f\xff\xff\xff",temp/10.0);
  191.                 printf("add 1,3,%f\xff\xff\xff",Lux/100.0);
  192.                 delay_ms(1);
  193.                 sprintf(buf,"*%f~?%f!+%f-",Lux/100.0,temp/10.0,hum/10.0);//转化成字符
  194.                 delay_ms(1);
  195.                
  196.                 for(i=0;i<strlen(buf);i++)
  197.                 {
  198.                         delay_ms(1);
  199.                         uart2_sendata(buf[i]);
  200.                 }
  201.                 ES2_ON();
  202.                 delay_ms(1);
  203.                 memcpy(buf,"\0",40);//数组清零
  204.                 delay_ms(1);
  205.                
  206.         }
  207. }

复制代码

所有资料51hei提供下载:
智能家居.zip (76.06 KB, 下载次数: 52)


评分

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

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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