#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define Phone 1 //正在打电话状态标志
#define Clear 0 //电话已挂断状态标志
sbit Phone_Call_Key=P3^4; //打电话按键
sbit Hang_up=P3^5; //挂电话按键
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
sbit led4=P1^3;
sbit led5=P1^4;
sbit Send_SMS_Text_key=P3^6; //发Text格式短信按键
sbit Send_SMS_PDU_key=P3^7; //发PDU格式短信按键
char Calls_State_Flag=Clear; //电话状态
uchar code PhoneCall[]="15150662372";
uchar code SMS_send[]= "AT+CMGS=";
uchar code SMS_TXET[]= "AT+CMGF=1";//发送数据为TXET格式
uchar code SMS_PDU[]= "AT+CMGF=0";//发送数据为PDU格式
uchar code Sms[]="I love you";
uchar code Sms1[]="The light is broken";
uchar code Byte_num[]="21";
char code Sms2_Pdu[]="0891683110301405F011000D91685159503063F9000800064F60597D0021"; //内容是:您好
void delay(uint ms)// 延时子程序
{
uchar i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
void Print_Char(uchar ch)//发送单个字符
{
SBUF=ch; //送入缓冲区
while(!TI); //等待发送完毕
TI=0; //软件清零
}
void Print_Str(uchar *str)//发送字符串
{
while(*str!='\0')
{
Print_Char(*str++);
}
}
void Ini_UART(void)//串口初始化、定时器初始化
{
TMOD = 0x20; //T1方式2,用于UART波特率
TH1 = 0xFD; //UART波特率设置:9600
TL1 = 0xFD;
SCON = 0x50; //UART方式1:8位UART; REN=1:允许接收
PCON = 0x00;
TF1 = 1; // 中断标志位
TR1 = 1; // 启动定时器1
ES=1; //启动串行口中断
ET0=1; //启动中断功能
EA=1;
}
void GSM_ATH()
{
Print_Str("ATH"); //发送挂电话指令
Print_Str("\r\n"); //发送回车
delay(1000);
delay(1000);
}
void phone() //打电话函数
{
Print_Str("ATD");
Print_Str(PhoneCall); //发送打电话指令+目标电话号码
Print_Char(';');
Print_Str("\r\n");
led2=0;
delay(5000);
delay(5000);
}
void GSM_TEXT() //设置GSM为TEXT格式
{
Print_Str(SMS_TXET); //发送设置指令
Print_Str("\r\n"); //发送回车
ES=1;
delay(3000);
}
void GSM_TEXT_SMS() //发送TEXT格式内容
{
Print_Str(SMS_send);
Print_Str(PhoneCall);
Print_Str("\r\n");
delay(1000);
Print_Str(Sms1);
Print_Char(0x1a); //发送短息内容结束符对应的ASCII为0x1a
ES=1;
delay(1000);
delay(5000);
}
void GSM_PDU() //设置GSM为PDU格式
{
Print_Str(SMS_PDU); //发送设置指令
Print_Str("\r\n"); //发送回车
ES=1;
delay(1000);
delay(1000);
delay(1000);
}
void GSM_PDU_SMS() //发送PDU格式内容
{
Print_Str(SMS_send);
Print_Str(Byte_num);
Print_Str("\r\n"); //发送回车
Print_Str(Sms2_Pdu);
Print_Char(0x1a); //发送短息内容结束符对应的ASCII为0x1a
ES=1;
delay(1000);
delay(5000);
}
void main()
{
Ini_UART();
led5=0;
delay(5000);
while(1)
{
if(!Hang_up)
{
led2=1;
GSM_ATH(); //发送挂电话指令
Calls_State_Flag=Clear;
led1=1;
}
if((!Phone_Call_Key)&&(Calls_State_Flag==Clear))
{
phone(); //拨打电话
Calls_State_Flag=Phone;
led1=0;
}
if((!Send_SMS_Text_key)&&(Calls_State_Flag==Clear))
{
led3=0;
GSM_TEXT();
GSM_TEXT_SMS();
led3=1;
}
if((!Send_SMS_PDU_key)&&(Calls_State_Flag==Clear))
{
led4=0;
GSM_PDU();
GSM_PDU_SMS();
led4=1;
}
}
}
我用的是华为GTM900-C 注意波特率的设置