51单片机控制TC35 之发送TEXT短信——MADE BY lyq
#include
#include "1602.h"
#include "uart.c"
#include "tc35.c"
//#define RsBuf_N 50
//char RsBuf[RsBuf_N]; //定义串口接收数据缓冲区
//uchar RsPoint=0;
uchar code PhoneNO[]= "+8615900000000";//改了
uchar code Text[]= "I love SDNU";
uchar code center[]="+8613800531500";
void main()
{
TC35_init();
Uart_init();
init_1602();
Send_AT();
Set_MODE(1); //设置短消息模式
Set_CENTER(center); // 设置短消息中心 AT+CSCA=“+8613800531500”回车
TransmitText(PhoneNO,Text);
while(1);
//lcd_disp_str(RsBuf ,2);
}
/*问题:
每次处理完数据。RsPoint是怎样清零的?????在 准备发一个数据,然后接受一个数据 之前
RsBuf[RsPoint++]=SBUF;
RsBuf[RsPoint]=0x00; //将下一个数据清零
如果这个发送没问题。加删除,接收函数,参考桌面上的tc35.c
添加液晶菜单的支持 ,类似手机
*/
========================================================
========================================================
/******************************************************************
函数名TC35.c
MADE BY lyq
my BLOGhttp://hi.baidu.com/282280072
*******************************************************************/
#include "uart.c"
#include "1602.h"
#include "delay.h"
#define uchar unsigned char
#define uint unsigned int
#define NULL 0
#define ATwaits 10
#define DWWwaits 10
#define Readwaits 10
#define Sendwaits 10
#define RsBuf_N 50
char RsBuf[RsBuf_N]; //定义串口接收数据缓冲区
uchar RsPoint;
void Send_AT(void);
char *mystrstr(char *s, char *t);
void Num2char(uchar i);
/***********************TC35模块初始化******************************
*功 能: TC35模块初始化, P0.0输出低电平至少100ms
*形 参:
*返 回 值:
*备 注:
*****************************************************************/
void TC35_init()
{
P0|=0x01;
P0&=~0x01;
delayms_100ms();delayms_100ms();delayms_100ms();delayms_100ms();
delayms_100ms();delayms_100ms();
P0|=0x01;
delayms_10s();delayms_10s();delayms_10s();
}
/***********************发送联机指令******************************
*功 能: 串口发送数组命令到TC35,"AT",
*形 参:
*返 回 值:
*备 注: 测试GSM模块是否连接正确
*****************************************************************/
void Send_AT(void)
{
uchar *p,i=ATwaits; //ATwaits=10
//lcd_disp_str(RsBuf,1);
while(i--) //测试10次,在某一次成功就退出
{
//RsBuf[0]=\0; //有下一句就不需要这句 //清空接收缓冲区
RsPoint=0;
// 本来只有\r 我添加的\n 后来证明 可以不加的
SendString("AT\r");
//****************************等待应答"OK"
ES=1; //必须中断 // 串口中断应许
delayms_100ms();//等待接受数据完成//delayms_1000ms();delayms_1000ms();
p=mystrstr(RsBuf,"OK"); //接收到的数据存在RsBuf
if(p!=NULL) //接收到"OK"
{
lcd_disp_str("GSM module is OK",1);
lcd_disp_str("Will contimue! ",2);
delayms_1000ms();delayms_1000ms();//delayms_1000ms();delayms_1000ms();
lcd_disp_str(" ",1);
lcd_disp_str(" ",2);
break;
}
lcd_disp_str("No GSM connected",1);delayms_1000ms();
lcd_disp_str(" ",1);
}
}
/***********************设置短消息模式******************************
*功 能: 串口发送数组命令到TC35,AT+CMGF=1
*形 参: uchar m =1 text模式 m=0 PDU模式
*返 回 值:
*备 注: 1 TEXT
*****************************************************************/
void Set_MODE(uchar m)
{
uchar *p,i=ATwaits; //ATwaits=10
//lcd_disp_str(RsBuf,1);
while(i--) //测试10次,在某一次成功就退出
{
RsPoint=0;
if(m)
SendString("AT+CMGF=1"); //设置短消息模式 1 TEXT
else
SendString("AT+CMGF=0"); //设置短消息模式 PDU模式
//****************************等待应答"OK"
ES=1; //必须中断 // 串口中断应许
delayms_100ms();//等待接受数据完成//delayms_1000ms();delayms_1000ms();
p=mystrstr(RsBuf,"OK"); //接收到的数据存在RsBuf
if(p!=NULL) //接收到"OK"
{
lcd_disp_str("Set_MODE is OK",1);
lcd_disp_str("contimue! ",2);
delayms_1000ms();delayms_1000ms();//delayms_1000ms();delayms_1000ms();
lcd_disp_str(" ",1);
lcd_disp_str(" ",2);
break;
}
lcd_disp_str("Set_MODE fai
51单片机TC35发送TEXT短 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)