GSM短信發送
單片機源程序如下:
- /******************** (C) COPYRIGHT 2012 WildFire Team **************************
- * 文件名 :main.c
- * 描述 :通過電腦的超級終端向單片機發送數據,單片機將接收到的數據發回電腦,
- * :并顯示在超級終端上。用的是串口1的中斷方式。
- * 實驗平臺:野火STM32開發板
- * 庫版本 :ST3.5.0
- *********************************************************************************/
- #include "stm32f10x.h"
- #include "usart1.h"
- #include "systick.h"
- #include "bit.h"
- #include "GSM.h"
- #define led1 PE5
- #define led2 PE6
- int seat=0; //接收字符串的存儲位置
- extern vu32 TimingDelay;
- extern u8 Uart1_Get_Data;
- extern u8 Uart1_Get_Flag;
- extern char RX[200];
- char content[]="Hi!I am xioawenjun,I have another telephone number,Please call me with 625073,Thanks";
- char content_ZT[]="ALL OK";
- char NUM_Magz[17]={0x22,0x2b,0x38,0x36,0x31,0x38,0x30,0x32,0x32,0x33,0x30,0x35,0x38,0x36,0x36,0x22};
- char NUM1[14]={0x22,0x31,0x38,0x30,0x32,0x32,0x33,0x30,0x35,0x38,0x36,0x36,0x22};
- char NUM_Receive[12]={0x31,0x38,0x30,0x32,0x32,0x33,0x30,0x35,0x38,0x36,0x36};
- /*
- * 函數名:main
- * 描述 :主函數
- * 輸入 :無
- * 輸出 :無
- */
- int main(void)
- {
- u16 i,j,FLAG=0;
- SysTick_Init(); /*systick 初始化*/
- /* USART1 config 115200 8-N-1 */
- // USART1_Config();
- USART2_Config();
- NVIC_Configuration();
- led1=0;
- led2=1;
- GSM_Init();
- ///////////////////////////////////////////////////////////////////
- GPIO_ResetBits(GPIOA, GPIO_Pin_8); //啟動信號開始
- Delay_us(100000); //延時1s
- GPIO_SetBits(GPIOA, GPIO_Pin_8); //啟動信號開始
- Delay_us(100000);
- while(!Hand("Interpreter ready"))
- {
- CLR_RX();
- GPIO_ResetBits(GPIOA, GPIO_Pin_8); //啟動信號開始
- Delay_us(100000); //延時1s
- GPIO_SetBits(GPIOA, GPIO_Pin_8); //啟動信號開始
- Delay_us(100000);
- }
- led1=1;
- Delay_us(500000);
- led1=0;
- USART2_Puts("\r\nAT\r\n"); //握手
- CLR_RX();
- Delay_us(10000);
- while(!Hand("OK"))
- {
- led1=~led1;
- USART2_Puts("AT\r"); //握手
- Delay_us(100000);
- }
- CLR_RX();
- Delay_us(10000);
- // USART2_Puts("ATD611123;\r");//撥號“611123”
- // while(!Hand("OK")) //等待設置成功
- // CLR_RX();
- // Delay_us(200000);
- //
- // USART2_Puts("ATH\r");//掛斷
- // while(!Hand("OK")) //等待設置成功
- // CLR_RX();
- // Delay_us(10000);
- led2=~led2;
- while(!Hand("OK")) //等待設置成功
- {
- USART2_Puts("AT+CMGF=1\r");//設置為TXT模式
- Delay_us(100000);
- }
- CLR_RX();
- Delay_us(1000);
- led2=~led2;
- while(!Hand("OK")) //等待設置成功
- {
- USART2_Puts("AT+CSCS=\"GSM\"\r");//設置當前字符集為“GSM”
- Delay_us(100000);
- }
- CLR_RX();
- Delay_us(1000);
- led2=~led2;
- while(!Hand("OK")) //等待設置成功
- {
- CLR_RX();
- USART2_Puts("AT+CSCA?\r");//設置當前字符集為“GSM”
- Delay_us(100000);
- }
- for(i=0;i<200;i++)
- {
- if(RX[i]==0x22) //找到8
- {
- for(j=0;j<16;j++)
- {
- NUM_Magz[j]=RX[i]; //讀消息中心的號碼
- i++;
- }
- i=200;
- }
- }
- CLR_RX();
- Delay_us(1000);
- led2=~led2;
- // led2=~led2;
- // while(!Hand("OK")) //等待設置成功
- // {
- // USART2_Puts("AT+CMGR=1\r");//設置讀第一條短信
- // Delay_us(100000);
- // }
- // CLR_RX();
- // Delay_us(1000);
- led2=~led2;
- while(!Hand("OK")) //等待設置成功
- {
- USART2_Puts("AT+CNMI=2,1\r\n");//設置當有新短信到來時提示
- Delay_us(100000);
- }
- CLR_RX();
- Delay_us(1000);
- led2=~led2;
- while(!Hand("OK")&&!Hand("ERROR")) //等待設置成功
- {
- USART2_Puts("AT+CMGD=1\r\n");//設置刪除第一條短信
- Delay_us(100000);
- }
- CLR_RX();
- Delay_us(1000);
- /* 設置信息中心號碼 */
- USART2_Puts("AT+CSCA=");
- USART2_Puts(NUM_Magz);
- USART2_Puts("\r");
- while(!Hand("OK")); //等待設置成功
- CLR_RX();
- Delay_us(1000);
- led2=~led2;
- led1=1;
- for(;;)
- {
- if(Hand("+CMTI")) //若緩存字符串中含有"+CMTI"就表示有新的短信
- {
- Delay_us(1000);
- CLR_RX(); //清除緩存內容
- USART2_Puts("AT+CMGR=1\r\n");//發送讀取信息指令
- while(!Hand("OK")); //等待設置成功
- for(i=0;i<200;i++)
- {
- if(RX[i]==0x22)
- {
- FLAG++;
- }
- if(FLAG==3)
- {
- FLAG=0;
- for(j=0;j<11;j++)
- {
- i++;
- NUM_Receive[j]=RX[i];
- if(RX[i]==0x22)
- {
- NUM_Receive[j]='\0';
- j=11;
- }
- }
- i=200;
- }
- }
- if(Hand("1HD")) //收到"1HD"回電話
- {
- CLR_RX();
- Delay_us(1000);
- USART2_Puts("ATD"); //打電話
- USART2_Puts(NUM_Receive);
- USART2_Puts(";\r");
- while(!Hand("OK"));
- while(!Hand("NO CARRIER"));
- CLR_RX();
- Delay_us(1000);
- USART2_Puts("AT+CMGD=1\r\n");//刪除短信
- while(!Hand("OK")); //等待設置成功
- CLR_RX();
- Delay_us(1000);
- }
- if(Hand("1HX")) //收到"1HX"回復短信
- {
- MESSAGE(NUM_Receive,content_ZT); //發短信
- while(!Hand("OK")) //等待設置成功
- {
- USART2_Puts("AT+CMGD=1\r\n");//刪除短信
- Delay_us(100000);
- }
- CLR_RX();
- Delay_us(1000);
- }
-
- }
- if(Hand("RING")) //若緩存字符串中含有"RING"就表示有新的來電
- {
- Delay_us(10000);
- CLR_RX(); //清除緩存內容
- USART2_Puts("AT+CLCC\r");//讀取來電號碼
- while(!Hand("OK")); //等待設置成功
- for(i=0;i<200;i++)
- {
- if(RX[i]==0x22)
- {
- for(j=0;j<11;j++)
- {
- i++;
- NUM_Receive[j]=RX[i];
- if(RX[i]==0x22)
- {
- NUM_Receive[j]='\0';
- j=11;
- }
- }
- i=200;
- }
- }
- CLR_RX();
- USART2_Puts("ATH\r\n");//掛斷電話
- while(!Hand("OK"));
- if(NUM_Receive[0]==0x36) //只回復開頭為1的手機號碼
- {
- MESSAGE(NUM_Receive,content); //發短信
- }
- CLR_RX();
- Delay_us(300000);
- USART2_Puts("ATD"); //打電話
- USART2_Puts(NUM_Receive);
- USART2_Puts(";\r");
- while(!Hand("OK"));
- while(!Hand("NO CARRIER"));
- CLR_RX();
- Delay_us(10000);
-
- USART2_Puts("ATD"); //打電話
- USART2_Puts(NUM_Receive);
- USART2_Puts(";\r");
- while(!Hand("OK"));
- CLR_RX();
- Delay_us(1500000);
- USART2_Puts("ATH\r\n");//掛斷電話
- while(!Hand("OK"));
- CLR_RX();
- }
- }
- }
- /******************* (C) COPYRIGHT 2012 WildFire Team *****END OF FILE************/
復制代碼
所有資料51hei提供下載:
12-GSM收發短信打電話.rar
(293.12 KB, 下載次數: 33)
2018-4-8 16:10 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|