找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9889|回复: 2
收起左侧

基于单片机+GSM的手机设计 有实物很详细

[复制链接]
ID:161768 发表于 2017-5-21 17:31 | 显示全部楼层 |阅读模式
借助系统模型,根据GSM模块收发短信、打电话以及串口控制SMS的基本原理,由单片机STC12C5A32S2与Tc35i模块通过串口通信、软件技术结合相关的AT指令实现手机的基本功能,具体包括:从键盘任意拨号、接听、挂机、收/发短信。先关指令提示通过LCD1602液晶显示。二、基本要求(基本技术要求与数据)
1、使用STC12C5A32S2单片机作为控制芯片;
2、使用Tc35i模块通过单片机控制实现手机的基本功能;
3、使用LCD1692液晶显示频作为显示工具;
4、使用4*4键盘矩阵作为操作的控制键盘。

Abstract
1 引言
2 设计方案
3 硬件设计
3.1 TC35i模块介绍
3.2 单片机及各元件的连接
3.2.1 STC12C5A32S2芯片介绍
3.2.2 LCD1602液晶显示模块介绍
3.2.3 按键设计模块
4 软件设计
4.1 软件设计工作原理
4.2 软件流程图
4.3 主要程序说明
5              调试与测试
5.1 硬件调试
5.2 软件调试
5.3 系统总体调试
6              结论
参考文献
致谢
附录

基于GSM手机设计

摘  要:借助系统模型,阐明基于西门子公司的TC35型GSM手机模块收发短信、打电话的基本概念以及串口控制 SMS 的基本原理。详细介绍C51单片机STC12C5A32S2控制GSM 模块工作的软件实现过程,对怎样用单片机控制GSM 模块收发短信、打电话进行探讨,也对程序设计的主体思想作了较为细致的分析。
文章重点阐述了STC12C5A32S2单片机和TC35模块的接口、TC35的特点和主要功能、AT指令的应用等。该系统单片机STC12C5A32S2的TXD/RXD分别接TC35模块的TXD/RXD,完成对TC35模块的初始化和短消息的数据收发以及打电话的功能。

1  引言
随着通信技术的发展, 基于移动通信网络服务功能, 正向工业控制和遥控领域有不断扩大的趋势。为适应这种需要,西门子公司推出了新一代无线通信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液晶显示相关提示。
3  硬件设计
使用单片机控制GSM,首先:单片机下载完程序后,先不要接GSM,先让单片机和电脑通信,利用串口调试助手查看单片机AT指令的数据。然后单片机的TXD/RXD分别接上图所示的TXD/RXD并共地,完成对TC35模块的初始化和短消息的数据收发以及打电话的功能。硬件连接实物图如图3-1:
1.001.jpg

3.1 TC35i模块介绍
TC35i模块主要由六部分组成: GSM基带处理器、GSM射频模块、供电模块 (ASIC)、 闪存、ZIF连接器、天线接口。其中,GSM基带处理器是整个模块的核心,主要处理GSM终端内的语音、数据信号,并涵盖蜂窝射频设备中的所有模拟和数据功能。TC35i模块结构框图如图3-2:
1.002.jpg

GSM开发板有两种供电方式,一种是直接把开关电源适配器插到电源插头上,另一种是直接用直流稳压电源的正负极分别接到上图的电源正5V、电源地。当用电脑串口调试GSM时,必须用短路帽直接把J3、J4分别插上短路帽,如上图所示。当用单片机控制GSM时,J3、J4的短路帽必须拔下。
1.003.jpg 3.2 单片机及各元件的连接

LCD1602液晶显示模块通过排阻接STC12C5A32S2单片机P0口,4*4矩阵键盘按键,接STC12C5A32S2单片机P1口,具体功能分配在3.2.1和3.2.2详细介绍。
3.2.1 STC12C5A32S2芯片介绍
STC12C5A32S2芯片是宏晶科技生产的高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统的8051,用它作为本设计控制核心。STC12C5A32S2引脚排列如图3-4所示,表3-1为 STC12C5A32S2引脚功能分配说明。
1.004.jpg
引脚
功能
P0
输出液晶显示屏双向数据口,P0口使用上拉电阻
P1
4*4键盘输入口
P2.2
蜂鸣器
P2.3~P2.5
液晶屏RS、RW、E
P2.6~ P2.7/P3
空闲(预留其他用途)


