有没有懂GSM程序的大佬,请帮我看一下这个单片机与GSM通信的程序

2019-07-15 08:05发布

这个程序是按郭天祥的改的,我使用的GSM模块通过串口助手调试是正常的,但是这个程序觉得是可以实现接打电话,发收短信的吧,

#include<reg52.h>
#include<stdio.h>
#include<string.h>

sbit key1=P0^0;  //拨打电话
sbit key2=P0^1;  //挂断电话
sbit key3=P0^2;  //接听电话
sbit key4=P0^3;  //发一条文本格式的信息
//sbit key5=P0^4;  //PDU格式
char code num[]="17803855150F";
char code sms[]="6E295EA6FF1A003300350043";//温度35°的PDU编码
char code str1[]="AT ";
char code str2[]="AT+CMGF=0 ";//PDUģʽ
char code str3[]="AT+CSCS=GSM ";  //ʹÓÃGSM×Ö·û¼¯
char code str4[]="AT+CSMP=17,167,0,8 ";
char code str5[]="AT+CMGS=";
//char code str6[]="0891683110901105F011000D9168";
char code str6[]="0891683110701605F011000D9168";//设置短信中心号码
char code str7[]="000800";

char code str8[]="AT ";
char code str9[]="AT+CMGF=1 ";//Îı¾Ä£Ê½
char code str10[]="AT+CSCS=GSM ";  //ʹÓÃGSM×Ö·û¼¯
char code str11[]="AT+CSMP=17,167,0,8 ";
char code str12[]="AT+CMGS=17803855150 ";
char code str13[]="Hello World";
char code str14[]="x1a";
//char code str15[]="ATE0 ";
//char code str16[]="AT+COPS? ";

void delay_ms(unsigned int time)
{
unsigned int i;
for(;time>0;time--)
{
  i=1500;
  while(i--);
}
}

void GSM_PDU_message(char num[],char sms[])
{
unsigned char i;
printf("%s",str1);  //%s±íʾֱ½ÓÊä³öµØÖ·
delay_ms(200);
//printf("%s",str15);
//delay_ms(200);
//printf("%s",str16);  
//delay_ms(200);
printf("%s",str2);
delay_ms(200);
printf("%s",str3);
delay_ms(200);
printf("%s",str4);
delay_ms(200);
printf("%s",str5);
printf("%d ",strlen(sms)/2+15); //¶ÌÐų¤¶ÈµÄ¼ÆËã
delay_ms(200);
printf("%s",str6);
for(i=0;i<6;i++)
    {
    printf("%c%c",num[2*i+1],num[2*i]);  //Ææżµ÷»»
   }
printf("%s",str7);
  printf("%02x",strlen(sms)/2);//ת³ÉÁ½Î»16½øÖÆÊý
printf("%sx1a",sms);//´òÓ¡16½øÖÆÊý1a
  delay_ms(200);   
}

void GSM_TEXT_message(void)
{
printf("%s",str8);
  delay_ms(200);
//printf("%s",str15);  //%s±íʾֱ½ÓÊä³öµØÖ·
// delay_ms(200);
//printf("%s",str16);  //%s±íʾֱ½ÓÊä³öµØÖ·
//delay_ms(200);
printf("%s",str9);
  delay_ms(200);
printf("%s",str10);
  delay_ms(200);
printf("%s",str11);
  delay_ms(200);
printf("%s",str12);
  delay_ms(200);
printf("%s",str13);
  delay_ms(200);
printf("%s",str14);
  delay_ms(200);

}

void GSM_CALL(unsigned char *num)
{
/*printf("%s",str15);  //%s±íʾֱ½ÓÊä³öµØÖ·
delay_ms(200);
printf("%s",str16);  //%s±íʾֱ½ÓÊä³öµØÖ·
delay_ms(200);*/
printf("ATD");
printf("%s; ",num);
delay_ms(100);
}

void GSM_HANG(void)
{
printf("ATH ");
delay_ms(100);
}

void GSM_ANSWER(void)
{
printf("ATAN");
delay_ms(100);
}

void ser_init(void)
{
SCON=0x50;//´®¿Ú·½Ê½1£¬ÔÊÐí·¢ËͺͽÓÊÕ
TMOD=0x20;//¶¨Ê±Æ÷1£¬Ä£Ê½2£¬8λ×Ô¶¯ÖØװģʽ
TH1=0xfd;
TL1=0xfd;//²¨ÌØÂÊΪ9600
TR1=1;
EA=1;
ES=1;
}

void main(void)
{
ser_init();
TI=1;
while(1);
{
  if(key1==0)
  {
   delay_ms(20);
   if(key1==0)
     {
      delay_ms(20);
       GSM_CALL(num);
    }
  }
  if(key2==0)
  {
   delay_ms(20);
   if(key2==0)
   {
    delay_ms(20);
    GSM_HANG();
   }
  }
    if(key3==0)
  {
   delay_ms(20);
   if(key3==0)
   {
    delay_ms(20);
    GSM_ANSWER();
   }
  }
/*    if(key5==0)
  {
    delay_ms(20);
   if(key5==0)
   {
    delay_ms(20);
     GSM_PDU_message(num,sms);
   }
  }*/
    if(key4==0)
  {
    delay_ms(20);
    if(key4==0)
    {
     delay_ms(20);
     GSM_TEXT_message();
    }
  }
}   
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。