找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3360|回复: 3
打印 上一主题 下一主题
收起左侧

GSM模块TC35I手机模块测试程序

[复制链接]
跳转到指定楼层
楼主
ID:117849 发表于 2016-5-1 19:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/**********************************************************
                  TC35I手机模块测试程序1            
程序功能:1、打电话。                       
          2、接电话。                        
          3、挂电话。                       
          4、发送英文和中文信息。

单片机型号:STC10F08XE    晶振:11.0592M

应用软件:Keil2或Keil3                                               
                                                                                                                                       
发布时间:2010-04-20

说    明:若用于商业用途,请保留此段文字或注明代码来源
               
              天祥电子有限公司保留所有版权

作    者:陈志良            
**********************************************************/
#include<reg51.h>
#include<string.h>
#include<stdio.h>

//#define buf_max 72//定义缓存长度为72
sbit KEY1 = P0^0; //按键1,拨打电话
sbit KEY2 = P0^1; //按键2,挂断电话
sbit KEY3 = P0^2; //按键3,接听电话
sbit KEY4 = P0^3; //按键4,发送一条英文短信息
sbit KEY5 = P0^4; //按键5,发送一条中文短信息
//sbit LED1 = P2^0; //第一个指示灯
//sbit LED2 = P2^1; //第二个指示灯
//sbit LED3 = P2^2; //第三个指示灯
//sbit LED4 = P2^3; //第四个指示灯
//sbit IGT = P2^4;  //点火信号线
//unsigned char code trec_buf[buf_max];//定义接收缓存
char code num[]="13101601289F";  //定义要拨打的电话号码,拨打其它电话在这时修改
char code sms[]="6E295EA6FF1A003300350043";   //"温度:35C"的Unicode码,发送其它中文,可在这里修改

char code str1[]="AT\n";             //定义字符串1
char code str2[]="AT+CMGF=0\n";      //定义字符串2
char code str3[]="AT+CSCS=GSM\n";    //定义字符串3
char code str4[]="AT+CSMP=17,167,0,8\n";    //定义字符串4
char code str5[]="AT+CMGS=";                //定义字符串5
char code str6[]="0891683110901105F011000D9168";   //定义字符串6
char code str7[]="000800";                         //定义字符串7

char code str8[]="AT\n";             //定义字符串8
char code str9[]="AT+CMGF=1\n";      //定义字符串9
char code str10[]="AT+CSCS=GSM\n";   //定义字符串10
char code str11[]="AT+CSMP=17,167,0,0\n";     //定义字符串11
char code str12[]="AT+CMGS=13101601289\n";    //定义字符串12
char code str13[]="Hello world!!";            //定义字符串13
char code str14[]="\x1a";                     //定义字符串14

void Serial_Init(void);     //声明串口初始化函数
void GSM_Call(unsigned char *num);   //声明拨打指定电话函数
void GSM_Hang(void);                 //声明挂电话函数
void GSM_Answer(void);               //声明接电话函数
void Delay_ms(unsigned int time);    //声明延时函数
void GSM_Sent_Text_Message(void);    //声明给指定号码发送TEXT模式短信息函数
void GSM_Sent_PDU_Message(char num[],char sms[]);    //声明给指定号码发送PDU模式短信息函数

/********************************主函数********************************/
/*函数原型:void main(void)
/*函数功能:主函数
/*输入参数:无
/*输出参数:无
/**********************************************************************/
void main(void)
{
         Serial_Init();        //调用串口初始化函数
        TI = 1;
        while(1)
                {

                    if(KEY1==0)                //如果是按键1按下,则给13101601289 这个号码打电话                 
                                {   
                                 Delay_ms(20);
                                 while(KEY1==0);            
                                    {        
                                            Delay_ms(20);
                                            GSM_Call(num);
                                        }
                                }
                        
                    if(KEY2==0)                //如果是按键2按下,则挂断电话
                                {   
                                   Delay_ms(20);
                                   while(KEY2==0);
                                        {        
                                                Delay_ms(20);
                                            GSM_Hang();
                                        }
                                }
                    if(KEY3==0)                //如果是按键3按下,则接听电话
                                {   
                                   Delay_ms(20);
                                   while(KEY3==0);
                                        {        
                                                Delay_ms(20);
                                            GSM_Answer();
                                        }
                                }        
                        if(KEY4==0)                //如果是按键4按下,则向13101601289 发送一条英文信息
                                {   
                                   Delay_ms(20);
                                   while(KEY4==0);
                                        {        
                                                Delay_ms(20);
                                         GSM_Sent_Text_Message();
                                        }
                                }               
                        if(KEY5==0)                //如果是按键5按下,则向13101601289 发送一条中文信息
                                {   
                                   Delay_ms(20);
                                   while(KEY5==0);
                                        {        
                                                Delay_ms(20);
                                            GSM_Sent_PDU_Message(num,sms);
                                        }
                                }
                }
}

