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

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

 

学号:140201229             姓名:何丹

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

 

一、实验目的:

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

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

二、实验内容:

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

2.编写代码完成Web服务器端LED灯的驱动。

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

     CGI技术简介:公共网关接口CGICommon Gateway Interface)是WWW技术中最重要的技术之一。CGI是外部应用程序与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的规程。CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI在物理上是一段程序,运行在服务器上,提供同客户端HTML页面的接口。

     绝大多数的CGI程序被用来解释处理来自表单的输入信息,并在服务器产生相应的处理,或将相应的信息反馈给浏览器,CGI程序使网页具有交互功能。

(一)对页面进行设计

Index页面设计:

<HTML>

   <HEAD>

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

   </HEAD>

   <BODY>

<P>

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

</P>

<H1 align="center">嵌入式web服务器ledBeep测试</H1>

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

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

LED:

<input type="radio" name="LED" value="LEDON">ON

<input type="radio" name="LED" value="LEDOFF" 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" target="open">

BEEP:

<select name="beep" >

<option value="BEEPON">ON

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

</select>

<BR><BR>

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

</FORM>

</DIV>

<iframe name="open" width=0 height=0></iframe>

   </BODY>

</HTML>

 

 

 

 

 

 

 

 

 

 

BEEP_ON页面设计:

<HTML>

   <HEAD>

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

   </HEAD>

   <BODY>

<P>

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

</P>

<H1 align="center">嵌入式web服务器ledBeep测试</H1>

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

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

LED:

<input type="radio" name="LED" value="LEDON">ON

<input type="radio" name="LED" value="LEDOFF" 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" >

<option value="BEEPON">ON

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

</select>

<BR><BR>

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

</FORM>

</DIV>

   </BODY>

</HTML>

 

 

LED_ON页面设计

<HTML>

   <HEAD>

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

   </HEAD>

   <BODY>

<P>

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

</P>

<H1 align="center">嵌入式web服务器ledBeep测试</H1>

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

<FORM method="get"action="./led.cgi" target="open">

LED:

<input type="radio" name="LED" value="LEDON">O

<input type="radio" name="LED" value="LEDOFF" 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" target="open">

BEEP:

<select name="beep" >

<option value="BEEPON">ON

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

</select>

<BR><BR>

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

</FORM>

</DIV>

<iframe name="open" width=0 height=0></iframe>

   </BODY>

  </HTML>

 

()对STM32_MODE进行设置:

Main函数:

 

#include "sys.h"

#include <string.h>

#include "lwip_comm.h"

 

//LEDBEEP端口定义

#define LED1 PFout(10)

#define BEEP PFout(8)

 

void system_init(void);

 

//控制LEDBEEPCGI  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 handler程序调用

extern int FindCGIParameter(const char *pcToFind, char *pcParam[],int iNumParams);

int main(void)

{

system_init();//系统初始

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

{

GPIO_InitTypeDef GPIO_InitStructure;

//使能GPIO 时钟

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_InitTypeDef  GPIO_InitStructure;

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);

 

  //GPIOF9,F10

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;

  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz

  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;

  GPIO_Init(GPIOF, &GPIO_InitStructure);

GPIO_SetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);

}

  while(1)

  {

lwip_periodic_handle();//LWIP轮询任务

  }

}

//BEEPCGI 控制句柄

const char *BEEP_CGI_Handler(int iIndex, int iNumParams,char *pcParam[],char *pcValue[])

{

  u8 i=0;

iIndex = FindCGIParameter("beep",pcParam,iNumParams);//找到BEEP的索引号

 

if(iIndex !=-1)

{

    BEEP=0;//蜂鸣器关闭

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

{

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

{

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

 

BEEP =1;//蜂鸣器打开

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

BEEP =0;//蜂鸣器关闭

}

}

  }

}

//CGI LED 控制句柄

const char* LEDS_CGI_Handler(int iIndex,int iNumParams,char *pcParam[],char *pcValue[])

{

u8 j=0;

iIndex = FindCGIParameter("LED",pcParam,iNumParams);//找到LED的索引号

 

if(iIndex !=-1)

{

    LED1=0;//LED关闭

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

{

if (strcmp(pcParam[j],"LED") == 0)//查找CGI参数

{

if(strcmp(pcValue[j],"LEDON") == 0)

LED1 =1;//打开

else if(strcmp(pcValue[j],"LEDOFF")==0)

LED1 =0;//关闭

}

}

  }

}

 

 

四、总结及实验心得:

    通过本次实验熟悉了WWW技术中的CGI(公共网关接口)技术。并且学会使用CGI技术编写C语言代码驱动嵌入式开发板的LED灯和蜂鸣器

在学习中跟着老师做实验时也不知不感中提高了自身水平,得到基本的训练。使我能够初步掌握嵌入式开发板的基本方法,对各门知识得到融会贯通的认识和掌握,加深对理论知识的理解。将C语言与嵌入式开发板结合,使我收获很多。

 

   

 

posted @ 2017-03-19 13:55  bgd140201229  阅读(222)  评论(0编辑  收藏  举报