本设计由STC89C52单片机电路+GSM模块电路+红外避障传感器电路+烟雾传感器电路+继电器控制电路+电源电路组成。
1、手机发送短信“OPEN1”给设备,继电器闭1合,然后设备回发一条短信“OPEN1_OK”。
2、手机发送短信“CLOSE1”给设备,继电器1断开,然后设备回发一条短信“CLOSE1_OK”。
3、手机发送短信“OPEN2”给设备,继电器闭2合,然后设备回发一条短信“OPEN2_OK”。
4、手机发送短信“CLOSE2”给设备,继电器2断开,然后设备回发一条短信“CLOSE2_OK”。
5、手机发送短信“OPEN3”给设备,继电器闭3合,然后设备回发一条短信“OPEN3_OK”。
6、手机发送短信“CLOSE3”给设备,继电器3断开,然后设备回发一条短信“CLOSE3_OK”。
7、手机发送短信“OPEN4”给设备,继电器闭4合,然后设备回发一条短信“OPEN4_OK”。
8、手机发送短信“CLOSE4”给设备,继电器4断开,然后设备回发一条短信“CLOSE4_OK”。
9、手机发送短信错误命令给设备,继电器不动作,然后设备回发一条短信“CMD_ERR”。
10、如果红外避障传感器检测到有障碍物,则设备给手机发送短信:Someone!
11、如果烟雾传感器检测到烟雾,则设备给手机发送短信:Somking!
10、短信处理过程有GSM信号灯指示。
资料下载地址
void main (void)
{
Init_Timer0(); //定时器0初始化
UART_Init(); //初始化串口
led_gsm=0; //关闭短信指示
for(i=0;i<60;i++)
DelayMs(100); //延时有助于稳定
uartSendStr("AT+CMGF=1\r\n",11); //设置字符集
for(i=0;i<5;i++)
DelayMs(100); //延时有助于稳定
uartSendStr("AT+CSCS=\"GSM\"\r\n",15); //设置干什么、
for(i=0;i<5;i++)
DelayMs(100); //延时有助于稳定
uartSendStr("AT+CMGDA=\"DEL ALL\"\r\n",20); //删除所有短信
for(i=0;i<5;i++)
DelayMs(100); //延时有助于稳定
relay1=0; //测试继电器
relay2=0;
relay3=0;
relay4=0;
led_gsm=1; //允许发送短信息指示
while(1) //主循环
{
if(yanwu == 0) //检测到烟雾
{
if(yanwuLater>20) //约持续400ms
yanwuFlag = 1; //烟雾标志
}
DelayMs(100);
relay1=1; //测试继电器
relay2=1;
relay3=1;
relay4=1;
if((readMesIng == 0 )&&(mesSendLater>=500))//不在读取短信中 10s延时
{
if((hotmanFlag==1)||(yanwuFlag==1))
{
led_gsm=0;
uartSendStr("AT+CMGF=1\r\n",11); //设置字符
for(i=0;i<3;i++) //延时
{DelayMs(100);}
uartSendStr("AT+CSCS=\"GSM\"\r\n",15); //设置gsm格式
for(i=0;i<3;i++) //延时
{DelayMs(100);}
// uartSendStr("AT+CMGS=\"+8618105140357\"\r\n",26);//此处可修改信息接收手机的号码 第一个手机号
uartSendStr("AT+CMGS=\"+8618846426784\"\r\n",26);//此处可修改信息接收手机的号码 第一个手机号
for(i=0;i<3;i++) //延时
{DelayMs(100);}
if(hotmanFlag == 1)
{
uartSendStr("Someone!",8); //发送内容
}
//发送延时
}
}
if(readFlag==1) //读取短信息标志
{
readFlag=0; //读取标志清零
readMesIng = 1;//读取短信过程中
timeCount++ ;
if((stepNum == 0)&&(timeCount>=3)) //定时读取短信
{
for(i=0;i<SIZEBUF;i++)
{
timebuf[i]='0'; //清空timebuf
}
uartSendStr("AT+CMGR=1\r\n",11);
timeCount = 0;//延时设置量
stepNum = 1 ;//进入操作过程1
}
else if((stepNum == 1)&&(timeCount >= 3)) //定时读取短信
{
rebackMesFlag=INIT;
for(i=0;i<(SIZEBUF-5);i++)
{
if((timebuf[i]=='O')&&(timebuf[i+1]=='P')&&(timebuf[i+2]=='E')&&(timebuf[i+3]=='N')&&(timebuf[i+4]=='1')) //查询是否接收到OPEN
{
relay1=0; //打开继电器
rebackMesFlag=OPEN_01; //状态标识打开
break ;
}
else if((timebuf[i]=='O')&&(timebuf[i+1]=='P')&&(timebuf[i+2]=='E')&&(timebuf[i+3]=='N')&&(timebuf[i+4]=='3')) //查询是否接收到OPEN
{
relay3=0; //打开继电器
rebackMesFlag=OPEN_03; //状态标识打开
break ;
}
else if((timebuf[i]=='L')&&(timebuf[i+1]=='O')&&(timebuf[i+2]=='S')&&(timebuf[i+3]=='E')&&(timebuf[i+4]=='3')) //查询是否接收到CLOSE
{
relay3=1; //关闭继电器
rebackMesFlag=CLOSE_03; //状态标识关闭
break ;
}
else if((timebuf[i]=='O')&&(timebuf[i+1]=='P')&&(timebuf[i+2]=='E')&&(timebuf[i+3]=='N')&&(timebuf[i+4]=='4')) //查询是否接收到OPEN
{
relay4=0; //打开继电器
rebackMesFlag=OPEN_04; //状态标识打开
break ;
}
else if((timebuf[i]=='L')&&(timebuf[i+1]=='O')&&(timebuf[i+2]=='S')&&(timebuf[i+3]=='E')&&(timebuf[i+4]=='4')) //查询是否接收到CLOSE
{
relay4=1; //关闭继电器
rebackMesFlag=CLOSE_04; //状态标识关闭
break ;
}
if((timebuf[i]=='+')&&(timebuf[i+1]=='8')&&(timebuf[i+2]=='6'))//查询短信息中的号码
{
led_gsm = 0;
rebackMesFlag = SOMEONE;
AT_CMGS[9]=timebuf[i+0]; //提取号码
AT_CMGS[10]=timebuf[i+1];
AT_CMGS[11]=timebuf[i+2];
AT_CMGS[12]=timebuf[i+3];
AT_CMGS[22]=timebuf[i+13];
}
}
AT_CMGS[23]='"'; //整理字符串
AT_CMGS[24]=0x0d;
AT_CMGS[25]=0x0a;
if(rebackMesFlag != INIT)
{
uartSendStr("AT+CMGDA=\"DEL ALL\"\r\n",20);//删除所有短信
for(i=0;i<5;i++)
DelayMs(100); //延时有助于稳定
uartSendStr("AT+CMGF=1\r\n",11); //设置字符集
for(i=0;i<3;i++)
DelayMs(100); //延时有助于稳定
uartSendStr("AT+CSCS=\"GSM\"\r\n",15); //设置干什么、
for(i=0;i<3;i++)
DelayMs(100); //延时有助于稳定
uartSendStr( (unsigned char *)AT_CMGS,26);//准备发送短信
for(i=0;i<2;i++)
DelayMs(100); //延时有助于稳定
if(rebackMesFlag==OPEN_01)
{
uartSendStr("OPEN1_OK ",8); //发送短信息内容
}
else if(rebackMesFlag==CLOSE_01)
{
uartSendStr("CLOSE1_OK ",9); //发送短信息内容
}
else if(rebackMesFlag==OPEN_02)
{
uartSendStr("OPEN2_OK ",8); //发送短信息内容
}
else if(rebackMesFlag==CLOSE_02)
{
uartSendStr("CLOSE2_OK ",9); //发送短信息内容
}
else if(rebackMesFlag==OPEN_03)
{
uartSendStr("OPEN3_OK ",8); //发送短信息内容
}
else if(rebackMesFlag==CLOSE_03)
{
uartSendStr("CLOSE3_OK ",9); //发送短信息内容
}
else if(rebackMesFlag==OPEN_04)
{
uartSendStr("OPEN4_OK ",8); //发送短信息内容
}
else if(rebackMesFlag==CLOSE_04)
{
uartSendStr("CLOSE4_OK ",9); //发送短信息内容
}
else
{
uartSendStr("CMD_ERR ",7); //发送短信息命令错误
}
uartSendStr( (unsigned char *)Crtl_Z, 1); //发送
for(i=0;i<20;i++)
DelayMs(100); //延时有助于稳定
}
timeCount = 0;//延时设置量
stepNum = 2 ;//进入操作过程1
}
else if((stepNum == 2)&&(timeCount >= 3)) //定时读取短信
{
clearMesFlag++;
if(clearMesFlag>10)
{
clearMesFlag = 0;
uartSendStr("AT+CMGDA=\"DEL ALL\"\r\n",20);//删除所有短信
}
timeCount = 0;//延时设置量
stepNum = 0 ;//进入操作过程1
led_gsm=1; //关闭指示灯
readMesIng = 0;//读取短信过程中
}
}
}
}
void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
TH0=(65536-20000)/256; //重新赋值 20ms
TL0=(65536-20000)%256;
EA=1; //总中断打开
ET0=1; //定时器中断打开
TR0=1; //定时器开关打开
}
void UART_Init(void)
{
SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装
TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz
TL1 = TH1;
TR1 = 1; // TR1: timer 1 打开
EA = 1; //打开总中断
ES = 1; //打开串口中断
资料下载地址