专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

GSM_TC35模块(打电话、发短信)(熟悉指令)(第一层)

作者:佚名   来源:本站原创   点击数:  更新时间:2014年04月10日   【字体:
耗时5天从上位机的AT指令的学习熟练使用到用51单片机编程串口发送数据。好累。。。。





GSM_TC35I.h
#ifndef __GSM_TC35I_H__
#define __GSM_TC35I_H__
#define uchar unsigned char
#define uint  unsigned int
sbit KEY1=P2^4;  //按键1,拨打或挂断电话
sbit KEY2=P2^5;  //按键2,发送英文短信
sbit KEY3=P2^6;  //按键3,发送中文短信
//*******************************1ms延时函数
void Delay_ms(uint time);
//********************************串口初始化函数
void Serial_Init();
//******************************TC35I打电话
void GSM_Call(uchar *str1);
//********************************TC35I发英文短信
void GSM_Text_Message(uchar *str1,uchar *str2,uchar *str3,uchar *str4);
//********************************TC35I发中文短信
void GSM_Pdu_Message(uchar *str3,uchar *str5,uchar *str6,uchar *str7,uchar *str8,uchar *str9,uchar *str10,uchar *str11);
#endif 

GSM_TC35I.c
#include <reg51.h>
#include <stdio.h>
#include <string.h>
#include "GSM_TC35I.h"
//打电话和TEXT格式短信
char code str1[]="13297961386";  //目标电话号码(这里修改目标手机号)
char code str2[]="AT+CMGF=1";  //TEXT格式短信
char code str3[]="AT+CMGS=";  //TEXT格式后接电话号码
char code str4[]="hi mazirong!"; //英文短信内容(这里修改英文短信内容)
//PDU格式短信
char code str5[]="AT+CMGF=0";  //PUD格式短信
char code str6[]="089168";  
char code str7[]="13010200500F"; //GSM_TC35I的短信中心号,(这里修改短信中心号)
char code str8[]="13297961386F"; //目标手机号(这里修改目标手机号)
char code str9[]="11000D9168";
char code str10[]="000800";      
char code str11[]="4E2D";   //中文短信内容(修改中文短信内容)
//*******************************1ms延时函数
void Delay_ms(uint time)
{
 uint i;
 for(;time>0;time--)
  {
    i=1500;
    while(i--);
  }
}
//********************************串口初始化函数
void Serial_Init()
{
 SCON=0x50;  //选择工作方式1,能够收到接收信号
 PCON=0x00;  //正常波特率
 TMOD=0x20;  //定时器1的工作方式3,8位自动重装计数
 TH1=0xFD;  //设定比特率为9600
 TL1=0xFD;
 TR1=1;   //启动定时器1
}
  
//******************************TC35I打电话
void GSM_Call(uchar *str1)    //str1[]="13297961386" 
{
 printf("ATD");
 printf("%s;\n",str1); 
}
//********************************TC35I发英文短信
void GSM_Text_Message(uchar *str1,uchar *str2,uchar *str3,uchar *str4)
{
 printf("%s\n",str2); //str2[]="AT+CMGF=1"
 Delay_ms(200);
 printf("%s",str3);  //str3[]="AT+CMGS="
 printf("%s\n",str1); //str1[]="13297961386"
 Delay_ms(200);
 printf("%s",str4);  //str4[]="hi mazirong!"
 printf("\x1a\n");  //箭头0x1A
}
//********************************TC35I发中文短信
void GSM_Pdu_Message(uchar *str3,uchar *str5,uchar *str6,uchar *str7,uchar *str8,uchar *str9,uchar *str10,uchar *str11)
{
 uchar i;
 printf("%s\n",str5); //str5[]="AT+CMGF=0"
 Delay_ms(200);
 printf("%s",str3);  //str2[]="AT+CMGS="
 printf("%d\n",strlen(str11)/2+15);
 Delay_ms(200);
 printf("%s",str6);  //str6[]="089168"
 for(i=0;i<6;i++)
  {
  printf("%c%c",str7[2*i+1],str7[2*i]); //str7[]="13010200500F"奇偶互换后变为3110202205F0 
  }
 printf("%s",str9);       //str9[]="11000D9168"
 for(i=0;i<6;i++)
  {
  printf("%c%c",str8[2*i+1],str8[2*i]); //str8[]="13297961386F"奇偶互换后变为3192971683F6
  }
 printf("%s",str10);  //str10[]="000800" 
 printf("%02x",strlen(str11)/2);  //str11[]="4E2D"短信内容长度/2,保留2位16进制数
 printf("%s\x1a\n",str11);  //和前一个printf组成例如024E2D+箭头(0x1A)
}

main.c 
             
/*
本程序的主要功能如下:
 1、给指定电话号码打电话、挂电话。
 2、给指定电话号码发送英文短信息
 3、给指定电话号码发送中文短信息
硬件接口定义:
 1、单片机采用STC89C52,晶振为11.0592
 2、P2.4; //按键1,拨打电话
 3、P2.5; //按键4,发送一条英文短信息
 4、P2.6; //按键5,发送一条中文短信息
请注意在本程序中TC35I模块内的SIM卡号码为:18675739034,目标手机号码为:13297961386.*/
#include <reg51.h>
#include "GSM_TC35I.h"
sbit BELL=P1^6;
extern uchar code str1[];
extern uchar code str2[];
extern uchar code str3[];
extern uchar code str4[];
extern uchar code str5[];
extern uchar code str6[];
extern uchar code str7[];
extern uchar code str8[];
extern uchar code str9[];
extern uchar code str10[];
extern uchar code str11[];
//*******************************主函数
void main()
{
 Serial_Init();
 TI=1;
 while(1)
 {
  if(KEY1==0)
   {
     Delay_ms(10); 
    if(KEY1==0)
     {
      BELL=0;
      Delay_ms(10);
      BELL=1;
      GSM_Call(str1);
      
     }
   }
  if(KEY2==0)
   {
     Delay_ms(10); 
    if(KEY2==0)
     {
      BELL=0;
      Delay_ms(10);
      BELL=1;
      GSM_Text_Message(str1,str2,str3,str4);
     }
   } 
  if(KEY3==0)
   {
     Delay_ms(10); 
    if(KEY3==0)
     {
      BELL=0;
      Delay_ms(10);
      BELL=1;
      GSM_Pdu_Message(str3,str5,str6,str7,str8,str9,str10,str11);
     }
   } 
  }
}
 
关闭窗口