单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 90|回复: 2
打印 上一主题 下一主题
收起左侧

测距通过GSM模块传输,基本实现,能帮我实现打电话控制程序开始运行吗?

[复制链接]
跳转到指定楼层
楼主
canghaiyisuMF 发表于 2019-12-5 07:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大神们好,我做了一个液位计,通过GSM模块传输距离,可以实现把测得的距离通过GSM模块发到相应手机上,现在的问题是:
1、需要打电话给GSM模块,然后控制程序开始测距再发距离到手机,可这一步就无法实现了‘
2、个人感觉出问题的程序在下面这里:

                           if(strstr(Buffer_Uart0_Rec,"RING")!=NULL)         //停在这里等RING 出现         (发打电话控制)
                           {
                                     Uart1Sends("ATH\r\n");        //扣掉来电  ,
                                        DelaySec(1);
                                        clear_rec_data();
                                sendflag=1;
                           }
电话打通模块后,扣掉来电无法实现。
3、记得3年前这个程序是我自己调试成功的,现在居然不行了,我是在没法,急着用,请大什么帮着想想办法,谢谢!


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 顶 踩
沙发
 楼主| canghaiyisuMF 发表于 2019-12-5 07:12 | 只看该作者
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
#include <string.H>
#define uchar unsigned char
#define uint unsigned int

//以下是板子上LED的配置,把Px_x改成自己对应的脚。
//以下是你的51单片机的晶振大小
//#define FOSC_110592M
//#define FOSC_12M
sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
sbit P14=P1^4;
sbit P15=P1^5;

sbit  ECHO=P2^4; //RX
sbit  TRIG=P2^5; //TX

  
//以下是开机后发送到手机的内容,发送的号码在程序中修改。       
uint rec_data_len_uart=0;    //标记Buffer_Uart0接收数组
uchar idata Buffer_Uart0_Rec[25]={0};                 //Uart0中断接收数组

uchar a[4];               
uint  time=0;
uint S=0;
bit  flag =0;

uint Count()
{
         uint num;
         time=TH0*256+TL0;
         TH0=0;
         TL0=0;
         num=time/53;     
         return num;
}

void zd0() interrupt 1  
{
  flag=1;
}


void  StartModule()   
  {
   TRIG=1;
   _nop_();  _nop_();    _nop_();    _nop_();    _nop_();
   _nop_();   _nop_();    _nop_();    _nop_();   _nop_();
   _nop_();   _nop_();    _nop_();   _nop_();   _nop_();
   _nop_();   _nop_();   _nop_();   _nop_();   _nop_();
   _nop_();
  TRIG=0;
  }


void UartInit(void)               
{
        //PCON &= 0x7F;       
        SCON = 0x50;       
        TMOD &= 0x00;       
        TMOD |= 0x21;       
        TL1 = 0xFD;       
        TH1 = 0xFD;       
        TH0=0;
        TL0=0;         
        ET0=1;
//        ET1 = 1;       
        TR1 = 1;
        EA=1;
        ES=1;
}

bit hand(unsigned  char *ptr)
{
        if(strstr(Buffer_Uart0_Rec,ptr)!=NULL)
                return 1;
        else
                return 0;
}
void clear_rec_data()
{
        uchar i,temp_len;
        temp_len=strlen(Buffer_Uart0_Rec);
        if(temp_len>25)
        {
                temp_len=25;
        }
        for(i=0;i<temp_len;i++)
        {
                Buffer_Uart0_Rec[i]='\0';       
        }
        rec_data_len_uart=0;
}


/*串行通讯中断,收发完成将进入该中断*/
void Serial_interrupt() interrupt 4
{
    uchar temp_rec_data_uart0;       
        temp_rec_data_uart0 = SBUF;//读取接收数据               
        RI=0;//接收中断信号清零,表示将继续接收                       
        Buffer_Uart0_Rec[rec_data_len_uart]=temp_rec_data_uart0;        //接收数据
        rec_data_len_uart++;
        if(rec_data_len_uart>24)
        {
                rec_data_len_uart=0;         //从头开始接收数据
        }       
  }


void Uart1Send(uchar c)
{
        SBUF=c;
        while(!TI);          //等待发送完成信号(TI=1)出现
        TI=0;       
}
//串行口连续发送char型数组,遇到终止号/0将停止
void Uart1Sends(uchar *str)
{
        while(*str!='\0')
        {
                SBUF=*str;
                while(!TI);        //等待发送完成信号(TI=1)出现
                TI=0;
                str++;
        }
}

