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("rnATrn"); //握手
- CLR_RX();
- Delay_us(10000);
- while(!Hand("OK"))
- {
- led1=~led1;
- USART2_Puts("ATr"); //握手
- Delay_us(100000);
- }
- CLR_RX();
- Delay_us(10000);
- // USART2_Puts("ATD611123;r");//拨号“611123”
- // while(!Hand("OK")) //等待设置成功
- // CLR_RX();
- // Delay_us(200000);
- //
- // USART2_Puts("ATHr");//挂断
- // while(!Hand("OK")) //等待设置成功
- // CLR_RX();
- // Delay_us(10000);
- led2=~led2;
- while(!Hand("OK")) //等待设置成功
- {
- USART2_Puts("AT+CMGF=1r");//设置为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==0x22) //找到8
- {
- for(j=0;j<16;j++)
- {
- NUM_Magz[j]=RX; //读消息中心的号码
- i++;
- }
- i=200;
- }
- }
- CLR_RX();
- Delay_us(1000);
- led2=~led2;
- // led2=~led2;
- // while(!Hand("OK")) //等待设置成功
- // {
- // USART2_Puts("AT+CMGR=1r");//设置读第一条短信
- // Delay_us(100000);
- // }
- // CLR_RX();
- // Delay_us(1000);
- led2=~led2;
- while(!Hand("OK")) //等待设置成功
- {
- USART2_Puts("AT+CNMI=2,1rn");//设置当有新短信到来时提示
- Delay_us(100000);
- }
- CLR_RX();
- Delay_us(1000);
- led2=~led2;
- while(!Hand("OK")&&!Hand("ERROR")) //等待设置成功
- {
- USART2_Puts("AT+CMGD=1rn");//设置删除第一条短信
- 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=1rn");//发送读取信息指令
- while(!Hand("OK")); //等待设置成功
- for(i=0;i<200;i++)
- {
- if(RX==0x22)
- {
- FLAG++;
- }
- if(FLAG==3)
- {
- FLAG=0;
- for(j=0;j<11;j++)
- {
- i++;
- NUM_Receive[j]=RX;
- if(RX==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=1rn");//删除短信
- while(!Hand("OK")); //等待设置成功
- CLR_RX();
- Delay_us(1000);
- }
- if(Hand("1HX")) //收到"1HX"回复短信
- {
- MESSAGE(NUM_Receive,content_ZT); //发短信
- while(!Hand("OK")) //等待设置成功
- {
- USART2_Puts("AT+CMGD=1rn");//删除短信
- Delay_us(100000);
- }
- CLR_RX();
- Delay_us(1000);
- }
- }
- if(Hand("RING")) //若缓存字符串中含有"RING"就表示有新的来电
- {
- Delay_us(10000);
- CLR_RX(); //清除缓存内容
- USART2_Puts("AT+CLCCr");//读取来电号码
- while(!Hand("OK")); //等待设置成功
- for(i=0;i<200;i++)
- {
- if(RX==0x22)
- {
- for(j=0;j<11;j++)
- {
- i++;
- NUM_Receive[j]=RX;
- if(RX==0x22)
- {
- NUM_Receive[j]='\0';
- j=11;
- }
- }
- i=200;
- }
- }
- CLR_RX();
- USART2_Puts("ATHrn");//挂断电话
- 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("ATHrn");//挂断电话
- while(!Hand("OK"));
- CLR_RX();
- }
- }
- }
- /******************* (C) COPYRIGHT 2012 WildFire Team *****END OF FILE************/
- #include "GSM.h"
- #include "usart1.h"
- #include "systick.h"
- #include "bit.h"
- extern char RX[200];
- extern char NUM_Magz[17];
- /*
- * 函数名:GSM_Init
- * 描述 :GSM模块初始化
- * 输入 :无
- * 输出 :无
- * 调用 :由main调用
- */
- void GSM_Init(void)
- {
- u16 i,j;
- 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("rnATrn"); //握手
- CLR_RX();
- Delay_us(10000);
- while(!Hand("OK"))
- {
- led1=~led1;
- USART2_Puts("ATr"); //握手
- Delay_us(100000);
- }
- CLR_RX();
- Delay_us(10000);
- // USART2_Puts("ATD611123;r");//拨号“611123”
- // while(!Hand("OK")) //等待设置成功
- // CLR_RX();
- // Delay_us(200000);
- //
- // USART2_Puts("ATHr");//挂断
- // while(!Hand("OK")) //等待设置成功
- // CLR_RX();
- // Delay_us(10000);
- led2=~led2;
- while(!Hand("OK")) //等待设置成功
- {
- USART2_Puts("AT+CMGF=1r");//设置为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==0x22) //找到8
- {
- for(j=0;j<16;j++)
- {
- NUM_Magz[j]=RX; //读消息中心的号码
- i++;
- }
- i=200;
- }
- }
- CLR_RX();
- Delay_us(1000);
- led2=~led2;
- // led2=~led2;
- // while(!Hand("OK")) //等待设置成功
- // {
- // USART2_Puts("AT+CMGR=1r");//设置读第一条短信
- // Delay_us(100000);
- // }
- // CLR_RX();
- // Delay_us(1000);
- led2=~led2;
- while(!Hand("OK")) //等待设置成功
- {
- USART2_Puts("AT+CNMI=2,1rn");//设置当有新短信到来时提示
- Delay_us(100000);
- }
- CLR_RX();
- Delay_us(1000);
- led2=~led2;
- while(!Hand("OK")&&!Hand("ERROR")) //等待设置成功
- {
- USART2_Puts("AT+CMGD=1rn");//设置删除第一条短信
- 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;
- }
所有资料51hei提供下载:
12-GSM收发短信打电话.rar
|
0
|
|
|
|
|
|