1.005.jpg

3.2.2 LCD1602液晶显示模块介绍
字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。本设计采用1602LCD液晶显示频作为显示工具,当系统向外拨号、发送信息或有来电以及新信息进来时,通过按键控制执行相关应答,1602LCD同时显示相关指令指示,例如当有来电时,显示效果如图3-5所示:
1.006.jpg


3.2.3 按键设计模块
本设计采用4*4矩阵键盘按键,接单片机P1口,相关功能设置如图3-6:
3(键号0)
7(键号1)
11(键号2)
15(键号3)
2(发信息)
6(键号4)
10(键号5)
14(键号6)
1(挂机)
5(键号7)
9(键号8)
13(键号9)
0(拨号)
4(接听)
8(清屏)
12(空闲)


1.007.jpg
功能说明:图中为括号的内容表示该按键按下则相关数字送给单片机进行存储和显示,非数字键按表格中的功能在程序中实现。
4  软件设计
单片机与GSM模块的的软件接口其实就是单片机通过与GSM模块相关的AT 指令控制手机的控制技术。指令的执行过程需要单片机与GSM模块交互应答完成,每次发送或接收的字节数有严格的规定,二者必须依据这些规定实现数据交换,否则,通信就是失败的。设计采用的相关AT指令说明:
a、 单片机与 TC35i模块由串口建立连接:AT。
b、 设置 TC35i模块工作模式:AT+CMGF=n,n=0:PDU模式;n=1:文本模式,通常要设置为 PDU模式,在这种模式下,能传送或接收透明数据(用户自定义)。
c、 发送信息指令:AT+CMGS=n,n为目标号码。
d、 新消息提示指令:AT+CMNI=2,1,0,0,设置为mode=2,mt=1。
e、 读 TC35i模块短消息数据:AT+CMGR=n,n为短消息号(十进制)。
f、 拨号指令:ATD。这个命令用来设置通话、数据或传真呼叫。
g、 来电显示指令:AT+CLIP=1。            
h、 接听指令: ATA。
i、 挂电话指令:ATH。
4.1 软件设计工作原理
软件设计过程中在矩阵键盘设置了相关按键分别控制发送短信息 (关键字、状态字、查询信息 )、拨号到从矩阵键盘输入的任意号码、接听来电、挂机以及数字键、清屏键。
在系统运行过程中通过键盘扫描检测,当有按键按下执行相关操作或者有新信息或新来电时,TC35i通过串口传输接收到相关AT指令后 ,把相关信息返回并通过串口传送给单片机 ,单片机收到有新的信号指示 ,则按指示执行相关操作并继续通过串口传输将相关数据送给GSM模块, GSM模块通过串口传输收到相关信息后成功返回“OK”,失败返回“ERROR”。串口传输的相关指令指示通过LCD1602液晶显示频显示出来。
4.2 软件流程图             
程序使用模块化的编程思路。主程序包括系统初始化、屏幕刷新和按键扫描三部分,其流程如图4-1所示。屏幕刷新功能用一个子程序模块实现,在模块当中实现相应字符串的显示,其流程如图4-2所示。参数设置子程序的按键扫描,不是设置键按下则退出扫描,重新轮询。若有设置键按下,则进入功能选择子程序。
1.008.jpg


1.009.jpg


