物联网毕设分享 GSM手机短信收发系统(源码+论文)


1 简介

Hi,大家好,这里是丹成学长,今天向大家介绍一个 单片机项目

毕业设计 单片机与GSM的手机短信收发系统(源码+论文)

大家可用于 课程设计 或 毕业设计


🧿 项目分享:

https://gitee.com/sinonfin/sharing

在这里插入图片描述

1 硬件设计

使用单片机控制GSM,首先:单片机下载完程序后,先不要接GSM,先让单片机和电脑通信,利用串口调试助手查看单片机AT指令的数据。然后单片机的TXD/RXD分别接上图所示的TXD/RXD并共地,完成对TC35模块的初始化和短消息的数据收发以及打电话的功能

1.1 TC35i模块

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

在这里插入图片描述

GSM开发板有两种供电方式,一种是直接把开关电源适配器插到电源插头上,另一种是直接用直流稳压电源的正负极分别接到上图的电源正5V、电源地。当用电脑串口调试GSM时,必须用短路帽直接把J3、J4分别插上短路帽

1.2 单片机硬件链接

在这里插入图片描述
LCD1602液晶显示模块通过排阻接STC12C5A32S2单片机P0口,4*4矩阵键盘按键,接STC12C5A32S2单片机P1口

2 软件设计

单片机与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。

2.1 软件流程图

程序使用模块化的编程思路。主程序包括系统初始化、屏幕刷新和按键扫描三部分,其流程如图4-1所示。屏幕刷新功能用一个子程序模块实现,在模块当中实现相应字符串的显示,其流程如图4-2所示。参数设置子程序的按键扫描,不是设置键按下则退出扫描,重新轮询。若有设置键按下,则进入功能选择子程序。

在这里插入图片描述
在这里插入图片描述

3 关键代码

主函数
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]);    //来电显示
                delayms(5);
              } 
             lcd_write_com(0x80+0x40);   //将要显示的位置定位在第一行第0个字符处
             for(i=(ii+3)+15;i<32+(ii+3);i++)
             {
		         lcd_write_data(RsBuf[i]);    //显示"ATH"
                delayms(5);
              } 
			 while(!beep)
			 {
			 key_4x4_scan();//不停调用键盘扫描程序 
  		     }			 
			 clr_rsbuf();
		 }
}

4 最后

🧿 项目分享:

https://gitee.com/sinonfin/sharing

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值