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

📄 serial1.c

📁 使用单片机读取并提取短信内容
💻 C
字号:
/***********************************
						   
	串口发送和接收及液晶显示   
	                    
						2008.10.29
***********************************/
#include<reg51.h>
#include"LCD1602.H"	 

#define   uint   unsigned   int 
#define   uchar  unsigned   char

uchar   code   sms1[]={"hello crf make"};
uchar   code   at[]= {"at\x0D\x0a"};      
uchar   code   cmgf[]= {"AT+cmgf=1\x0D\x0a"};
uchar   code   cmgr[]= {"AT+cmgr\x0D\x0a"};      
uchar   code   cmgs[]= {"at+cmgs=13380035776\x0D\x0a"}; 
uchar   code   test[]= {"test\x1a"};	
uchar   idata  sms[50];
uchar   idata  content[50];    
uchar   n = 0,New_sms=0;
  bit   k = 0;
/***********************
  串口中断0的初始化
************************/
void init()
 {
     LCD_Initial();
     PCON  |= 0x80;  //PCON: power control , SMOD=1
     SCON   = 0x50;  //SCON: serial control
     TMOD   = 0x20;  //TMOD: timer model
     TH1    = 0xFA;  //Bps:  9600
     TR1    = 1;
     EA     = 1;
     ES     = 1;
     TI     = 0;
     RI     = 0;
 }
/*************************
   串口中断0的中断服务程序
***************************/
void es_server()  interrupt 4
{
     if(RI)
       {
	    if(n>31) n=0;	
        sms[n]=SBUF;
       	while(RI == 0 );
        RI=0;		
		n++;	
       }
     else
       {
        TI=0;
       }
	k=1;
	if(sms[0]=='+' && sms[1]=='C' && sms[2]=='M' && sms[3]=='T' && sms[4]=='I') {New_sms=1;k=0;}
		 	   
} 
/******************************
	    提取字码程序
*******************************/
void Pick_Code()
{
  uchar k=0,num=0,temp,l=0;
  
  while(sms[l]!='\x0d' | sms[l+1]!='\x0a')//找出信息前的回车
     {
	   l++;if(l>32) break;
	 }
   l+=2;	 
   temp=l;
   while(sms[l]!='o' | sms[l+1]!='k' )	//找出信息最后的OK
   {
   l++;num++;if(l>32) break;
   }
    
   for(k=0;k<num-2,l<32;k++,temp++)
      content[k]=sms[temp];
						  
}
/******************************
         发送子程序
******************************/
void SendASC(uchar ASC)
{
   bit es;
   es=ES;
   ES=0;//关闭中断
   TI=0;
   SBUF=ASC;
   while(!TI);
   TI=0;
   ES=es;
}
/***************************
       发送字符串程序
****************************/
void SendToGsm(uchar* p)
{
   while(*p!='\0')
    { 
    SendASC(*p++);
    }
}
/***************************
         延时程序
***************************/
void delay(uchar a)
{
   uint j;
   for(;a>1;a--)
      for(j=5000;j>1;j--);	
}
/**************************
         主程序
**************************/
main( )
{
      
     init();
	 GotoXY(0,0);
     Print("  --waiting-- ");
	 SendToGsm(at);
	 delay(2);	 

     while(1)
	 {
	  while(New_sms==1)	 //接收到手机有新信息
	    {
		 New_sms=0;
		 P1=0x55;
		 SendToGsm(cmgr);
		 delay(2); 
		} 	
	  while(k==1)
	    { 
		Pick_Code();	  		
	    k=0;
		LCD_Initial();
		delay(1);
	    GotoXY(0,0);
        Print(sms);
		GotoXY(0,1);
        Print(content);		   
	    } 
		delay(1);	   
	  }
}

⌨️ 快捷键说明

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