版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Goahead網(wǎng)絡(luò)遠(yuǎn)程設(shè)備控制程序設(shè)計(jì)小組成員:周凱亮 查偉 王俊杰 趙震璽 張慧成一.課程設(shè)計(jì)目的的和意義義1.1課程設(shè)計(jì)計(jì)目的課程設(shè)計(jì)的主主要目的的是通過過實(shí)際的的嵌入式式應(yīng)用系系統(tǒng)開發(fā)發(fā)實(shí)例掌掌握嵌入入式系統(tǒng)統(tǒng)設(shè)計(jì)和和開發(fā)的的技能和和專門知知識,積積累實(shí)踐踐和工程程經(jīng)驗(yàn)。本課題設(shè)計(jì)計(jì)嘗試移移植嵌入入式服務(wù)務(wù)器上廣廣泛使用用的網(wǎng)絡(luò)絡(luò)服務(wù)器器中稱為為“GoAhead”的網(wǎng)絡(luò)絡(luò)服務(wù)器器。并且且,利用用CGI程序,嘗嘗試在網(wǎng)網(wǎng)絡(luò)上控控制HBE-EMPOSIII-SV210的LED,7-Segment,TextLCD。1.2課程設(shè)計(jì)計(jì)要求本課題所設(shè)設(shè)計(jì)的系系統(tǒng)要求求實(shí)現(xiàn)以以下功能能。1.將“GoA
2、head”網(wǎng)絡(luò)服服務(wù)器移移植到實(shí)實(shí)驗(yàn)箱目目標(biāo)板Linux系統(tǒng)上;2.創(chuàng)建作為網(wǎng)絡(luò)絡(luò)服務(wù)器器的索引引文件使使用的index.html文件;3.完成編寫利用用Web的LED,7-Segment,TextLCD的控制程程序。二.課程設(shè)計(jì)計(jì)的需求與方法2.2需求分析析2.2.1功能需求求分析遠(yuǎn)程控制是當(dāng)當(dāng)前信息息技術(shù)領(lǐng)領(lǐng)域的熱熱點(diǎn),使使用遠(yuǎn)程程控制技技術(shù),我我們可以以克服因因地域差差異而造造成的操操作不便便,讓網(wǎng)網(wǎng)絡(luò)的效效率得到到更大的的發(fā)揮。隨著技技術(shù)的發(fā)發(fā)展與網(wǎng)網(wǎng)絡(luò)的普普及,目目前遠(yuǎn)程程控制技技術(shù)的應(yīng)應(yīng)用領(lǐng)域域已經(jīng)相相當(dāng)廣泛泛。我們們不僅可可以通過過遠(yuǎn)程控控制技術(shù)術(shù)管理遠(yuǎn)遠(yuǎn)端電腦腦,解決決遠(yuǎn)端電電
3、腦的故故障,與與其他同同事通過過網(wǎng)絡(luò)實(shí)實(shí)現(xiàn)遠(yuǎn)程程協(xié)作,一起編編輯一份份文檔或或者與其其他團(tuán)隊(duì)隊(duì)成員交交流信息息,還可可以在家家里或旅旅途中使使用公司司內(nèi)部網(wǎng)網(wǎng)絡(luò)的數(shù)數(shù)據(jù)與辦辦公設(shè)備備,實(shí)現(xiàn)現(xiàn)遠(yuǎn)程辦辦公。2.2.2性能需求求分析(1)準(zhǔn)確性性與及時時性(2)靈活性性(3)響應(yīng)速速度2.2.3課題任務(wù)目標(biāo)(1)將“GoAhead”網(wǎng)絡(luò)服服務(wù)器移移植到實(shí)實(shí)驗(yàn)箱目目標(biāo)板Linux系統(tǒng)上;(2)創(chuàng)建作為為網(wǎng)絡(luò)服服務(wù)器的的索引文文件使用用的index.html文件;(3)完成編寫寫利用Web的LED,7-Segment,TextLCD的控制程程序。2.2.4輸入輸出出的要求(1)鼠標(biāo)點(diǎn)擊擊WEB輸入,通通
4、過鍵盤盤輸入兩兩個16進(jìn)制的數(shù)數(shù),通過CGI程序?qū)⑵淦滢D(zhuǎn)換成成8位二進(jìn)制制數(shù)來控制開發(fā)板中中的LED08的暗滅。(1為亮0為滅)(2)鼠標(biāo)點(diǎn)點(diǎn)擊WEB輸入,通通過鍵盤盤輸入6位16進(jìn)制的數(shù)數(shù),在開開發(fā)板的的七段碼中顯示示出來。(3)鼠標(biāo)點(diǎn)擊擊WEB輸入,通過鍵鍵盤在網(wǎng)網(wǎng)頁的Line1和Line2中輸入一一串字母母或數(shù)字字,在開發(fā)板的的TextLCD中將輸入入的這些些字符對對應(yīng)的顯顯示出來來。2.2.5系統(tǒng)運(yùn)行行環(huán)境硬件環(huán)境:pc機(jī)、HBE-EMPOSIII-SV210hardware、串口線、網(wǎng)線等等軟件環(huán)境境:windows、ubuntu等一些應(yīng)應(yīng)用軟件件宿主機(jī)開發(fā)環(huán)境境:交叉叉編譯環(huán)環(huán)境、
5、調(diào)調(diào)試環(huán)境境2.3軟硬件平平臺設(shè)計(jì)計(jì)2.3.1硬件平臺臺設(shè)計(jì)以太網(wǎng)接口S5PV210(ARMCortexTM-A8Core)SDRAMNAND FLASHNORFLASHSD卡接口系統(tǒng)電源源嵌入式網(wǎng)絡(luò)控制制系統(tǒng)通過串行行接口直接接傳送到S5PV210微處理器器上的Web服務(wù)器,之后通通過瀏覽覽器,用用戶可以以方便的的監(jiān)測控控制。硬件平臺設(shè)計(jì)計(jì)框圖如如圖所示示:2.3.2軟件平臺臺設(shè)計(jì)嵌入式網(wǎng)絡(luò)控制制系統(tǒng)通通過RS-232串行接口口直接傳傳送到Samsung S5PV210微處理器器上的WEB服務(wù)器,之后通通過瀏覽覽器,用用戶可以以方便的的監(jiān)測控控制。因此系統(tǒng)軟件件部分主主要由數(shù)數(shù)據(jù)采集集、數(shù)據(jù)
6、據(jù)傳輸、服務(wù)器器數(shù)據(jù)處處理和CGI程序訪問問等幾大大部分。系統(tǒng)工工作流程程如下圖圖所示: PCIECGI應(yīng)用程序序驅(qū)動程序序HTML網(wǎng)頁數(shù)據(jù)采集集程序2.3.3Goahead服務(wù)器的的特點(diǎn)以以及使用用方式Goahead服務(wù)器是是一款主主要面向向嵌入式式系統(tǒng)的的Web服務(wù)器。GoAheadWebserver是跨平臺臺的服務(wù)務(wù)器軟件它的特點(diǎn)點(diǎn)是:1、很小的的內(nèi)存消消耗2、支持認(rèn)認(rèn)證功能能DigestAccess Authentication (DAA)3、支持安安全的通通信,例例如SSL(安全的的套接字字層)4、支持動動態(tài)Web頁面,如如ASP頁面5、可以使使用傳統(tǒng)統(tǒng)的C語言編程程定制Web頁面里
7、的的HTML標(biāo)簽6、支持CGI(公共網(wǎng)網(wǎng)關(guān)編程程接口)7、嵌入式式的JavaScript腳本翻譯譯器8、獨(dú)特的的URL分析器三.課程設(shè)計(jì)的步驟與實(shí)現(xiàn)3.1GoAhead網(wǎng)絡(luò)服務(wù)務(wù)器移植1.下載Goahead源碼2.GoAhead源碼復(fù)制制及解壓壓縮3.為了GoAhead編譯的源源碼修改對“Makefile”進(jìn)行修改改main.c和misc.c文件4.GoAhead編譯生成了“webs”網(wǎng)絡(luò)服服務(wù)器執(zhí)執(zhí)行文件件和“l(fā)ibwebs.a”庫5.創(chuàng)建作為網(wǎng)絡(luò)絡(luò)服務(wù)器器的索引引文件使使用的index.html文件6.創(chuàng)建在目標(biāo)板板上連接接網(wǎng)絡(luò)服服務(wù)器時時出現(xiàn)的的網(wǎng)頁目目錄(/web),創(chuàng)建包包含cgi的
8、目錄(/web/cgi-bin)。7.向目標(biāo)板下下載GoAhead執(zhí)行文件件及main.html8.在目標(biāo)板上上運(yùn)行GoAhead9.通過主機(jī)PC的網(wǎng)頁瀏瀏覽器連連接網(wǎng)絡(luò)絡(luò)服務(wù)器器3.2通過HTML中的CGI接口完成成對開發(fā)發(fā)板的鏈接開始編譯HTML文件(如如:first.html)編譯.c文件(如如:first.c)通過gcc.將c文件生成CGI文件將HTML.cgi文件用TFTP指令下載載到開發(fā)發(fā)板并運(yùn)行結(jié)束CGI(公用網(wǎng)關(guān)關(guān)接口)規(guī)定了Web服務(wù)器調(diào)調(diào)用其他他可執(zhí)行行程序(CGI程序)的接口協(xié)協(xié)議標(biāo)準(zhǔn)準(zhǔn)。Web服務(wù)器通通過調(diào)用用CGI程序?qū)崿F(xiàn)現(xiàn)和Web瀏覽器的的交互,也就是CGI程序接受
9、受Web瀏覽器發(fā)發(fā)送給Web服務(wù)器的的信息,進(jìn)行處理理,將響應(yīng)結(jié)結(jié)果再回回送給Web服務(wù)器及及Web瀏覽器。CGI程序一般般完成Web網(wǎng)頁中表表單(Form)數(shù)據(jù)的處處理、數(shù)數(shù)據(jù)庫查查詢和實(shí)實(shí)現(xiàn)與傳傳統(tǒng)應(yīng)用用系統(tǒng)的的集成等等工作。CGI接口標(biāo)準(zhǔn)準(zhǔn)包括:1標(biāo)準(zhǔn)輸入入可通過標(biāo)標(biāo)準(zhǔn)輸入入(stdin)從Web服務(wù)器得得到輸入信息2環(huán)境變量量Web服務(wù)器和和CGI接口設(shè)置置了自己的的一些環(huán)境變量,用來向CGI程序傳遞遞一些重重要的參數(shù)3標(biāo)準(zhǔn)輸出出通過標(biāo)準(zhǔn)輸出出(stdout)將輸出信信息傳送送給Web服務(wù)器(html形式),就在命令行狀狀態(tài)調(diào)試試CGI程序,并且得到它們們的輸出出。虛擬機(jī)及及超級終終端
10、截圖圖:通過HTML中的CGI接口完成成對開發(fā)發(fā)板的鏈接實(shí)驗(yàn)截圖圖:3.3嵌入式Web服務(wù)器的的實(shí)現(xiàn)3.3.1利用Web的LED控制程序序LED 控制程序創(chuàng)建創(chuàng)建 8bitled.html ;8bitled.c文件LED 控制程序編譯8bitled.html 和 8bitled.cgi 復(fù)制到 /tftpboot 目錄中向目標(biāo)板下載 LED 控制程序通過 tftp 下載 8bitled.html 和 8bitled.cgi ,并復(fù)制到 /web 和 /web/cgi-bin 接下來,通過主主機(jī)PC的網(wǎng)頁瀏瀏覽器連連接網(wǎng)絡(luò)絡(luò)服務(wù)器并向地址址欄中輸輸入“http:/65/8bitled.html”
11、并連接,則8bitled.html網(wǎng)頁運(yùn)行行。向地址欄欄中輸入入“65/8bitled.html向文本框中中輸入兩兩位十六六進(jìn)制數(shù)數(shù)并單擊擊input按鈕。在在這里,輸入“1a”后,單擊擊“input”按鈕。LED控制頁面面運(yùn)行確認(rèn)及測試實(shí)驗(yàn)截圖圖:3.3.27-Segment設(shè)備驅(qū)動動程序7Segment控制程序創(chuàng)建vi 7segment.htmlvi 7segment.c7Segment 控制程序編譯將 7segment.html 和 7segment.cgi 文件復(fù)制到 /tftpboot 目錄中。向目標(biāo)板下載 7Segment 控制程序通過 tftp
12、下載 7segment.html 和 7segment.cgi 文件,向 /web 和 /web/cgi-bin 目錄中復(fù)制文件。接下來,通過主主機(jī)PC的網(wǎng)頁瀏瀏覽器連連接網(wǎng)絡(luò)絡(luò)服務(wù)器器。如果運(yùn)行行網(wǎng)頁瀏瀏覽器并并向地址址欄中輸輸入“http:/65/7segment.html”并連接,則7segment.html網(wǎng)頁運(yùn)行行。向地址欄欄中輸入入“http:/65/7segment.html”。向文本框框中輸入入六位十十進(jìn)制數(shù)數(shù)并單擊擊input按鈕。在在這里,輸入”123456”后單擊“input”按鈕。7segment控制頁面運(yùn)行行確認(rèn)及測試實(shí)驗(yàn)截圖圖:3.3.3利用Web的textlcd控
13、制程序序Textlcd控制程序創(chuàng)建創(chuàng)建 textlcd.html創(chuàng)建 textlcd.c 編譯 textlcd 控制程序?qū)?textlcd.html 和 textlcd.cgi 文件復(fù)制到 /tftpboot 目錄中。向目標(biāo)板下載 textlcd 控制程序下載 textlcd.html 和 textlcd.cgi 文件,向/web 和 /web/cgi-bin 目錄中復(fù)制文件。接下來,通過主主機(jī)PC的網(wǎng)頁瀏瀏覽器連連接網(wǎng)絡(luò)絡(luò)服務(wù)器器。如果運(yùn)行行網(wǎng)頁瀏瀏覽器并并向地址址欄中輸輸入“http:/65/textlcd.html”并連接,則textlcd.html網(wǎng)頁運(yùn)行行。向地址輸輸入欄輸輸入“ht
14、tp:/65/textlcd.html”。輸入文本本框的Line1和Line2文字并單單擊“input”按鈕。如果畫面面上出現(xiàn)現(xiàn)“LCD Done”消息窗,則可以以清楚/web/cgi-bin中的textlcd.cgi程序順利利運(yùn)行。textlcd控制頁面運(yùn)行行確認(rèn)實(shí)驗(yàn)截圖圖:textlcd控制頁面面運(yùn)行確確認(rèn)實(shí)驗(yàn)截圖圖:趙震璽周凱亮*查偉王俊杰四總結(jié)4.1實(shí)驗(yàn)認(rèn)知與發(fā)發(fā)現(xiàn)的問問題本次課程設(shè)計(jì)計(jì)是嵌入入式開發(fā)發(fā)與應(yīng)用用,雖然然只有短短短的兩兩個星期期,但在在這兩個個星期里里我們學(xué)學(xué)到了很很多。首首先,我我們對計(jì)計(jì)嵌入式式開發(fā)有有了進(jìn)一一步的掌掌握?;菊莆瘴樟薌oahead網(wǎng)絡(luò)遠(yuǎn)程程設(shè)備控控
15、制并在在網(wǎng)絡(luò)上上控制HBE-EMPOSIII-SV210的LED,7-Segment,TextLCD。但在完成成這些題題目的同同時,我我們也發(fā)發(fā)現(xiàn)了自自己的很很多問題題:第一,比如很很多的專專業(yè)術(shù)語語都沒有有聽說過過,只好好在同學(xué)學(xué)的幫助助和網(wǎng)絡(luò)絡(luò)的幫助助下,勉勉勉強(qiáng)強(qiáng)強(qiáng)完成了了任務(wù),我們也也知道了了自己的的很多不不足,在在往后的的時間中中還要繼繼續(xù)研究究。第二,在我們們使用tftp傳送文件件的時候候忘記修修改虛擬擬機(jī)IP地址導(dǎo)致致沒有傳傳送文件件成功。第三,在我們們將文件件傳送成成功的時時候,網(wǎng)網(wǎng)頁文件件已經(jīng)能能在goahead中顯示出出來,但但是輸入入數(shù)據(jù)的的時候,開發(fā)板板并沒有有顯示出出
16、來,后后面才發(fā)發(fā)現(xiàn)是傳傳送文件件時,忘忘記用chomd命令給CGI文件加上上權(quán)限,我們通通過分析析及時的的解決了了這個問問題。第四,我我們在完完成實(shí)驗(yàn)驗(yàn)后的第第二天再再次開啟啟虛擬機(jī)機(jī)并不能能將這些些網(wǎng)頁文文件打開開,原來來是每次次啟動虛虛擬機(jī)它它的IP地址都是是原地址址,要將將它改成成00并通過超超級終端端運(yùn)行網(wǎng)網(wǎng)頁文件件。第五,在運(yùn)行行網(wǎng)頁文文件的時時候,首首先要查查看進(jìn)程程,要將將進(jìn)程中中bin目錄下的的webs進(jìn)程殺除除再運(yùn)行行網(wǎng)頁文文件才能能將它打打開。最后,通過本本次實(shí)驗(yàn)驗(yàn)我們知知道了團(tuán)團(tuán)隊(duì)力量量的重要要性,有有的題目目單靠單單人的力力量是很很難完成成的,但但
17、是經(jīng)過過大家的的合作,相比一一個人來來說完成成的容易易了點(diǎn)。4.2實(shí)驗(yàn)效果果分析本次實(shí)驗(yàn)雖雖然能將將開發(fā)板板中的LED,7-Segment,TextLCD成功顯示示出來。但是本本次實(shí)驗(yàn)驗(yàn)的效果果仍有幾幾點(diǎn)不足足。第一:通過goahead網(wǎng)頁服務(wù)務(wù)器編寫寫LED,7-Segment,TextLCD的網(wǎng)頁較較為簡單單。第二:控制開發(fā)發(fā)板中7-Segment的顯示時時間沒有有進(jìn)行精精確的控制。4.3課程設(shè)計(jì)計(jì)心得體體會本次課程設(shè)設(shè)計(jì)也獲獲得一個個經(jīng)驗(yàn):在寫一一個程序序的時候候,一定定要事先先把程序序原理方方框圖化化出來。以前總總覺得這這樣做沒沒必要,很浪費(fèi)費(fèi)時間。但是,這次課課程設(shè)計(jì)計(jì)完全改改變了我
18、我以前的的那種錯錯誤的認(rèn)認(rèn)識。這這次課程程設(shè)計(jì)中中碰到的的那些需需要很多多代碼才才能完成成的任務(wù)務(wù),畫程程序方框框圖是很很有必要要的,因因?yàn)橥ㄟ^過程序方方框圖,在做設(shè)設(shè)計(jì)的過過程中,我們每每一步要要做什么么,每一一步要完完成什么么任務(wù)都都有一個個很清楚楚的思路路,而且且在程序序測試的的過程中中也有利利于查錯錯。經(jīng)過本次試驗(yàn)驗(yàn)我們這這次做的的實(shí)驗(yàn)還還算是比比較成功功的,因?yàn)槲覀儌兺瑫r也也在不知知不覺中中提高了了動手能能力和獨(dú)獨(dú)立分析析思考問問題、解解決問題題的能力力。這兩個星星期的嵌入式式應(yīng)用的的課程設(shè)設(shè)計(jì),使使我們更更加系統(tǒng)統(tǒng)的認(rèn)識識和了解解Goahead網(wǎng)絡(luò)遠(yuǎn)程程設(shè)備控控制的工工作原理理,更
19、深深層次的的認(rèn)識了了嵌入式式開發(fā),相信在在今后的的學(xué)習(xí)以以及相關(guān)關(guān)工作上上會有很很大幫助助。致謝感謝孫老師和和范老師師在課設(shè)設(shè)中給予予的指導(dǎo)導(dǎo)和鼓勵勵。感謝謝學(xué)校提提供機(jī)會會,能夠夠讓我們們在實(shí)踐踐中培養(yǎng)養(yǎng)動手能能力,將將理論與與實(shí)際結(jié)結(jié)合再一一起。五.代碼附錄錄參考資資料5.17segment實(shí)驗(yàn)代碼碼附錄 /*7-Segment CGIProgram*/#include#include#include#include#include#include#include#include#include#define FPGA_BASEADDRESS0 x88000000#define SEG_G
20、RID_OFFSET0 x30#defineSEG_DATA_OFFSET0 x32typedef structchar name128;char val128;entry;void getword(char*word,char*line,charstop)intx=0,y= 0;for(x=0;(linex)&(linex!=stop);x+) wordx=linex;wordx =0;if(linex)+x;while(liney+=linex+);intsizeofword(char *word)inti=0;for(i=0;i10;i+)if(wordi = 0) break;retu
21、rni;unsignedintGetsegcode(char x)unsignedintcode;switch(x) case 0: code=0 xfc;break;case 1: code=0 x60;break;case 2: code=0 xda;break;case 3: code=0 xf2;break;case 4: code=0 x66;break;case 5: code=0 xb6;break;case 6: code=0 xbe;break;case7:code =0 xe4;break;case 8: code=0 xfe;break;case 9: code=0 xf
22、6;break;case a:case A: code=0 xfa;break;case b:case B: code=0 x3e;break;case c:case C: code=0 x1a;break;case d:case D: code=0 x7a;break;case e:case E: code=0 x9e;break;case f:case F: code=0 x8e;break;default: code=0;break;returncode;intmain()char *cl;intk;unsignedintlow =0,high =0;entryentries;unsig
23、nedshortdigit6= 0 x20,0 x10,0 x08,0 x04,0 x02,0 x01;unsignedshortdata6;inti,j,m;intfd;unsignedshort*addr_fpga;unsignedshort*addr_grid,*addr_data;printf(Content-type:text/htmlnn);printf(n7-Segmentcgiprogramn);printf(n);if(fd=open(/dev/mem,O_RDWR|O_SYNC) 0) printf(memopen failn);exit(1);addr_fpga= (un
24、signedshort*)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_grid0 |addr_data 0)close(fd);printf(mmaperrorn);exit(1);cl= (char *)getenv(QUERY_STRING);getw
25、ord(,cl,=);getword(entries.val,cl,&);k =sizeofword(entries.val);for(i=0;ik; i+)data(k-i)-1 =Getsegcode(entries.vali);for(j=0;j200;j+)for(i=0;ik; i+)*addr_grid =digiti;*addr_data =datai;for(m=0;m65536;m+);*addr_grid =digit0;*addr_data =0;munmap(addr_grid,4096);munmap(addr_data,4096);close
26、(fd);if(k!=0)printf(7-SegmentDone);elseprintf(Youentered thewrongvalue!);printf();printf(n);return0;5.17segmentHTML源碼附錄錄 7segment cgiprogram向7-Segment中輸入要要顯示的的十進(jìn)制制數(shù)。5.2LED實(shí)驗(yàn)代碼附錄錄/*8-BitLEDCGIProgram*/#include#include#include#include#include#include#include#include#include#define FPGA_BASEADDRESS0 x8
27、8000000#define LED_OFFSET0 x20typedef structchar name128;char val128;entry;void getword(char*word,char*line,charstop)intx=0,y= 0;for(x=0;(linex)&(linex!=stop);x+) wordx=linex;wordx =0;if(linex)+x;while(liney+=linex+);intmain()intfd;unsignedshort*addr_fpga,*addr_led;char *cl;unsignedshortval;entryent
28、ries;printf(Content-type: text/htmlnn);printf(n8bitLED cgiprogramn);printf(n);cl= (char *)getenv(QUERY_STRING);getword(,cl,=);getword(entries.val,cl,&);val=(unsignedshort)strtol(entries.val,NULL,16);if(val=0)if(!(entries.val0=0&entries.val1=0)| (entries.val0=0&entries.val1=0)printf(Youen
29、tered thewrongvalue!);exit(1);if(fd=open(/dev/mem,O_RDWR|O_SYNC) 0) printf(memopen fail, %dn,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(unsigned short);*addr_led=val|0 x100;munmap(addr_fpga,4096)
30、;close(fd);printf(Youentered 0 x%x,val);printf();printf(n);return0;8bitledcgi program輸入兩位位十六進(jìn)進(jìn)制值:5.2LEDHTML源碼附錄錄5.3LCD實(shí)驗(yàn)代碼附錄 /*TextLCDCGIProgram*/#include#include#include#include#include#include#include#define FPGA_BASEADDRESS0 x88000000#define TEXTLCD_OFFSET0 x10void setcommand(unsignedshortcommand
31、);void writebyte(char ch);void initialize_textlcd();void writeTextLcd(introw,char *str,int length);intfunction_set(introws,intnfonts);intdisplay_control(intdisplay_enable,int cursor_enable, intnblink);intcusrsor_shit(intset_screen,intset_rightshit);intentry_mode_set(int increase,intnshift);intreturn
32、_home();intclear_display();intset_ddram_address(int pos);void splitword(char *out, char*in,char stop);void unescape_url(char *url);char x2c(char *x);unsignedshort*pTextlcd;typedef structchar name128;char val128;entry2;intget_get(entryentries)char qs128;inti;/bzero(qs,sizeof(qs);sprintf(qs,%s0,getenv
33、(QUERY_STRING);for(i=0;*qs&i =A ?(x0 &0 xdf)-A) +10:(x0- 0);c *= 16;c += (x1 = A? (x1& 0 xdf) -A)+ 10 :(x1-0);returnc;intmain(intargc,char*argv)char data2128;intfd;entryentries;char *cl;unsignedshort*addr_fpga;printf(Content-type:text/htmlnn);cl= (char *)getenv(QUERY_STRING);get_get(entries);if(fd=o
34、pen(/dev/mem,O_RDWR|O_SYNC)0)perror(memopen failn);exit(1);addr_fpga= (unsignedshort*)mmap(NULL,4096,PROT_READ|PROT_WRITE, MAP_SHARED,fd,FPGA_BASEADDRESS);pTextlcd=addr_fpga+TEXTLCD_OFFSET/sizeof(unsigned short);if(pTextlcd 0) close(fd);printf(mmaperrorn);exit(1);initialize_textlcd();strcpy(data0,en
35、tries0.val);strcpy(data1,entries1.val);writeTextLcd(1,data0,strlen(data0);writeTextLcd(2,data1,strlen(data1);munmap(pTextlcd,4096);close(fd);printf(LCDDone!);return0;void setcommand(unsignedshortcommand)command &= 0 x00FF;*pTextlcd=command |0 x0000;usleep(1000);*pTextlcd=command |0 x0100;usleep(1000
36、);*pTextlcd=command |0 x0000;usleep(1000);void writebyte(char ch)unsignedshortdata;data =ch&0 x00FF;*pTextlcd=data&0 x400;usleep(1000);*pTextlcd=data|0 x500;usleep(1000);*pTextlcd=data|0 x400;usleep(1000);void initialize_textlcd()function_set(2,0);/FunctionSet:8bit,display 2lines,5x7moddisplay_contr
37、ol(1,0,0);/Display on,Cursoroffclear_display(); / Displayclearentry_mode_set(1,0);/EntryMode Set: shift right cursorreturn_home();/gohome/sendFunctionSet commandtothe textlcd/rows =2: = 2rows,rows= 1=1rows/nfonts=1 := 5x10dot,nfonts=0 :5x7 dotintfunction_set(introws,intnfonts)unsignedshortcommand =0
38、 x30;if(rows = 2) command|=0 x08;else if(rows=1)command&=0 xf7;else return-1;command =nfonts ?(command|0 x04): command;setcommand(command);return1;intdisplay_control(intdisplay_enable,int cursor_enable, intnblink)unsignedshortcommand =0 x08;command =display_enable?(command| 0 x04) :command;command =cursor_enable? (command |0 x02):command;command =nblink ?(command|0 x01): command;setcommand(command);return1;intcusrsor_shit(intset_screen,intset_rightshit)unsignedshortcommand =0 x10;command =set_screen? (command |0 x08):command;command =set_rightshit? (
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024跨國廣告代理協(xié)議
- 2025年度產(chǎn)學(xué)研合作項(xiàng)目技術(shù)研發(fā)與市場應(yīng)用協(xié)議4篇
- 2024年04月浙江臺州銀行寧波分行社會招考(422)筆試歷年參考題庫附帶答案詳解
- 2025年度分手后子女撫養(yǎng)協(xié)議書范本下載3篇
- 2025年度城市綜合體場地服務(wù)合作合同4篇
- 2025年度國際商務(wù)大廈廠房租賃合同英文版3篇
- 2024版智能穿戴設(shè)備技術(shù)轉(zhuǎn)讓合同
- 2025年度廠房設(shè)備融資租賃與市場拓展合同4篇
- 2024年03月重慶重慶銀行貿(mào)易金融部招考筆試歷年參考題庫附帶答案詳解
- 2025年度產(chǎn)學(xué)研合作人才培養(yǎng)及項(xiàng)目支持協(xié)議4篇
- 《線控底盤技術(shù)》2024年課程標(biāo)準(zhǔn)(含課程思政設(shè)計(jì))
- 學(xué)校對口幫扶計(jì)劃
- 倉庫倉儲安全管理培訓(xùn)課件模板
- 風(fēng)力發(fā)電場運(yùn)行維護(hù)手冊
- 《3-6歲兒童學(xué)習(xí)與發(fā)展指南》專題培訓(xùn)
- 河道旅游開發(fā)合同
- 情人合同范例
- 建筑公司勞務(wù)合作協(xié)議書范本
- 安徽省合肥市2023-2024學(xué)年高一上學(xué)期物理期末試卷(含答案)
- 《基于杜邦分析法的公司盈利能力研究的國內(nèi)外文獻(xiàn)綜述》2700字
- 儒家思想講解課程設(shè)計(jì)
評論
0/150
提交評論