• 嵌入式第10次实验报告


    学号:140201236                姓名:沈樟伟

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

    一、实验目的:

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

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

    二、实验内容:

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

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

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

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

    1、实验原理

    SIM900A跳线帽连接方式:

    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;

    int i,j;

    //

    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);//·¢ËÍÎı¾

    POINT_COLOR=YELLOW;

    for(i=180;i<=300;i++)//bohao

    for(j=690;j<=750;j++)

    LCD_DrawPoint(i,j);

    POINT_COLOR=BLUE;

    Show_Str(215,710,300,150,"¹Ò¶Ï",24,1);

    iscalling=1;

    }

    void hangup(){

    char text[40]="ATH";

    sendtext(text);

    number[0]='';

    POINT_COLOR=YELLOW;

    for(i=180;i<=300;i++)//bohao

    for(j=690;j<=750;j++)

    LCD_DrawPoint(i,j);

    POINT_COLOR=BLUE;

    Show_Str(215,710,300,150,"²¦ºÅ",24,1);

    iscalling=0;

    POINT_COLOR=YELLOW;

    for(i=200;i<=400;i++)

    for(j=90;j<=140;j++)

    LCD_DrawPoint(i,j);

    }

    int main(void)

    {

    int i,j;

    delay_init(168);  //³õʼ»¯ÑÓʱº¯Êý

    uart_init(115200); //³õʼ»¯´®¿Ú²¨ÌØÂÊΪ115200

    uart3_init(115200);

      LCD_Init(); //LCD³õʼ»¯

    tp_dev.init(); //´¥ÃþÆÁ³õʼ»¯

    LCD_Clear(BLACK);

      POINT_COLOR=YELLOW;//ÉèÖÃ×ÖÌåΪ»ÆÉ«

    BACK_COLOR = BLACK;

    POINT_COLOR=WHITE;

    Show_Str(100,100,300,150,"ºÅÂëÇø£º",24,1);

    //

    POINT_COLOR=YELLOW;

    for(i=200;i<=400;i++)

    for(j=90;j<=140;j++)

    LCD_DrawPoint(i,j);

    //

    for(i=210;i<=270;i++)//5

    for(j=370;j<=430;j++)

    LCD_DrawPoint(i,j);

    for(i=210;i<=270;i++)//2

    for(j=270;j<=330;j++)

    LCD_DrawPoint(i,j);

    for(i=210;i<=270;i++)//8

    for(j=470;j<=530;j++)

    LCD_DrawPoint(i,j);

    for(i=110;i<=170;i++)//1

    for(j=270;j<=330;j++)

    LCD_DrawPoint(i,j);

    for(i=310;i<=370;i++)//3

    for(j=270;j<=330;j++)

    LCD_DrawPoint(i,j);

    for(i=110;i<=170;i++)//4

    for(j=370;j<=430;j++)

    LCD_DrawPoint(i,j);

    for(i=310;i<=370;i++)//6

    for(j=370;j<=430;j++)

    LCD_DrawPoint(i,j);

    for(i=110;i<=170;i++)//7

    for(j=470;j<=530;j++)

    LCD_DrawPoint(i,j);

    for(i=310;i<=370;i++)//9

    for(j=470;j<=530;j++)

    LCD_DrawPoint(i,j);

    for(i=110;i<=170;i++)//*

    for(j=570;j<=630;j++)

    LCD_DrawPoint(i,j);

    for(i=210;i<=270;i++)//0

    for(j=570;j<=630;j++)

    LCD_DrawPoint(i,j);

    for(i=310;i<=370;i++)//#

    for(j=570;j<=630;j++)

    LCD_DrawPoint(i,j);

    for(i=180;i<=300;i++)//bohao

    for(j=690;j<=750;j++)

    LCD_DrawPoint(i,j);

    POINT_COLOR=BLUE;

    Show_Str(215,710,300,150,"²¦ºÅ",24,1);

    BACK_COLOR = BLACK;

    LCD_ShowString(135,290,200,100,24,"1");//1

    LCD_ShowString(235,290,200,100,24,"2");//2

    LCD_ShowString(335,290,200,100,24,"3");//3

    LCD_ShowString(135,390,200,100,24,"4");//4

    LCD_ShowString(235,390,200,100,24,"5");//5

    LCD_ShowString(335,390,200,100,24,"6");//6

    LCD_ShowString(135,490,200,100,24,"7");//7

    LCD_ShowString(235,490,200,100,24,"8");//8

    LCD_ShowString(335,490,200,100,24,"9");//9

    LCD_ShowString(135,590,200,100,24,"*");//*

    LCD_ShowString(235,590,200,100,24,"0");//0

    LCD_ShowString(335,590,200,100,24,"#");//#

    //ÊäºÅÂë

    while(1){

    POINT_COLOR=BLUE;

    tp_dev.scan(0);//

    if(tp_dev.x[0]>110&&tp_dev.y[0]>270&&tp_dev.x[0]<170&&tp_dev.y[0]<330){

    while((tp_dev.sta & 0x80) == 0x80)

    {tp_dev.scan(0);}

    strcat(number,"1");//Ìí¼ÓºÅÂë

    LCD_ShowString(200,100,336,24,24,number);//ÏÔʾºÅÂë

    }

    if(tp_dev.x[0]>210&&tp_dev.y[0]>270&&tp_dev.x[0]<270&&tp_dev.y[0]<330){

    while((tp_dev.sta & 0x80) == 0x80)

    {tp_dev.scan(0);}

    strcat(number,"2");

    LCD_ShowString(200,100,336,24,24,number);

    }

    if(tp_dev.x[0]>310&&tp_dev.y[0]>270&&tp_dev.x[0]<370&&tp_dev.y[0]<330){

    while((tp_dev.sta & 0x80) == 0x80)

    {tp_dev.scan(0);}

    strcat(number,"3");

    LCD_ShowString(200,100,336,24,24,number);

    }

    if(tp_dev.x[0]>110&&tp_dev.y[0]>370&&tp_dev.x[0]<170&&tp_dev.y[0]<430){

    while((tp_dev.sta & 0x80) == 0x80)

    {tp_dev.scan(0);}

    strcat(number,"4");

    LCD_ShowString(200,100,336,24,24,number);

    }

    if(tp_dev.x[0]>210&&tp_dev.y[0]>370&&tp_dev.x[0]<270&&tp_dev.y[0]<430){

    while((tp_dev.sta & 0x80) == 0x80)

    {tp_dev.scan(0);}

    strcat(number,"5");

    LCD_ShowString(200,100,336,24,24,number);

    }

    if(tp_dev.x[0]>310&&tp_dev.y[0]>370&&tp_dev.x[0]<370&&tp_dev.y[0]<430){

    while((tp_dev.sta & 0x80) == 0x80)

    {tp_dev.scan(0);}

    strcat(number,"6");

    LCD_ShowString(200,100,336,24,24,number);

    }

    if(tp_dev.x[0]>110&&tp_dev.y[0]>470&&tp_dev.x[0]<170&&tp_dev.y[0]<530){

    while((tp_dev.sta & 0x80) == 0x80)

    {tp_dev.scan(0);}

    strcat(number,"7");

    LCD_ShowString(200,100,336,24,24,number);

    }

    if(tp_dev.x[0]>210&&tp_dev.y[0]>470&&tp_dev.x[0]<270&&tp_dev.y[0]<530){

    while((tp_dev.sta & 0x80) == 0x80)

    {tp_dev.scan(0);}

    strcat(number,"8");

    LCD_ShowString(200,100,336,24,24,number);

    }

    if(tp_dev.x[0]>310&&tp_dev.y[0]>470&&tp_dev.x[0]<370&&tp_dev.y[0]<530){

    while((tp_dev.sta & 0x80) == 0x80)

    {tp_dev.scan(0);}

    strcat(number,"9");

    LCD_ShowString(200,100,336,24,24,number);

    }

    if(tp_dev.x[0]>110&&tp_dev.y[0]>570&&tp_dev.x[0]<170&&tp_dev.y[0]<630){

    while((tp_dev.sta & 0x80) == 0x80)

    {tp_dev.scan(0);}

    strcat(number,"*");

    LCD_ShowString(200,100,336,24,24,number);

    }

    if(tp_dev.x[0]>210&&tp_dev.y[0]>570&&tp_dev.x[0]<270&&tp_dev.y[0]<630){

    while((tp_dev.sta & 0x80) == 0x80)

    {tp_dev.scan(0);}

    strcat(number,"0");

    LCD_ShowString(200,100,336,24,24,number);

    }

    if(tp_dev.x[0]>310&&tp_dev.y[0]>570&&tp_dev.x[0]<370&&tp_dev.y[0]<630){

    while((tp_dev.sta & 0x80) == 0x80)

    {tp_dev.scan(0);}

    strcat(number,"#");

    LCD_ShowString(200,100,336,24,24,number);

    }

    if(tp_dev.x[0]>180&&tp_dev.y[0]>690&&tp_dev.x[0]<300&&tp_dev.y[0]<750){

    if(iscalling){

    hangup();

    }else{

    call();

    }

    while(tp_dev.x[0]!=65535){tp_dev.scan(0);}

    }

    delay_ms(5);

    tp_dev.x[0] = 0xFFFF;

    tp_dev.y[0] = 0xFFFF;

    }

    }

     5、实验结果

    四、总结及实验心得:

      经过这么多期的实验课,我们开始了综合型的学习。自己动手设计手机拨号界面,并模拟手机拨号。本次实验使用AT命令进行模块测试,拨打固定电话,并编写程序利用触摸屏完成任意电话的呼叫,作为一次综合型的实验,难度比以往的要高一些。

      在设计拨号界面的时候,还是比较得心应手。不过,在代码的设计中,可以应用函数来简化,应为每个按钮的绘制都是重复的。难度在数据的传递时的代码设计。先将输入好吗作为字符串存储,接着,加上前缀。最后通过第三端口传递。还有一个难点是,触屏时自动点多次。我们自己想了一个解决办法,老师也教了一个可行的方法。

      总之,实验就是不断发现错误,并加以改正与改良的过程。过程中,我们学到了很多原本不知道的知识。

  • 相关阅读:
    在C#代码中应用Log4Net(二)典型的使用方式
    在C#代码中应用Log4Net(一)简单使用Log4Net
    Windows Azure Active Directory (2) Windows Azure AD基础
    Windows Azure Virtual Network (6) 设置Azure Virtual Machine固定公网IP (Virtual IP Address, VIP) (1)
    Windows Azure Active Directory (1) 前言
    Azure China (6) SAP 应用在华登陆 Windows Azure 公有云
    Microsoft Azure News(3) Azure新的基本实例上线 (Basic Virtual Machine)
    Microsoft Azure News(2) 在Microsoft Azure上运行SAP应用程序
    Microsoft Azure News(1) 新的数据中心Japan East, Japan West and Brazil South
    Windows Azure HandBook (2) Azure China提供的服务
  • 原文地址:https://www.cnblogs.com/shenzhangwei/p/6624023.html
Copyright © 2020-2023  润新知