嵌入式第9次实验

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

 

学号:140201229             姓名:何丹

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

 

一、实验目的:

1.熟悉WWW技术中的SSIServer Side Include)技术。

2.学会使用SSI技术编写代码把当前开发板内RTC的时钟及日期数据送往PC机浏览器显示。

3.学会使用SSI技术把当前开发板的按键(KEY2KEY1)次数信息送往PC机浏览器显示。

 

二、实验内容:

1.编写代码完成Web服务器端发送RTC实时时

 钟信息的任务。

2.编写代码完成Web服务器端发送按键(KEY2KEY1)按键次数的任务。

 

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

实验原理:

SSI技术简介:服务器端嵌入SSI(Server Side Include)是一种基于服务器的网页制作技术。大多数的WEB服务器等均支持SSI命令。将内容发送到浏览器之前,可以使用“SSI”指令将文本、图形或应用程序信息包含到网页中。因为包含SSI指令的文件要求特殊处理,所以必须为所有SSI文件赋予SSI文件扩展名。默认的扩展名 是.stm、.shtm、.shtml。

SSI是为WEB服务器提供的一套命令,这些命令只要直接嵌入到HTML文档的注释内容之中即可。如:<!=--#include file = “info.htm”-->就是一条SSI指令,其作用是将“info.htm”的内容拷贝到当前页面中。<!=-- -->是HTML语法中的注释,当WEB服务器不支持SSI时,会忽略这些信息。

 

实验过程:完成Web服务器端发送RTC实时时钟信息以及按键(KEY2KEY1)按键次数的任务。

网页页面设计:

<HTML>

<HEAD>

<META http-equiv="refresh" content="1">

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

</HEDA>

<BODY>

<DIV align = "center">

<TABLE border = "3" cellpadding="15">

<CAPTION><H3>RTC实时时钟<H3></CAPTION>

<TR>

<TD width="200">现在时间</TD>

<TD width="200"><!--#time--></TD>

</TR>

<TR>

<TD width="200">现在日期</TD>

<TD width="200"><!--#date--></TD>

</TR>

<TR>

<TD width="200">Key2</TD>

<TD width="200"><!--#key2--></TD>

</TR>

<TR>

<TD width="200">key1</TD>

<TD width="200"><!--#key1--></TD>

</TR>

 

</TABLE>

</DIV>

</BODY>

</HTML>

 

 

实验代码设计:(main函数设计)

#include "sys.h"

#include <string.h>

#include "delay.h"

#include "httpd.h"

#include "lwip/tcp.h"

#include "fs.h"

#include "lwip_comm.h"

 

 

void system_init(void);

 void RTCTime_Handler(char *pcInsert);

 void RTCDate_Handler(char *pcInsert);

 void RTCKey1_Handler(char *pcInsert);

 void RTCKey2_Handler(char *pcInsert);

const char *ppcTAGs[]=

{

 "time",

"date",

"key2",

"key1"

};

u8 key1=0,key2=0;

void EXTI2_IRQHandler(void){

delay_ms(10);

key1++;

printf("%d\n",key1);

EXTI_ClearITPendingBit(EXTI_Line2);

}

void EXTI3_IRQHandler(void){

delay_ms(10);

key2++;

printf("%d\n",key2);

EXTI_ClearITPendingBit(EXTI_Line3);

}

void EXTIX_Init(void)

{

NVIC_InitTypeDef   NVIC_InitStructure;

EXTI_InitTypeDef   EXTI_InitStructure;

KEY_Init();

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource2);//PE2

SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource3);//PE3

EXTI_InitStructure.EXTI_Line = EXTI_Line2 | EXTI_Line3 /*| EXTI_Line4*/;

  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;

  EXTI_InitStructure.EXTI_LineCmd = ENABLE;

  EXTI_Init(&EXTI_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  NVIC_Init(&NVIC_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  NVIC_Init(&NVIC_InitStructure);

}

int main(void)

{

   system_init();

{

RTC_InitTypeDef RTC_InitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);

PWR_BackupAccessCmd(ENABLE);

RCC_LSEConfig(RCC_LSE_ON);

RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);

while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);

RCC_RTCCLKCmd(ENABLE);

while(RTC_Wait_Synchro());

RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;

RTC_InitStructure.RTC_SynchPrediv = 0xFF;

RTC_InitStructure.RTC_AsynchPrediv =0x7F;

RTC_Set_Time(10,0,0,0);

RTC_Set_Date(17,3,20,1);

}

    EXTIX_Init();

 

while(1)

{

     lwip_periodic_handle();

//printf("asdfsadfsadfinit\n");

}

}

u16_t SSIHandler(int iIndex,char *pcInsert,int iInsertLen)

{

 

switch(iIndex)

{

case 0:

        RTCTime_Handler(pcInsert);

          break;

case 1:

      RTCDate_Handler(pcInsert);

          break;

case 2:

      RTCKey2_Handler(pcInsert);

          break;

case 3:

      RTCKey1_Handler(pcInsert);

          break;

}

return strlen(pcInsert);

}

void RTCTime_Handler(char *pcInsert)

{

  u8 hour,min,sec,ampm;

RTC_Get_Time(&hour,&min,&sec,&m);

*(pcInsert+0) = (char)((hour/10)+0x30);

*(pcInsert+1) = (char)((hour%10)+0x30);

*(pcInsert+2) = ':';

 *(pcInsert+3) = (char)((min/10)+0x30);

*(pcInsert+4) = (char)((min%10)+0x30);

*(pcInsert+5) = ':';

*(pcInsert+6) = (char)((sec/10)+0x30);

*(pcInsert+7) = (char)((sec%10)+0x30);

}

void RTCDate_Handler(char *pcInsert)

{

u8 year,month,day,week;

RTC_Get_Date(&year,&month,&day,&week);

 

*(pcInsert+0) = '2';

*(pcInsert+1) = '0';

*(pcInsert+2) = (char)((year/10)+0x30);

*(pcInsert+3) = (char)((year%10)+0x30);

*(pcInsert+4) = '-';

*(pcInsert+5) = (char)((month/10)+0x30);

*(pcInsert+6) = (char)((month%10)+0x30);

*(pcInsert+7) = '-';

*(pcInsert+8) = (char)((day/10)+0x30);

*(pcInsert+9) = (char)((day%10)+0x30);

*(pcInsert+10) = ' ';

*(pcInsert+11) = 'w';

*(pcInsert+12) = 'e';

*(pcInsert+13) = 'e';

*(pcInsert+14) = 'k';

*(pcInsert+15) = ':';;

*(pcInsert+16) = (char)(week+0x30);

}

void RTCKey1_Handler(char *pcInsert)

{

if (key1<10){

*(pcInsert+0) = (char)(key1+0x30);

*(pcInsert+1) = '\0';}

else{

*(pcInsert+0) = (char)((key1/10)+0x30);

*(pcInsert+1) = (char)((key1%10)+0x30);

*(pcInsert+2) = '\0';

}

}

void RTCKey2_Handler(char *pcInsert)

{

if (key2<10){

*(pcInsert+0) = (char)(key2+0x30);

*(pcInsert+1) = '\0';}

else{

*(pcInsert+0) = (char)((key2/10)+0x30);

*(pcInsert+1) = (char)((key2%10)+0x30);

*(pcInsert+2) = '\0';

}

}

 

 

 

 

 

   

posted @ 2017-03-27 00:34  bgd140201229  阅读(186)  评论(0编辑  收藏  举报