146 基于单片机短信多路远程开关控制系统设计【毕设课设】

 本设计由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;                  //打开串口中断

  资料下载地址

https://pan.baidu.com/s/1HM4SrfXX5P7jVMXnV_ch9Q?pwd=8888

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值