在本论坛上搜的一个sim900a改的,我只是用做单片机设计就够了,其他请自己改
单片机源程序如下:
- void main(void)
- {
- uint aa=0;
- EA=1; //开总中断
- uart_init(); //串口初始化
- OLED_Init(); //初始化OLED
- OLED_Clear() ;
- Rx_bit=0;
- Uart_SendString("AT+CLIP=1\r\n");
- delay(500);
- Uart_SendString("AT+CMGF=1\r\n"); //设置sim900模块为英文方式发送短信
- delay(500);
- Uart_SendString("AT+CMGD=1\r\n"); //清除所有短信
- delay(500);
- Uart_SendString("AT+CSCS=\"GSM\"\r"); //设置sim900模块GSM字符集
- delay(500);
- Uart_SendString("AT+CMGF=1\r"); //设置sim900模块为英文方式发送短信
- delay(500);
- Clear_Rxdata(Rx_data_length);
- delay(500);
- memset(Rx_data,' ',sizeof(Rx_data)); //Rx_data数组中元素都为空格
- OLED_ShowString(10,0,w);
- while(1)
- {
- EA=1;
- EX0=1; //开外部中断0
- IT0=0; //脉冲触发方式
- Response_receive_SMS(); //循环检测是否收到短信,若收到短信则 Response_receive_SMS_flag==1
- delay(100);
- Rx_bit=0;
- if(Response_receive_SMS_flag==1)
- {
- OLED_Clear();
- Uart_SendString("AT+CMGR=1\r\n"); //短信读取
- delay(2000);
- // write_1602com(one);
- for(i=0;i<16;i++)
- {
- if(Rx_data[69+i] !='O'
- &&Rx_data[69+i+1]!='K'
- &&Rx_data[69+i+2]!='0') // 判断是否结束
- {
- a[i]=Rx_data[69+i];
- OLED_ShowString(10,2,a);
- }
- }
- if(Rx_data[c] =='C'
- &&Rx_data[c+1]=='O'
- &&Rx_data[c+2]=='M'
- &&Rx_data[c+3]=='M'
- &&Rx_data[c+4]=='O'
- &&Rx_data[c+5]=='N') //判断的短信内容,可以不止5位
- {
- aa=1;
- }
- Response_receive_SMS_flag=0;
- Clear_a(16);
- delay(100);
- Clear_Rxdata(Rx_data_length);
- delay(100);
- Uart_SendString("AT+CMGD=1\r\n"); //清除所有短信
- delay(100);
- Response_receive_SMS_flag=0;
- }
-
- delay(1000);
- if(aa==1)
- {
- delay(1000);
- Uart_SendString("AT+CMGS=\"");
- for(j=0;j<11;j++)
- {
- SBUF=Admin_num[j];
- while(TI==0);
- TI=0;
- }
- Uart_SendString("\"\r");
- delay(200);
- Uart_SendString("hello!"); //返回的短信内容
- delay(300);
- Uart_SendChar(0x1a);
- delay(1000);
- aa=0; }
- }
- }
复制代码 全部资料51hei下载地址:
接发短信.zip
(150.78 KB, 下载次数: 76)
|