void send(void)
{
        uchar j;
        S=Count();
        a[0]=(S/100)+'0';
        a[1]=(S%100/10)+'0';
        a[2]=(S%10)+'0';
        a[3]='\0';
        for(j=0;a[j]!='\0';j++)
        {
                SBUF=a[j];
                while(!TI);
                TI=0;
        }
       
}


//延时函数大概是1s钟,不过延时大的话不准...
void DelaySec(int sec)
{
        uint i , j= 0;
        for(i=0; i<sec; i++)
        {
                for(j=0; j<65535; j++)
                {       
                }
        }
}





void main()
{
        uchar i = 0;
        bit sendflag=0;
        UartInit();
        DelaySec(10);
        P14=1;  
   
               Uart1Sends("AT\r\n");
                   DelaySec(2);//延时3秒
                   while(!hand("OK"));
                   clear_rec_data();

                   Uart1Sends("AT+CMGD=1,4\r\n"); //清除所有短信
                  DelaySec(2);//延时3秒
                  while(!hand("OK"));
                  clear_rec_data();
         
                   Uart1Sends("AT+CMGF=1\r\n");          //设置为文本模式
                   DelaySec(2);//延时3秒
                   while(!hand("OK"));
                   clear_rec_data();
         
                   Uart1Sends("AT+CNMI=2,1\r\n"); //设置来消息提示         "+CMTI"
                   DelaySec(2);//延时3秒
                   while(!hand("OK"));
                   clear_rec_data();
          
                   Uart1Sends("AT+CLIP=1\r\n");          //设置来电提示 RING
                   DelaySec(2);//延时3秒
                   while(!hand("OK"));
                   clear_rec_data();
           DelaySec(2);//延时3秒
       
        while (1)
    {          
                //if(strstr(Buffer_Uart0_Rec,"CMTI")!=NULL)         //停在这里等        CMTI 出现  (发短信控制)
                        //{  
                    //clear_rec_data();
                        //Uart1Sends("AT+CMGR=1\r\n");
                    //DelaySec(2);//延时3秒
                    //if(strstr(Buffer_Uart0_Rec,"open")!=NULL)
       
                           if(strstr(Buffer_Uart0_Rec,"RING")!=NULL)         //停在这里等RING 出现         (发打电话控制)
                           {
                                     Uart1Sends("ATH\r\n");        //抠掉来电
                                        DelaySec(1);
                                        clear_rec_data();
                                sendflag=1;
                           }
       
                if (sendflag==1)
                {
                        sendflag=0;
                    StartModule();
                    while(!ECHO);  
                    TR0=1;      
                    while(ECHO);   
                    TR0=0;   
           // S=Count();
                clear_rec_data();               
                        Uart1Sends("AT+CSCS=\"GSM\"\r\n");
                        DelaySec(1);
                        Uart1Sends("AT+CMGF=1\r\n");
                        DelaySec(1);
                        Uart1Sends("AT+CSCA?\r\n");
                        DelaySec(1);
                        Uart1Sends("AT+CSMP=17,167,0,241\r\n");
                        DelaySec(1);
                        Uart1Sends("AT+CMGS=\"13012345678\"\r\n");
                        DelaySec(1);
                        send();
                        Uart1Send(0x1a);
                        DelaySec(10);
                        clear_rec_data();
                    DelaySec(1);//延时3秒
                    Uart1Sends("AT+CMGD=1,4\r\n"); //清除所有短信
                            DelaySec(2);//延时3秒
                    clear_rec_data();
                }
    }
}
板凳
 楼主| canghaiyisuMF 发表于 2019-12-5 14:58 | 只看该作者
有大神帮忙吗?我出500个黑币,真的,只要帮我调试成功就一定付。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|单片机论坛 |51黑电子论坛技术交流 管理员QQ:125739409;技术交流QQ群636986012

Powered by 单片机教程网

快速回复 返回顶部 返回列表
彩票赔率高的平台 掌上彩票开户 江苏快3玩法 澳门最有名彩票网站 江苏快3开户 PK10哪个平台赔率高 哪个彩票平台赔率最高 澳门最有名彩票网站 江苏快三遗漏 PK10哪个平台赔率高