永发信息网

51和sim900a发短信控制LED开关。现在的程序是按下按键发短信。请帮忙加一段程序可以收到短信控制LED开关

答案:1  悬赏:0  手机版
解决时间 2021-01-28 20:20
  • 提问者网友:王者佥
  • 2021-01-28 00:45
uchar code SMS_send[]="AT+CMGS="; //发送电话号码指令
uchar code GMS[]="AT+CSCS=GSM";//设置为英文数字 字符集
uchar code SMS_PDU[]= "AT+CMGF=1";//设置为 文本模式
uchar Byte_num[]="\"18332921706\"";//由于设置的是文本模式所以必须电话号码必须加上“”
uchar code Sms2_Pdu[]="warning"; //内容是:警告(英文模式)
sbit key=P3^7;//发送短信恩建位
sbit led=P2^4;//检测程序是否执行完毕

void Print_Char(uchar ch)//发送单个字符

{
SBUF=ch; //送入缓冲区
while(TI==0); //等待发送完毕
TI=0; //软件清零
}

void Print_Str(uchar *str)//发送字符串
{

while(*str!='\0') //直到输入最后一个跳出
{
Print_Char(*str++);

}

}

void Ini_UART(void)//串口初始化、定时器初始化
{
TMOD = 0x20; //T1方式2,用于UART波特率
TH1 = 0xFD; //UART波特率设置:9600
TL1 = 0xFD;
SCON = 0x50; ////UART方式1:8位UART; REN=1:允许接收
PCON = 0x00;

TF1 = 1; // 中断标志位
TR1 = 1; // 启动定时器1
ES=1; //启动串行口中断
ET0=1; //启动中断功能
EA=1;
}

void GSM_PDU() //
{

Print_Str(GMS); //设置为gsm
Print_Str("\r\n");
delay(1000);
Print_Str(SMS_PDU); //发送设置指令为文本模式
Print_Str("\r\n"); //发送回车
ES=1;
delay(1000);
delay(1000);
delay(1000);
delay(1000);
}

void GSM_PDU_SMS()
{

Print_Str(SMS_send);
Print_Str(Byte_num);
Print_Str("\r\n"); //发送回车
delay(900);
Print_Str(Sms2_Pdu);
delay(500);
Print_Char(0x1A); //发送短息内容结束符对应的ASCII为0x1a
ES=1;
delay(5000);
delay(5000);
}

void main()
{
Ini_UART();
while(1)
{

if(!key) //检测是否发送短信键位摁下
{
GSM_PDU();
//delay(500);
GSM_PDU_SMS();
led=0;
}

}
}

#include
#include
#include
#include
#include
#include
#define uint unsigned int
#define uchar unsigned char

ps:上面字数有限制,没有打这部分
最佳答案
  • 五星知识达人网友:洒脱疯子
  • 2021-01-28 01:07
串口直接发 AT+CMGR=1 读取未读短信的AT指令
然后打包接收所有信息,收完只要判断里面有没有REC UNREAD这一行字符,有就代表有未读短信,然后控制led就OK了
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