嵌入式軟件設計第8次實驗報告

學號:140201211                   姓名:張潤澤html

組別:第三組                實驗地點:D19瀏覽器

 

1、實驗目的:服務器

1.熟悉WWW技術中的CGI(公共網關接口)技術。網絡

2.學會使用CGI技術編寫C語言代碼驅動嵌入式開發板的LED燈 和蜂鳴器。函數

2、實驗內容:測試

1.編寫代碼完成Web服務器端蜂鳴器的驅動。調試

2.編寫代碼完成Web服務器端LED燈的驅動。3、實驗過程描述及結果展現:htm

一、實驗原理blog

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爲高電平時,蜂鳴器響;爲低電平時,蜂鳴器不響。

  

二、程序代碼

(運行代碼)

#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>

 

3、總結及實驗心得:

今天課上,咱們的任務有兩個,第一個是經過CGI技術編寫代碼驅動嵌入式開發板的蜂鳴器,第二個是驅動開發板的LED燈,第一個實驗老師帶領咱們作,跟着他仔細打完代碼以後,咱們插上了昨天本身親手裝的網線鏈接開發板和主機的兩端,而後配置了一下電腦的網絡鏈接配置,把ip地址手動修改成192.168.3.60,接着我就開始編譯調試了,等了大約一分鐘後,開發板上的ip已經顯示配置完成,因而我打開了控制網頁,點擊了on按鈕,不出所料,蜂鳴器真的響了,但是還有一點瑕疵,那就是點擊off的時候跳轉到了一個錯誤網頁,這就須要本身在代碼裏添加一點代碼,而後我又仿照老師剛纔打的代碼,增長了一行跳轉,接着又在makefsdata裏新建了一個off的網頁,又從新編譯了一下,大約一分鐘,我刷新了一下網頁,而後點擊了on按鈕,蜂鳴器響了,接着又點擊了off按鈕,剛纔的問題沒有發生,網頁又成功彈到了起始頁,最後還剩一個驅動LED燈,由於這個和蜂鳴器的代碼大同小異,只須要新建兩個跳轉網頁便可。

相關文章
相關標籤/搜索