|
回复【2楼】 正点原子 :
回复【楼主位】 zzwdkxx :
---------------------------------
因为我要在电脑端,也可以通过usmart调用这个函数来发送数字啊. 你看我的注释:当cmd<0XFF的时候,发送数字(比如发送0X1A),大于的时候发送字符串.
就是通过cmd来判断是数字,还是字符串地址,因为是字符串地址,这里必定大于0XFF,比如0X20000200.
而第二个printf,就不用解释了吧?
---------------------------------
恩,懂了原子哥,非常感谢!我还有点问题哈,麻烦了,你的这个程序是自动加\n\r,我的这个mg323模块发送数据时必须要指明长度,所以我就把函数改了:
void mg323_gprs_send(u16 x,u16 y,u8 *text_to_send,u8 text_length)
{
u8 a[15];
u8 *p=a;
memset(p,0,15);
sprintf((char*)p,"AT^SISW=1,%c",text_length+48); // ”AT^SISW=1,n“为发送指令,n表示发送长度
USART2_RX_STA=0;
if(mg323_send_cmd(p,"^SISW",500))
{
LCD_ShowString(x,y+120,200,16,16,"Send failed:1!");
}
if(mg323_send_cmd(text_to_send,"^SISW",500)) //此命令会在数据后面加"\r\n",不过没有关系因为发送的数据限定在text_length个字节
{
LCD_ShowString(x,y+120,200,16,16,"Send failed:2!");
}else LCD_ShowString(x,y+120,200,16,16,"Text send is successed!");
}
这样一来我要读入这个长度,但是我发现sprintf((char*)p,"AT^SISW=1,%c",text_length+48);这个地方,长度必须要加48,然后范围必须是0-9,大于这个数就出现下面情况:
有没有什么办法可以把一个两位或三位数字合并到这个字符串里?向你学习下了!
我想到一种办法就是把你的发送函数改下,不要它自动发\n\r,先用u2_printf发 ”AT^SISW=1”, “再用mg323_send_cmd函数发送 长度,这样是可以的。
|