📄 gsmv100.c
字号:
调用函数: 无
创建人: SunnyZ
创建日期: 2003-9-23
----------------------------------------------------------------------------
修改人:
修改日期:
描述:
*/
void Nms_Unicode(char *dent_buf, char *src_buf)
{
uint i,temp;
uint temp1;
char *temp2;
temp = strlen(src_buf)/2;
for(i=0; i<temp; i++)
{
temp1 = *(uint *)src_buf;
src_buf++;
src_buf++;
temp2 = Nm_Unicode(temp1);
strcat(dent_buf,temp2);
}
}
/*
函数名: Unicode_Nms(char *dent_buf, char *src_buf)
功能: 将一串unicode码转换为相应的机内码;
输入: 源串src_buf
输出: 目标串dent_buf
全局变量: GB_UnicodeData[],GB_UnicodeDataZF[][2];
调用函数: 无
创建人: SunnyZ
创建日期: 2003-9-23
----------------------------------------------------------------------------
修改人:
修改日期:
描述:
*/
void Unicode_Nms(char *dent_buf, char *src_buf)
{
uint i,temp;
uint temp1,temp2;
char templ,temph;
temp = strlen(src_buf)/2;
for(i=0; i<temp; i++)
{
temph = *src_buf;
src_buf++;
templ = *src_buf;
temp1 = templ+ temph*0x100;
temp2 = Unicode_Nm(temp1);
*dent_buf = temp2>>8;
dent_buf++;
*dent_buf = temp2;
dent_buf++;
src_buf++;
}
}
/*==========================================================================
函数名: uint half2full( char half_buf)
功能: 将半角的ASCII字符串转换为全角的机内码字符串,它们之间的关系为:机内码=0xA380+ASCII码
输入: ASCII码
输出: 机内码
全局变量:无
调用函数:无
创建人: SunnyZ
创建日期:2003-9-23
----------------------------------------------------------------------------
修改人:
修改日期:
描述:
*/
void half2full(char * full_buf, char * half_buf)
{
uint i,temp;
temp = strlen(half_buf);
for(i=0; i<temp; i++)
{
*full_buf = 0xa3;
full_buf++;
*full_buf = 0x80+(*half_buf);
full_buf++;
half_buf++;
}
}
/*==========================================================================
函数名: uint full2half( char *half_buf, char *full_buf)
功能: 将半角的ASCII字符串转换为全角的机内码字符串,它们之间的关系为:机内码=0xA380+ASCII码
输入: ASCII码
输出: 机内码
全局变量:无
调用函数:无
创建人: SunnyZ
创建日期:2003-9-23
----------------------------------------------------------------------------
修改人:
修改日期:
描述:
*/
void full2half(char * half_buf, char * full_buf)
{
uint i,temp;
temp = strlen(full_buf)/2;
for(i=0; i<temp; i++)
{
full_buf++;
*half_buf = *full_buf-0x80;
full_buf++;
half_buf++;
}
}
/*
函数名: uchar RecvGsmMsg(void)
功能: 接收来自GSM模块的数据
参数: 无
返回值: 99 - 失败或者无信号
其他值为信号强度。
输入: 无
输出: 无
全局变量:
调用函数:
创建人: ldq
创建日期: 2003-8-21
-----------------------------------------------------------------------------
修改人:
修改日期:
描述:
*/
uchar RecvGsmMsg(void)
{
uchar *temp;
//uchar xdata recv_buf[100];
//uchar idata i;
for(;;)
{
if(PortRecv(GSM,temp,10)==0x00)
{
PortSendChar(GSM, temp);
}
}
}
/*
函数名: uchar InquierGSMSignal(void)
功能: 查询GSM信号强度
参数: 无
返回值: 99 - 失败或者无信号
其他值为信号强度。
输入: 无
输出: 无
全局变量:
调用函数:
创建人: ldq
创建日期: 2003-8-21
-----------------------------------------------------------------------------
修改人:
修改日期:
描述:
*/
/*uchar InquierGSMSignal(void)
{
bit signal_OK = 0;
unsigned char * temp_point;
unsigned int i;
PortSendString(GSM,"AT+CSQ\n");
if(rcvend_flag)
{
rcvend_flag = 0;
temp_point = rcv_buf;
if(memcmp(temp_point,"\r\n+CME ERROR\r\n",14)!=0)
{
signal_OK = 1;
for(i=0;i<2;i++)
{
beep_switch(1);
delay(50);
beep_switch(0);
delay(100);
}
}
}
}
/*
函数名: uchar SetDestinationNo(uchar *DestinationNo)
功能: 设置目标号码
参数: DestinationNo :ASC码的数字字符串参数指针
返回值: 0 - 成功
1 - 数据格式错
输入: 无
输出: 无
全局变量:
调用函数:
创建人: ldq
创建日期: 2003-8-23
-----------------------------------------------------------------------------
修改人:
修改日期:
描述:
*/
/*uchar SetDestinationNo(void)
{
char ch;
unsigned int i;
if(nDstLength==13)
{
for(i=0;i<nDstLength;i+=2)
{
ch = *(DestinationNo++); // 保存先出现的字符
*(Changed_No++) = *(DestinationNo++); // 复制后出现的字符
*(Changed_No++) = ch; // 复制先出现的字符
}
*(Changed_No-2) = 'F'; // 补'F'
*Changed_No = '\0'; // 输出字符串加个结束符
return(0);
}
else
return(1);
}
*/
/*
函数名: uint Nm_Qm(*s)
功能: 将内码转化成区位码
输入: 无
输出: 无
全局变量:
调用函数:
创建人: ldq
创建日期: 2003-8-23
-----------------------------------------------------------------------------
修改人:
修改日期:
描述:
*/
/*uint Nm_Qm(unsigned char *s)
{
unsigned char qh,wh;
unsigned int i=0;
while(i<=Length)
{
qh = *(s) - 0xa0;
wh = *(s+1)- 0Xa0;
*qw = qh*0xff + wh;
*qw++;
i++;
}
}*/
/*
函数名: Qw_Unicode(uint Qw_Number)
功能: 将区位码转换为unicode码;
输入: 区位码(十六进制)
输出: unicode码(十六进制)
全局变量: GB_UnicodeData[],GB_UnicodeDataZF[][2];
调用函数: 无
创建人: Qianang
创建日期: 2003-6-16
----------------------------------------------------------------------------
修改人:
修改日期:
描述:
*/
/*uint Qw_Unicode(uint Qw_Number)
{
uint idata gbm;
uint i = 0;
gbm = Qw_Number + 0x2020; //区位码转换为国标码
//查询法得到unicode码值
while(1)
{
if(GB_UnicodeData[i][0] == gbm)
{
unicode = GB_UnicodeData[i][1];
break;
}
i++;
}
/*
//查询法得到unicode码值(仅非汉字字符)
if((gbm >= 0x2121) && (gbm <= 0x296f)
{
for(i = 0x0 ; GB_UnicodeDataZF[i][1] != 0x0 ; i++)
{
if(GB_UnicodeDataZF[i][0] == gbm)
{
break;
}
}
unicode =GB_UnicodeDataZF[i][1];
}
//直接根据数组标号得到unicode码值(汉字字符)
else
{
unicode = GB_UnicodeData[gbm - 0x3021]; //根据码表转换为unicode码(仅汉字)
}
*/
/* return(unicode);
}*/
/*
函数名: uchar SendSMSData(int Length,uchar *MessageData)
功能: 发送短信息到指定的接受方,接受方号码由"设置目标号码"函数设定。
参数: Length :短信息的数据字节数。
MessageData :短信息数据指针。
返回值: 0 - 成功
1 - 数据发送失败
输入: 无
输出: 无
全局变量:
调用函数:
创建人: ldq
创建日期: 2003-8-22
-----------------------------------------------------------------------------
修改日期:
描述:
*/
/*uchar SendSMSData(void)
{
unsigned char * temp_point;
unsigned char * ans_str0;
unsigned char Qw_Number;
unsigned char * s;
unsigned int i=0;
PortSendString(1,"AT+CMGF=0/n");
if(rcvend_flag)
{
rcvend_flag = 0;
temp_point = rcv_buf;
if(memcmp(temp_point,"\r\nOK\r\n",6)==0)
{
PortSendString(1,"AT+CMGS=Length");//输入UNICODE码的长度
PortSendString(1,"0891683108200805FO11000D9168"); //输入短消息内容PDU模
SetDestinationNo();
PortSendString(1,Changed_No);//输入对方的号码
Nm_Qm(MessageData);
while(i<=Length)
{
*s = *qw;
Qw_Number = *s;
Qw_Unicode(Qw_Number);
*s++;
i++;
}
ans_str0 = GB_UnicodeData;
PortSendString(1,"* ans_str0"); //输入短消息的内容
PortSendChar(1,"\x01a"); //输入结束字符
if(rcvend_flag)
{
rcvend_flag = 0;
temp_point = rcv_buf;
if(memcmp(temp_point,"\r\n+CME ERROR\r\n",14)!=0)
return(0);
else
return(1);
}
}
}
}
*/
/*
函数名: uchar InquierGSMSignal(void)
功能: 查询GSM信号强度
参数: 无
返回值: 99 - 失败或者无信号
其他值为信号强度。
输入: 无
输出: 无
全局变量:
调用函数:
创建人: ldq
创建日期: 2003-8-21
-----------------------------------------------------------------------------
修改人:
修改日期:
描述:
*/
uchar InquierGSMSignal(void)
{
bit bit_temp;
uchar *p;
uint idata a[2];
uint idata n;
uint idata i=0;
bit_temp = EX0;
EX0 = 0;
memset(rcv_buf,0,INBUF_LEN); //changed by lwd
rcv_buf_len = 0; //清空接收缓冲区
PortSendString(1,"AT+CSQ\r");
do
{
i++;
/*if(i>3000)
{
EX0 = bit_temp;
return(99);
}*/
p = strstr(rcv_buf, "+CSQ:");
if(!p)
p = strstr(rcv_buf, "+csq:");
}while( p == NULL);
//disp_str(3,14,p);
p++;
p++;
a[0] = *p;
p++;
a[1] = *p;
n = (a[0]-0x30)*10 + (a[1]-0x30);
memset(rcv_buf,0,INBUF_LEN);
rcv_buf_len = 0; //清空接收缓冲区
EX0 = bit_temp;
return(n);
}
/*
函数名: uchar SendSMSPduData(uchar *PhoneNo,uchar *MessageData)
功能: 发送PDU模式的短信息到指定的接受方
参数: *PhoneNo :电话号码指针
MessageData :短信息数据指针。
返回值: 0 - 成功
1 - 数据发送失败
输入: 无
输出: 无
全局变量:
调用函数:
创建人: SunnyZ
创建日期: 2003-8-30
-----------------------------------------------------------------------------
修改日期:
描述:*/
/*uchar SendSmsPduData(uchar *PhoneNo, uchar *MessageData)
{
uint idata i=0;
uchar msg_len;
uchar * temp_p;
bit bit_temp;
uchar temph,templ;
bit_temp = EX0;
EX0 = 0;
memset(rcv_buf,0,100);
rcv_buf_len = 0; //清空接收缓冲区
PortSendString(GSM,"AT+CMGF?\r");
do
{
i++;
disp_str(3,4,"step1");
if(i>3000)
{
EX0 = bit_temp;
return(1);
}
}while(strstr(rcv_buf,"OK")==NULL);
i=0;
if (strstr(rcv_buf,"+CMGF:0")==NULL)
{
memset(rcv_buf,0,100);
rcv_buf_len = 0;
PortSendString(GSM,"AT+CMGF=0\r");
do
{
i++;
disp_str(3,4,"step2");
if(i>3000)
{
EX0 = bit_temp;
return(1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -