⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msc_event.c

📁 AVR atmega64串口驱动
💻 C
字号:

//****************************************************//
//短信事件状态控制
//********************//
//短信事件列表
//1-运行报告
//2-系统上电
//3-灯泡数量变化
//4-转速异常
//5-电源转换
//6-灯器转换
//***************************************************//
#define msc_event_c
#include "main.h"
#include "msc_event.h"

//*****************************************************************//
//分解短信,产生事件代码
//结果保存到短信接收事件
//只写入数据和代码,不负责向外传送
//****************************************************************//
void read_sms_1(void)
{

	uint n=0;
	uint temp=0;
	uchar a,c=0;
    uchar rx_buf[256];
	uchar buf[64];
	uchar buf1[16];
	uchar buf2[64];
	uchar b=0;///b表示要刷新码片
if(read_sms&addr_e)
  {
		while(UART0_DataInReceiveBuffer()) UART0_ReceiveByte(); //
        DelayMs(100);
	    UART0_Transmitstr("AT+CMGR=1");
	    CR;
	    DelayMs(500);
		for(n=0;n<255;n++)
		{
			rx_buf[n]=0;
		}
		n=0;
		while((UART0_DataInReceiveBuffer())&(n<255))
		{
			rx_buf[n ++] = UART0_ReceiveByte(); //
		}
		/*while(temp<n)
		{
		UART0_TransmitByte(rx_buf[temp]);
		temp++;
		}//监视短信接收*/
//-------------------------分析密码--------------------------------------//
a_conststutob_stu(Password,&buf1[0],8);
if(string_match(n,rx_buf,8,buf1)!=0)
  {
	 eeprom_busy_wait();
     eeprom_read_block (&buf[0],&E_mm[0], 16);  //读密码
     if(string_match(n,rx_buf,16,buf)!=0) 
 {   
	 //密码效验成功,解释事件。。。。。

//-------------------------具体事件解码-----------------------------------//
if(b==0)//保证每次只处理一条指令
{
a_conststutob_stu(User,&buf1[0],8);
	temp=string_match(n,rx_buf,8,buf1);//匹配到的字符串长度
	 if(temp!=0)
	 {
	 	 c=0;
	 for(a=0;a<64;a++)//,16*4=64--"135625"
	    {
	     buf[c]=rx_buf[temp+a];
		 c++;
		} 
	 c=0;
     c=gsmString2Bytes(buf,buf2,64);//打印字符变换
	 c=0;
	 for(a=0;a<32;a++)
	  {
	   if(buf2[a]!=0)//去掉00
	    {
          buf[c]=buf2[a];
	      c++;
	    }
      }
	    eeprom_busy_wait();
		b=1;  
	   switch(buf[0])
	   {
	     case '0': 
		 {
		 m_sms=0;
		 eeprom_write_block (&buf[1], &E_phone[0], 16);//块写入0
		 break;
		 }
		 case '1': 
		 {
		 m_sms=1;
		 eeprom_write_block (&buf[1], &E_phone[1], 16);//块写入1
		 break;
		 }
		 case '2':
		 {
		 m_sms=2;
         eeprom_write_block (&buf[1], &E_phone[2], 16);//块写入2
		 break;
		 }
		 case '3':
		 {
		 m_sms=3;
         eeprom_write_block (&buf[1], &E_phone[3], 16);//块写入3
		 break;
		 }
		 case '4': 
		 {
		 m_sms=4;
		 eeprom_write_block (&buf[1], &E_phone[4], 16);//块写入4
		 break;
		 }
		 case 'A':
		 {
		 m_sms=9;
         eeprom_write_block (&buf[1], &E_phone[9], 16);//块写入9
         break;	
         }	 
		 default:b=0;{break;}
	   }     
		Reply=1;           
	 }	
	}
//-------------------------------------------------------------------------//
if(b==0)
{	
    //  Reply=2; 
	//  b=1; 
}
//---------------------------------------------------------//
if(b==0)
{	
    a_conststutob_stu(New_Password,&buf1[0],16);	  
	temp=string_match(n,rx_buf,16,buf1);//修改密码13
	  if(temp!=0)
	  {
     c=0;
	 for(a=0;a<16;a++)//,16*4=64--"135625"
	    {
	     buf[c]=rx_buf[temp+a];
		 c++;
		} 
      eeprom_busy_wait();
      eeprom_write_block (&buf[0], &E_mm[0],16);//写入密码 ok
	  Reply=3; 
	  b=1;
      } 
} 
//--------------------------------------------------------//
if(b==0)
{	
    a_conststutob_stu(Inquiry_Condition,&buf1[0],16);	  
	if(string_match(n,rx_buf,16,buf1)!=0)//查询状态
	   {
		sms_counts(5);          //短信事件=5
        b=1;//事件解码成功		
	   }
}
//--------------------------------------------------------//
if(b==0)
{	
    a_conststutob_stu(New_Name,&buf1[0],16);	   
	temp=string_match(n,rx_buf,16,buf1);//新名称
	 if(temp!=0)
	 {
	 	 c=0;
	 for(a=0;a<12;a++)//,3*4=12--"虎头山"
	    {
	     buf[c]=rx_buf[temp+a];
		 c++;
		} 
	 eeprom_busy_wait();
     eeprom_write_block (&buf[0], &E_name[0], 12);//写入灯塔名 ok
	 Reply=6; 
	 b=1;
    }
}
//---------------------------------------------------//	
if(b==0)
{	 
    a_conststutob_stu(SMS_Tel,&buf1[0],16);  
	if(string_match(n,rx_buf,16,buf1)!=0)//短信电话
	    {
		 sms_counts(11);           //短信电话0-2
         sms_counts(12);           //短信电话3-5
         sms_counts(13);           //短信电话6-9
		 b=1;
	    }
}		
//---------------------------------------------------//	 
if(b==0)
{	
	a_conststutob_stu(Communication_gap,&buf1[0],16);
    temp=string_match(n,rx_buf,16,buf1);//通讯间隔
	if(temp!=0)
	{
		c=0;
	    for(a=0;a<16;a++)//,16*4=64--"135625"
	    {
			buf[c]=rx_buf[temp+a];
			c++;
		} 
	    c=0;
        c=gsmString2Bytes(buf,buf2,16);//打印字符变换
	    c=0;
	    for(a=0;a<8;a++)
	    {
	        if(buf2[a]!=0)//去掉00
	        {
                buf[c]=buf2[a];
	            c++;
	        }
        }
		a=0;
		a=(((buf[2]-48)*10)+(buf[3]-48));
		if((a>0)&(a<240))
		{
			eeprom_busy_wait();
			eeprom_write_byte (&E_Communication_time,a);//写码
			Reply=19; 
			b=1;//事件解码成功	
		}
	}
}
//---------------------------------------------------//	

if(b==0)
{	
a_conststutob_stu(Inquiry_Establishment,&buf1[0],16);	  
	if(string_match(n,rx_buf,16,buf1)!=0)//查询设置
	   {
		sms_counts(7);          //短信事件=1	完成
        b=1;//事件解码成功		
	   }
}  
//---------------------------------------------------//	
    if((b==1)&(Reply!=0))//指令错误
	{
		sms_counts(1);          //短信事件=1	完成
	}
	if(b==0)
	 {
	   	sms_counts(10);          //指令错误
	 }
}
}//需要密码的事件到此结束
//******************************************
//请求密码发送到我的手机,不用检查原密码!!!  
 a_conststutob_stu(Password88,&buf1[0],16);
	if(string_match(n,rx_buf,16,buf1)!=0)//密码??
	  {
		sms_counts(14);          //短信事件=1	完成
	  }		  
//---------------------------------------------------//	 

	count3s=0;
	if(n>30)//ok
	{
		DelayMs(500);
		UART0_Transmitstr("AT+CMGD=1");
		CR;
   	}
   	read_sms=0;//清除有未读短信标志
	n=0;                                //清空计数器
	if(b==1)
	{
	 eeprom_busy_wait();
	 eeprom_read();    //EEPROM 初始化
	}
	DelayMs(100);
	while(UART0_DataInReceiveBuffer()) UART0_ReceiveByte(); //清空缓冲区
	ok=0;
	error=0;
}
}
//********************************************************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -