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

📄 sms.c

📁 AVR atmega64串口驱动
💻 C
📖 第 1 页 / 共 3 页
字号:

	for(i=0;i<(10-a);i++)
		{
            buf1[i]=buf[a+i];
		}
	 n+= gsmBytes2String(buf1, &msg_buf[n], (10-a));//转换到ASCII码
    return n;
}
//************************************************************************//
//电流电压转换到PDU
//中间添加小数点
//入口电流、电压数据
//出口msg_buf,返回累加后的字节长度
//*********************************************************************//
uint adv_a(uint temp,uint n)
{ 
   uchar a=0,i;
   uchar buf[10]={};
   uchar buf1[10]={};
	 temp/=10;            //去掉小数点后第3位
    for(a=10;a>0;a--)   //取出每位中的数据
	 {
	 if (a!=6)
		{
		     buf[a-1]=temp%10+48;
			 a--;			           
			 buf[a-1]=0;
			 temp/=10;
		}
	 else 
	    {
		    buf[a-1]=0x2E;	//小数点
	        a--;
			buf[a-1]=0;
	    }
	 }	
	a=0;
    if(buf[1]==0x30)//去掉0
	  {
	    a+=2;
	  }
	for(i=0;i<(10-a);i++)
		{
            buf1[i]=buf[a+i];
		}
	 n+= gsmBytes2String(buf1, &msg_buf[n], (10-a));//转换到ASCII码
    return n;
}
//*************************************************************************//
//短信事件记禄缓冲
//可以存放最近没有发送的5条短信,系统复位后消除
//main.h设置了有效长度=5
//需要发送短信时将事件代码写入此函数
//入口: 事件代码
//出口:无
//************************************************************************//
void sms_counts(uchar n)
{      //保证只记录1次相同事件
     if((sms_event[0]==n)|(sms_event[1]==n)|(sms_event[2]==n)|(sms_event[3]==n)|(sms_event[4]==n));
	 
	  else
	  {
	    sms_event[sms_event_counts]=n;
		time_out_seconds=0;//清除time_out 计次器
	    if(sms_event_counts<4)
	     {
	         sms_event_counts++;
	     }
	   else
	     {
	         sms_event_counts=0;
	     }
	  }	 
}
//**********************************************************************//
//************************************************************************//
//短信事件处理
//记录了相应的事件具体的处理方式,即发送短信的内容
//***********************************************************************//
void event_00(void)      //事件0
{
 
}
void event_01(void)      //事件01
{
	 uint n=12;
	 eeprom_read_block (&msg_buf[0],&E_name[0],12);        //读名称
	 n+= a_conststutob_stu(maohao,&msg_buf[n],4);           //:
	 switch(Reply)
	 {
		case 0:{break;}
		case 1:
		{ 
			n+= a_conststutob_stu(yh,&msg_buf[n],8);           //用户
			n=sun_d(m_sms,n);
			n+= a_conststutob_stu(hm,&msg_buf[n],8);           //号码break;
		}
		case 2:		{break;}
		case 3:		{n+= a_conststutob_stu(xmm,&msg_buf[n],12);break;}  //新密码
		case 4:		{break;}		case 5:		{break;}
		case 6:		{n+= a_conststutob_stu(xmc,&msg_buf[n],12);break;} //新名称		case 7:		{break;}		case 8:		{break;}
		case 9:		{break;}		case 10:	{break;}		case 11:	{break;}
		case 12:	{break;}		case 13:	{break;}		case 14:	{break;}		case 15:	{break;}		case 16:	{break;}
		case 17:	{break;}
		case 18:	{break;}
		case 19:	{n+= a_conststutob_stu(Communication_gapT,&msg_buf[n],16);break;}//通讯间隔
		case 20:	{break;}
		default:	{break;}
	 }
	 Reply=0;
	 n+= a_conststutob_stu(wc,&msg_buf[n],8);              //完成
	 n+= a_conststutob_stu(juhao,&msg_buf[n],4);           //.	       
} 
void event_02(void)      //事件02
{
}
void event_03(void)      //事件03
{	  
}
void event_04(void)      //事件04
{	
}
void event_05(void)      //事件05
{//智能型:供电12.3v;6V电压6.25v;电流235ma;温度20C;编码t;工作20s;休止20s;接收正常;发射正常;频率正常.
	uint n=12;
	uchar temp=0;
	eeprom_read_block (&msg_buf[0],&E_name[0],12);        //读名称
	n+= a_conststutob_stu(maohao,&msg_buf[n],4);           //:
	n+= a_conststutob_stu(gongdian,&msg_buf[n],8);         //供电
	n= adv_a(adv_m,n);     
	n+= a_conststutob_stu(vv,&msg_buf[n],4);            //V
	n+= a_conststutob_stu(fenhao,&msg_buf[n],4);           //;
	n+= a_conststutob_stu(work,&msg_buf[n],8);         //工作
	n+= a_conststutob_stu(Voltage,&msg_buf[n],8);         //电压
	n= adv_a(Six_voltage,n);     
	n+= a_conststutob_stu(vv,&msg_buf[n],4);            //V
	n+= a_conststutob_stu(fenhao,&msg_buf[n],4);           //;
	n+= a_conststutob_stu(ada,&msg_buf[n],8);         //电流
	n= sun_d(Supply_current,n);     
	n+= a_conststutob_stu(Ma,&msg_buf[n],8);            //ma
	n+= a_conststutob_stu(fenhao,&msg_buf[n],4);           //;
	 n+=a_conststutob_stu(temper_a,&msg_buf[n],8);//温度
	if(temper>0x80)//负
	{		
		temp=~temper;
        n+=a_conststutob_stu(fuhao,&msg_buf[n],4);//-
	    n=sun_d(temp,n);                         //转换温度数据
	}
	else
	{
	 n=sun_d(temper,n);                           //转换温度数据
	}
    n+=a_conststutob_stu(cc,&msg_buf[n],4);//C	
    n+=a_conststutob_stu(fenhao,&msg_buf[n],4);//;
	n+= a_conststutob_stu(codes,&msg_buf[n],8);         //编码
	switch(Work_code)//工作编码
			{
				case 'B' : n+= a_conststutob_stu(b,&msg_buf[n],4);break;//编码;
				case 'C' : n+= a_conststutob_stu(c,&msg_buf[n],4);break;
				case 'D' : n+= a_conststutob_stu(d,&msg_buf[n],4);break;
				case 'G' : n+= a_conststutob_stu(g,&msg_buf[n],4);break;
				case 'K' : n+= a_conststutob_stu(k,&msg_buf[n],4);break;
				case 'M' : n+= a_conststutob_stu(m,&msg_buf[n],4);break;
				case 'N' : n+= a_conststutob_stu(nn,&msg_buf[n],4);break;
				case 'O' : n+= a_conststutob_stu(o,&msg_buf[n],4);break;
				case 'Q' : n+= a_conststutob_stu(q,&msg_buf[n],4);break;
				case 'T' : n+= a_conststutob_stu(t,&msg_buf[n],4);break;
				case 'Y' : n+= a_conststutob_stu(y,&msg_buf[n],4);break;
				case 'Z' : n+= a_conststutob_stu(z,&msg_buf[n],4);break;
				case 'A' : n+= a_conststutob_stu(AA,&msg_buf[n],4);break;
				case 'E' : n+= a_conststutob_stu(e,&msg_buf[n],4);break;
				case 'F' : n+= a_conststutob_stu(f,&msg_buf[n],4);break;
				case 'H' : n+= a_conststutob_stu(h,&msg_buf[n],4);break;
				case 'I' : n+= a_conststutob_stu(t,&msg_buf[n],4);break;
				case 'J' : n+= a_conststutob_stu(j,&msg_buf[n],4);break;
				case 'L' : n+= a_conststutob_stu(l,&msg_buf[n],4);break;
				case 'P' : n+= a_conststutob_stu(p,&msg_buf[n],4);break;
				case 'R' : n+= a_conststutob_stu(r,&msg_buf[n],4);break;
				case 'S' : n+= a_conststutob_stu(s,&msg_buf[n],4);break;
				case 'U' : n+= a_conststutob_stu(u,&msg_buf[n],4);break;
				case 'v' : n+= a_conststutob_stu(vv,&msg_buf[n],4);break;
				case 'W' : n+= a_conststutob_stu(w,&msg_buf[n],4);break;
				default:				
				break;
			}    
	n+= a_conststutob_stu(fenhao,&msg_buf[n],4);           //;
	n+= a_conststutob_stu(work,&msg_buf[n],8);         //工作
	n= sun_d(Action_cycle,n); //20    
	n+= a_conststutob_stu(s,&msg_buf[n],4);            //s
	n+= a_conststutob_stu(fenhao,&msg_buf[n],4);           //;
	n+= a_conststutob_stu(Stopping,&msg_buf[n],8);         //休止
	n= sun_d(Stops_cycle,n); //20    
	n+= a_conststutob_stu(s,&msg_buf[n],4);            //s
	n+= a_conststutob_stu(fenhao,&msg_buf[n],4);           //;
	n+= a_conststutob_stu(rxt,&msg_buf[n],8);         //接收
	if(Receiver_c)
	{
		n+= a_conststutob_stu(okt,&msg_buf[n],8);         //正常
	}
	else
	{
		n+= a_conststutob_stu(errt,&msg_buf[n],8);         //故障
	}
	n+= a_conststutob_stu(fenhao,&msg_buf[n],4);           //;
	n+= a_conststutob_stu(txt,&msg_buf[n],8);         //发射
	if(Receiver_c)
	{
		n+= a_conststutob_stu(okt,&msg_buf[n],8);         //正常
	}
	else
	{
		n+= a_conststutob_stu(errt,&msg_buf[n],8);         //故障
	}
	n+= a_conststutob_stu(fenhao,&msg_buf[n],4);           //;
	n+= a_conststutob_stu(pinlv,&msg_buf[n],8);         //频率
	if(Receiver_c)
	{
		n+= a_conststutob_stu(okt,&msg_buf[n],8);         //正常
	}
	else
	{
		n+= a_conststutob_stu(errt,&msg_buf[n],8);         //故障
	}
	n+= a_conststutob_stu(juhao,&msg_buf[n],4);           //.
}
void event_06(void)      //事件06
{ 
}
void event_07(void)      //事件07
{
	
}
void event_08(void)      //事件08
{
     uint n=12;
	 eeprom_read_block (&msg_buf[0],&E_name[0],12);     //读名称
	 n+= a_conststutob_stu(maohao,&msg_buf[n],4);           //:
	 n+=a_conststutob_stu(system_work,&msg_buf[n],28);//"系统上电工作"
	 n+=a_conststutob_stu(powa,&msg_buf[n],8);        //"电源"
	 n+=a_conststutob_stu(Voltage,&msg_buf[n],8);     //"电压"	
	 n= adv_a(adv_m,n);                           //转换电源1电压数据
	 n+=a_conststutob_stu(vv,&msg_buf[n],4);          //'V'	 
	 n+=a_conststutob_stu(juhao,&msg_buf[n],4);       //'.'
}
void event_09(void)      //事件09
{
	 uint n=12;
	 eeprom_read_block (&msg_buf[0],&E_name[0],12);     //读名称
	 n+= a_conststutob_stu(maohao,&msg_buf[n],4);           //:
	 n+=a_conststutob_stu(TXErr,&msg_buf[n],48);//通讯故障
}
void event_10(void)      //事件10
{ 
    uint n=12;
	 eeprom_read_block (&msg_buf[0],&E_name[0],12);    //读名称    
	 n+= a_conststutob_stu(maohao,&msg_buf[n],4);           //:
	 n+= a_conststutob_stu(zlcw,&msg_buf[n],16);            //指令错误
	 n+= a_conststutob_stu(juhao,&msg_buf[n],4);           //.	 
}
void event_11(void)      //事件11
{
   uint i=0,m=0,n=12;
	
	uchar a=0,b=0,c=0;
	uchar buf[16],buf1[64];
	eeprom_read_block (&msg_buf[0],&E_name[0],12);     //读名称
	n+= a_conststutob_stu(fenhao,&msg_buf[n],4);            //;
	for(m=0;m<2;m++)
	{
		eeprom_read_block (&buf[0],&E_phone[m],16);        //读号码0-2
		i =countsn(buf);    // 字节计数
		b=0;
		for(a=0;a<i;a++)
		{
			c=a_conststutob_stu(uin,&buf1[b],3);            //添加003	
			b+=3;
			buf1[b++]=buf[a]; 
		}
		n+= a_stutob_stu(buf1,&msg_buf[n],b);            //转换号码到PDU	
		n+= a_conststutob_stu(fenhao,&msg_buf[n],4);            //;
	}	
}