4.3 主要程序说明
整个软件设计由多部分组成:函数声明、函数定义、主函数、信息检测函数、键盘扫描函数、串口中断函数、延时子函数、收/发信息函数、拨号函数、挂机函数、接听函数以及相关LCD1602液晶显示相关函数等,主要程序说明见附录。
5  调试与测试5.1 硬件调试
设计好PCB电路检查确认无误之后,经过打印、热转印、制板、焊接元件等流程就可以进行硬件的调试了。硬件安装前要再次确定系统总原理图的正确性,首先用万用表检查电路板是否有虚焊、漏焊、开路或短路的情况;检查无误后给电路板提供+5V的直流电压,观察电路板上的电源指示灯是否正常工作,然后把单片机芯片、液晶显示屏插入插槽中,下载线连接到电路板上,先下载简单可行的测试程序到单片机中,观察芯片工作是否正常,验证显示屏、按键、执行部件能否正常工作,如果芯片正常工作则说明系统板正常,不正常则说明软件或者系统硬件可能存在某些问题,则需耐心查找原因,从根本上一一解决。
下载线的作用是把编译好的单片机程序下载到目标单片机中以及提供电源。用的下载程序软件,STC_ISP.exe 。
5.2 软件调试
本系统使用的软件开发环境是keil。在keil中,源代码的输入,编译通过之后就可以进行软件调试了。在软件编程实现过程中,跟随自己事先整理好的思路,先定好整体框架,然后对每个要实现的功能实现从简单开始一步步到最终实现为止,最后把最终程序经过编译确认无误之后,把编译产生的hex文件,下载到实物板中,软硬件调试时,首先要检查电源指示灯是否亮,观察LCD查看显示是否正确,按键是否起到相应的作用。调试过程中,要不断分析问题存在的可能原因,针对具体问题找寻具体解决办法,在硬件和软件程序间不断改进调试,从简单开始一步步进行下去直到最终功能实现为止。
5.3 系统总体调试
系统软硬件联合调试步骤与仿真调试步骤基本一致,确保电路硬件线路正常后,将可行程序下载到单片机,验证显示屏、按键、串口通信能否正常工作。       系统总体调试使用工具有:GSM模块、单片机小系统板、SIM卡(插入GSM模块),手机一部。调试步骤:
1、先把SIM卡插入GSM模块插槽中,给GSM通电,观察GSM模块:电源指示灯(红灯)亮,信号指示灯(绿灯)一亮一灭,亮与灭的时间相同,这时GSM模块正在搜索信号,等到信号指示灯闪一下,灭大约2-3秒时,这时说明我们的GSM已经注册上信号,说明模块工作正常;
2、下载线连接上单片机最小系统板,按下开关给单片机上电,电源指示灯亮,工作正常则下载程序后,断开下载线与单片机最小系统板的TXD/RXD接线,将单片机的TXD/RXD脚、地线分别与GSM模块的TXD/RXD脚、地线接上,给单片机断电或复位一次,刷新串口,即可进行调试工作。
3、从键盘输入目标手机号码,观察液晶显示并记录,按下拨号键,等待检查手机是否有新来电,记录结果;
4、从目标手机拨号进来,仔细观察蜂鸣器是否提醒有来电,检查液晶显示并记录,如有来电提醒显示,则按下接听键观察手机提示状态、液晶显示结果,并记录,挂号键操作也是一样检测;
5、按下发信息按键,等待,观察手机是否有新信息以及液晶显示并记录;
6、用手机给模块发送一条信息,检查蜂鸣器是否有提醒,观看液晶显示并记录。LCD602液晶显示屏调试结果以及串口显示结果见附录。
表5-1 系统总体调试结果说明
按键按下
功能说明
液晶显示结果
数字键0-9
输入相关数字
“0/1/2/3/4/5/6/7/8/9”
拨号键
拨打目标号码
“ATD15994473659”
挂机键
挂断来电
“ATH   OK”
接听键
接听来电
“ATA   OK”
清屏键
清理屏幕并归零相关变量
清屏
发信息键
发送固定信息到固定号码
“AT+CMGS=15994473659hello!”



