单片机接受指定短信内容,1602显示短信内容,单片机对短信内容作判断,若为所要求的内容,则返回一条短信
#include //单片机头文件
#include
#include "lcd1602_drv.h"
#define uchar unsigned char
#define uint unsigned int
#define Rx_data_length 110
uchar Admin_num[11]="xxxxxxxxxxx"; //手机号码
uchar i,j;
bit Response_receive_SMS_flag=0;
sbit RS_1602=P2^6; //1602数据/命令选择引脚
sbit LCD_RW=P2^5; //1602读写引脚
sbit E_1602=P2^7; //1602使能引脚
uchar Rx_bit,i;
uchar xdata Rx_data[Rx_data_length];
uchar w[]="Waiting ...... ";
void Response_receive_SMS(void);
void Uart_SendChar(uchar ch);
void Uart_SendString(uchar *String);
void uart_init(void);
void Clear_Rxdata(uchar length);
void delay(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=100;j>0;j--);
}
void main(void)
{
uint aa=0;
EA=1; //开总中断
LCD_RW=0; //LCD RW 主程序接地一直等于0
uart_init(); //串口初始化
lcd_init(); //液晶屏显示初始化
Rx_bit=0;
Uart_SendString("AT+CLIP=1
");
delay(500);
Uart_SendString("AT+CMGF=1
"); //设置sim900模块为英文方式发送短信
delay(500);
Uart_SendString("AT+CMGD=1
"); //清除所有短信
delay(500);
Uart_SendString("AT+CSCS=\"GSM\"\r"); //设置sim900模块GSM字符集
delay(500);
Uart_SendString("AT+CMGF=1\r"); //设置sim900模块为英文方式发送短信
delay(500);
Clear_Rxdata(Rx_data_length);
delay(500);
memset(Rx_data,' ',sizeof(Rx_data)); //Rx_data数组中元素都为空格
write_1602com(one);
for(i=0;i<16;i++)
{
write_1602dat(w[i]);
}
while(1)
{
EA=1;
EX0=1; //开外部中断0
IT0=0; //脉冲触发方式
Response_receive_SMS(); //循环检测是否收到短信,若收到短信则 Response_receive_SMS_flag==1
delay(100);
Rx_bit=0;
if(Response_receive_SMS_flag==1)
{
Uart_SendString("AT+CMGR=1
"); //短信读取
delay(2000);
write_1602com(one);
for(i=0;i<16;i++)
{
write_1602dat(Rx_data[69+i]);
}
if(Rx_data[69]=='x'&&Rx_data[70]=='x'&&Rx_data[71]=='ax'&&Rx_data[72]=='x'&&Rx_data[73]=='x') //判断的短信内容,可以不止5位
{
aa=1;
}
Response_receive_SMS_flag=0;
Clear_Rxdata(Rx_data_length);
delay(100);
Uart_SendString("AT+CMGD=1
"); //清除所有短信
delay(100);
}
delay(1000);
if(aa==1)
{
delay(1000);
Uart_SendString("AT+CMGS=\"");
for(j=0;j<11;j++)
{
SBUF=Admin_num[j];
while(TI==0);
TI=0;
}
Uart_SendString("\"\r");
delay(200);
Uart_SendString("xxx"); //返回的短信内容
delay(300);
Uart_SendChar(0x1a);
delay(1000);
aa=0; }
}
}
void uart() interrupt 4
{
ES=0;
if(RI==1) //当硬件接 收到一个数据时,RI会置位
{
if(SBUF!=0x0d&&SBUF!=0x0a&&SBUF!=' ') //去除所有的空格
{
Rx_data[Rx_bit]=SBUF;
Rx_bit++;
}
if(Rx_bit==Rx_data_length)
{
Rx_bit=0;
}
RI=0;
}
ES=1;
}
void Response_receive_SMS(void)
{
uchar i=0;
for(i=0;i<=Rx_data_length;i++)
{
if(Rx_data[i] =='+'
&&Rx_data[i+1]=='C'
&&Rx_data[i+2]=='M'
&&Rx_data[i+3]=='T'
&&Rx_data[i+4]=='I'
&&Rx_data[i+5]==':')
{
Response_receive_SMS_flag=1;
return;
}
}
Response_receive_SMS_flag=0;
}
/********************************************************************
* 名称 : Uart_SendChar(uchar ch)
* 功能 : 向串口发送一个字符
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Uart_SendChar(uchar ch)
{
SBUF=ch;
while(TI==0);
TI=0;
}
/********************************************************************
* 名称 : Uart_SendChar(uchar ch)
* 功能 : 向串口发送一个字符串
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Uart_SendString(uchar *String)
{
while (*String !='\0') //字符串结束标志 \0
{
Uart_SendChar(*String);
String++;
}
}
/**************************************