找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2217|回復(fù): 2
收起左側(cè)

測(cè)距通過(guò)GSM模塊傳輸,基本實(shí)現(xiàn),能幫我實(shí)現(xiàn)打電話控制程序開(kāi)始運(yùn)行嗎?

[復(fù)制鏈接]
ID:409166 發(fā)表于 2019-12-5 07:12 | 顯示全部樓層 |閱讀模式
各位大神們好,我做了一個(gè)液位計(jì),通過(guò)GSM模塊傳輸距離,可以實(shí)現(xiàn)把測(cè)得的距離通過(guò)GSM模塊發(fā)到相應(yīng)手機(jī)上,現(xiàn)在的問(wèn)題是:
1、需要打電話給GSM模塊,然后控制程序開(kāi)始測(cè)距再發(fā)距離到手機(jī),可這一步就無(wú)法實(shí)現(xiàn)了‘
2、個(gè)人感覺(jué)出問(wèn)題的程序在下面這里:

                           if(strstr(Buffer_Uart0_Rec,"RING")!=NULL)         //停在這里等RING 出現(xiàn)         (發(fā)打電話控制)
                           {
                                     Uart1Sends("ATH\r\n");        //扣掉來(lái)電  ,
                                        DelaySec(1);
                                        clear_rec_data();
                                sendflag=1;
                           }
電話打通模塊后,扣掉來(lái)電無(wú)法實(shí)現(xiàn)。
3、記得3年前這個(gè)程序是我自己調(diào)試成功的,現(xiàn)在居然不行了,我是在沒(méi)法,急著用,請(qǐng)大什么幫著想想辦法,謝謝!


回復(fù)

使用道具 舉報(bào)

ID:409166 發(fā)表于 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改成自己對(duì)應(yīng)的腳。
//以下是你的51單片機(jī)的晶振大小
//#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

  
//以下是開(kāi)機(jī)后發(fā)送到手機(jī)的內(nèi)容,發(fā)送的號(hào)碼在程序中修改。       
uint rec_data_len_uart=0;    //標(biāo)記Buffer_Uart0接收數(shù)組
uchar idata Buffer_Uart0_Rec[25]={0};                 //Uart0中斷接收數(shù)組

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;
}


/*串行通訊中斷,收發(fā)完成將進(jìn)入該中斷*/
void Serial_interrupt() interrupt 4
{
    uchar temp_rec_data_uart0;       
        temp_rec_data_uart0 = SBUF;//讀取接收數(shù)據(jù)               
        RI=0;//接收中斷信號(hào)清零,表示將繼續(xù)接收                       
        Buffer_Uart0_Rec[rec_data_len_uart]=temp_rec_data_uart0;        //接收數(shù)據(jù)
        rec_data_len_uart++;
        if(rec_data_len_uart>24)
        {
                rec_data_len_uart=0;         //從頭開(kāi)始接收數(shù)據(jù)
        }       
  }


void Uart1Send(uchar c)
{
        SBUF=c;
        while(!TI);          //等待發(fā)送完成信號(hào)(TI=1)出現(xiàn)
        TI=0;       
}
//串行口連續(xù)發(fā)送char型數(shù)組,遇到終止號(hào)/0將停止
void Uart1Sends(uchar *str)
{
        while(*str!='\0')
        {
                SBUF=*str;
                while(!TI);        //等待發(fā)送完成信號(hào)(TI=1)出現(xiàn)
                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;
        }
       
}


//延時(shí)函數(shù)大概是1s鐘,不過(guò)延時(shí)大的話不準(zhǔn)...
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);//延時(shí)3秒
                   while(!hand("OK"));
                   clear_rec_data();

                   Uart1Sends("AT+CMGD=1,4\r\n"); //清除所有短信
                  DelaySec(2);//延時(shí)3秒
                  while(!hand("OK"));
                  clear_rec_data();
         
                   Uart1Sends("AT+CMGF=1\r\n");          //設(shè)置為文本模式
                   DelaySec(2);//延時(shí)3秒
                   while(!hand("OK"));
                   clear_rec_data();
         
                   Uart1Sends("AT+CNMI=2,1\r\n"); //設(shè)置來(lái)消息提示         "+CMTI"
                   DelaySec(2);//延時(shí)3秒
                   while(!hand("OK"));
                   clear_rec_data();
          
                   Uart1Sends("AT+CLIP=1\r\n");          //設(shè)置來(lái)電提示 RING
                   DelaySec(2);//延時(shí)3秒
                   while(!hand("OK"));
                   clear_rec_data();
           DelaySec(2);//延時(shí)3秒
       
        while (1)
    {          
                //if(strstr(Buffer_Uart0_Rec,"CMTI")!=NULL)         //停在這里等        CMTI 出現(xiàn)  (發(fā)短信控制)
                        //{  
                    //clear_rec_data();
                        //Uart1Sends("AT+CMGR=1\r\n");
                    //DelaySec(2);//延時(shí)3秒
                    //if(strstr(Buffer_Uart0_Rec,"open")!=NULL)
       
                           if(strstr(Buffer_Uart0_Rec,"RING")!=NULL)         //停在這里等RING 出現(xiàn)         (發(fā)打電話控制)
                           {
                                     Uart1Sends("ATH\r\n");        //摳掉來(lái)電
                                        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);//延時(shí)3秒
                    Uart1Sends("AT+CMGD=1,4\r\n"); //清除所有短信
                            DelaySec(2);//延時(shí)3秒
                    clear_rec_data();
                }
    }
}
回復(fù)

使用道具 舉報(bào)

ID:409166 發(fā)表于 2019-12-5 14:58 | 顯示全部樓層
有大神幫忙嗎?我出500個(gè)黑幣,真的,只要幫我調(diào)試成功就一定付。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表