6  结论
本设计借助系统模型,根据GSM模块收发短信、打电话以及串口控制SMS的基本原理,结合Tc35i型GSM模块和单片机小系统电路板两个模块,由单片机STC12C5A32S2与Tc35i模块通过串口通信、软件技术结合相关的AT指令实现手机的基本功能。通过设置相关按键分别控制发送短信息 (关键字、状态字、查询信息 )、拨号到从矩阵键盘输入的任意号码以及接收信息、接听来电、挂机,串口传输的数据通过LCD液晶显示把串口传输的串口传输的数据显示出来。
通过这次毕业设计,对更熟悉使用PROTEL99SE设计电路原理图、PCB图的布局设计有很大帮助,对相关专业知识有了进一步的了解,能把课本知识运用到设计中。整个设计虽然过程中遇到了一些困难,但针对遇到的不同问题,采取了不同的解决方案,最终一一解决。这更让人明白,要有细心、耐心、恒心才能成功的完成一件事。在将来的学习工作中要吸取这次设计的经验教训。
根据GSM模块收发短信、打电话以及串口控制SMS的基本原理,通过串口通信、软件技术结合相关的AT指令还可实现语音功能,或者选用功能更强大的显示工具实现更完整的手机短信收发、打电话的功能。

致谢
本人在撰写的过程中,得到廖义奎老师以及玉黄蓉等同学的悉心指导,在此向他深表谢意!

附录4.3.1 主函数
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 信息检测函数
  1. void ScanMessage(void)
  2. {      
  3. for(ii=0;ii<32;ii++)                              if(RsBuf[ii-3]=='C'&&RsBuf[ii-2]=='M'&&RsBuf[ii-1]=='T'&&RsBuf[ii]=='I')
  4.                   {   
  5. di();delayms(50);
  6. di(); delayms(50);
  7. di(); delayms(50);
  8.              lcd_write_com(0x80); //将显示位置定位在第一行第0个字符处
  9.              clr_rsbuf();
  10.              Print_Str(AT_CMGR);
  11.              delayms(250);delayms(250);delayms(250);delayms(250);
  12.              lcd_write_com(0x80); //将显示位置定位在第一行第0个字符处
  13.              for(i=0;i<15;i++)
  14.              {  
  15. lcd_write_data(RsBuf[i+20]);    //显示
  16.                  delayms(100);
  17.              }
  18.              lcd_write_com(0x80+0x40); //将显示位置定在第一行第0个字符处
  19.              for(i=15;i<32;i++)
  20.              {  
  21. lcd_write_data(RsBuf[i+20]);    //显示
  22.                  delayms(100);
  23.              }
  24.                             }
  25.                             else if(RsBuf[ii-3]=='C'&&RsBuf[ii-2]=='L'&&RsBuf[ii-1]=='I'&&RsBuf[ii]=='P')
  26.          {  
  27. beep=0;
  28.              delayms(250);
  29.              delayms(250);
  30.              lcd_write_com(0x80);   //将要显示的位置定位在LCD的第一行第0个字符处
  31.              for(i=(ii+3);i<15+(ii+3);i++)
  32.              {
  33.                                    lcd_write_data(RsBuf[i]);    //来电显示
  34.                 delayms(5);
  35.               }
  36.              lcd_write_com(0x80+0x40);   //将要显示的位置定位在第一行第0个字符处
  37.              for(i=(ii+3)+15;i<32+(ii+3);i++)
  38.              {
  39.                                     lcd_write_data(RsBuf[i]);    //显示"ATH"
  40.                 delayms(5);
  41.               }
  42.                                           while(!beep)
  43.                                           {
  44.                                           key_4x4_scan();//不停调用键盘扫描程序
  45.                                    }                                         
  46.                                           clr_rsbuf();
  47.                             }
  48. }
复制代码



1.010.jpg



1.011.jpg



1.012.jpg




1.013.jpg




1.014.jpg




1.015.jpg



1.016.jpg




1.017.jpg



171040b4r64r4d5e5j9ze5.png
压缩包里面含完整的PCB图 proteus仿真原理图和源程序程序等
下载地址:http://www.51hei.com/bbs/dpj-85475-1.html


回复

使用道具 举报

ID:157057 发表于 2017-5-21 23:18 | 显示全部楼层
感谢分享。
回复

使用道具 举报

ID:291316 发表于 2019-5-5 22:40 | 显示全部楼层
仿真不了啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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