|
发表于 2011-4-10 09:35:00
|
显示全部楼层
#include "main.h"
#include "SysTick.h"
#include "Serial.h"
#include "Delay.h"
#include "Watchdog.h"
#include "eeprom.h"
#include "GSM_V1.h"
#include "Ex_Isr.h"
#include "Sms.h"
const unsigned char code *SCA_FO_MR_DA = "0011000D9168";
const unsigned char code *SMS_parameter = "0008FF";
const char code Ctrl_z[] = {0x1A, 0x00};
const unsigned char code ASIIC[]=
{
'0', '1', '2', '3',
'4', '5', '6', '7',
'8', '9', 'A', 'B',
'C', 'D', 'E', 'F'
};
// 正常顺序的字符串转换为两两颠倒的字符串,若长度为奇数,补'F'凑成偶数
// 如:"8613851872468" --> "683158812764F8"
// pSrc: 待转换的源字符串指针
// pDst: 转换后的目标字符串指针
// nSrcLength: 等转换的源字符串长度
// 返回: 转换后的目标字符串长度,包含了字符串结束符'\0'的长度
unsigned char GsmInvertNumbers(unsigned char *pSrc, unsigned char *pDst, unsigned char nSrcLength)
{
unsigned char nDstLength; // 目标字符串长度
unsigned char ch; // 用于保存一个字符
unsigned char i;
nDstLength = nSrcLength; // 复制串长度
for (i=0; i<nSrcLength; i+=2) // 两两颠倒
{
ch = *pSrc++; // 保存先出现的字符
*pDst++ = *pSrc++; // 复制后出现的字符
*pDst++ = ch; // 复制先出现的字符
}
if (nSrcLength & 1) // 源串长度是奇数吗?
{
*(pDst-2) = 'F'; // 补'F'
nDstLength++; // 目标串长度加1
}
*pDst = '\0'; // 输出字符串加个结束符
return nDstLength; // 返回目标字符串长度,加上了'\0'的长度
}
/*
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// 测试ok
// 字节数据转换为可打印字符串
// 如:{0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01} --> "C8329BFD0E01"
// pSrc: 待转换的源数据指针
// pDst: 转换后存放目标字符串指针
// nSrcLength: 待转换的源数据长度,数据长度不能大于256个字节,从1开始
// 返回: 转换后的目标字符串长度 <=0xffff,带字符串结束符'\0'。
unsigned char GsmBytes2String(const unsigned char *pSrc, unsigned char *pDst, unsigned char nSrcLength)
{
unsigned char i;
const unsigned char code tab[] = "0123456789ABCDEF"; // 0x0-0xf的字符查找表
for (i=0; i<nSrcLength; i++)
{
*pDst = tab[pSrc >> 4]; // 输出高4位
pDst++;
*pDst = tab[pSrc & 0x0f]; // 输出低4位
pDst++; // 转换下一个十六进制字节
}
pDst++;
*pDst = '\0'; // 输出字符串加个结束符
return (nSrcLength * 2 + 1); // 返回目标字符串长度,带字符串结束符'\0'
}
*/
请注意:
const unsigned char code *SCA_FO_MR_DA = "0011000D9168";
const unsigned char code *SMS_parameter = "0008FF";
const char code Ctrl_z[] = {0x1A, 0x00};
例子:
AT+CMGF=0
OK
AT+CSCS="UCS2"
OK
AT+CMGS=065
> 0011000D91685192659365F90008FF325C0A656C76845BA26237FF0C60A876848F668F7D65FA65FA5DF288AB89E653D1FF0C8BF75C3D5FEB524D5F8067E5770BFF01
+CMGS: 98
OK |
|