• 嵌入式软件设计第十次实验报告-140201235-陈宇


    嵌入式软件设计第十次实验报告

    学号:140201235          姓名:陈宇

    组别:第3组                  实验地点:D19

     

    一、实验目的:

    1、了解GSM模块SIM900A的使用方法。

    2、掌握使用串口发送AT命令驱动SIM900A的

       方法。

    二、实验内容:

    1.使用AT命令进行模块测试,拨打固定电话。

    2.编写程序利用触摸屏完成任意电话的呼叫。

    三、实验过程描述及结果展示:

    实验器材:STM32F407开发板、LCD显示屏

    1、实验原理

    SIM900A跳线帽连接方式:

    长按PWR_KEY键后网络状态指示灯对应的状态:

    2、常用AT指令_准备工作:

    3、常用AT命令_拨打电话

    4、程序代码

    #include "sys.h"
    #include "delay.h"
    #include "usart.h"
    #include "led.h"
    #include "lcd.h"
    #include "key.h"
    #include "touch.h"
    #include "text.h"
    #include "w25qxx.h"
    #include "malloc.h"
    #include "ff.h"
    #include "exfuns.h"

    const u16 POINT_COLOR_TBL[OTT_MAX_TOUCH]={RED,GREEN,BLUE,BROWN,GRED};

    unsigned char Dialling[12];
    char number[20] = "";
    u8 iscalling=0;
    void addnumbutton(u16 x,u16 y,u8 *p){
    LCD_Fill(x,y,x+60,y+60,BROWN);
    POINT_COLOR=BLACK;
    BACK_COLOR = BROWN;
    LCD_ShowString(x+24,y+18,24,24,24,p);
    }

    void sendtext(char *p){
    while(*p!=''){
    USART_SendData(USART3,*p);
    delay_ms(50);
    p++;
    }
    USART_SendData(USART3,0x0D);
    delay_ms(50);
    USART_SendData(USART3,0x0A);
    }


    void call(){
    char text[40]="ATD";
    strcat(text,number);
    strcat(text,";");
    printf("%s",text);
    sendtext(text);
    LCD_Fill(120,40,460,66,BROWN);
    LCD_Fill(122,42,458,64,BLACK);
    //number="CALLING";
    LCD_ShowString(122,42,336,24,24,"CALLING");
    LCD_Fill(60,600,420,680,BROWN);
    POINT_COLOR=BLACK;
    BACK_COLOR = BROWN;
    LCD_ShowString(204,626,96,144,24,"HANGUP");
    iscalling=1;
    }

    void hangup(){
    char text[40]="ATH";
    sendtext(text);
    LCD_Fill(120,40,460,66,BROWN);
    LCD_Fill(122,42,458,64,BLACK);
    number[0]='';
    LCD_Fill(60,600,420,680,BROWN);
    POINT_COLOR=BLACK;
    BACK_COLOR = BROWN;
    LCD_ShowString(216,626,96,24,24,"CALL");
    iscalling=0;
    }

    int main(void)
    {
    delay_init(168); //初始化延时函数
    uart_init(115200); //初始化串口波特率为115200
    uart3_init(115200);
    sendtext("AT+CPIN?");
    LCD_Init(); //LCD初始化
    tp_dev.init(); //触摸屏初始化

    LCD_Clear(BLACK);
    POINT_COLOR=YELLOW;
    BACK_COLOR = BLACK;

    LCD_ShowString(30,40,210,24,24,"NUMBER:");
    LCD_Fill(120,40,460,66,BROWN);
    LCD_Fill(122,42,458,64,BLACK);

    addnumbutton(60,120,"1");
    addnumbutton(210,120,"2");
    addnumbutton(360,120,"3");

    addnumbutton(60,240,"4");
    addnumbutton(210,240,"5");
    addnumbutton(360,240,"6");

    addnumbutton(60,360,"7");
    addnumbutton(210,360,"8");
    addnumbutton(360,360,"9");

    addnumbutton(60,480,"*");
    addnumbutton(210,480,"0");
    addnumbutton(360,480,"#");

    LCD_Fill(60,600,420,680,BROWN);
    POINT_COLOR=BLACK;
    BACK_COLOR = BROWN;
    LCD_ShowString(216,626,96,24,24,"CALL");

    while(1){
    tp_dev.scan(0);
    if(tp_dev.x[0]>60&&tp_dev.y[0]>120&&tp_dev.x[0]<120&&tp_dev.y[0]<180){
    strcat(number,"1");
    LCD_ShowString(122,42,336,24,24,number);
    while(tp_dev.x[0]!=65535){tp_dev.scan(0);}
    }
    if(tp_dev.x[0]>210&&tp_dev.y[0]>120&&tp_dev.x[0]<270&&tp_dev.y[0]<180){
    strcat(number,"2");
    LCD_ShowString(122,42,336,24,24,number);
    while(tp_dev.x[0]!=65535){tp_dev.scan(0);}
    }
    if(tp_dev.x[0]>360&&tp_dev.y[0]>120&&tp_dev.x[0]<420&&tp_dev.y[0]<180){
    strcat(number,"3");
    LCD_ShowString(122,42,336,24,24,number);
    while(tp_dev.x[0]!=65535){tp_dev.scan(0);}
    }
    if(tp_dev.x[0]>60&&tp_dev.y[0]>240&&tp_dev.x[0]<120&&tp_dev.y[0]<300){
    strcat(number,"4");
    LCD_ShowString(122,42,336,24,24,number);
    while(tp_dev.x[0]!=65535){tp_dev.scan(0);}
    }
    if(tp_dev.x[0]>210&&tp_dev.y[0]>240&&tp_dev.x[0]<270&&tp_dev.y[0]<300){
    strcat(number,"5");
    LCD_ShowString(122,42,336,24,24,number);
    while(tp_dev.x[0]!=65535){tp_dev.scan(0);}
    }
    if(tp_dev.x[0]>360&&tp_dev.y[0]>240&&tp_dev.x[0]<420&&tp_dev.y[0]<300){
    strcat(number,"6");
    LCD_ShowString(122,42,336,24,24,number);
    while(tp_dev.x[0]!=65535){tp_dev.scan(0);}
    }
    if(tp_dev.x[0]>60&&tp_dev.y[0]>360&&tp_dev.x[0]<120&&tp_dev.y[0]<420){
    strcat(number,"7");
    LCD_ShowString(122,42,336,24,24,number);
    while(tp_dev.x[0]!=65535){tp_dev.scan(0);}
    }
    if(tp_dev.x[0]>210&&tp_dev.y[0]>360&&tp_dev.x[0]<270&&tp_dev.y[0]<420){
    strcat(number,"8");
    LCD_ShowString(122,42,336,24,24,number);
    while(tp_dev.x[0]!=65535){tp_dev.scan(0);}
    }
    if(tp_dev.x[0]>360&&tp_dev.y[0]>360&&tp_dev.x[0]<420&&tp_dev.y[0]<420){
    strcat(number,"9");
    LCD_ShowString(122,42,336,24,24,number);
    while(tp_dev.x[0]!=65535){tp_dev.scan(0);}
    }
    if(tp_dev.x[0]>60&&tp_dev.y[0]>480&&tp_dev.x[0]<120&&tp_dev.y[0]<540){
    strcat(number,"*");
    LCD_ShowString(122,42,336,24,24,number);
    while(tp_dev.x[0]!=65535){tp_dev.scan(0);}
    }
    if(tp_dev.x[0]>210&&tp_dev.y[0]>480&&tp_dev.x[0]<270&&tp_dev.y[0]<540){
    strcat(number,"0");
    LCD_ShowString(122,42,336,24,24,number);
    while(tp_dev.x[0]!=65535){tp_dev.scan(0);}
    }
    if(tp_dev.x[0]>360&&tp_dev.y[0]>480&&tp_dev.x[0]<420&&tp_dev.y[0]<540){
    strcat(number,"#");
    LCD_ShowString(122,42,336,24,24,number);
    while(tp_dev.x[0]!=65535){tp_dev.scan(0);}
    }


    if(tp_dev.x[0]>60&&tp_dev.y[0]>600&&tp_dev.x[0]<420&&tp_dev.y[0]<680){
    if(iscalling){
    hangup();
    }else{
    call();
    }
    while(tp_dev.x[0]!=65535){tp_dev.scan(0);}
    }

    delay_ms(5);
    }
    }

    实验结果展示:

     

    四、总结及实验心得:

         这节课的实验很有趣,插入手机卡,使用AT命令进行模块测试,拨打固定电话,跟着老师一直配置下,我们完成了第一步,能够使用AT命令拨打固定电话,贼有趣。之后升级版,在嵌入版上设计一个拨打电话的界面并且实现功能,我们组只是编写出了框架,并且实现了触摸,但是不能够拨打出去,还需要继续努力完善。这次实验使我更加直观的看到嵌入式实验的功能与其强大的功能,对自己选择嵌入式为学习对感到十分骄傲和自豪,我一定会努力学习相关知识,在嵌入式方面获得更多地提高。

  • 相关阅读:
    史上最简单的Hibernate入门简单介绍
    极客Web前端开发资源大荟萃
    ios7 UIScrollView 尺寸问题
    用ahk脚本自己主动删除flashcookies
    CSS文字样式
    Windows 10 安装
    万圣节福利:红孩儿3D引擎开发课程《3ds max导出插件初步》
    算法实验 层序列表问题(二叉树)
    git配置别名
    git忽略特殊文件
  • 原文地址:https://www.cnblogs.com/gdcy/p/6623816.html
Copyright © 2020-2023  润新知