基于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)
2019-4-25 16:42 上傳
點擊文件名下載附件
|