耗時5天從上位機的AT指令的學習熟練使用到用51單片機編程串口發送數據。好累。。。。
.jpeg)
.jpeg)
GSM_TC35I.h
#ifndef __GSM_TC35I_H__
#define __GSM_TC35I_H__
.jpeg)
.jpeg)
GSM_TC35I.h
#ifndef __GSM_TC35I_H__
#define __GSM_TC35I_H__
#define uchar unsigned char
#define uint unsigned int
#define uint unsigned int
sbit KEY1=P2^4; //按鍵1,撥打或掛斷電話
sbit KEY2=P2^5; //按鍵2,發送英文短信
sbit KEY3=P2^6; //按鍵3,發送中文短信
sbit KEY2=P2^5; //按鍵2,發送英文短信
sbit KEY3=P2^6; //按鍵3,發送中文短信
//*******************************1ms延時函數
void Delay_ms(uint time);
void Delay_ms(uint time);
//********************************串口初始化函數
void Serial_Init();
void Serial_Init();
//******************************TC35I打電話
void GSM_Call(uchar *str1);
void GSM_Call(uchar *str1);
//********************************TC35I發英文短信
void GSM_Text_Message(uchar *str1,uchar *str2,uchar *str3,uchar *str4);
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);
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"
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!"; //英文短信內容(這里修改英文短信內容)
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"; //中文短信內容(修改中文短信內容)
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 Delay_ms(uint time)
{
uint i;
for(;time>0;time--)
{
i=1500;
while(i--);
}
}
//********************************串口初始化函數
void Serial_Init()
{
SCON=0x50; //選擇工作方式1,能夠收到接收信號
PCON=0x00; //正常波特率
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);
}
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
}
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.*/
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"
#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[];
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);
}
}
}
}
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);
}
}
}
}