/***************************串口初始化函数*****************************/
/*函数原型:void Serial_Init(void)
/*函数功能:串口初始化
/*输入参数:无
/*输出参数:无
/**********************************************************************/
void Serial_Init(void)//串口初始化函数
{
SCON = 0x50;//串口:方式1,允许发送和接收
TMOD = 0x20;//定时器1:模式2,8位自动重装模式,用于产生波特率   
TH1 = 0xFD; //11.0592MHZ晶振,波特率为9600
TL1 = 0xFD;   
TR1 = 1;    //开启定时器1   
//ES = 1;     //开启串口中断
//EA = 1;     //开启全局中断
}

/****************************串口中断处理函数**************************/
/*函数原型:void Serial_Int(void)
/*函数功能:串口中断处理
/*输入参数:无
/*输出参数:无
/**********************************************************************/
void Serial_Int() interrupt 4
{        
        ES=0;         //关串口中断,防止中断嵌套
        if(TI)         //如果是发送中断,则不做任何处理
                {
                        TI = 0;  //清除发送中断标志位
                }
        if(RI)         //如果是接送中断,则进行处理
                {        
                        RI = 0; //清除接收中断标志位
                }
        ES = 1;         //开启串口中断
}
/****************************time ms延时函数***************************/
/*函数原型:Delay_ms(unsigned int time)
/*函数功能:延时time ms
/*输入参数:time
/*输出参数:无
/**********************************************************************/
void Delay_ms(unsigned int time)
{
unsigned int i;
for(;time>0;time--)
         {
                  i=1500;
                  while(i--);
         }
}

/****************************拨打指定电话函数**************************/
/*函数原型: GSM_Call(unsigned char *num)
/*函数功能:拨打指定电话
/*输入参数:num
/*输出参数:无
/**********************************************************************/
void GSM_Call(unsigned char *num)
{
printf("ATD");
printf("%s;\n",num);
Delay_ms(100);
}
/*********************************挂机函数*****************************/
/*函数原型: void GSM_Hang(void)
/*函数功能:挂断电话
/*输入参数:无
/*输出参数:无
/**********************************************************************/
void GSM_Hang(void)
{
printf("ATH\n");
Delay_ms(100);
}
/********************************接电话函数****************************/
/*函数原型: void GSM_Answer(void)
/*函数功能:接听电话
/*输入参数:无
/*输出参数:无
/**********************************************************************/
void GSM_Answer(void)
{
printf("ATA\n");
Delay_ms(100);
}
/***********************给指定号码发送TEXT模式短信*********************/
/*函数原型:GSM_Sent_Text_Message(void)
/*函数功能:给指定号码发送英文短信息。num[]=接收端号码
/*输入参数:无
/*输出参数:无
/**********************************************************************/
void GSM_Sent_Text_Message(void)
{
printf("%s",str8);                           //以下几个为GSM的AT串口指令,设置短信发送类型
Delay_ms(200);         
printf("%s",str9);                    //设置为TEXT模式,适合发送短信内容为英文
Delay_ms(200);
printf("%s",str10);                  //使用GSM字符集
Delay_ms(200);
printf("%s",str11);            //设置TEXT模式参数
Delay_ms(200);
printf("%s",str12);           //设置接收端电话号码
Delay_ms(200);
printf("%s",str13);                   //具体发送的内容在此修改
printf("%s",str14);                            //结束符,相当于键盘的CTRL+Z
Delay_ms(200);
}

/***********************给指定号码发送PDU模式短信*********************/
/*函数原型:GSM_Sent_PDU_Message(void)
/*函数功能:给指定号码发送中文短信。num[]=接收端号码;Sms[]=发送中文内容的Unicode编码
/*输入参数:无
/*输出参数:无
/**********************************************************************/
void GSM_Sent_PDU_Message(char num[],char sms[])
{
unsigned char i;
printf("%s",str1);
Delay_ms(200);
printf("%s",str2);       //设置为PDU模式,适合发送短信内容为中文
Delay_ms(200);
printf("%s",str3);     //使用GSM字符集
Delay_ms(200);
printf("%s",str4);     //设置PDU模式参数,8为使用Unicode编码
Delay_ms(200);
printf("%s",str5);
printf("%d\n",strlen(sms)/2+15);    //字节长度,与实际短信内容长度有关
Delay_ms(200);
printf("%s",str6);   //一开始发送的字符,包括短信中心号码等,这部分一般都是固定不变的,可以不用管它
//strcat(num,"F");                        //在接收端号码后面补F,使之成为12位字符
for(i=0;i<6;i++)                        //然后再两位两位分别调换位置
         {
                  printf("%c%c",num[2*i+1],num[2*i]);
         }
printf("%s",str7);        //固定字符
printf("%02x",strlen(sms)/2);     //中文短信内容字数
printf("%s\x1a",sms);       //发送内容的Unicode编码字符串+(CTRL+Z)
Delay_ms(200);
}


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:117861 发表于 2016-5-1 20:25 | 只看该作者
大神,正在调试,看看怎么样,谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表