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


    学号:140201211                   姓名:张润泽

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

    一、实验目的:

    1.熟悉WWW技术中的CGI(公共网关接口)技术。

    2.学会使用CGI技术编写C语言代码驱动嵌入式开发板的LED灯 和蜂鸣器。

    二、实验内容:

    1.编写代码完成Web服务器端蜂鸣器的驱动。

    2.编写代码完成Web服务器端LED灯的驱动。三、实验过程描述及结果展示:

    1、实验原理

    CGI技术简介:公共网关接口CGI(Common Gateway Interface)是WWW技术中最重要的技术之一。CGI是外部应用程序与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的规程。CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI在物理上是一段程序,运行在服务器上,提供同客户端HTML页面的接口。绝大多数的CGI程序被用来解释处理来自表单的输入信息,并在服务器产生相应的处理,或将相应的信息反馈给浏览器,CGI程序使网页具有交互功能。

     

    LED及蜂鸣器管脚连接图

    从图中可以看出:

    PF9,PF10为低电平时,LED0与LED1亮;

    PF9,PF10为高电平时,LED0与LED1灭。

    PF8为高电平时,蜂鸣器响;为低电平时,蜂鸣器不响。

      

    2、程序代码

    (运行代码)

    #include "sys.h"

    #include <string.h>

    #include "lwip_comm.h"

    //LED灯端口和BEEP端口定义

    #define LED1 PFout(10)

    #define BEEP PFout(8)

    void system_init(void);//系统初始化函数

    //控制LED和BEEP的CGI handle;

    const char* LEDS_CGI_Handler(int iIndex,\

    int iNumParams,\

    char *pcParam[],\

    char * pcValue[]);

    const char* BEEP_CGI_Handler(int iIndex,\

    int iNumParams,\

    char *pcParam[],\

    char * pcValue[]);

    //当WEB客户端请求浏览器的时候,此函数被CGI handle调用

    extern int FindCGIParameter(const char *pcToFind,\

    char *pcParam[],\

    int iNumParams);

    int main(void)

    {

    system_init();//系统初始化(总)

    //以下代码对蜂鸣器进行初始化

    {

    GPIO_InitTypeDef GPIO_InitStructure;

    //使能GPIOF管脚时钟

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;//蜂鸣器管脚

    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;//输出模式

    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;//最大速度

    GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽输出

    GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;//电阻

    GPIO_Init(GPIOF,&GPIO_InitStructure);//调用函数对管脚初始化

    GPIO_ResetBits(GPIOF,GPIO_Pin_8);//PF8拉低

                             

    //以下代码对LED进行初始化

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;//输出模式

    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;//最大速度

    GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽输出

    GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;//上拉电阻

    GPIO_Init(GPIOF,&GPIO_InitStructure);//调用函数对管脚初始化

    GPIO_ResetBits(GPIOF,GPIO_Pin_10);//PF10拉低

    }

    while(1)

    {

    lwip_periodic_handle();//LWIP轮询任务

    }

    }

    //BEEP的CGI控制句柄

    const char* BEEP_CGI_Handler(int iIndex,\

    int iNumParams,\

    char *pcParam[],\

    char * pcValue[])

    {

    unsigned char i=0;

    //u8 i=0;

    //找到BEEP的索引号

    iIndex= FindCGIParameter("BEEP_TEST",pcParam,iNumParams);

    if(iIndex !=-1)

    {

    BEEP = 0;

    for(i=0;i<iNumParams;i++)

    {

    if(strcmp(pcParam[i],"BEEP_TEST")==0)//查找CGI

    {

    if(strcmp(pcValue[i],"BEEP_START")==0)

    BEEP =1;//打开蜂鸣器

    else if(strcmp(pcValue[i],"BEEP_STOP")==0)

    BEEP =0;//关闭蜂鸣器÷

    }

    }

    }

    if(BEEP==1 && LED1==1) return "/BEEP_ON_LED_OFF.html";

    else if(BEEP==1 && LED1==0) return "/BEEP_ON_LED_ON.html";

    else if(BEEP==0 && LED1==1) return "/BEEP_OFF_LED_OFF.html";

    else if(BEEP==0 && LED1==0) return "/BEEP_OFF_LED_ON.html";

    else return "/index.html";

    //return 0;

    }

    //---------------------------

    //LED的CGI控制句柄

    const char* LEDS_CGI_Handler(int iIndex,\

    int iNumParams,\

    char *pcParam[],\

    char * pcValue[])

    {

    unsigned char i=0;

    //u8 i=0;

    //找到LED的索引号

    iIndex= FindCGIParameter("LED_TEST",pcParam,iNumParams);

    if(iIndex !=-1)

    {

    LED1 = 0;

    for(i=0;i<iNumParams;i++)

    {

    if(strcmp(pcParam[i],"LED_TEST")==0)//查找CGI

    {

    if(strcmp(pcValue[i],"LED_START")==0)

    LED1 =0;//打开LED

    else if(strcmp(pcValue[i],"LED_STOP")==0)

    LED1 =1;//关闭LED

    }

    }

    }

    if(LED1==0 && BEEP==0) return "/BEEP_OFF_LED_ON.html";

    else if(LED1==0 && BEEP==1) return "/BEEP_ON_LED_ON.html";

    else if(LED1==1 && BEEP==0) return "/BEEP_OFF_LED_OFF.html";

    else if(LED1==1 && BEEP==1) return "/BEEP_ON_LED_OFF.html";

    else return "/index.html";

    //return 0;

    }

    (网页代码)

    蜂鸣器不响 LED灭

    <HTML>

    <HEAD>

    <TITLE>嵌入式Web服务器测试网页</TITLE>

    </HEAD>

    <BODY>

    <P>

    <IMG src="./image/photo.jpg" alt="耿丹樱花" align="right">

    </P>

    <H1 align="center">嵌入式Web服务器LED及BEEP测试</H1>

    <DIV style="margin-top:1cm; text-align:center;">

    <FORM method="get" action="./leds.cgi">

      LED:

     <input type="radio" name="LED_TEST" value="LED_START">ON

     <input type="radio" name="LED_TEST" value="LED_STOP" checked>OFF

    <BR> <BR>

     <input type="submit" name="button1" value="SEND">

    </FORM>

    </DIV>

    <DIV style="margin-top:3cm; text-align:center;">

    <FORM method="get" action="./beep.cgi">

      BEEP:

    <select name="BEEP_TEST" >

    <option value="BEEP_START">ON

    <option value="BEEP_STOP" selected = "selected">OFF

    </select>

    <BR> <BR>

     <input type="submit" name="button2" value="SEND">

    </FORM>

    </DIV>

    </BODY>

    </HTML>

    蜂鸣器不响 LED亮

    <HTML>

    <HEAD>

    <TITLE>嵌入式Web服务器测试网页</TITLE>

    </HEAD>

    <BODY>

    <P>

    <IMG src="./image/photo.jpg" alt="耿丹樱花" align="right">

    </P>

    <H1 align="center">嵌入式Web服务器LED及BEEP测试</H1>

    <DIV style="margin-top:1cm; text-align:center;">

    <FORM method="get" action="./leds.cgi">

      LED:

     <input type="radio" name="LED_TEST" value="LED_START" checked>ON

     <input type="radio" name="LED_TEST" value="LED_STOP">OFF

    <BR> <BR>

     <input type="submit" name="button1" value="SEND">

    </FORM>

    </DIV>

    <DIV style="margin-top:3cm; text-align:center;">

    <FORM method="get" action="./beep.cgi">

      BEEP:

    <select name="BEEP_TEST" >

    <option value="BEEP_START">ON

    <option value="BEEP_STOP" selected = "selected">OFF

    </select>

    <BR> <BR>

     <input type="submit" name="button2" value="SEND">

    </FORM>

    </DIV>

    </BODY>

    </HTML>

    蜂鸣器响 LED灭

    <HTML>

    <HEAD>

    <TITLE>嵌入式Web服务器测试网页</TITLE>

    </HEAD>

    <BODY>

    <P>

    <IMG src="./image/photo.jpg" alt="耿丹樱花" align="right">

    </P>

    <H1 align="center">嵌入式Web服务器LED及BEEP测试</H1>

    <DIV style="margin-top:1cm; text-align:center;">

    <FORM method="get" action="./leds.cgi">

      LED:

     <input type="radio" name="LED_TEST" value="LED_START" >ON

     <input type="radio" name="LED_TEST" value="LED_STOP" checked>OFF

    <BR> <BR>

     <input type="submit" name="button1" value="SEND">

    </FORM>

    </DIV>

    <DIV style="margin-top:3cm; text-align:center;">

    <FORM method="get" action="./beep.cgi">

      BEEP:

    <select name="BEEP_TEST" >

    <option value="BEEP_START" selected = "selected">ON

    <option value="BEEP_STOP">OFF

    </select>

    <BR> <BR>

     <input type="submit" name="button2" value="SEND">

    </FORM>

    </DIV>

    </BODY>

    </HTML>

    蜂鸣器响 LED亮

    <HTML>

    <HEAD>

    <TITLE>嵌入式Web服务器测试网页</TITLE>

    </HEAD>

    <BODY>

    <P>

    <IMG src="./image/photo.jpg" alt="耿丹樱花" align="right">

    </P>

    <H1 align="center">嵌入式Web服务器LED及BEEP测试</H1>

    <DIV style="margin-top:1cm; text-align:center;">

    <FORM method="get" action="./leds.cgi">

      LED:

     <input type="radio" name="LED_TEST" value="LED_START" checked>ON

     <input type="radio" name="LED_TEST" value="LED_STOP">OFF

    <BR> <BR>

     <input type="submit" name="button1" value="SEND">

    </FORM>

    </DIV>

    <DIV style="margin-top:3cm; text-align:center;">

    <FORM method="get" action="./beep.cgi">

      BEEP:

    <select name="BEEP_TEST" >

    <option value="BEEP_START" selected = "selected">ON

    <option value="BEEP_STOP" >OFF

    </select>

    <BR> <BR>

     <input type="submit" name="button2" value="SEND">

    </FORM>

    </DIV>

    </BODY>

    </HTML>

    三、总结及实验心得:

    今天课上,我们的任务有两个,第一个是通过CGI技术编写代码驱动嵌入式开发板的蜂鸣器,第二个是驱动开发板的LED灯,第一个实验老师带领我们做,跟着他仔细打完代码之后,我们插上了昨天自己亲手装的网线连接开发板和主机的两端,然后配置了一下电脑的网络连接配置,把ip地址手动修改为192.168.3.60,接着我就开始编译调试了,等了大约一分钟后,开发板上的ip已经显示配置完成,于是我打开了控制网页,点击了on按钮,不出所料,蜂鸣器真的响了,可是还有一点瑕疵,那就是点击off的时候跳转到了一个错误网页,这就需要自己在代码里添加一点代码,然后我又仿照老师刚才打的代码,增加了一行跳转,接着又在makefsdata里新建了一个off的网页,又重新编译了一下,大约一分钟,我刷新了一下网页,然后点击了on按钮,蜂鸣器响了,接着又点击了off按钮,刚才的问题没有发生,网页又成功弹到了起始页,最后还剩一个驱动LED灯,因为这个和蜂鸣器的代码大同小异,只需要新建两个跳转网页即可。

  • 相关阅读:
    Android 可拖拽的GridView效果实现, 长按可拖拽和item实时交换
    安卓开发中非常炫的效果集合
    Android开源项目分类汇总
    Linux vim 底下显示行号
    backslash and newline separated by space
    LinuxC语言读取文件,分割字符串,存入链表,放入另一个文件
    Linux C 知识 char型数字转换为int型 int型 转换为Char
    Linux 底下使用C 对文件进行遍历
    Xshell 中文乱码
    Linux底下的第一个C程序
  • 原文地址:https://www.cnblogs.com/zhangrunze/p/6581501.html
Copyright © 2020-2023  润新知