基于stc15的GSM模块,接收短信来控制你想控制的的东西
单片机源程序如下:
- #include "stc15.h"
- #include "delay.h"
- #include "main.h"
- #include "uart2.h"
- #define Success 1U
- #define Failure 0U
- //定义变量
- unsigned long Time_Cont = 0; //定时器计数器
- char phoneNumber[] = "xxxxxxxxxx"; //替换成需要被拨打电话的号码
- char msg[] = "xxxxxxxxxxx"; //短信内容
- char xdata messageBuffer2[100];
- //bit isTimeOut2 = 0;
- #define MAIN_Fosc 22118400L
- #define u16 unsigned int
- void delay2_ms(unsigned int ms)
- {
- u16 i;
- do{
-
- i = (u16)(MAIN_Fosc / 13000);
- while(--i) ; //14T per loop
- }while(--ms);
- }
- void main()
- {
- Uart_Init2();
- if (sendCommand2("AT\r\n", "OK\r\n", 3000, 10) == Success);
- else errorLog2();
- delay2_ms(10);
- if (sendCommand2("AT+CMGF=1\r\n", "OK\r\n", 1000, 10) == Success);
- else errorLog2();
- delay2_ms(10);
- if (sendCommand2("AT+CSCS=\"GSM\"\r\n", "OK\r\n", 1000, 10) == Success);
- else errorLog2();
- delay2_ms(10);
- if (sendCommand2("AT+CNMI=2,2\r\n", "OK\r\n", 3000, 10) == Success);
- else errorLog2();
- delay2_ms(10);
- // sendMessage(phoneNumber,msg); //发送短信
- while(1)
- {
- if(isStartGetMessage2)
- {
- isStartGetMessage2 = 0;
- Time_Cont = 0;
-
- while (Time_Cont < 1000) //等待1s接收短信数据
- {
- delay2_ms(100);
- Time_Cont += 100;
- }
- isGetMessage2 = Success;
- }
- if( isGetMessage2 == Success)
- {
- parseMessage2();
-
-
- if(strstr(messageBuffer2, "reboot conditioner") != NULL || strstr(messageBuffer2, "5F00542F7A7A8C03") != NULL) //55F00 542F 7A7A 8C03 //开启空调
- {
- // relay2 = 1;
- //这里嵌入信息
- }
-
-
- if(strstr(messageBuffer2, "Turn off conditioner") != NULL || strstr(messageBuffer2, "517395ED7A7A8C03") != NULL) //5173 95ED 7A7A 8C03 //关闭空调
- {
- // relay1 = 0;
- //这里也是嵌入信息
- }
- isGetMessage2 = Failure ;
- }
- }
- }
- void parseMessage()
- {
- char *messageHead=NULL;
- char *messageEnd1=NULL;
- char *messageEnd2=NULL;
- memset(messageBuffer2, 0, sizeof(messageBuffer2)-1); //清空短信内容缓冲区
- messageHead = strstr(Rec_Buf2, "CMT");
- if (messageHead != NULL)
- {
- messageEnd1 = strstr(messageHead, "\n");
- if (messageEnd1 != NULL)
- {
- messageEnd1 ++;
- messageEnd2 = strstr(messageEnd1, "\n");
- if (messageEnd2 != NULL)
- {
- memcpy(messageBuffer2, messageEnd1, messageEnd2 - messageEnd1);
-
- }
- }
- }
- CLR_Buf2();
- }
- void sendMessage(char *number,char *msg)
- {
- xdata char send_buf[20] = {0};
- memset(send_buf, 0, 20); //清空
- strcpy(send_buf, "AT+CMGS=\"");
- strcat(send_buf, number);
- strcat(send_buf, "\"\r\n");
- if (sendCommand2(send_buf, ">", 3000, 10) == Success);
- else errorLog2();
- SendString2(msg);
- SendData2(0x1A);
- }
- void phone(char *number)
- {
- char send_buf[20] = {0};
- memset(send_buf, 0, 20); //清空
- strcpy(send_buf, "ATD");
- strcat(send_buf, number);
- strcat(send_buf, ";\r\n");
- if (sendCommand2(send_buf, "SOUNDER", 10000, 10) == Success);
- else errorLog2();
- }
- void errorLog()
- {
- while (1)
- {
- if (sendCommand2("AT\r\n", "OK", 100, 10) == Success)
- {
- soft_reset2();
- }
- delay2_ms(200);
- }
- }
- void soft_reset(void) //制造重启命令
- {
- ((void (code *) (void)) 0x0000) ();
- }
- unsigned int sendCommand(char *Command, char *Response, unsigned long Timeout, unsigned char Retry)
- {
- unsigned char n;
- CLR_Buf2();
- for (n = 0; n < Retry; n++)
- {
- SendString2(Command); //发送GPRS指令
- Time_Cont = 0;
- while (Time_Cont < Timeout)
- {
- delay2_ms(100);
- Time_Cont += 100;
- if (strstr(Rec_Buf2, Response) != NULL)
- {
-
- CLR_Buf2();
- return Success;
- }
-
- }
- Time_Cont = 0;
- }
-
- CLR_Buf2();
- return Failure;
- }
复制代码
- #include "stc15.h"
- #include "delay.h"
- #include "sim800c.h"
- #include "uart2.h"
- #define Success 1U
- #define Failure 0U
- //定义变量
- unsigned long Time_Cont = 0; //定时器计数器
- char phoneNumber[] = "xxxxxxxxxx"; //替换成需要被拨打电话的号码
- char msg[] = "xxxxxxxxxxx"; //短信内容
- char xdata messageBuffer2[100];
- //bit isTimeOut2 = 0;
- #define MAIN_Fosc 22118400L
- #define u16 unsigned int
- void delay2_ms(unsigned int ms)
- {
- u16 i;
- do{
-
- i = (u16)(MAIN_Fosc / 13000);
- while(--i) ; //14T per loop
- }while(--ms);
- }
- void sim800c()
- {
- Uart_Init2();
- if (sendCommand2("AT\r\n", "OK\r\n", 3000, 10) == Success);
- else errorLog2();
- delay2_ms(10);
- if (sendCommand2("AT+CMGF=1\r\n", "OK\r\n", 1000, 10) == Success);
- else errorLog2();
- delay2_ms(10);
- if (sendCommand2("AT+CSCS=\"GSM\"\r\n", "OK\r\n", 1000, 10) == Success);
- else errorLog2();
- delay2_ms(10);
- if (sendCommand2("AT+CNMI=2,2\r\n", "OK\r\n", 3000, 10) == Success);
- else errorLog2();
- delay2_ms(10);
- // sendMessage(phoneNumber,msg); //发送短信
- if(isStartGetMessage2)
- {
- isStartGetMessage2 = 0;
- Time_Cont = 0;
-
- while (Time_Cont < 1000) //等待1s接收短信数据
- {
- delay2_ms(100);
- Time_Cont += 100;
- }
- isGetMessage2 = Success;
- }
- if( isGetMessage2 == Success)
- {
- parseMessage2();
-
-
- if(strstr(messageBuffer2, "reboot conditioner") != NULL || strstr(messageBuffer2, "5F00542F7A7A8C03") != NULL) //55F00 542F 7A7A 8C03 //开启空调
- {
- // relay2 = 1;
- //这里嵌入信息
- }
-
-
- if(strstr(messageBuffer2, "Turn off conditioner") != NULL || strstr(messageBuffer2, "517395ED7A7A8C03") != NULL) //5173 95ED 7A7A 8C03 //关闭空调
- {
- // relay1 = 0;
- //这里也是嵌入信息
- }
- isGetMessage2 = Failure ;
- }
- }
- void parseMessage()
- {
- char *messageHead=NULL;
- char *messageEnd1=NULL;
- char *messageEnd2=NULL;
- memset(messageBuffer2, 0, sizeof(messageBuffer2)-1); //清空短信内容缓冲区
- messageHead = strstr(Rec_Buf2, "CMT");
- if (messageHead != NULL)
- {
- messageEnd1 = strstr(messageHead, "\n");
- if (messageEnd1 != NULL)
- {
- messageEnd1 ++;
- messageEnd2 = strstr(messageEnd1, "\n");
- if (messageEnd2 != NULL)
- {
- memcpy(messageBuffer2, messageEnd1, messageEnd2 - messageEnd1);
-
- }
- }
- }
- CLR_Buf2();
- }
- void sendMessage(char *number,char *msg)
- {
- xdata char send_buf[20] = {0};
- memset(send_buf, 0, 20); //清空
- strcpy(send_buf, "AT+CMGS=\"");
- strcat(send_buf, number);
- strcat(send_buf, "\"\r\n");
- if (sendCommand2(send_buf, ">", 3000, 10) == Success);
- else errorLog2();
- SendString2(msg);
- SendData2(0x1A);
- }
- void phone(char *number)
- {
- char send_buf[20] = {0};
- memset(send_buf, 0, 20); //清空
- strcpy(send_buf, "ATD");
- strcat(send_buf, number);
- strcat(send_buf, ";\r\n");
- if (sendCommand2(send_buf, "SOUNDER", 10000, 10) == Success);
- else errorLog2();
- }
- void errorLog()
- {
- while (1)
- {
- if (sendCommand2("AT\r\n", "OK", 100, 10) == Success)
- {
- soft_reset2();
- }
- delay2_ms(200);
- }
- }
- void soft_reset(void) //制造重启命令
- {
- ((void (code *) (void)) 0x0000) ();
- }
- unsigned int sendCommand(char *Command, char *Response, unsigned long Timeout, unsigned char Retry)
- {
- unsigned char n;
- CLR_Buf2();
- for (n = 0; n < Retry; n++)
- {
- SendString2(Command); //发送GPRS指令
- Time_Cont = 0;
- while (Time_Cont < Timeout)
- {
- delay2_ms(100);
- Time_Cont += 100;
- if (strstr(Rec_Buf2, Response) != NULL)
- {
-
- CLR_Buf2();
- return Success;
- }
-
- }
- Time_Cont = 0;
- }
-
- CLR_Buf2();
- return Failure;
- }
复制代码
程序编译错误 如何修改 求大神:
总控制结合备份部.rar
(57.78 KB, 下载次数: 113)
|