标题:
单片机智能家居源程序
[打印本页]
作者:
youngboy
时间:
2019-6-10 16:07
标题:
单片机智能家居源程序
基于51单片机的智能家居系统,东西都在文件里,拿走不谢
单片机源程序如下:
//文件包含
#include "reg52.h"
#include "uart.c"
#include "lcd1602.h"
#include "DHT11.C"
//宏定义
#define uchar unsigned char
#define uint unsigned int
//按键定义
sbit KEY1= P1^6;
sbit KEY2= P3^2;
sbit KEY3= P3^3;
sbit KEY4= P3^4;
sbit BEE = P1^0;
sbit HW = P1^3;
//ADC定义
sbit CS=P3^5;
sbit CLK=P3^7;
sbit DIO=P3^6;
//字符数组
uchar code Tab0[] = {"0123456789. "};
uchar code Tab1[] = {" it is readying "};
uchar code Tab2[] = {" it is ok "};
uchar code Tab3[] = {"smoke is ppm"};
//uchar code Tab3[] = {" the GSM system "};
uchar code Tab4[] = {" 'C % "};
uchar code Tab5[] = {"in calling "};
uchar code Tab6[] = {"in sending "};
uchar code Tab7[] = {" ON OFF"};
uchar GSM_flag=0;
uchar temp,Set_temp=40; //温度
uchar shidu,Set_shidu=100; //湿度
uchar smoke=0,Set_smoke=50; //烟雾
uchar HW_reg=0;
//设置短信接收人
//uchar code PhoneNO[]= "00310035003700320039003300390030003100330037"; // 15729390137
uchar code PhoneNO[]= "00310038003700350031003900310039003600350034 "; // 18751919654
//设置电话接听人
uchar code PhoneNO1[]= "18751919654";
//uchar code PhoneNO1[]= "15729390137";
//主人您好!我是您的管家!
uchar code Text1[]= "4E3B4EBA60A8597DFF016211662F60A876847BA15BB6FF01";
//主人,温度过高,可能着火了,快回家看看!
uchar code Text2[]="4E3B4EBAFF0C6E295EA68FC79AD8FF0C5BB64E2D53EF80FD7740706B4E86FF015FEB56DE5BB6770B770BFF01";
//主人,家中有人闯入,您的家可能被盗了!
uchar code Text3[]="4E3B4EBA002C5BB64E2D67094EBA95EF5165FF0C60A876845BB653EF80FD88AB76D74E86FF01";
//烟雾浓度过大,可能着火了!快回家看看吧!
uchar code Text4[]="70DF96FE6D535EA68FC75927FF0C53EF80FD7740706B4E86FF015FEB56DE5BB6770B770B5427FF01";
//ADC0832函数,带返回值
unsigned int A_D()
{
unsigned char i,dat;
CS=1; //一个转换周期开始
CLK=0; //为第一个脉冲作准备
CS=0; //CS置0,片选有效
DIO=1; //DIO置1,规定的起始信号
CLK=1; //第一个脉冲
CLK=0; //第一个脉冲的下降沿,此前DIO必须是高电平
DIO=1; //DIO置1, 通道选择信号
CLK=1; //第二个脉冲,第2、3个脉冲下沉之前,DI必须跟别输入两位数据用于选择通道,这里选通道CH0
CLK=0; //第二个脉冲下降沿
DIO=0; //DI置0,选择通道0
CLK=1; //第三个脉冲
CLK=0; //第三个脉冲下降沿
DIO=1; //第三个脉冲下沉之后,输入端DIO失去作用,应置1
CLK=1; //第四个脉冲
for(i=0;i<8;i++) //高位在前
{
CLK=1; //第四个脉冲
CLK=0;
dat<<=1; //将下面储存的低位数据向右移
dat|=(unsigned char)DIO; //将输出数据DIO通过或运算储存在dat最低位
}
CS=1; //片选无效
return dat; //将读出的数据返回
}
//主函数
void main(void)
{
uchar G,S,B;
LCD1602_Init(); //1602液晶屏初始化
LCD1602_Display(LINE1,Tab1,0,16); //准备界面
BEE=0; //开机提示
Delay_ms(50);
BEE=1;
Uart_init();
Delay_ms(500); //等待GSM模块稳定
SendString("AT\r\n");
BEE=0; //提示已稳定
Delay_ms(50);
BEE=1;
while(1)
{
LCD1602_Display(LINE1,Tab3,0,16); //准备完毕
LCD1602_Display(LINE2,Tab4,0,13); //准备完毕
smoke=A_D();
RH();
temp=U8T_data_H; //温度
shidu=U8RH_data_H; //湿度
if(1)
{
B=temp/100;
S=temp%100/10;
G=temp%10;
LCD1602_Display(LINE2,Tab0,B,1);
LCD1602_Display(LINE2+1,Tab0,S,1);
LCD1602_Display(LINE2+2,Tab0,G,1);
B=shidu/100;
S=shidu%100/10;
G=shidu%10;
LCD1602_Display(LINE2+7,Tab0,S,1);
LCD1602_Display(LINE2+8,Tab0,10,1);
LCD1602_Display(LINE2+9,Tab0,G,1);
B=smoke/100;
S=smoke%100/10;
G=smoke%10;
LCD1602_Display(LINE1+9,Tab0,B,1);
LCD1602_Display(LINE1+10,Tab0,S,1);
LCD1602_Display(LINE1+11,Tab0,G,1);
}
Delay_ms(100);
//第一个按键,打电话测试
if(KEY1==0)
{
Delay_ms(10);
if(KEY1==0)
{
BEE=0; //提示进入按键
Delay_ms(20);
BEE=1;
LCD1602_Display(LINE2,Tab5,0,16);
SendString("ATD"); //打电话指令
SendString(PhoneNO1);
SendASC(';');
SendASC('\r'); //发送回车指令
SendASC('\n'); //发送回车指令
Delay_ms(2000);
SendString("ATH\r\n"); //主动挂断
Delay_ms(100);
}
}
//第二个按键
if(KEY2==0)
{
Delay_ms(10);
if(KEY2==0)
{
BEE=0; //提示进入按键
Delay_ms(20);
BEE=1;
LCD1602_Display(LINE2,Tab6,0,16);
SendString("AT+CMGF=1\r\n");
Delay_ms(100);
SendString("AT+CSCS=\"UCS2\"\r\n");
Delay_ms(100);
SendString("AT+CSMP=17,0,2,25\r\n");
Delay_ms(100);
SendString("AT+CMGS="); //信息发送指令 AT+CMGS=//
SendASC('"');
SendString(PhoneNO);
SendASC('"');
SendASC('\r'); //发送回车指令//
SendASC('\n'); //发送回车指令//
Delay_ms(100);
SendString(Text1);
Delay_ms(100);
SendASC(0X1A);
Delay_ms(1000);
}
}
//第三个按键,布防
if(KEY3==0)
{
Delay_ms(6);
if(KEY3==0)
{
BEE=0; //提示进入按键
Delay_ms(20);
BEE=1;
GSM_flag=1;
LCD1602_Display(LINE2+13,Tab7,0,3);
}
}
//第四个按键,撤防
if(KEY4==0)
{
Delay_ms(6);
if(KEY4==0)
{
BEE=0; //提示进入按键
Delay_ms(20);
BEE=1;
GSM_flag=0;
LCD1602_Display(LINE2+13,Tab7,4,3);
}
}
//红外
if(HW==1)
{
Delay_ms(10);
if(HW==1)
{
BEE=0; //提示进入按键
Delay_ms(100);
BEE=1;
if(GSM_flag==1)
{
HW_reg++;
if(HW_reg>=10)
HW_reg=10;
}
}
}
//进入布防模式
if(GSM_flag==1)
{
//有人闯入
if(HW_reg>=1)
{
HW_reg=0;
SendString("AT+CMGF=1\r\n");
Delay_ms(100);
SendString("AT+CSCS=\"UCS2\"\r\n");
Delay_ms(100);
SendString("AT+CSMP=17,0,2,25\r\n");
Delay_ms(100);
SendString("AT+CMGS="); //信息发送指令 AT+CMGS=//
SendASC('"');
SendString(PhoneNO);
SendASC('"');
SendASC('\r'); //发送回车指令//
SendASC('\n'); //发送回车指令//
Delay_ms(100);
SendString(Text3);
Delay_ms(100);
SendASC(0X1A);
Delay_ms(1000);
}
//温度过高,可能着火了
if(temp>=Set_temp)
{
SendString("AT+CMGF=1\r\n");
Delay_ms(100);
SendString("AT+CSCS=\"UCS2\"\r\n");
Delay_ms(100);
SendString("AT+CSMP=17,0,2,25\r\n");
Delay_ms(100);
SendString("AT+CMGS="); //信息发送指令 AT+CMGS=//
SendASC('"');
SendString(PhoneNO);
SendASC('"');
SendASC('\r'); //发送回车指令//
SendASC('\n'); //发送回车指令//
Delay_ms(100);
SendString(Text2);
Delay_ms(100);
SendASC(0X1A);
Delay_ms(1000);
}
//烟雾浓度过高,可能着火了
if(smoke>=Set_smoke)
{
SendString("AT+CMGF=1\r\n");
Delay_ms(100);
SendString("AT+CSCS=\"UCS2\"\r\n");
Delay_ms(100);
SendString("AT+CSMP=17,0,2,25\r\n");
Delay_ms(100);
SendString("AT+CMGS="); //信息发送指令 AT+CMGS=//
SendASC('"');
SendString(PhoneNO);
SendASC('"');
SendASC('\r'); //发送回车指令//
SendASC('\n'); //发送回车指令//
Delay_ms(100);
SendString(Text4);
Delay_ms(100);
SendASC(0X1A);
Delay_ms(1000);
}
}
}
}
复制代码
所有资料51hei提供下载:
程序.rar
(77.9 KB, 下载次数: 21)
2019-6-10 16:06 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
admin
时间:
2019-6-11 02:58
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
作者:
brewster
时间:
2019-6-11 19:45
这个智能家具系统是怎么个智能法?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1