




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Goahead網絡遠程設備控制程序設計小組成員:周凱亮查偉王俊杰趙震璽張慧成第一頁,共四十八頁。一.課程設計目的和意義
1.1課程設計目的
課程設計的主要目的是通過實際的嵌入式應用系統開發實例掌握嵌入式系統設計和開發的技能和專門知識,積累實踐和工程經驗。
本課題設計嘗試移植嵌入式服務器上廣泛使用的網絡服務器中稱為“GoAhead”的網絡服務器。并且,利用CGI程序,嘗試在網絡上控制HBE-EMPOSIII-SV210的LED,7-Segment,TextLCD。1.2課程設計要求本課題所設計的系統要求實現以下功能。 1.將“GoAhead”網絡服務器移植到實驗箱目標板Linux系統上; 2.創建作為網絡服務器的索引文件使用的index.html文件; 3.完成編寫利用Web的LED,7-Segment,TextLCD的控制程序。第二頁,共四十八頁。二.課程設計的需求與方法2.2需求分析
2.2.1功能需求分析
遠程控制是當前信息技術領域的熱點,使用遠程控制技術,我們可以克服因地域差異而造成的操作不便,讓網絡的效率得到更大的發揮。隨著技術的發展與網絡的普及,目前遠程控制技術的應用領域已經相當廣泛。我們不僅可以通過遠程控制技術管理遠端電腦,解決遠端電腦的故障,與其他同事通過網絡實現遠程協作,一起編輯一份文檔或者與其他團隊成員交流信息,還可以在家里或旅途中使用公司內部網絡的數據與辦公設備,實現遠程辦公。
2.2.2性能需求分析
(1)準確性與及時性
(2)靈活性
(3)響應速度第三頁,共四十八頁。
2.2.3課題任務目標
(1)將“GoAhead”網絡服務器移植到實驗箱目標板Linux系統上;
(2)創建作為網絡服務器的索引文件使用的index.html文件;
(3)完成編寫利用Web的LED,7-Segment,TextLCD的控制程序。
2.2.4輸入輸出的要求
(1)鼠標點擊WEB輸入,通過鍵盤輸入兩個16進制的數,通過CGI程序將其轉換成8位二進制數來控制開發板中的LED0~8的暗滅。(1為亮0為滅)
(2)鼠標點擊WEB輸入,通過鍵盤輸入6位16進制的數,在開發板的七段碼中顯示出來。
(3)鼠標點擊WEB輸入,通過鍵盤在網頁的Line1和Line2中輸入一串字母或數字,在開發板的TextLCD中將輸入的這些字符對應的顯示出來。
2.2.5系統運行環境
硬件環境:pc機、HBE-EMPOSIII-SV210hardware、串口線、網線等
軟件環境:windows、ubuntu等一些應用軟件
宿主機開發環境:交叉編譯環境、調試環境
第四頁,共四十八頁。2.3軟硬件平臺設計2.3.1硬件平臺設計以太網接口S5PV210(ARMCortexTM-A8Core)SDRAMNANDFLASHNORFLASHSD卡接口系統電源
嵌入式網絡控制系統通過串行接口直接傳送到S5PV210微處理器上的Web服務器,之后通過瀏覽器,用戶可以方便的監測控制。硬件平臺設計框圖如圖所示:第五頁,共四十八頁。2.3.2軟件平臺設計
嵌入式網絡控制系統通過RS-232串行接口直接傳送到SamsungS5PV210微處理器上的WEB服務器,之后通過瀏覽器,用戶可以方便的監測控制。
因此系統軟件部分主要由數據采集、數據傳輸、服務器數據處理和CGI程序訪問等幾大部分。系統工作流程如下圖所示:PCIECGI應用程序驅動程序HTML網頁數據采集程序第六頁,共四十八頁。2.3.3Goahead服務器的特點以及使用方式 Goahead服務器是一款主要面向嵌入式系統的Web服務器。 GoAheadWebserver是跨平臺的服務器軟件它的特點是: 1、很小的內存消耗 2、支持認證功能DigestAccessAuthentication(DAA) 3、支持安全的通信,例如SSL(安全的套接字層) 4、支持動態Web頁面,如ASP頁面 5、可以使用傳統的C語言編程定制Web頁面里的HTML標簽 6、支持CGI(公共網關編程接口) 7、嵌入式的JavaScript腳本翻譯器 8、獨特的URL分析器第七頁,共四十八頁。三.課程設計的步驟與實現3.1GoAhead網絡服務器移植 1.下載Goahead源碼 2.GoAhead源碼復制及解壓縮 3.為了GoAhead編譯的源碼修改對“Makefile”進行修改
main.c和misc.c文件 4.GoAhead編譯生成了“webs”網絡服務器執行文件和“libwebs.a”庫 5.創建作為網絡服務器的索引文件使用的index.html文件 6.創建在目標板上連接網絡服務器時出現的網頁目錄(/web),創建包含cgi的目錄(/web/cgi-bin)。 7.向目標板下載GoAhead執行文件及main.html 8.在目標板上運行GoAhead 9.通過主機PC的網頁瀏覽器連接網絡服務器
第八頁,共四十八頁。3.2通過HTML中的CGI接口完成對開發板的鏈接開始編譯HTML文件(如:first.html)編譯.c文件(如:first.c)通過gcc.將c文件生成CGI文件將HTML.cgi文件用TFTP指令下載到開發板并運行結束 CGI(公用網關接口)規定了Web服務器調用其他可執行程序(CGI程序)的接口協議標準。Web服務器通過調用CGI程序實現和Web瀏覽器的交互,也就是CGI程序接受Web瀏覽器發送給Web服務器的信息,進行處理,將響應結果再回送給Web服務器及Web瀏覽器。CGI程序一般完成Web網頁中表單(Form)數據的處理、數據庫查詢和實現與傳統應用系統的集成等工作。CGI接口標準包括:1標準輸入
可通過標準輸入(stdin)從Web服務器得到輸
入信息2環境變量 Web服務器和CGI接口設置了自己的一些環
境變量,用來向CGI程序傳遞一些重要的參數3標準輸出
通過標準輸出(stdout)將輸出信息傳送給Web服務器(html形式),就在命令行狀態調試CGI程序,并且得到它們的輸出。第九頁,共四十八頁。虛擬機及超級終端截圖:第十頁,共四十八頁。第十一頁,共四十八頁。第十二頁,共四十八頁。通過HTML中的CGI接口完成對開發板的鏈接
實驗截圖:第十三頁,共四十八頁。第十四頁,共四十八頁。3.3嵌入式Web服務器的實現
3.3.1利用Web的LED控制程序
LED控制程序創建創建8bitled.html;8bitled.c文件LED控制程序編譯8bitled.html和8bitled.cgi復制到/tftpboot目錄中向目標板下載LED控制程序通過tftp下載8bitled.html和8bitled.cgi,并復制到/web和/web/cgi-bin接下來,通過主機PC的網頁瀏覽器連接網絡服務器
并向地址欄中輸入“8bitled.html”并連接,則8bitled.html網頁運行。
向地址欄中輸入“65/8bitled.html
向文本框中輸入兩位十六進制數并單擊input按鈕。在這里,輸入“1a”后,單擊“input”按鈕。第十五頁,共四十八頁。
LED控制頁面運行確認及測試
實驗截圖:第十六頁,共四十八頁。第十七頁,共四十八頁。第十八頁,共四十八頁。第十九頁,共四十八頁。3.3.27-Segment設備驅動程序7Segment控制程序創建vi7segment.htmlvi7segment.c7Segment控制程序編譯將7segment.html和7segment.cgi文件復制到/tftpboot目錄中。向目標板下載7Segment控制程序通過tftp下載7segment.html和7segment.cgi文件,向/web和/web/cgi-bin目錄中復制文件。接下來,通過主機PC的網頁瀏覽器連接網絡服務器。
如果運行網頁瀏覽器并向地址欄中輸入“7segment.html”并連接,則7segment.html網頁運行。
向地址欄中輸入“”。
向文本框中輸入六位十進制數并單擊input按鈕。在這里,輸入”123456”后單擊“input”按鈕。第二十頁,共四十八頁。
7segment控制頁面運行確認及測試
實驗截圖:第二十一頁,共四十八頁。第二十二頁,共四十八頁。3.3.3利用Web的textlcd控制程序
Textlcd控制程序創建創建textlcd.html創建textlcd.c編譯textlcd控制程序將textlcd.html和textlcd.cgi文件復制到/tftpboot目錄中。向目標板下載textlcd控制程序下載textlcd.html和textlcd.cgi文件,向/web和/web/cgi-bin目錄中復制文件。接下來,通過主機PC的網頁瀏覽器連接網絡服務器。
如果運行網頁瀏覽器并向地址欄中輸入“textlcd.html”并連接,則textlcd.html網頁運行。
向地址輸入欄輸入“”。
輸入文本框的Line1和Line2文字并單擊“input”按鈕。
如果畫面上出現“LCDDone”消息窗,則可以清楚/web/cgi-bin中的textlcd.cgi程序順利運行。第二十三頁,共四十八頁。
textlcd控制頁面運行確認
實驗截圖:第二十四頁,共四十八頁。第二十五頁,共四十八頁。第二十六頁,共四十八頁。textlcd控制頁面運行確認
實驗截圖:趙震璽周凱亮*查偉王俊杰第二十七頁,共四十八頁。四
總結4.1實驗認知與發現的問題
本次課程設計是嵌入式開發與應用,雖然只有短短的兩個星期,但在這兩個星期里我們學到了很多。首先,我們對計嵌入式開發有了進一步的掌握。基本掌握了Goahead網絡遠程設備控制并在網絡上控制HBE-EMPOSIII-SV210的LED,7-Segment,TextLCD。但在完成這些題目的同時,我們也發現了自己的很多問題:
第一,比如很多的專業術語都沒有聽說過,只好在同學的幫助和網絡的幫助下,勉勉強強完成了任務,我們也知道了自己的很多不足,在往后的時間中還要繼續研究。
第二,在我們使用tftp傳送文件的時候忘記修改虛擬機IP地址導致沒有傳送文件成功。
第三,在我們將文件傳送成功的時候,網頁文件已經能在goahead中顯示出來,但是輸入數據的時候,開發板并沒有顯示出來,后面才發現是傳送文件時,忘記用chomd命令給CGI文件加上權限,我們通過分析及時的解決了這個問題。第四,我們在完成實驗后的第二天再次開啟虛擬機并不能將這些網頁文件打開,原來是每次啟動虛擬機它的IP地址都是原地址,要將它改成00并通過超級終端運行網頁文件。
第五,在運行網頁文件的時候,首先要查看進程,要將進程中bin目錄下的webs進程殺除再運行網頁文件才能將它打開。
最后,通過本次實驗我們知道了團隊力量的重要性,有的題目單靠單人的力量是很難完成的,但是經過大家的合作,相比一個人來說完成的容易了點。第二十八頁,共四十八頁。4.2實驗效果分析
本次實驗雖然能將開發板中的LED,7-Segment,TextLCD成功顯示出來。但是本次實驗的效果仍有幾點不足。
第一:通過goahead網頁服務器編寫LED,7-Segment,TextLCD的網頁較為簡單。
第二:控制開發板中7-Segment的顯示時間沒有進行精確的控制。4.3課程設計心得體會
本次課程設計也獲得一個經驗:在寫一個程序的時候,一定要事先把程序原理方框圖化出來。以前總覺得這樣做沒必要,很浪費時間。但是,這次課程設計完全改變了我以前的那種錯誤的認識。這次課程設計中碰到的那些需要很多代碼才能完成的任務,畫程序方框圖是很有必要的,因為通過程序方框圖,在做設計的過程中,我們每一步要做什么,每一步要完成什么任務都有一個很清楚的思路,而且在程序測試的過程中也有利于查錯。
經過本次試驗我們這次做的實驗還算是比較成功的,因為我們同時也在不知不覺中提高了動手能力和獨立分析思考問題、解決問題的能力。
這兩個星期的嵌入式應用的課程設計,使我們更加系統的認識和了解Goahead網絡遠程設備控制的工作原理,更深層次的認識了嵌入式開發,相信在今后的學習以及相關工作上會有很大幫助。致謝
感謝孫老師和范老師在課設中給予的指導和鼓勵。感謝學校提供機會,能夠讓我們在實踐中培養動手能力,將理論與實際結合再一起。第二十九頁,共四十八頁。五.代碼附錄參考資料5.17segment實驗代碼附錄
/*********************************************************************** 7-SegmentCGIProgram**********************************************************************/#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<sys/types.h>#include<sys/mman.h>#include<sys/stat.h>#include<fcntl.h>#include<sys/ioctl.h>#include<termios.h>#defineFPGA_BASEADDRESS 0x88000000#defineSEG_GRID_OFFSET 0x30#define SEG_DATA_OFFSET 0x32typedefstruct{ charname[128]; charval[128];}entry;第三十頁,共四十八頁。voidgetword(char*word,char*line,charstop){ intx=0,y=0; for(x=0;((line[x])&&(line[x]!=stop));x++)word[x]=line[x]; word[x]='\0'; if(line[x])++x; while(line[y++]=line[x++]);}intsizeofword(char*word){ inti=0; for(i=0;i<10;i++){ if(word[i]=='\0')break; } returni;}unsignedintGetsegcode(charx){ unsignedintcode;switch(x){ case'0':code=0xfc;break; case'1':code=0x60;break; case'2':code=0xda;break; case'3':code=0xf2;break; case'4':code=0x66;break; case'5':code=0xb6;break; case'6':code=0xbe;break;
case'7':code=0xe4;break;
第三十一頁,共四十八頁。case'8':code=0xfe;break; case'9':code=0xf6;break; case'a': case'A':code=0xfa;break; case'b': case'B':code=0x3e;break; case'c': case'C':code=0x1a;break; case'd': case'D':code=0x7a;break; case'e': case'E':code=0x9e;break; case'f': case'F':code=0x8e;break; default:code=0;break; } returncode;}intmain(){ char*cl; intk; unsignedintlow=0,high=0; entryentries; unsignedshortdigit[6]={0x20,0x10,0x08,0x04,0x02,0x01}; unsignedshortdata[6]; inti,j,m; intfd; unsignedshort*addr_fpga; unsignedshort*addr_grid,*addr_data; printf("Content-type:text/html\n\n"); printf("<html>\n<head><title>7-Segmentcgiprogram</title></head>\n");第三十二頁,共四十八頁。printf("<body>\n"); if((fd=open("/dev/mem",O_RDWR|O_SYNC))<0){ printf("memopenfail\n"); exit(1); } addr_fpga=(unsignedshort*)mmap(NULL,4096,PROT_READ|PROT_WRITE,MAP_SHARED,fd,FPGA_BASEADDRESS); addr_grid=addr_fpga+SEG_GRID_OFFSET/sizeof(unsignedshort); addr_data=addr_fpga+SEG_DATA_OFFSET/sizeof(unsignedshort); if(addr_grid<0|addr_data<0){ close(fd); printf("mmaperror\n"); exit(1); } cl=(char*)getenv("QUERY_STRING"); getword(,cl,'='); getword(entries.val,cl,'&'); k=sizeofword(entries.val); for(i=0;i<k;i++) data[(k-i)-1]=Getsegcode(entries.val[i]); for(j=0;j<200;j++){ for(i=0;i<k;i++){ *addr_grid=digit[i]; *addr_data=data[i]; for(m=0;m<65536;m++); } }
*addr_grid=~digit[0]; *addr_data=0; munmap(addr_grid,4096); munmap(addr_data,4096); close(fd);第三十三頁,共四十八頁。if(k!=0) printf("<br><center>7-SegmentDone<br></center>"); elseprintf("<br><center>Youenteredthewrongvalue!<br></center>"); printf("<hr>"); printf("</body>\n</html>"); return0;}
5.17segment
HTML源碼附錄
<html><head><title>7segmentcgiprogram</title></head><body> <formmethod=getaction="cgi-bin/7segment.cgi"> <p><p><p>向7-Segment中輸入要顯示的十進制數。
<inputtype="text"name="value"maxlength="6"size="6">第三十四頁,共四十八頁。5.2LED實驗代碼附錄
<inputtype="submit"name="button"value="input"> /*********************************************************************8-BitLEDCGIProgram
**********************************************************************/#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<sys/types.h>#include<sys/mman.h>#include<sys/stat.h>#include<fcntl.h>#include<sys/ioctl.h>#include<termios.h>#defineFPGA_BASEADDRESS 0x88000000#defineLED_OFFSET 0x20typedefstruct{ charname[128]; charval[128];}entry;voidgetword(char*word,char*line,charstop){ intx=0,y=0; for(x=0;((line[x])&&(line[x]!=stop));x++)word[x]=line[x]; word[x]='\0'; if(line[x])++x; while(line[y++]=line[x++]);}第三十五頁,共四十八頁。intmain(){ intfd;unsignedshort*addr_fpga,*addr_led; char*cl; unsignedshortval; entryentries; printf("Content-type:text/html\n\n"); printf("<html>\n<head><title>8bitLEDcgiprogram</title></head>\n"); printf("<body>\n"); cl=(char*)getenv("QUERY_STRING"); getword(,cl,'='); getword(entries.val,cl,'&'); val=(unsignedshort)strtol(entries.val,NULL,16); if(val==0){ if(!((entries.val[0]=='0'&&entries.val[1]=='\0')||(entries.val[0]=='0'&&entries.val[1]=='0'))){ printf("<p>Youenteredthewrongvalue!"); exit(1);} } if((fd=open("/dev/mem",O_RDWR|O_SYNC))<0){ printf("memopenfail,%d\n",fd); exit(1); } addr_fpga=(unsignedshort*)mmap(NULL,4096,PROT_READ|PROT_WRITE,MAP_SHARED,fd,FPGA_BASEADDRESS); addr_led=addr_fpga+LED_OFFSET/sizeof(unsignedshort); *addr_led=val|0x100; munmap(addr_fpga,4096); close(fd); printf("<br><center>Youentered<b>'0x%x'</b></center>",val); printf("<hr>"); printf("</body>\n</html>"); return0;}第三十六頁,共四十八頁。<html><head><title>8bitledcgiprogram</title></head><body><formmethod=getaction="cgi-bin/8bitled.cgi"><p><p><p>輸入兩位十六進制值: <inputtype="text"name="value"maxlength="2"size="2"><inputtype="submit"name="button"value="input"></form>5.2LED
HTML源碼附錄
第三十七頁,共四十八頁。5.3LCD實驗代碼附錄
/****************************************************************** TextLCDCGIProgram*****************************************************************/#include<stdio.h>#include<string.h>#include<stdlib.h>#include<unistd.h>#include<sys/mman.h>#include<fcntl.h>#include<termios.h>#defineFPGA_BASEADDRESS 0x88000000#defineTEXTLCD_OFFSET 0x10voidsetcommand(unsignedshortcommand);voidwritebyte(charch);voidinitialize_textlcd();voidwriteTextLcd(introw,char*str,intlength);intfunction_set(introws,intnfonts);intdisplay_control(intdisplay_enable,intcursor_enable,intnblink);intcusrsor_shit(intset_screen,intset_rightshit);intentry_mode_set(intincrease,intnshift);intreturn_home();intclear_display();intset_ddram_address(intpos);voidsplitword(char*out,char*in,charstop);voidunescape_url(char*url);charx2c(char*x);unsignedshort*pTextlcd;typedefstruct{ charname[128]; charval[128];}entry[2];第三十八頁,共四十八頁。intget_get(entryentries){ charqs[128]; inti; //bzero(qs,sizeof(qs)); sprintf(qs,"%s\0",getenv("QUERY_STRING")); for(i=0;*qs&&i<2;i++){ splitword(entries[i].val,qs,'&'); unescape_url(entries[i].val); splitword(entries[i].name,entries[i].val,'='); } returni;}voidsplitword(char*out,char*in,charstop){ inti,j; while(*in=='')in++; for(i=0;in[i]&&(in[i]!=stop);i++)out[i]=in[i]; out[i]='\0'; if(in[i])++i; while(in[i]=='')i++; for(j=0;in[j];)in[j++]=in[i++];}voidunescape_url(char*url){ inti,j;for(i=0,j=0;url[j];++i,++j){ if((url[i]=url[j])=='%'){ url[i]=x2c(&url[j+1]); j+=2; }elseif(url[i]=='+'){ url[i]=''; } }第三十九頁,共四十八頁。 url[i]='\0';}charx2c(char*x){ charc;
c=(x[0]>='A'?((x[0]&0xdf)-'A')+10:(x[0]-'0')); c*=16; c+=(x[1]>='A'?((x[1]&0xdf)-'A')+10:(x[1]-'0')); returnc;}intmain(intargc,char**argv){ chardata[2][128]; intfd; entryentries; char*cl; unsignedshort*addr_fpga; printf("Content-type:text/html\n\n"); cl=(char*)getenv("QUERY_STRING"); get_get(entries); if((fd=open("/dev/mem",O_RDWR|O_SYNC))<0){ perror("memopenfail\n"); exit(1); } addr_fpga=(unsignedshort*)mmap(NULL,4096,PROT_READ|PROT_WRITE,MAP_SHARED,
fd,FPGA_BASEADDRESS); pTextlcd=addr_fpga+TEXTLCD_OFFSET/sizeof(unsignedshort); if(pTextlcd<0){ close(fd);printf("mmaperror\n");exit(1); }
initialize_textlcd(); strcpy(data[0],entries[0].val);第四十頁,共四十八頁。 strcpy(data[1],entries[1].val); writeTextLcd(1,data[0],strlen(data[0])); writeTextLcd(2,data[1],strlen(data[1])); munmap(pTextlcd,4096); close(fd); printf("<br><center>LCDDone!</center><br>"); return0;}voidsetcommand(unsignedshortcommand){ command&=0x00FF; *pTextlcd=command|0x0000; usleep(1000); *pTextlcd=command|0x0100; usleep(1000); *pTextlcd=command|0x0000; usleep(1000);
}voidwritebyte(charch){ unsignedshortdata; data=ch&0x00FF; *pTextlcd=data&0x400; usleep(1000); *pTextlcd=data|0x500; usleep(1000); *pTextlcd=data|0x400; usleep(1000);}
第四十一頁,共四十八頁。voidinitialize_textlcd(){ function_set(2,0);//FunctionSet:8bit,display2lines,5x7mod display_control(1,0,0);//Displayon,Cursoroff clear_display();//Displayclear entry_mode_set(1,0);//EntryModeSet:shiftrightcursor return_home();//gohome}//sendFunctionSetcommandtothetextlcd//rows=2:=>2rows,rows=1=>1rows//nfonts=1:=>5x10dot,nfonts=0:5x7dotintfunction_set(introws,intnfonts){ unsignedshortcommand=0x30;if(rows==2)command|=0x08; elseif(rows==1)command&=0xf7; elsereturn-1;
command=nfonts?(command|0x04):command; setcommand(command);
return1;}intdisplay_control(intdisplay_enable,intcursor_enable,intnblink){ unsignedshortcommand=0x08; command=display_enable?(command|0x04):command; command=cursor_enable?(command|0x02):command; command=nblink?(command|0x01):command; setcommand(command); return1;}第四十二頁,共四十八頁。intcusrsor_shit(intset_screen,intset_rightshit){ unsignedshortcommand=0x10; command=set_screen?(command|0x08):command; command=set_rightshit?(command|0x04):command; setcommand(command); return1;}intentry_mode_set(intincrease,intnshift){ unsignedshortcommand=0x04; command=increase?(command|0x2):command; command=nshift?(command|0x1):command; setcommand(command); return1;}intreturn_home(){ unsignedshortcommand=0x02; setcommand(command); return1;}intclear_display(){ unsignedshortcommand=0x01; setcommand(command); return1;}
intset_ddram_address(intpos){ unsignedshortcommand=0x80; command+=pos; setcommand(command); return1;}第四十三頁,共四十八頁。voidwriteTextLcd(introw,char*str,intlength){ inti;
if(row==1)set_ddram_address(0x0); elseif(row==2)set_ddram_address(0x40);
for(i=0;i<length;i++)writebyte(str[i]);}
<html><head><title>TextLCDCGIProgram</title></head><body> <formmethod=getaction="cgi-bin/textlcd.cgi"> <p><p><p>向LCD中輸入要顯示的字符。<br><br>Line1 <inputtype="text"name="form2"maxlength="16"size="20"><br>Line2
#include<stdio.h>intmain(){printf("Content-type:text/html\n\n");printf("<html>\n<head><title>TheFirstCGIprogram</title></head>\n");printf("<body>\n<center>ItisaCGIprogramtest</center>\n<body>\n</html>");return0;}<html><head><title>TESTCGIPROGRAM!</title></head><body><c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- CJ/T 305-2009家用燃氣灶具陶瓷面板
- DB13T 5104-2019 野生酸棗撫育技術規程
- DB13T 2878-2018 設施蔬菜膜下滴灌水肥一體化工程技術規范
- 證券投資顧問考試試題及答案大全
- 招聘司機筆試題目及答案
- 廣東省封開縣廣信中學2024-2025學年高一下學期第二次教學質量檢測物理試題
- 云南成人自考考試題庫及答案
- 源訊的筆試題目及答案
- 語文編制筆試題目及答案
- 《幼兒園教育活動設計與指導》課件-第六章 第一節 掌握幼兒園各領域教育活動的設計方法(上)-1健康
- 精裝分包勞務合同協議書
- 2025-2030中國酸奶冰淇淋市場需求前景預測及投資效益盈利性研究報告
- 2025年高考英語應用文第09講 讀后續寫分話題萬能結尾滿分句(講義)
- 2025年四年級下冊美術期末測試題附答案
- 圖像編輯基礎Photoshop試題及答案
- 新媒體國企面試題及答案
- 寶寶改姓夫妻協議書
- 宣城汽車精密零部件項目商業計劃書
- 2021入河(海)排污口三級排查技術指南
- 央企華潤集團杭州片區年度品牌傳播策略案
- 行為:2024年全球影視報告-YouGov
評論
0/150
提交評論