我最近和同学在做一个GSM模块的项目,要求实现能自动发短信和打电话功能,用到了AT指令,求C程序?

2025-03-06 17:19:36
推荐回答(1个)
回答1:

  #include
  void send_ascii(unsigned char *b);
  void send_hex(unsigned char b);
  void delay(unsigned int);
  unsigned int c=0;
  sbit D=P3^5;
  void main()
  {

  P0=0X00;
  delay(300);
  TMOD=0x20; //定时器1--方式2
  TL1=0xfd;
  TH1=0xfd; //11.0592MHZ晶振,波特率为9600
  SCON=0x50; //方式1
  TR1=1; //启动定时

  while(1)
  {
  D=1;

  delay(100);
  D=0;
  P0=0XFE;
  //if(key1==1)
  //{
  if(c>5)
  { send_ascii("at");
  send_hex(0x0d);
  delay(100);
  send_ascii("at+cmgf=1");//以文本的形式发送
  send_hex(0x0d);
  delay(100);
  //send_ascii("at+csca=\"AT+CSCA=+8613800290500\"");//短信中心地址
  //send_hex(0x0d);
  //delay(100);
  send_ascii("at+cmgs=\"13408136925\"");//发送到指定号码
  send_hex(0x0d);
  send_ascii(" test ok.");
  send_hex(0x1a);
  send_hex(0x0d);
  P0=0XAA;
  delay(100);
  c=0;
  }
  c++ ;

  //}
  }
  }

  /**************************发送字符(ASCII码)函数*********************/
  void send_ascii(unsigned char *b)
  {
  for (b; *b!='\0';b++)
  {
  SBUF=*b;
  while(TI!=1);

  TI=0;
  }
  }

  /**************************发送字符(十六进制)函数*********************/

  void send_hex(unsigned char b)
  {
  SBUF=b;
  while(TI!=1) ;
  TI=0;
  }

  void delay(unsigned int delay_time) //延时子程序
  {
  for(;delay_time>0;delay_time--)
  {}
  }