短信自动回复老是发送不全啊,原子哥求助
/SIM900A读短信测试
void sim900a_sms_read_test(void)
{
u8 *p,*p1,*p2;
u8 timex=0;
u8 n;
u8 msgindex[3];
u8 msglen=0;
u8 msgmaxnum=0; //短信最大条数
u8 key=0;
u8 smsreadsta=0; //是否在短信显示状态
p=mymalloc(200);//申请200个字节的内存
LCD_Clear(WHITE);
POINT_COLOR=RED;
// while(1)
// {
if(sim900a_send_cmd("AT+CNMI=1","OK",200)==0)//读取短信
{
smsreadsta=1; //标记有显示短信内容
sim900a_sms_send_test();
}else
{
Show_Str(30,75,200,12,"无短信内容!!!请检查!!",12,0);
delay_ms(1000);
LCD_Fill(30,75,239,75+12,WHITE);//清除显示
}
USART1_RX_STA=0;
if((timex%20)==0)LED0=!LED0;//200ms闪烁
timex++;
delay_ms(10);
if(USART1_RX_STA&0X8000)sim_at_response(1);//检查从GSM模块接收到的数据
//}
myfree(p);
}
const u8* sim900a_test_msg="您好,这是一条测试短信 GSM模块发送,谢谢支持!";
//SIM900A发短信测试
void sim900a_sms_send_test(void)
{
u8 *p,*p1,*p2;
u8 phonebuf[20]="18896719575"; //号码缓存
u8 pohnenumlen=0; //号码长度,最大15个数
u8 timex=0;
u8 key=0;
u8 smssendsta=0; //短信发送状态,0,等待发送;1,发送失败;2,发送成功
p=mymalloc(100); //申请100个字节的内存,用于存放电话号码的unicode字符串
p1=mymalloc(300); //申请300个字节的内存,用于存放短信的unicode字符串
p2=mymalloc(100); //申请100个字节的内存 存放:AT+CMGS=p1
LCD_Clear(WHITE);
POINT_COLOR=RED;
Show_Str_Mid(0,30,"ATK-SIM900A 发短信测试",16,240);
Show_Str(30,50,200,16,"发送给:",16,0);
Show_Str(30,70,200,16,"状态:",16,0);
Show_Str(30,90,200,16,"内容:",16,0);
POINT_COLOR=BLUE;
Show_Str(30+40,70,170,90,"等待发送",16,0);//显示状态
Show_Str(30+40,90,170,90,(u8*)sim900a_test_msg,16,0);//显示短信内容
kbd_fn_tbl[0]="发送";
kbd_fn_tbl[1]="返回";
while(1)
{
if(smssendsta)
{
smssendsta=0;
Show_Str(30+40,70,170,90,"等待发送",16,0);//显示状态
}
Show_Str(30+40,70,170,90,"正在发送",16,0); //显示正在发送
smssendsta=1;
sim900a_unigbk_exchange(phonebuf,p,1); //将电话号码转换为unicode字符串
sim900a_unigbk_exchange((u8*)sim900a_test_msg,p1,1);//将短信内容转换为unicode字符串.
sprintf((char*)p2,"AT+CMGS=\"%s\"",p);
if(sim900a_send_cmd(p2,">",200)==0) //发送短信命令+电话号码
{
u2_printf("%s",p1); //发送短信内容到GSM模块
if(sim900a_send_cmd((u8*)0X1A,"+CMGS:",1000)==0)smssendsta=2;//发送结束符,等待发送完成(最长等待10秒钟,因为短信长了的话,等待时间会长一些)
}
if(smssendsta==1)Show_Str(30+40,70,170,90,"发送失败",16,0); //显示状态
else Show_Str(30+40,70,170,90,"发送成功",16,0); //显示状态
USART1_RX_STA=0;
// }
// if(key==15)break;
// }
phonebuf[pohnenumlen]=0;
LCD_Fill(30+54,50,239,50+16,WHITE);
Show_Str(30+54,50,156,16,phonebuf,16,0);
//}
if((timex%20)==0)LED0=!LED0;//200ms闪烁
timex++;
delay_ms(10);
if(USART1_RX_STA&0X8000)sim_at_response(1);//检查从GSM模块接收到的数据
}
myfree(p);
myfree(p1);
myfree(p2);
}
|