OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3636|回复: 4

有关SIM900A 发送中文短信的问题(谁帮我解决我给谁发微信红包)

[复制链接]

6

主题

15

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2016-2-11
在线时间
12 小时
发表于 2016-6-10 10:24:28 | 显示全部楼层 |阅读模式
8金钱
u8 sim900a_sms_test(u8* msisdn,u8 *MessageContent)
{
  u8 status=0;
  u8 *p1,*p2;
  char cmd[20];
  p1=mymalloc(SRAMIN,100);//申请100个字节的内存,用于存放电话号码
  p2=mymalloc(SRAMIN,300);//申请300个字节的内存,用于存放短信的unicode字符串
  status=sim900a_check_status();
  if(status) return status;
  if(sim900a_send_cmd("AT+CMGF=1","OK",200))return 4;    //设置文本模式
  if(sim900a_send_cmd("AT+CSCS=\"UCS2\"","OK",200))return 5;//设置TE字符集为UCS2
    printf("n%s\r\n",MessageContent);
    sim900a_unigbk_exchange(msisdn,p1,1);                //将电话号码转换为unicode字符串
sim900a_unigbk_exchange((u8*)MessageContent,p2,1);//将短信内容转换为unicode字符串.
   printf("M%s\r\n",p2);
      sprintf((char*)cmd,"AT+CMGS=\"%s\"",p1);//命令格式:AT+CMGS="XXX"
      if(sim900a_send_cmd((u8*)cmd,">",200))return 6;    //设置短消息文本模式参数
      u3_printf("%s",p2);
                                                                                                   //发送短信内容到GSM模块
      if(sim900a_send_cmd((u8*)0X1A,"+CMGS:",1000)) return 7;//发送结束符
   
    myfree(SRAMIN,p1);
    myfree(SRAMIN,p2);
    return 0;
}
参照原子哥,给的程序的简易代码,我对此进行修改,想通过传递手机号和短信内容字符串,来实现短信的发送,但是遇到了问题。 发送的短信汉字不能显示 数字能正常显示,我在 汉字转码前,和转码后,进行字符串的打印,发现 GBK码 转汉字码,好像是有点问题。 求大神帮助,如何将双字节汉字,直接转化为unicode 码 ,求顶!!!!!!!!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2015-12-12
在线时间
20 小时
发表于 2016-6-10 11:56:47 | 显示全部楼层
本帖最后由 HanShort 于 2016-6-10 11:57 编辑

[mw_shl_code=c,true]u8 sim900a_SendMsg(char *PhoneNum,char *Info)
{
        u8 smssendsta = 1;
        u8 *P,*P1,*P2;
        P = mymalloc(SRAMIN,48);
        P1 = mymalloc(SRAMIN,256);
        P2 = mymalloc(SRAMIN,64);
        sim900a_unigbk_exchange((u8*)PhoneNum,P,1);//将电话号码转换为unicode字符串
        sim900a_unigbk_exchange((u8*)Info,P1,1);//将短信内容转换为unicode字符串.
        sprintf((char*)P2,"AT+CMGS=\"%s\"",P);
        if(sim900a_send_cmd(P2,(u8*)">",200)==0)//发送短信命令+电话号码
        {                                                                                                                                                            
                u2_printf("%s",P1);//发送短信内容到GSM模块
                if(sim900a_send_cmd((u8*)0X1A,(u8*)"+CMGS:",1000)==0)smssendsta=2;//发送结束符,等待发送完成(最长等待10秒钟,因为短信长了的话,等待时间会长一些)
        }
        USART2_RX_STA=0;               
        myfree(SRAMIN,P);
        myfree(SRAMIN,P1);
        myfree(SRAMIN,P2);
        return smssendsta;
}[/mw_shl_code]
use IEEE.STD_LOGIC_1164.ALL;
回复

使用道具 举报

115

主题

548

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2104
金钱
2104
注册时间
2013-11-27
在线时间
518 小时
发表于 2016-6-10 14:13:06 | 显示全部楼层
发多少  哈哈 我帮你搞定
回复

使用道具 举报

6

主题

15

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2016-2-11
在线时间
12 小时
 楼主| 发表于 2016-6-11 10:37:50 | 显示全部楼层
wmh19910511 发表于 2016-6-10 14:13
发多少  哈哈 我帮你搞定

大神,帮忙看一下我的函数,有没有问题啦。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-6-11 19:33:42 | 显示全部楼层
sim900a_unigbk_exchange这个函数的基础,是需要有FATFS,且 UNIGBK码表要正常。你既然知道是这个函数问题,就去仿真进去找问题就是了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-7 23:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表