找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机智能家居源程序

[复制链接]
跳转到指定楼层
楼主
ID:558970 发表于 2019-6-10 16:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基于51单片机的智能家居系统,东西都在文件里,拿走不谢

单片机源程序如下:
  1. //文件包含
  2. #include "reg52.h"
  3. #include "uart.c"
  4. #include "lcd1602.h"
  5. #include "DHT11.C"

  6. //宏定义
  7. #define uchar unsigned char
  8. #define uint  unsigned int

  9. //按键定义
  10. sbit KEY1= P1^6;
  11. sbit KEY2= P3^2;
  12. sbit KEY3= P3^3;
  13. sbit KEY4= P3^4;
  14. sbit BEE = P1^0;
  15. sbit HW  = P1^3;

  16. //ADC定义
  17. sbit  CS=P3^5;      
  18. sbit CLK=P3^7;      
  19. sbit DIO=P3^6;

  20. //字符数组
  21. uchar code Tab0[] = {"0123456789.     "};
  22. uchar code Tab1[] = {" it is readying "};
  23. uchar code Tab2[] = {"     it is ok   "};
  24. uchar code Tab3[] = {"smoke is     ppm"};
  25. //uchar code Tab3[] = {" the GSM system "};
  26. uchar code Tab4[] = {"   'C     %     "};
  27. uchar code Tab5[] = {"in calling      "};
  28. uchar code Tab6[] = {"in sending      "};
  29. uchar code Tab7[] = {" ON OFF"};

  30. uchar GSM_flag=0;
  31. uchar temp,Set_temp=40;          //温度
  32. uchar shidu,Set_shidu=100;         //湿度
  33. uchar smoke=0,Set_smoke=50;         //烟雾
  34. uchar HW_reg=0;

  35. //设置短信接收人
  36. //uchar code PhoneNO[]= "00310035003700320039003300390030003100330037";                 // 15729390137
  37. uchar code PhoneNO[]= "00310038003700350031003900310039003600350034 ";                 //  18751919654
  38. //设置电话接听人
  39. uchar code PhoneNO1[]= "18751919654";
  40. //uchar code PhoneNO1[]= "15729390137";
  41. //主人您好!我是您的管家!
  42. uchar code Text1[]= "4E3B4EBA60A8597DFF016211662F60A876847BA15BB6FF01";
  43. //主人,温度过高,可能着火了,快回家看看!
  44. uchar code Text2[]="4E3B4EBAFF0C6E295EA68FC79AD8FF0C5BB64E2D53EF80FD7740706B4E86FF015FEB56DE5BB6770B770BFF01";
  45. //主人,家中有人闯入,您的家可能被盗了!
  46. uchar code Text3[]="4E3B4EBA002C5BB64E2D67094EBA95EF5165FF0C60A876845BB653EF80FD88AB76D74E86FF01";
  47. //烟雾浓度过大,可能着火了!快回家看看吧!
  48. uchar code Text4[]="70DF96FE6D535EA68FC75927FF0C53EF80FD7740706B4E86FF015FEB56DE5BB6770B770B5427FF01";

  49. //ADC0832函数,带返回值
  50. unsigned int  A_D()
  51. {
  52.         unsigned char i,dat;
  53.         CS=1;   //一个转换周期开始
  54.         CLK=0;  //为第一个脉冲作准备
  55.         CS=0;  //CS置0,片选有效
  56.        
  57.         DIO=1;    //DIO置1,规定的起始信号  
  58.         CLK=1;   //第一个脉冲
  59.         CLK=0;   //第一个脉冲的下降沿,此前DIO必须是高电平
  60.         DIO=1;   //DIO置1, 通道选择信号  
  61.         CLK=1;   //第二个脉冲,第2、3个脉冲下沉之前,DI必须跟别输入两位数据用于选择通道,这里选通道CH0
  62.         CLK=0;   //第二个脉冲下降沿
  63.         DIO=0;   //DI置0,选择通道0
  64.         CLK=1;    //第三个脉冲
  65.         CLK=0;    //第三个脉冲下降沿
  66.         DIO=1;    //第三个脉冲下沉之后,输入端DIO失去作用,应置1
  67.         CLK=1;    //第四个脉冲
  68.         for(i=0;i<8;i++)  //高位在前
  69.         {
  70.                 CLK=1;         //第四个脉冲
  71.                 CLK=0;
  72.                 dat<<=1;       //将下面储存的低位数据向右移
  73.                 dat|=(unsigned char)DIO;          //将输出数据DIO通过或运算储存在dat最低位
  74.         }                                  
  75.         CS=1;          //片选无效
  76.         return dat;         //将读出的数据返回     
  77. }

  78. //主函数
  79. void main(void)
  80. {
  81.         uchar G,S,B;
  82.           LCD1602_Init();                                        //1602液晶屏初始化
  83.         LCD1602_Display(LINE1,Tab1,0,16);                //准备界面
  84.         BEE=0;                                                                        //开机提示
  85.         Delay_ms(50);
  86.         BEE=1;
  87.         Uart_init();

  88.         Delay_ms(500);                                       //等待GSM模块稳定
  89.         SendString("AT\r\n");
  90.         BEE=0;                                                       //提示已稳定
  91.         Delay_ms(50);
  92.         BEE=1;

  93.         while(1)
  94.         {       
  95.                 LCD1602_Display(LINE1,Tab3,0,16);                //准备完毕
  96.                 LCD1602_Display(LINE2,Tab4,0,13);                //准备完毕
  97.                 smoke=A_D();
  98.                 RH();
  99.                 temp=U8T_data_H;         //温度
  100.                 shidu=U8RH_data_H;         //湿度       
  101.                 if(1)
  102.                 {
  103.                         B=temp/100;
  104.                         S=temp%100/10;
  105.                         G=temp%10;
  106.                         LCD1602_Display(LINE2,Tab0,B,1);
  107.                         LCD1602_Display(LINE2+1,Tab0,S,1);
  108.                         LCD1602_Display(LINE2+2,Tab0,G,1);
  109.                         B=shidu/100;
  110.                         S=shidu%100/10;
  111.                         G=shidu%10;
  112.                         LCD1602_Display(LINE2+7,Tab0,S,1);
  113.                         LCD1602_Display(LINE2+8,Tab0,10,1);
  114.                         LCD1602_Display(LINE2+9,Tab0,G,1);
  115.                         B=smoke/100;
  116.                         S=smoke%100/10;
  117.                         G=smoke%10;
  118.                         LCD1602_Display(LINE1+9,Tab0,B,1);
  119.                         LCD1602_Display(LINE1+10,Tab0,S,1);
  120.                         LCD1602_Display(LINE1+11,Tab0,G,1);
  121.                 }
  122.                 Delay_ms(100);
  123.                
  124.                 //第一个按键,打电话测试
  125.                 if(KEY1==0)
  126.                 {
  127.                         Delay_ms(10);
  128.                         if(KEY1==0)
  129.                         {
  130.                                 BEE=0;                                           //提示进入按键
  131.                                 Delay_ms(20);
  132.                                 BEE=1;
  133.                                 LCD1602_Display(LINE2,Tab5,0,16);
  134.                                 SendString("ATD");                        //打电话指令
  135.                                 SendString(PhoneNO1);  
  136.                                 SendASC(';');
  137.                                 SendASC('\r');                        //发送回车指令
  138.                                 SendASC('\n');                        //发送回车指令
  139.                                 Delay_ms(2000);
  140.                                 SendString("ATH\r\n");                //主动挂断
  141.                                 Delay_ms(100);
  142.                         }
  143.                 }
  144.                 //第二个按键
  145.                 if(KEY2==0)
  146.                 {
  147.                         Delay_ms(10);
  148.                         if(KEY2==0)
  149.                         {
  150.                                 BEE=0;                                           //提示进入按键
  151.                                 Delay_ms(20);
  152.                                 BEE=1;
  153.                                 LCD1602_Display(LINE2,Tab6,0,16);
  154.                                 SendString("AT+CMGF=1\r\n");       
  155.                                 Delay_ms(100);                       
  156.                                 SendString("AT+CSCS=\"UCS2\"\r\n");       
  157.                                 Delay_ms(100);               
  158.                                 SendString("AT+CSMP=17,0,2,25\r\n");
  159.                                 Delay_ms(100);       
  160.                                 SendString("AT+CMGS=");        //信息发送指令 AT+CMGS=//
  161.                                 SendASC('"');
  162.                                 SendString(PhoneNO);   
  163.                                 SendASC('"');
  164.                                 SendASC('\r');                        //发送回车指令//
  165.                                 SendASC('\n');                        //发送回车指令//
  166.                                 Delay_ms(100);                               
  167.                                 SendString(Text1);  
  168.                                 Delay_ms(100);                       
  169.                                 SendASC(0X1A);
  170.                                 Delay_ms(1000);                                       
  171.                         }
  172.                 }
  173.                 //第三个按键,布防
  174.                 if(KEY3==0)
  175.                 {
  176.                         Delay_ms(6);
  177.                         if(KEY3==0)
  178.                         {
  179.                                 BEE=0;                                           //提示进入按键
  180.                                 Delay_ms(20);
  181.                                 BEE=1;
  182.                                 GSM_flag=1;       
  183.                                 LCD1602_Display(LINE2+13,Tab7,0,3);               
  184.                         }
  185.                 }
  186.                 //第四个按键,撤防
  187.                 if(KEY4==0)
  188.                 {
  189.                         Delay_ms(6);
  190.                         if(KEY4==0)
  191.                         {
  192.                                 BEE=0;                                           //提示进入按键
  193.                                 Delay_ms(20);
  194.                                 BEE=1;
  195.                                 GSM_flag=0;
  196.                                 LCD1602_Display(LINE2+13,Tab7,4,3);
  197.                         }
  198.                 }
  199.                 //红外
  200.                 if(HW==1)
  201.                 {
  202.                         Delay_ms(10);
  203.                         if(HW==1)
  204.                         {
  205.                                 BEE=0;                                           //提示进入按键
  206.                                 Delay_ms(100);
  207.                                 BEE=1;
  208.                                 if(GSM_flag==1)
  209.                                 {
  210.                                         HW_reg++;
  211.                                         if(HW_reg>=10)
  212.                                         HW_reg=10;
  213.                                 }
  214.                         }
  215.                 }
  216.                 //进入布防模式
  217.                 if(GSM_flag==1)
  218.                 {
  219.                         //有人闯入
  220.                         if(HW_reg>=1)
  221.                         {
  222.                                 HW_reg=0;
  223.                                 SendString("AT+CMGF=1\r\n");       
  224.                                 Delay_ms(100);                       
  225.                                 SendString("AT+CSCS=\"UCS2\"\r\n");       
  226.                                 Delay_ms(100);               
  227.                                 SendString("AT+CSMP=17,0,2,25\r\n");
  228.                                 Delay_ms(100);       
  229.                                 SendString("AT+CMGS=");        //信息发送指令 AT+CMGS=//
  230.                                 SendASC('"');
  231.                                 SendString(PhoneNO);   
  232.                                 SendASC('"');
  233.                                 SendASC('\r');                        //发送回车指令//
  234.                                 SendASC('\n');                        //发送回车指令//
  235.                                 Delay_ms(100);                               
  236.                                 SendString(Text3);  
  237.                                 Delay_ms(100);                       
  238.                                 SendASC(0X1A);
  239.                                 Delay_ms(1000);                       
  240.                         }
  241.                         //温度过高,可能着火了
  242.                         if(temp>=Set_temp)
  243.                         {
  244.                                 SendString("AT+CMGF=1\r\n");       
  245.                                 Delay_ms(100);                       
  246.                                 SendString("AT+CSCS=\"UCS2\"\r\n");       
  247.                                 Delay_ms(100);               
  248.                                 SendString("AT+CSMP=17,0,2,25\r\n");
  249.                                 Delay_ms(100);       
  250.                                 SendString("AT+CMGS=");        //信息发送指令 AT+CMGS=//
  251.                                 SendASC('"');
  252.                                 SendString(PhoneNO);   
  253.                                 SendASC('"');
  254.                                 SendASC('\r');                        //发送回车指令//
  255.                                 SendASC('\n');                        //发送回车指令//
  256.                                 Delay_ms(100);                               
  257.                                 SendString(Text2);  
  258.                                 Delay_ms(100);                       
  259.                                 SendASC(0X1A);
  260.                                 Delay_ms(1000);                               
  261.                         }
  262.                         //烟雾浓度过高,可能着火了
  263.                         if(smoke>=Set_smoke)
  264.                         {
  265.                                 SendString("AT+CMGF=1\r\n");       
  266.                                 Delay_ms(100);                       
  267.                                 SendString("AT+CSCS=\"UCS2\"\r\n");       
  268.                                 Delay_ms(100);               
  269.                                 SendString("AT+CSMP=17,0,2,25\r\n");
  270.                                 Delay_ms(100);       
  271.                                 SendString("AT+CMGS=");        //信息发送指令 AT+CMGS=//
  272.                                 SendASC('"');
  273.                                 SendString(PhoneNO);   
  274.                                 SendASC('"');
  275.                                 SendASC('\r');                        //发送回车指令//
  276.                                 SendASC('\n');                        //发送回车指令//
  277.                                 Delay_ms(100);                               
  278.                                 SendString(Text4);  
  279.                                 Delay_ms(100);                       
  280.                                 SendASC(0X1A);
  281.                                 Delay_ms(1000);                               
  282.                         }                               
  283.                 }
  284.         }
  285. }
复制代码

所有资料51hei提供下载:
程序.rar (77.9 KB, 下载次数: 21)


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

使用道具 举报

沙发
ID:1 发表于 2019-6-11 02:58 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

板凳
ID:553404 发表于 2019-6-11 19:45 来自手机 | 只看该作者
这个智能家具系统是怎么个智能法?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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