野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9288|回复: 4

GSM模块自已弄了打电话界面,发出去错误

[复制链接]
发表于 2016-8-20 02:06:38 | 显示全部楼层 |阅读模式
本帖最后由 11kxmx 于 2016-8-20 09:07 编辑

该程序在触摸控制LED灯的基础上编写,但打电话时发出数据总是第5第6个字符出现错误如发电话号码123456, 收到出现如下字符串:发13569988792 出现如下错误:
char sendnum[14];//暂存电话号码的数组
char ATD[]="ATD";//拨号时用到的数组
void even_process(void){
                switch(even)
        {
                case E_BUTTON0:                                                                        //0                                                        
                strcat(sendnum,"0"); //字符串拼接
                                           LCD_Clear(10, 30, 180, 40, BLACK);//液晶屏上显示,显示正确
                                          LCD_DispStr3216(10,30,sendnum, RED);
                                                even = E_NULL;                        
                  break;
               
                case E_BUTTON1:                                                                                //1
                        strcat(sendnum,"1"); //字符串拼接
                                          LCD_Clear(10, 30, 180, 40, BLACK);
                                          LCD_DispStr3216(10,30,sendnum, RED);
                                                even = E_NULL;               
                     break;
               
                case E_BUTTON2:                                                                        //2
                                     strcat(sendnum,"2"); //字符串拼接
                                      LCD_Clear(10, 30, 200, 32, BLACK);
                                          LCD_DispStr3216(10,30,sendnum, RED);
                                                even = E_NULL;               
                     break;

        case E_BUTTONcall:                                                                                        //拨打电话
                                
                                strcat(sendnum,";");//字符串拼接,电话号码后面加引号
                                        strcat(ATD,sendnum); //字符串拼接,前面加 “ATD”
                                       printf("%s\n",ATD);                //串口发送出去
                                        even = E_NULL;               
                     break;        
                                
         case E_BUTTONlisten:                                         //接电话
                        printf("%s","ATA");                //发送“ata”
                  printf("\n");                //回车
                     even = E_NULL;
                     break;        
        主程序除了初始化之外,就是:
        Lcd_show_bmp(0, 0,"/shouji.bmp");//显手机界面的图片
        Lcd_GramScan(1);
         LCD_DispEnCh(10, 10, "请输入电话号码", RED);
                while(1)
                {
                        even_process();
                }
          尝试了115200波特率和9600波特率都是这样,并且用其它串口接收软件接收也不正常
接收计数不知是否正确,如 ATD123456加分号和换行是11个字符,但显示收到10个字符  


QQ截图20160820013337.jpg
QQ截图20160820013559.jpg
回复

使用道具 举报

 楼主| 发表于 2016-8-20 02:24:43 | 显示全部楼层
主界面如图:
shouji.JPG
回复 支持 反对

使用道具 举报

发表于 2016-8-20 08:59:53 | 显示全部楼层
char ATD[]="ATD";

这个语句的ATD数组要定义大点,不然你后面拼接的时候就溢出了,如
char ATD[20];
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-20 09:01:46 | 显示全部楼层
ATD123456;
十六进制显示是:
    41 54 44 31 01                       33 3f  36 3B  0A
即  A  T   D  1   SOH (文本开头)  3   ?  6  ;   LF(换行)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-20 09:24:56 | 显示全部楼层
flyleaf 发表于 2016-8-20 08:59
char ATD[]="ATD";

这个语句的ATD数组要定义大点,不然你后面拼接的时候就溢出了,如

真不愧管理员水平,修改后确实可以了,我想来想去理不出头绪
能否告诉输入错误时删除按钮的处理方法吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 05:43 , Processed in 0.044271 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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