STM32毕设:基于单片机与GSM的手机短信收发系统(附源码和论文)

文章目录

  • 1 简介
  • 1 硬件设计
  • 1.1 TC35i模块
  • 1.2 单片机硬件链接
  • 2 软件设计
  • 2.1 软件流程图
  • 3 关键代码
  • 4 最后

  • 1 简介

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

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

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

    🧿 项目分享:见文末!

    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 最后

    🧿 项目分享:见文末!

    作者:m0_984093

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32毕设:基于单片机与GSM的手机短信收发系统(附源码和论文)

    发表评论