OpenEdv-开源电子网

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

SIM800C的代码如何根据自己想要的功能改动

[复制链接]

3

主题

13

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2019-7-8
在线时间
27 小时
发表于 2019-9-1 19:30:54 | 显示全部楼层 |阅读模式
1金钱
原子哥的例程给的是用上位机控制SIM900A的打电话的功能,我现在想用单片机通过NRF检测数据,直接拨打指定电话号码,不需要手动的那种,在外部中断里检测到nrf的数据是对的就直接让SIM800C打指定的电话。但是SIM800C的C文件有点复杂,看了好久才明白了一部分需要改动的地方,但是我想实现的功能是拨打,不在程序中自动挂断,只能是对方先挂断,没弄明白让对方挂断后,这个状态怎么让单片机检测出来,或者说这个对方挂断的AT指令是多少,然后我给单片机发送怎么样的指令才能让它执行别的操作,我查了使用说明也没找到,下面是我改的一些程序,希望大神帮忙看看:
u8 sim800c_call_test(void)
{
        u8 key;
        u16 lenx;
        u8 callbuf[20];
        u8 pohnenumlen=0;        //oÅÂë3¤¶è,×î′ó15¸öêy
        u8 *p,*p1,*p2;
        u8 oldmode=0;
        u8 cmode=0;        //Ä£ê½
                                      //0:μè′y2|oÅ
                                      //1:2|oÅÖD
                    //2:í¨»°ÖD
                                      //3:½óêÕμ½à′μç
        u8 phone[11];
        phone[11]="13986428703";
        if(sim800c_send_cmd("AT+CTTSRING=0","OK",200))return 1;        //éèÖÃTTSà′μçéèÖÃ
        if(sim800c_send_cmd("AT+CTTSPARAM=20,0,50,70,0","OK",200))return 1;        //éèÖÃTTSéùòôÅäÖÃ
        if(sim800c_send_cmd("AT+CLIP=1","OK",200))return 1;        //éèÖÃà′μçÏÔê¾
        if(sim800c_send_cmd("AT+COLP=1","OK",200))return 2;        //éèÖñ»½DoÅÂëÏÔê¾
        p1=mymalloc(SRAMIN,20);                                                                //éêÇë20Ö±½óóÃóú′æ·ÅoÅÂë
        if(p1==NULL)return 2;       
        while(1)
        {
                delay_ms(10);
                if(USART3_RX_STA&0X8000)                //½óêÕμ½êy¾Y
                {
                        sim_at_response(0);
                        if(cmode==1||cmode==2)
                        {
                                if(cmode==1)if(sim800c_check_cmd("+COLP:"))cmode=2;        //2|oÅ3é1|
                                if(sim800c_check_cmd("NO CARRIER"))cmode=0;        //2|oÅê§°ü
                                if(sim800c_check_cmd("NO ANSWER"))cmode=0;        //2|oÅê§°ü
                                if(sim800c_check_cmd("ERROR"))cmode=0;                //2|oÅê§°ü
                        }
                        if(sim800c_check_cmd("+CLIP:"))//½óêÕμ½à′μç
                        {
                                cmode=3;
                                p=sim800c_check_cmd("+CLIP:");
                                p+=8;
                                p2=(u8*)strstr((const char *)p,"\"");
                                p2[0]=0;//ìí¼ó½áêø·û
                                strcpy((char*)p1,(char*)p);
                        }
                        USART3_RX_STA=0;
                }
                key=phone(pohnenumlen);
                if(key)
                {
                        if(pohnenumlen<11)
                        {
                                if(cmode==0&&pohnenumlen<15)
                                {
                                        callbuf[pohnenumlen++]=phone(pohnenumlen);
                                        u3_printf("AT+CLDTMF=2,\"%c\"\r\n",phone(pohnenumlen));
                                        delay_ms(55);//&#209;óê±ò&#187;&#207;&#194;
                                  u3_printf("AT+CTTS=2,\"%c\"\r\n",phone(pohnenumlen)); //TTSó&#239;ò&#244;       
                                }
                                else if(cmode==2)//í¨&#187;°&#214;D
                                {
                                        u3_printf("AT+CLDTMF=2,\"%c\"\r\n",phone(pohnenumlen));
                                        delay_ms(100);
                                        u3_printf("AT+VTS=%c\r\n",phone(pohnenumlen));
                                }
                        }else
                        {
                                if(pohnenumlen==11)//&#214;′DD2|o&#197;
                                {
                                        //2|o&#197;&#196;£ê&#189;
                                        callbuf[pohnenumlen]=0;                        //×&#238;oó&#188;óè&#235;&#189;áê&#248;·&#251;
                                        u3_printf("ATD%s;\r\n",callbuf);//2|o&#197;
                                        cmode=1;                                                //2|o&#197;&#214;D&#196;£ê&#189;
                                }
                                if(pohnenumlen==11)
                                {
                                        if(cmode==1)//2|o&#197;&#214;D&#196;£ê&#189;
                                        {
                                                sim800c_send_cmd("ATA","OK",200);//·¢&#203;íó|′e&#214;&#184;á&#238;
                                                //Show_Str(40+56,70,200,16,callbuf,16,0);
                                                cmode=2;
                                        }else
                                        {
                                                sim800c_send_cmd("ATH",0,0);//2&#187;1üóD&#195;&#187;óD&#212;úí¨&#187;°,&#182;&#188;&#189;áê&#248;í¨&#187;°
                                                break;//í&#203;3&#246;&#209;-&#187;·
                                        }
                                }
                        }
                        if(cmode==0)//&#214;&#187;óD&#212;úμè′y2|o&#197;&#196;£ê&#189;óDD§
                        {
                                callbuf[pohnenumlen]=0;
                                //LCD_Fill(40+56,70,239,70+16,WHITE);
                                Show_Str(40+56,70,200,16,callbuf,16,0);         
                        }                               
                }
                if((lenx%50)==0)LED0=!LED0;                                              
                lenx++;         
        }
        myfree(SRAMIN,p1);
        return 0;

}

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-9-2 02:24:25 | 显示全部楼层
你用串口的AT指令方式,先摸索一下SIM800C的使用,以及各种情况的反馈值,你就知道怎么搞了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-12 15:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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