📄 gsmv100.c
字号:
}
}while(strstr(rcv_buf,"OK")==NULL);
}
PortSendString(GSM,"AT+CMGS=");
msg_len = 14+strlen(MessageData)/2;
temph = msg_len/10 + 0x30;
PortSendChar(GSM,temph);
templ = msg_len%10 + 0x30;
PortSendChar(GSM,templ);
PortSendChar(GSM,'\r');
do
{
i++;
disp_str(3,4,"step3");
if((strstr(rcv_buf,"ERROR")!=NULL)||(i>3000))
{
disp_str(3,18,"Send failure!");
EX0 = bit_temp;
return(1);
}
}while(strrchr(rcv_buf,'>') == NULL);
PortSendString(GSM,"0891683108200805F011000D91");
PortSendString(GSM,PhoneNo);
PortSendString(GSM,"0008AA");
PortSendString(GSM,MessageData);
delay(1);
PortSendChar(GSM,0x1A);
do
{
i++;
//PortSendChar(GSM,0x1A);
disp_str(3,4,"step4");
if((strstr(rcv_buf,"ERROR")!=NULL)||(i>0x7fff))
{
disp_str(3,18,"Send failure!");
EX0 = bit_temp;
return(1);
}
}while(strstr(rcv_buf,"+CMGS:")==NULL);
memset(rcv_buf,0,100);
rcv_buf_len = 0; //清空接收缓冲区
EX0 = bit_temp;
return(0);
}
*/
/*
函数名: uchar SendSMSTxtData(uchar *PhoneNo,uchar *MessageData)
功能: 发送文本模式的短信息到指定的接受方
参数: *PhoneNo :电话号码指针
MessageData :短信息数据指针。
返回值: 0 - 成功
1 - 数据发送失败
输入: 无
输出: 无
全局变量:
调用函数:
创建人: SunnyZ
创建日期: 2003-8-29
-----------------------------------------------------------------------------
修改日期:
描述:*/
void udelay(int us)
{
uint i,j;
for(i=0; i<100; i++)
{
for(j=0; j<us; j++)
{
}
}
}
uchar SendSmsTxtData(uchar *PhoneNo, uchar *MessageData)
{
uint idata i=0;
uchar * temp_p;
char Msg_buf[200];
char Msg_buf1[200];
char PhoneNo_buf[30];
/* bit bit_temp;
bit_temp = EX0;
EX0 = 0;*/
//memset(rcv_buf,0,100);
/* rcv_buf_len = 0;
memset(rcv_buf,0,INBUF_LEN); //清空接收缓冲区
PortSendString(GSM,"ATE0\r");
do
{
i++;
//disp_str(3,4,"step1");
if(i>3000)
{
EX0 = bit_temp;
putsLcd("ERROR0:ATE0!");
return(1);
}
}while(strstr(rcv_buf,"OK")==NULL);*/
rcv_buf_len = 0;
memset(rcv_buf,0,INBUF_LEN); //清空接收缓冲区
PortSendString(GSM,"AT+CSCS=\"UCS2\"\r");
do
{
i++;
//disp_str(3,4,"step1");
if(i>3000)
{
//EX0 = bit_temp;
//putsLcd("ERROR1:AT+CSCS!");
return(1);
}
}while(strstr(rcv_buf,"OK")==NULL);
rcv_buf_len = 0;
memset(rcv_buf,0,INBUF_LEN); //清空接收缓冲区
PortSendString(GSM,"AT+CSMP=17,167,0,25\r");
do
{
i++;
//disp_str(3,4,"step2");
if(i>3000)
{
//EX0 = bit_temp;
//putsLcd("ERROR2:AT+CSMP!");
return(1);
}
}while(strstr(rcv_buf,"OK")==NULL);
rcv_buf_len = 0;
memset(rcv_buf,0,INBUF_LEN); //清空接收缓冲区
PortSendString(GSM,"AT+CMGF?\r");
do
{
i++;
//disp_str(3,4,"step3");
if(i>3000)
{
//EX0 = bit_temp;
//putsLcd("ERROR3:AT+CMGF?!");
return(1);
}
}while(strstr(rcv_buf,"OK")==NULL);
i=0;
if (strstr(rcv_buf,"+CMGF:1")==NULL)
{
rcv_buf_len = 0;
memset(rcv_buf,0,INBUF_LEN); //清空接收缓冲区
PortSendString(GSM,"AT+CMGF=1\r");
do
{
i++;
//disp_str(3,4,"step4");
if(i>3000)
{
//EX0 = bit_temp;
//putsLcd("ERROR4:AT+CMGF=1");
return(1);
}
}while(strstr(rcv_buf,"OK")==NULL);
}
rcv_buf_len = 0;
memset(rcv_buf,0,INBUF_LEN);
PortSendString(GSM,"AT+CMGS=\"");
EncodePhoneNo(PhoneNo_buf,PhoneNo);
PortSendString(GSM,PhoneNo_buf);
PortSendString(GSM,"\"\r");
i = 0;
do
{
i++;
//disp_str(3,4,"step5");
if(i>3000)
{
//EX0 = bit_temp;
//putsLcd("ERROR5:AT+CMGS!");
return(1);
}
}while(strrchr(rcv_buf,'>') == NULL);
delay(1);
memset(Msg_buf,0,200);
memset(Msg_buf1,0,200);
format_nm(Msg_buf1,MessageData);
Nms_Unicode(Msg_buf,Msg_buf1);
//disp_str(3,4,"step6");
PortSendString(GSM,Msg_buf);
ScrGotoxy(0,10);
//putsLcd(Msg_buf);
//PortSendChar(GSM,0x0D);
/* delay(1);
memset(rcv_buf,0,100);
rcv_buf_len = 0; //清空接收缓冲区*/
//PortSendChar(GSM,0x1A);
i=0;
do
{
PortSendChar(GSM,0x1A);
udelay(500);
++i;
//disp_str(3,4,"step7");
if(i>10)
{
//EX0 = bit_temp;
//putsLcd("ERROR6:TIMEOUT!");
return(1);
}
}while(strstr(rcv_buf,"+CMGS:")==NULL);
memset(rcv_buf,0,INBUF_LEN);
rcv_buf_len = 0; //清空接收缓冲区
//EX0 = bit_temp;
return(0);
}
/*****************************************************************************
函数名: void EncodePhoneNo(uchar *PhoneNoDes, uchar *PhoneNoSrc)
功能: 将电话号码转换为UNICODE格式
参数: *PhoneNoDes :目标电话号码指针
*PhoneNoSrc :源电话号码指针
输入: 无
输出: 无
全局变量:
调用函数:
创建人: SunnyZ
创建日期: 2003-12-17
-----------------------------------------------------------------------------
修改日期:
描述:*/
void EncodePhoneNo(uchar *PhoneNoDes, uchar *PhoneNoSrc)
{
uchar idata i,j;
//uchar xdata *temp_p1;
// uchar xdata *temp_p2;
// temp_p2 = PhoneNoSrc;
memset(PhoneNoDes,0,30);
i = strlen(PhoneNoSrc);
for(j=0; j<i; j++)
{
strncat(PhoneNoDes,"003",3);
strncat(PhoneNoDes,PhoneNoSrc,1);
PhoneNoSrc++;
}
}
/*****************************************************************************
函数名: void DecodePhoneNo(uchar *PhoneNoDes, uchar *PhoneNoSrc)
功能: 将UNICODE格式电话号码转换为字符串
参数: *PhoneNoDes :目标电话号码指针
*PhoneNoSrc :源电话号码指针
输入: 无
输出: 无
全局变量:
调用函数:
创建人: SunnyZ
创建日期: 2003-12-17
-----------------------------------------------------------------------------
修改日期:
描述:*/
void DecodePhoneNo(uchar *PhoneNoDes, uchar *PhoneNoSrc)
{
uchar idata i,j;
//uchar xdata *temp_p1;
// uchar xdata *temp_p2;
// temp_p2 = PhoneNoSrc;
memset(PhoneNoDes,0,30);
i = strlen(PhoneNoSrc);
for(j=0; j<i; j++)
{
strncat(PhoneNoDes,"003",3);
strncat(PhoneNoDes,PhoneNoSrc,1);
PhoneNoSrc++;
}
}
/*****************************************************************************
函数名: void ConvertPhoneNo(uchar *PhoneNoDes, uchar *PhoneNoSrc)
功能: 将电话号码转换为PDU格式
参数: *PhoneNoDes :目标电话号码指针
*PhoneNoSrc :源电话号码指针
输入: 无
输出: 无
全局变量:
调用函数:
创建人: SunnyZ
创建日期: 2003-8-30
-----------------------------------------------------------------------------
修改日期:
描述:*/
void ConvertPhoneNo(uchar *PhoneNoDes, uchar *PhoneNoSrc)
{}
//==========================================================================
/*
函数名: uchar DeleteSMSData(int Index)
功能: 删除指定索引号的短信息。
参数: Index : 短信息的索引号。
返回值: 0 - 信息删除
1 - 错误
输入: 无
输出: 无
全局变量:
调用函数:
创建人: ldq
创建日期: 2003-8-26
-----------------------------------------------------------------------------
修改人:
修改日期:
描述:
*/
uchar DeleteSMSData(int Index)
{
bit bit_temp;
uint idata i=0;
bit_temp = EX0;
EX0 = 0;
memset(rcv_buf,0,100);
rcv_buf_len = 0; //清空接收缓冲区
PortSendString(1,"AT+CMGD=Index/n");
do
{
i++;
if(i>3000)
{
EX0 = bit_temp;
return(1);
}
}while(strstr(rcv_buf,"OK")==NULL);
memset(rcv_buf,0,100);
rcv_buf_len = 0; //清空接收缓冲区
EX0 = bit_temp;
return(0);
}
/*
函数名: uchar PowerOnGsm(void)
功能: 上电GSM模块,复位
返回值: 0 - 成功
1 - 失败
输入: 无
输出: 无
全局变量:
调用函数:
创建人: SunnyZ
创建日期: 2003-9-3
-----------------------------------------------------------------------------
修改人:
修改日期:
描述:
*/
bit PowerOnGsm(void)
{
uint i;
uchar *temp;
bit flag_temp;
flag_temp = EX0;
EX0 = 0;
PortOpen(GSM,"9600,n,1");
PortSendChar(GSM,0x0d);
PortSendChar(GSM,0x0d);
do
{
i++;
//temp = strstr(rcv_buf,"OK");
PortSendString(GSM,"AT\r");
udelay(30);
temp = strstr(rcv_buf, "OK");
if(!temp)
temp = strstr(rcv_buf, "ok");
/*if (i>3000)
{
EX0 = flag_temp;
return(1);
}*/
}while(temp == NULL);
if(InquierGSMSignal()==99)
{
EX0 = flag_temp;
return(1);
}
EX0 = flag_temp;
return(0);
}
void GsmDemo( void )
{
unsigned char xdata* temp_point;
unsigned int i=0;
bit com_OK;
clrScreenLcd();
PortOpen(GSM, "4800,n,1");
ES = 1;
if(!PowerOnGsm())
{
putsLcd("success!!!!");
}
else
{
putsLcd("error ocurr!!");
while(!TP_TOUCHED);
}
/*while(1)
{
clr_screen();
PortSendChar(GSM,"\r");
PortSendChar(GSM,"\r");
PortSendString(GSM,"AT\r");
receive_string(temp_point,6);
disp_str(i,1,temp_point);
i= i+6;
//disp_str(3,3,"Send OK!");
while(!TP_TOUCHED);
TP_TOUCHED = 0;
delay(1);
}*/
com_OK = 0;
ScrGotoxy(0, 1);
putsLcd("begin GSM!");
for(;;)
{
if(SendSmsTxtData("13708005393","中文短信试验")==0)
{
putsLcd("send ok!!!!!");
break;
}
else
putsLcd("send error!!!!!!");
memcpy(rcv_buf,'0',strlen(rcv_buf)); //缓冲区清零
while(!TP_TOUCHED);
TP_TOUCHED = 0;
delay(1);
}
ES = 0;
GSM_switch(OFF);
while(!TP_TOUCHED);
}
uchar SendPwd(char * szInpBuf, char *pwd)
{
char ret;
char dbgmsg[40];
ScrGotoxy(1, 1);
printfLcd("正在发送,请稍侯.....");
//putsLcd(szInpBuf);
PortOpen(GSM, "4800,n,1");
//putsLcd(pwd);
ES = 1;
if(PowerOnGsm())
{
putsLcd("error ocurr!!");
return 0;
}
//putsLcd(szInpBuf);
ret = 0;
while(1)
{
if(!SendSmsTxtData(szInpBuf, pwd))
{
ret = 1;
break;
}
else
putsLcd("send error!!!!!!");
delay(20);
}
delay(30);
ES = 0;
GSM_switch(OFF);
return ret;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -