摘要:借助系统模型,阐明基于西门子公司的TC35型GSM手机模块收发短信、打电话的基本概念以及串口控制 SMS 的基本原理。详细介绍C51单片机STC12C5A32S2控制GSM 模块工作的软件实现过程,对怎样用单片机控制GSM 模块收发短信、打电话进行探讨,也对程序设计的主体思想作了较为细致的分析。
文章重点阐述了STC12C5A32S2单片机和TC35模块的接口、TC35的特点和主要功能、AT指令的应用等。该系统单片机STC12C5A32S2的TXD/RXD分别接TC35模块的TXD/RXD,完成对TC35模块的初始化和短消息的数据收发以及打电话的功能。
关键词:C51单片机;短信收发;打电话;GSM。
资料包含:实物PCB,程序,论文,仿真原理图
引言
随着通信技术的发展, 基于移动通信网络服务功能, 正向工业控制和遥控领域有不断扩大的趋势。为适应这种需要,西门子公司推出了新一代无线通信GSM模块——TC35i,是一种基于GSM网络的通过短信形式传输数据的通信终端设备。基于该模块工作的无线网络覆盖范围广,在信息传递方面性能稳定、可靠,所以把GSM作为信息传递的载体,与单片机结合起来构成应用系统有着强大的生命力和广阔的应用空间,特别是在远程数据传输、远程监控等领域。
本设计借助系统模型,根据GSM模块收发短信、打电话以及串口控制SMS的基本原理,由单片机STC12C5A32S2与Tc35i模块通过串口通信、软件技术结合相关的AT指令实现手机的基本功能,通过LCD1602液晶显示频显示串口传输的相关数据输出。
2 设计方案
本次设计的目的是基于C51单片机控制GSM模块实现短信收发、打电话的功能,根据题意,制定设计方案如下:
1、短信模块使用西门子公司推出的无线通信GSM模块——TC35i;
2、使用LCD1602液晶模块作为显示器件,及时显示串口传输数据;
3、单片机芯片使用宏晶科技生产的新一代8051单片机STC12C5A32S2;
4、整个系统组成有TC35i模型和小系统单片机电路,STC12C5A32S2单片机的TXD/RXD分别接TC35模块的TXD/RXD,并且两者共地,通过串口通信、软件技术结合相关的AT指令完成对TC35模块的初始化和短消息的数据收发以及打电话的功能;
5、增加4*4矩阵键盘小模块,通过键盘设置相关按键实现相关功能,并能从键盘实现随意拨号;
6、当有来电或者新信息时,通过蜂鸣器响声长短提示并在LCD液晶显示相关提示。
void delayms(uint x);
void lcd_write_com(uchar lcd_com); //送命令数据到LCD的子函数声明
void lcd_write_data(uchar lcd_data); //送显示数据到LCD的子函数声明
void lcd_int(); //LCD初始化子函数声明
void write_sfm(uchar wz,uchar date);//在第一行写一个数函数
#define key_4x4_port P1 //定义4x4键盘使用的单片机端口
uchar key; //4x4键盘扫描所得的键值保存到这里
void key_4x4_scan(); //声明4x4键盘扫描子函数,得到的键值送至全局变量key
#define Phone_connection 1 //正在打电话状态标志
#define Clear_Connect 0 //电话已挂断状态标志
char Calls_State_Flag=Clear_Connect; //电话状态
void ScanMessage(void);
void clr_rsbuf(void);
uchar code AT[]="AT\r" ; //握手信号
uchar code AT_CMGF[]= "AT+CMGF=1\r";//发送数据为TXET格式
uchar code AT_CMGS[]= "AT+CMGS=15994473659\r";
uchar code AT_CMGR[]= "AT+CMGR=2\r";
uchar code AT_CSCA[]="AT+CSCA=\"+8613800771500\""; //设置服务中心号码
uchar code AT_CNMI[]= "AT+CNMI=2,1,0,0\r";//新消息提示:设置为mode=2,mt=1
uchar code AT_CLIP[]= "AT+CLIP=1,1\r";//显示来电号码
uchar Sms[]="hello!";
uchar Phone_call[]="15994473659";
uchar Phone_num[12];
void main()
{
di();
Ini_UART();
lcd_int();
k=0;
Print_Str(AT);
delayms(100);
Print_Str(AT_CMGF);
delayms(100);
Print_Str(AT_CNMI);
delayms(200);
Print_Str(AT_CLIP);
delayms(250);
clr_rsbuf();
P1=0xff; //P0开机初始化
key=0xff; //键盘值开机初始化为ff(检测到的键值应为0----15)
while(1)
{
ScanMessage();
key_4x4_scan();//不停调用键盘扫描程序
};//原地循环
}
4.3.2 信息检测函数
void ScanMessage(void)
{
for(ii=0;ii<32;ii++) if(RsBuf[ii-3]=='C'&&RsBuf[ii-2]=='M'&&RsBuf[ii-1]=='T'&&RsBuf[ii]=='I')
{
di();delayms(50);
di(); delayms(50);
di(); delayms(50);
lcd_write_com(0x80); //将显示位置定位在第一行第0个字符处
clr_rsbuf();
Print_Str(AT_CMGR);
delayms(250);delayms(250);delayms(250);delayms(250);
lcd_write_com(0x80); //将显示位置定位在第一行第0个字符处
for(i=0;i<15;i++)
{
lcd_write_data(RsBuf[i+20]); //显示
delayms(100);
}
lcd_write_com(0x80+0x40); //将显示位置定在第一行第0个字符处
for(i=15;i<32;i++)
{
lcd_write_data(RsBuf[i+20]); //显示
delayms(100);
}
}
else if(RsBuf[ii-3]=='C'&&RsBuf[ii-2]=='L'&&RsBuf[ii-1]=='I'&&RsBuf[ii]=='P')
{
beep=0;
delayms(250);
delayms(250);
lcd_write_com(0x80); //将要显示的位置定位在LCD的第一行第0个字符处
for(i=(ii+3);i<15+(ii+3);i++)
{
lcd_write_data(RsBuf[i]); //来电显示
742 基于51单片机GSM的手机系统模拟设计 proutes仿真 原理图 程序 报告
文章转自电设屋,完整资料百度网盘下载地址 https://www.aiesst.cn/share.html