void event_12(void)      //事件12
{
    uint i=0,m=0,n=12;
	uchar a=0,b=0,c=0;
	uchar buf[16],buf1[64];
	 eeprom_read_block (&msg_buf[0],&E_name[0],12);     //读名称
	 n+= a_conststutob_stu(fenhao,&msg_buf[n],4);            //;
	 for(m=3;m<4;m++)
	 {
	 eeprom_read_block (&buf[0],&E_phone[m],16);        //读号码3-4
	 i =countsn(buf);    // 字节计数
	 b=0;
     for(a=0;a<i;a++)
	 {
	   c=a_conststutob_stu(uin,&buf1[b],3);            //添加003	
	   b+=3;
	   buf1[b++]=buf[a]; 
	 }
     n+= a_stutob_stu(buf1,&msg_buf[n],b);            //转换号码到PDU	
	 n+= a_conststutob_stu(fenhao,&msg_buf[n],4);            //;
    }
}
void event_13(void)      //事件13
{
}
void event_14(void)      //事件14
{
	 uint n=12;
	 uchar a=0,b=0,c=0;
	 uchar buf[16],buf1[64];
	 eeprom_read_block (&msg_buf[0],&E_name[0],12);     //读名称 
	 n+= a_conststutob_stu(maohao,&msg_buf[n],4);           //:
	 if(WDT_C)
	 {
	    WDT_C=0;
		n+= a_conststutob_stu(wdt,&msg_buf[n],24);            //看门狗复位
	 }
     n+= a_conststutob_stu(sn,&msg_buf[n],8);            //SN
     n+= a_conststutob_stu(maohao,&msg_buf[n],4);            //:
	 eeprom_read_block (&buf[0],&E_ID[0],7);        //读ID
	 b=0;
     for(a=0;a<7;a++)
	 {
	   c=a_conststutob_stu(uin,&buf1[b],3);            //添加003	
	   b+=3;
	   buf1[b++]=buf[a]; 
	 }
     n+= a_stutob_stu(buf1,&msg_buf[n],b);            //转换号码到PDU	
	 n+=a_conststutob_stu(juhao,&msg_buf[n],4);       //.	
	 n+= a_conststutob_stu(xmm,&msg_buf[n],12);            //新密码
	 n+= a_conststutob_stu(maohao,&msg_buf[n],4);         //:
     eeprom_read_block (&msg_buf[n],&E_mm[0],16);     //读mm
     n+=16;	 
	 n+= a_conststutob_stu(juhao,&msg_buf[n],4);         //.
}
//----------------------------------------
void event_21(void)      //事件21
{
	uint n=12;
	 eeprom_read_block (&msg_buf[0],&E_name[0],12);     //读名称
	n+= a_conststutob_stu(maohao,&msg_buf[n],4);           //:
	 n+=a_conststutob_stu(powa,&msg_buf[n],8);        //"电源"
	 n+=a_conststutob_stu(Voltage,&msg_buf[n],8);     //"电压"	
	 n= adv_a(adv_m,n);                           //转换电源1电压数据
	 n+=a_conststutob_stu(vv,&msg_buf[n],4);          //'V'	
	 n+=a_conststutob_stu(douhao,&msg_buf[n],4);      //','	 	 
     n+=a_conststutob_stu(batt_vdc,&msg_buf[n],24);      //蓄电池电压:	
	 n= adv_a(batt_m,n);                           //转换蓄电池电压
	 n+=a_conststutob_stu(vv,&msg_buf[n],4);          //'V'	
	 n+=a_conststutob_stu(juhao,&msg_buf[n],4);       //'.'

}
//----------------------------------------
void event_22(void)      //事件32
{
	uint n=12;
	 eeprom_read_block (&msg_buf[0],&E_name[0],12);     //读名称
	 n+= a_conststutob_stu(maohao,&msg_buf[n],4);           //:
	 n+=a_conststutob_stu(sys_pow_down,&msg_buf[n],88);//"系统断电,由蓄电池维持通讯工作!蓄电池电压:
	 n= adv_a(batt_m,n);                           //转换电源1电压数据
	 n+=a_conststutob_stu(vv,&msg_buf[n],4);          //'V'	
	 n+=a_conststutob_stu(juhao,&msg_buf[n],4);       //'.'
  
}
/*******************************************************************/
//以下是PDU全串的编解码模块。为简化编程,有些字段用了固定值。
// PDU编码,用于编制、发送短消息
// pDst: 目标PDU串指针
//phone: 电话号码串指针(EEPROM内)
//msg:   用户需发送的短信数据(16进制汉字和完整的BCD码)
// 返回: 目标PDU串长度(PDU数据已经整理完毕,可以直接发送*PDst;)
//*****************************************************************//
void gsmEncodePdu( uchar* pDst,uchar *phone,uchar *msg)
{
    uchar addr_buf[16];     //短信中心;0x23'#'是结束符号
    uchar phone_buf[16];    //电话号码
    uint nLength;          // 内部用的串长度
    uint nDstLength;       // 目标PDU串长度
    uchar buf[8];           // 内部用的缓冲区
	uchar a;
    eeprom_busy_wait();
    eeprom_read_block (&phone_buf[0],&phone[0], 16);  //读电话号码n
    eeprom_busy_wait();
    eeprom_read_block (&addr_buf[0],&E_addr[0], 16);  //从码片读短信中心号码  
    // SMSC地址信息段
    nLength = countsn(addr_buf);    // SMSC地址字符串的长度 
    if(nLength>16)

⌨️ 快捷键说明

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