基于嵌入式系統(tǒng)的微型打印機模塊設(shè)計與實現(xiàn)_第1頁
基于嵌入式系統(tǒng)的微型打印機模塊設(shè)計與實現(xiàn)_第2頁
基于嵌入式系統(tǒng)的微型打印機模塊設(shè)計與實現(xiàn)_第3頁
基于嵌入式系統(tǒng)的微型打印機模塊設(shè)計與實現(xiàn)_第4頁
基于嵌入式系統(tǒng)的微型打印機模塊設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

基于嵌入式系統(tǒng)的微型打印機模塊設(shè)計與實現(xiàn)Designandimplementationofthemicro-printermodulebasedonembeddedsystems學部:信息專業(yè):計算機科學與技術(shù)畢業(yè)設(shè)計(論文)完成時間:自2012年12月至2013年5月摘要我們現(xiàn)在生活的年代,各種形態(tài)各種功能的打印機我們已經(jīng)隨處可見,例如噴墨打印機、激光打印機、針式打印機等等。其中微型打印機也已經(jīng)在各個領(lǐng)域里面使用頻繁了,例如超市、小商品店、郵政機構(gòu)、金融行業(yè)、公用企事業(yè)單位、警務(wù)系統(tǒng)等等。發(fā)展至今,微型打印機衍生出極其多的種類,并且使用范圍也變得更加的專一。本文主要介紹以EL-RAM-860開發(fā)板為平臺的,基于嵌入式系統(tǒng)的微型打印機模塊設(shè)計與實現(xiàn)。主要內(nèi)容有:EL-RAM-860開發(fā)板與微型打印機模塊的電路的設(shè)計,微型打印機驅(qū)動程序軟件結(jié)構(gòu)設(shè)計,驅(qū)動程序的編寫與調(diào)用,在EL-RAM-860開發(fā)板上連接并且測試微型打印機模塊。系統(tǒng)實現(xiàn)了以下功能:設(shè)計編寫微型打印機驅(qū)動程序,調(diào)用函數(shù)與過程,使EL-RAM-860開發(fā)板可以與EPSON公司的M-150II型打印機芯通信,最終使EL-RAM-860驅(qū)動微型打印機模塊打印簡單文字。關(guān)鍵詞:RAM;Linux;微型打印機;嵌入式系統(tǒng);EL-RAM-860

AbstractNowadayspolymorphicandmultifunctionalprinterhasappearedeverywhere,suchasinkjetprinters,laserprinters,dotmatrixprinter,andsoon.Micro-printerhasalsobeenusedinmanyfieldsfrequently,suchassupermarket,commodityshop,postalauthorities,thefinancialsector,publicenterprise,institutionsandpolicesystem.Inrecentyears,micro-printerhasderivedmanytypesanditsusesrangeisalsobecomingmorespecific.LayingEL-RAM-860developmentboardasaplatform,thispaperwillintroducethemodulardesignandimplementationofthemicro-printerwhichisbasedonembeddedsystems.Someofthematerialcoverthefollowingaspects:thedesignforelectriccircuitbetweenEL-RAM-860developmentboardandthemoduleofmicro-printer;thedesignofdriversoftwarearchitectureformicro-printer,thepreparationandcallofthedriver,connectingtotheEL-RAM-860developmentboardandtestingthemoduleofmicro-printer.Thesystemimplementsthefollowingfunctions:thedesigningandwritingforthedriverofmicro-printer,callingthefunctionandtheprocedure,makingacommunicationbetweentheEL-RAM-860developmentboardandtheEPSONM-150IIprintercore,andfinallytomaketheEL-RAM-860drivemicro-printermoduleprintasimpletext.Keywords:RAM;Linux;MicroPrinter;EmbeddedSystems;EL-RAM-860目錄1. 1緒論 11.1. 背景與意義 11.2. 微型打印機簡介 11.3. 嵌入式系統(tǒng)簡介 21.4. 課題研究方向和設(shè)計目標 22. 設(shè)計系統(tǒng) 22.1. EL-RAM-860開發(fā)板: 22.2. 打印機芯 33. 系統(tǒng)硬件設(shè)計 43.1. 方案設(shè)計 43.2. 硬件設(shè)計 54. 系統(tǒng)軟件設(shè)計 64.1. 軟件設(shè)計 65. 驅(qū)動程序主要功能實現(xiàn) 75.1. 建立對話框 75.2. 建立控件 85.3. 建立幫助對話框 95.4. 建立模板對話框 135.5. 子功能函數(shù) 186. 結(jié)論 21參考文獻 22致謝 23附錄 24附錄一、其他代碼 24arm830.h 24demoshow.c 31附錄二、附圖 421緒論背景與意義微型打印機在工業(yè)商業(yè)領(lǐng)域應(yīng)用非常廣,幾乎成為所有行業(yè)辦公用品中必不可少的一部分。市場上各種各樣的微型打印機可以通過打印方式分為兩種,針點式和熱敏。熱敏打印機憑借打印速度快、噪聲小等優(yōu)點而收到市場的青睞,贏得了大部分的市場份額;但是針點式微型打印機也因為其獨特的工作原理及打印性能在一些專業(yè)的應(yīng)用領(lǐng)域無法被替代。本文通過剖析M-150Ⅱ微型打印機機芯的組成結(jié)構(gòu)和驅(qū)動原理,對針點式微型打印機的開發(fā)設(shè)計的主要原理做了詳盡的論述,盡可能去設(shè)計一種結(jié)構(gòu)、實用性強的針點式微型打印機制作方案。微型打印機簡介作為一種常見的微型打印機,我國打印機市場初期就有一些利用EPSON打印機芯來生產(chǎn)產(chǎn)品的公司。針式打印機的技術(shù)已經(jīng)成熟,它的結(jié)構(gòu)簡單、性能價格比高、生產(chǎn)成本低。盡管工作式的聲音較大、打印圖像的清晰度低、針頭耗損概率高,但是通過技術(shù)的改進,針式打印機擁有了極快的打印速度、打印時的聲音也被一定比例的降低、打印分辨率也得到了提高。這些改變,讓針式打印機變得越來越專用化,逐漸成為銀行存折、金融票據(jù)打印、學術(shù)研究領(lǐng)域連續(xù)打印、條形碼打印、快速跳行打印和復(fù)寫紙打印等特殊應(yīng)用領(lǐng)域不可替代的工具。另外,因為針式打印的針頭地控制很簡單,所以可以通過相對廉價的控制板方案來進行生產(chǎn),從而降低了成本和價格。進過多年的發(fā)展,針式打印機已經(jīng)發(fā)展處了許多種類,他們適用于不同的行業(yè)領(lǐng)域,不同的針式打印機也有著各自的優(yōu)缺點。從9針到24針,針式打印機憑借其低廉的價格、很少的打印成本和易用性一直非常的流行。但是他的缺點也很明顯,針式打印機的打印質(zhì)量不高,工作室會產(chǎn)生一定的噪音。我所采用的M-150Ⅱ型針式打印機機芯是基于嵌入式系統(tǒng)的一種擊打式打印機,其最大的特點就是打印速度快,在短時間內(nèi)可以完成較大的打印任務(wù)。主要應(yīng)用于一些自助服務(wù)終端,如ATM機、排隊叫號機、自助加油機、醫(yī)療檢測設(shè)備電腦彩票機等。所以,基于嵌入式系統(tǒng)的針式打印機為人類提供了很多非常便利的服務(wù),是現(xiàn)代人類生活中不可缺少的一部分。嵌入式系統(tǒng)簡介嵌入式是一種專用的計算機系統(tǒng),作為裝置或設(shè)備的一部分,專為實際應(yīng)用開發(fā)的一種技術(shù),軟件硬件均可剪裁。通常,嵌入式系統(tǒng)是一個控制程序存儲在ROM中的嵌入式處理器控制板,主要是由CPU,外圍硬件設(shè)備和操作系統(tǒng)組成。事實上,所有帶有數(shù)字接口的設(shè)備,如手表、微波爐、錄像機、汽車等,都使用嵌入式系統(tǒng),有些嵌入式系統(tǒng)還包含操作系統(tǒng),但大多數(shù)嵌入式系統(tǒng)都是是由單個程序?qū)崿F(xiàn)整個控制邏輯。近年來,嵌入式技術(shù)憑借其體積小,集合度高,功能性強,應(yīng)用廣泛,更新快等特點,在市場中站穩(wěn)了腳跟,在各行業(yè)的產(chǎn)品設(shè)計中得到了廣泛的應(yīng)用。課題研究方向和設(shè)計目標通過研究嵌入式系統(tǒng)的工作原理,熟悉使用ARM開發(fā)板EL-RAM-860,將EPSON微型打印機核心與EL-RAM-860開發(fā)板相連,通過C語言開發(fā)驅(qū)動程序,使EL-RAM-860開發(fā)板可以在嵌入式linux操作系統(tǒng)中,驅(qū)動外接行式打印機模塊,實現(xiàn)基于嵌入式系統(tǒng)的行式打印機打印服務(wù)。設(shè)計系統(tǒng)EL-RAM-860開發(fā)板:EL-RAM-860開發(fā)板使我最終選定的開發(fā)板(見圖1)。首先簡單介紹一下此開發(fā)板:圖1EL-RAM-860開發(fā)板EL-ARM-860型嵌入式實驗開發(fā)系統(tǒng)可以運行VxWorks、WinCE、pSOS、QNX、ucosII、linux、uclinux等多種嵌入式操作系統(tǒng),是專門為《嵌入式系統(tǒng)原理開發(fā)與設(shè)計》課程設(shè)計的實驗工具,同時EL-ARM-860型嵌入式系統(tǒng)也是工程師們理想的開發(fā)工具。EL-ARM-860型教學實驗系統(tǒng)采用了ARM920T核、Omap35xx等國內(nèi)普遍認同的32位CPU,從而可以進行多模塊的應(yīng)用實驗。使用時可根據(jù)試驗情況連接不同種類的CPU板,同時兼容ARM7與ARM9。開發(fā)板具有很好的拓展性,通過使用Tech_V,可以制作出出不同用途的接口板。開發(fā)板還有很多外圍的擴展設(shè)備,例如語音編解碼、人機接口等單元,數(shù)字、模擬信號發(fā)生器,數(shù)字量IO輸入輸出。打印機芯本次課題采用的是EPSON公司的M-150Ⅱ型打印機芯(見圖3)。圖3M-150Ⅱ打印機芯EPSONM-150Ⅱ型打印機芯簡介:

M-150系列點陣式打印機是世界上最小型的,重量不足80克,而工作性能極佳。

由于M-150系列打印機十分小巧,耗能極少,所以M-150系列是眾多打印應(yīng)用場合的理想打印機,從掌上終端到坐式計算機以及小型測量儀器都可使用該型打印機。M-150Ⅱ機芯是利用打印鋼針撞擊色帶和紙打印出點陣組成的字符圖形。打印采用44.5mm標準紙寬。在25℃,4.5VDC電壓下,每點陣行100ms。打印原理是:系統(tǒng)硬件設(shè)計方案設(shè)計使用的主要設(shè)備:EL-RAM-860開發(fā)板ARM處理器芯片EPSONM150II微型打印機模塊SHARPTFT_LCD液晶屏方案總流程示意圖(圖4)開開始加裝打印機模塊加載驅(qū)動程序打印成功結(jié)束是運行測試打印命令否圖4總體設(shè)計流程圖硬件設(shè)計嵌入式終端硬件系統(tǒng),系統(tǒng)采用Samsung公司基于ARM公司的ARM920T處理器核生產(chǎn)的S3C2410處理器為處理器,該CPU是一款32位微控制器??紤]到嵌入式終端需要包含實時操作操作系統(tǒng)、圖形用戶界面(GUI)、英文及漢字字庫、打印驅(qū)動程序等,我使用了一片容量為256K×16的靜態(tài)RAM及一片容量為1M×16的Flash。操作系統(tǒng)時,按照顯示器的提示,選擇界面上提供的是個功能按鈕,如“幫助”是用來查看程序中的幫助信息,“輸入”是用來輸入要打印的文字,“打印”是用來控制打印機進行打印輸出,“退出”是用來退出打印程序。系統(tǒng)軟件設(shè)計軟件設(shè)計軟件設(shè)計流程圖如下圖:開開始初始化打印機設(shè)置清空緩沖區(qū)wParam=PRI_HELP建立幫助對話框wParam=PRI_SEND是否建立輸入對話框wParam=PRI_OK建立打印對話框wParam=PRI_CANCEL是是否否結(jié)束是否圖6系統(tǒng)軟件流程圖驅(qū)動程序主要功能實現(xiàn)驅(qū)動程序主要分為四部分:1.建立對話框2.建立控件3.建立幫助對話框4.建立模板對話框下面開始設(shè)計代碼:建立對話框通過代碼建立對話框,通過DLGTEMPLATE函數(shù)創(chuàng)建一個重疊式窗口、彈出式窗口或子窗口。它指定窗口類,窗口標題,窗口風格,以及窗口的初始位置及大小。WS_BORDER|WS_CAPTION表示帶有邊框和帶有標題。WS_EX_NONE表示此對話框沒有擴展風格。分別創(chuàng)建兩個窗口,主對話框和幫助對話框。DLGTEMPLATEPRITEM={WS_BORDER|WS_CAPTION,WS_EX_NONE,160,100,320,240,"",0,0,0,NULL,0};DLGTEMPLATEPRIHelp={WS_BORDER|WS_CAPTION,WS_EX_NONE,200,160,320,240,"",0,0,0,NULL,0};建立控件通過CTRLDATA結(jié)構(gòu)體來定義所需要的控件,此結(jié)構(gòu)體代碼為:typedefstruct{char*class_name;//controlclassDWORDdwStyle;//controlstyleintx,y,w,h;//controlpositionindialogintid;//controlidentifierconstchar*caption;//controlcaptionDWORDdwAddData;//additionaldataDWORDdwExStyle;//controlextendedstyle}CTRLDATA;定義常量“PRI_ITEM_NUM”“PRI_HELP_NUM”來確定控件的個數(shù)。代碼如下:CTRLDATAPRIItem[PRI_ITEM_NUM];CTRLDATAPRIHelpItem[PRI_HELP_NUM];建立幫助對話框創(chuàng)建幫助對話框時,首先建立一個消息響應(yīng)的函數(shù)PRIHelpProc,通過傳遞message,wParam消息參數(shù)來識別用戶的操作,使用switch語句來執(zhí)行命令。編寫幫助對話框功能,添加幫助對話框的標題,控件數(shù)量數(shù)目和控件種類,每個控件使用8個屬性來定義控件類型,控件名稱,控件所在的位置,控件顯示的標題信息。幫助對話框PRIHelp需要在這里定義3個屬性:定義對話框的標題信息caption:微型打印機試驗幫助;定義對話框的控件個數(shù)controlnr:自定義常數(shù)PRI_HELP_NUM;定義對話框的控件類型controls:PRIHelp。第一個控件是static型的,用來顯示“實驗幫助”,需要定義8個屬性:定義控件的控制類型類class_name為:static;定義控件的顯示形式dwStyle為:WS_VISIBLE|SS_GROUPBOX;定義控件的位置,X,Y值:3,0;定義控件的大小,W,H值:310,185;定義控件的名稱id值:PRI_TEXT;定義控件的標題信息caption:實驗幫助。第二個控件是static型的,用來顯示提示的具體內(nèi)容,需要定義8個屬性:定義控件的控制類型類class_name為:static;定義控件的顯示形式dwStyle為:WS_VISIBLE|SS_LEFT;定義控件的位置,X,Y值:5,20;定義控件的大小,W,H值:305,178;定義控件的名稱id值:PRI_TEXT1;定義控件的標題信息caption:模塊上的P.P,PSA,PSB,PSC,PSD,P.M分別與底板的O0到O5相連,I0接模塊上的L.S,I1接模塊上的D.T,取出實驗箱上SI0,SI1的短接帽,點擊\"打印\"開始打印.\n。第三個控件是button型的,用來實現(xiàn)退出功能,需要定義8個屬性:定義控件的控制類型類class_name為:button;定義控件的顯示形式dwStyle為:WS_TABSTOP|WS_VISIBLE|BS_PUSHBUTTON定義控件的位置,X,Y值:130,100;定義控件的大小,W,H值:50,25;定義控件的名稱id值:PRI_HLP_CANCEL;定義控件的標題信息caption:退出。在對話框上創(chuàng)建好所有的控件之后,通過DialogBoxIndirectParam函數(shù)定義對話框輸出顯示。以下是實現(xiàn)代碼:staticintPRIHelpProc(HWNDhDlg,intmessage,WPARAMwParam,LPARAMlParam){switch(message){caseMSG_INITDIALOG:return(1);caseMSG_COMMAND:switch(wParam){casePRI_HLP_CANCEL:DestroyAllControls(hDlg);EndDialog(hDlg,wParam);break;}}returnDefaultDialogProc(hDlg,message,wParam,lParam);}staticvoidPRIHelpFun(HWNDhDlg){PRIHelp.caption="微型打印機實驗幫助";PRIHelp.controlnr=PRI_HELP_NUM;PRIHelp.controls=PRIHelpItem;PRIHelpItem[0].class_name="static";PRIHelpItem[0].dwStyle=WS_VISIBLE|SS_GROUPBOX;PRIHelpItem[0].x=3;PRIHelpItem[0].y=0;PRIHelpItem[0].w=310;PRIHelpItem[0].h=185;PRIHelpItem[0].id=PRI_TEXT;PRIHelpItem[0].caption="實驗幫助";PRIHelpItem[1].class_name="static";PRIHelpItem[1].dwStyle=WS_VISIBLE|SS_LEFT;PRIHelpItem[1].x=5;PRIHelpItem[1].y=20;PRIHelpItem[1].w=305;PRIHelpItem[1].h=178;PRIHelpItem[1].id=PRI_TEXT1;PRIHelpItem[1].caption="模塊上的P.P,PSA,PSB,PSC,PSD,P.M分別與底板的O0到O5相連,I0接模塊上的L.S,I1接模塊上的D.T,取出實驗箱上SI0,SI1的短接帽,點擊\"打印\"開始打印.\n";PRIHelpItem[2].class_name="button";PRIHelpItem[2].dwStyle=WS_TABSTOP|WS_VISIBLE|BS_PUSHBUTTON;PRIHelpItem[2].x=130;PRIHelpItem[2].y=100;PRIHelpItem[2].w=50;PRIHelpItem[2].h=25;PRIHelpItem[2].id=PRI_HLP_CANCEL;PRIHelpItem[2].caption="退出";DialogBoxIndirectParam(&PRIHelp,hDlg,PRIHelpProc,0L);}建立模板對話框創(chuàng)建模板對話框時,首先需要對設(shè)備進行初始化,然后建立模板對話框的消息響應(yīng)的函數(shù)PRIProc,通過對PRIProc函數(shù)傳遞message,wParam消息參數(shù)來識別用戶的操作,使用switch語句來執(zhí)行命令。編寫模板對話框功能,添加模板對話框的標題,控件數(shù)量數(shù)目和控件種類,每個控件使用8個屬性來定義控件類型,控件名稱,控件所在的位置,控件顯示的標題信息。模板對話框PRIITEM需要在這里定義3個屬性:定義對話框的標題信息caption:微型打印機試驗;定義對話框的控件個數(shù)controlnr:自定義常數(shù)PRI_ITEM_NUM;定義對話框的控件類型controls:PRIItem。第一個控件是button型的,用來實現(xiàn)打開幫助對話框,需要定義8個屬性:定義控件的控制類型類class_name為:button;定義控件的顯示形式dwStyle為:WS_TABSTOP|WS_VISIBLE;定義控件的位置,X,Y值:25,100;定義控件的大小,W,H值:50,25;定義控件的名稱id值:PRI_HELP;定義控件的標題信息caption:幫助。第二個控件是button型的,用來實現(xiàn)打印功能,需要定義8個屬性:定義控件的控制類型類class_name為:button;定義控件的顯示形式dwStyle為:WS_TABSTOP|WS_VISIBLE;定義控件的位置,X,Y值:130,100;定義控件的大小,W,H值:50,25;定義控件的名稱id值:PRI_OK;定義控件的標題信息caption:打印。第三個控件是button型的,用來實現(xiàn)退出功能,需要定義8個屬性:定義控件的控制類型類class_name為:button;定義控件的顯示形式dwStyle為:WS_TABSTOP|WS_VISIBLE|BS_PUSHBUTTON定義控件的位置,X,Y值:235,100;定義控件的大小,W,H值:50,25;定義控件的名稱id值:PRI_CANCEL;定義控件的標題信息caption:退出。在對話框上創(chuàng)建好所有的控件之后,通過DialogBoxIndirectParam函數(shù)定義對話框輸出顯示。以下是實現(xiàn)代碼:staticintPRIProc(HWNDhDlg,intmessage,WPARAMwParam,LPARAMlParam){ Init_GM160switch(message){caseMSG_INITDIALOG:return1;caseMSG_COMMAND:switch(wParam){casePRI_HELP:PRIHelpFun(hDlg);break;casePRI_SEND: GetWindowText(GetDlgItem(hDlg,BT_EDIT1),data,48);i=0; while((data[i])!='\0')sendch(data[i++]);//發(fā)送單個字符 SendShortMessage(data);break;casePRI_OK:fd=open("/dev/miniprinter",0);status=ioctl(fd,34,0); close(fd); casePrint_INIT:fd=open("/dev/miniprinter",0);len=ioctl(fd,7,0);close(fd);sprintf(string,"%x",len);SetDlgItemText(hDlg,WET_TEXT4,string);break; break;casePRI_CANCEL:DestroyAllControls(hDlg);EndDialog(hDlg,wParam);break;}}returnDefaultDialogProc(hDlg,message,wParam,lParam);}staticvoidprint_control(HWNDhWnd){PRITEM.caption="微型打印機實驗";PRITEM.controlnr=PRI_ITEM_NUM;PRITEM.controls=4;PRIItem[0].class_name="button";PRIItem[0].dwStyle=WS_TABSTOP|WS_VISIBLE;PRIItem[0].x=24;PRIItem[0].y=100;PRIItem[0].w=50;PRIItem[0].h=25;PRIItem[0].id=PRI_HELP;PRIItem[0].caption="幫助";PRIItem[1].class_name="button";PRIItem[1].dwStyle=WS_TABSTOP|WS_VISIBLE;PRIItem[1].x=98;PRIItem[1].y=100;PRIItem[1].w=50;PRIItem[1].h=25;PRIItem[1].id=PRI_SEND;PRIItem[1].caption="輸入";PRIItem[2].class_name="button";PRIItem[2].dwStyle=WS_TABSTOP|WS_VISIBLE;PRIItem[2].x=172;PRIItem[2].y=100;PRIItem[2].w=50;PRIItem[2].h=25;PRIItem[2].id=PRI_OK;PRIItem[2].caption="打印";PRIItem[3].class_name="button";PRIItem[3].dwStyle=WS_TABSTOP|WS_VISIBLE|BS_PUSHBUTTON;PRIItem[3].x=246;PRIItem[3].y=100;PRIItem[3].w=50;PRIItem[3].h=25;PRIItem[2].id=PRI_CANCEL;PRIItem[2].caption="退出";DialogBoxIndirectParam(&PRITEM,hWnd,PRIProc,0L);}子功能函數(shù)此驅(qū)動一共包含4個功能子函數(shù):初始化功能函數(shù);發(fā)送字符功能函數(shù);傳遞數(shù)據(jù)功能函數(shù);顯示字符功能函數(shù);初始化函數(shù):將打印機的各項參數(shù)修改成初始數(shù)值。發(fā)送字符功能函數(shù):在滿足發(fā)送條件(LSR&0x20)==0,將字符傳送給GM450RL。傳遞數(shù)據(jù)功能函數(shù):建立一個變量len用來記錄字符串長度,然后使用while循環(huán)進行計數(shù),統(tǒng)計出字符串長度。建立for循環(huán)使用發(fā)送字符功能函數(shù)Sendch依次發(fā)送字符給GM450RL。顯示字符功能函數(shù):初始化GM160后通過傳遞數(shù)據(jù)功能函數(shù)SendData獲取字符,通過printf方法顯示出來。代碼如下:/************初始化*****************/voidInit_GM160(void){chartemp;inti;LCR=0x80;//DLAB=1 for(i=0;i<3000;i++) GM450RL=0x0c; GM450RH=0x0; LCR=0x03; //8bitdata,1stopbit GM450RH=0x0;//nousetheinterrupt; temp=LSR; }/************發(fā)送字符*****************/voidsendch(charch){while((LSR&0x20)==0);//maybehaveproblemGM450RL=ch;}/****************senddata*******************/voidSendData(char*content){intlen=0,i;while((content[len])!='\0')len++;//統(tǒng)計數(shù)組字符數(shù)for(i=0;i<len;i++)sendch(content[i]);//發(fā)送單個字符sendch(26);//26代表結(jié)束換行}/*****************GSMsendshortmessage**********************/voidSendShortMessage(char*data){ inti;Init_GM160();//初始化GM160SendData(data);printf("\r\nprint\r\nData(%s)\r\n",data);return;}結(jié)論本課題所有的操作都是基于ARM版試驗系統(tǒng)EL-RAM-860。學校在進行ARM板嵌入式系統(tǒng)應(yīng)用教學時可以添加打印功能的實驗方案,可以讓同學們在學習的時候更加的直觀形象。驅(qū)動程序均使用C語言編寫而成,結(jié)構(gòu)非常鮮明,具有很強的可讀性強,但是在速度上相對于匯編語言而言較慢。產(chǎn)品在開發(fā)選取均是身邊易于獲取的器件,使用的開發(fā)平臺和微型打印機模塊在市場上也具有一定的使用空間,通過研究此課題,有利于將書本上的知識與實際市場應(yīng)用很好的結(jié)合起來,為走出校門,盡快的服務(wù)于社會架設(shè)了一條很好的橋梁。

參考文獻[1]周立功等編.ARM嵌入式系統(tǒng)基礎(chǔ)教程[M].北京航空航天大學出版社,2005[2]譚浩強,張基溫.C語言程序設(shè)計教程(第3版)[M].北京:高等教育出版社,2006[3]田澤.嵌入式系統(tǒng)的開發(fā)與應(yīng)用[M].北京航空航天大學出版社,2005[4]達勝科技有限公司.EL-ARM860_3530說明書[M].2008[5]達勝科技有限公司.WINCE實驗指導(dǎo)書2410[M].2008[6]達勝科技有限公司.EL-ARM-860實驗指導(dǎo)書[M].2008[7]周立功等編.ARM嵌入式系統(tǒng)實驗教程(二)[M].北京航空航天大學出版,2005

致謝首先感謝北京城市學院學院和學院的全體老師。在四年的學習過程中,學院給我提供了一個良好的學習環(huán)境、研究環(huán)境,學院的老師授予我豐富的專業(yè)知識和技能,使我能夠順利完成本科階段的學習。然后感謝我的指導(dǎo)老師郭樂深老師,從報告的選題、資料的收集、框架的設(shè)計開始,他就以廣博的學識給予我精心的指導(dǎo)和熱情的幫助,又在繁忙的工作之際多次審閱論文,對論文提出了許多寶貴的修改意見,讓論文從最早期的工程描述性質(zhì)到現(xiàn)在的條理清晰,行文重點突出,無不體現(xiàn)出導(dǎo)師嚴謹?shù)闹螌W作風、一絲不茍的治學態(tài)度,在此再次向郭最后向在百忙之中評審本文的各位專家、老師表示衷心的感謝!

附錄附錄一、其他代碼 arm830.h#defineCPLD_BASE0(0xd3000000)#defineOUTPUT*(unsignedchar*)CPLD_BASE0#defineINPUT*(unsignedchar*)(CPLD_BASE0+0x16)#defineCS0(unsignedchar*)(CPLD_BASE0+0x30)#defineCS1(unsignedchar*)(CPLD_BASE0+0x40)#defineCS2(unsignedchar*)(CPLD_BASE0+0x50)#defineCS3(unsignedchar*)(CPLD_BASE0+0x60)#defineCS1B(unsignedchar*)(CPLD_BASE0+0x80)#defineCS2B(unsignedchar*)(CPLD_BASE0+0xc0)#defineGM450RL*CS0#defineGM450RH*(CS0+1)#defineLCR*(CS0+3)#defineLSR*(CS0+5)externunsignedchara2h(unsignedchardat);unsignedchara2h(unsignedchardat){if((dat>0x30)&&(dat<0x3a))dat-=0x30;elseif((dat>0x40)&&(dat<0x5b))dat=dat+0xa-0x41;elseif((dat>0x60)&&(dat<0x7b))dat=dat+0xa-0x61;returndat;}externvoiddraw_gap(HDChdc,intx0,inty0,intw_h,charl,chargap,charatri);voiddraw_gap(HDChdc,intx0,inty0,intw_h,charl,chargap,charatri){charnum;intx=x0,y=y0;if(atri==0)num=w_h/gap;elsenum=w_h/gap;for(;num>1;num--){if(atri==0){MoveTo(hdc,x+gap,y);LineTo(hdc,x+gap,y-l);x+=gap;y=y0;}else{MoveTo(hdc,x,y-gap);LineTo(hdc,x+l,y-gap);x=x0;y-=gap;}}}externvoiddraw_coordinate(HDChdc,intx,inty,intw,inth,chargap,charspace);voiddraw_coordinate(HDChdc,intx,inty,intw,inth,chargap,charspace){//SetPenColor(hdc,SysPixelIndex[0]);MoveTo(hdc,x,y);LineTo(hdc,x+w,y);MoveTo(hdc,x+w,y);LineTo(hdc,x+w-2,y-2);MoveTo(hdc,x+w,y);LineTo(hdc,x+w-2,y+2);draw_gap(hdc,x,y,w,gap,space,0);MoveTo(hdc,x,y);LineTo(hdc,x,y+h);MoveTo(hdc,x,y+h);LineTo(hdc,x-2,y+h+2);MoveTo(hdc,x,y+h);LineTo(hdc,x+2,y+h+2);draw_gap(hdc,x,y,-h,gap,space,1);}externvoiddelay(intt);voiddelay(intt){while(t>0)t--;}externchar*Cmd_16c450(char*cmd,charmode);char*Cmd_16c450(char*cmd,charmode){inti,fd;char*tmp=0;fd=open("/dev/myGSM",0);//打開驅(qū)動switch(mode){case0:i=ioctl(fd,1,(unsignedlong)cmd);//發(fā)送一般的AT指令,格式AT+...0xdbreak;case1:i=ioctl(fd,2,(unsignedlong)cmd);//發(fā)送短信內(nèi)容,格式...26break;case2:i=ioctl(fd,0,(unsignedlong)cmd);//撥打電話,格式ATD...";"0xdbreak;case3:i=ioctl(fd,31,(unsignedlong)cmd);//接聽或掛斷電話,格式...0xdbreak;case4:i=ioctl(fd,3,0);//StartTimer3break;case5:i=ioctl(fd,4,0);//StopTimer3break;case6:i=ioctl(fd,32,(unsignedlong)cmd);//直接向450寫字符串break;case7:i=ioctl(fd,33,(unsignedlong)cmd);//直接從450讀字符串break;default:break;}if(mode<4)read(fd,tmp,200);elsetmp=0;close(fd);returntmp;}externchar*StrToDat(char*src,unsignedcharlenth);char*StrToDat(char*src,unsignedcharlenth)//這個函數(shù)的功能是將一個字符串轉(zhuǎn)換成相應(yīng)的16進制數(shù)據(jù),調(diào)用時必須注意{char*p,*p1=0,i,dat;shorttmp=0;p=p1;lenth/=2;if(lenth>20)lenth=20;for(;lenth>0;lenth--){tmp=0;for(i=0;i<4;i++){dat=*src++;if((dat>0x2f)&&(dat<0x3a))dat-=0x30;elseif((dat>0x40)&&(dat<0x47))dat-=(0x40-10);elseif((dat>0x60)&&(dat<0x67))dat-=(0x60-10);tmp=tmp*16+dat;}*p1++=tmp;}*p1='\0';returnp;}externunsignedintStrToInt(char*src);unsignedintStrToInt(char*src)//這個函數(shù)的功能是將一個字符串轉(zhuǎn)換成相應(yīng)的16進制數(shù)據(jù),調(diào)用時必須注意{chartmp;intdat=0;while(*src){tmp=*src++;if((tmp>0x2f)&&(tmp<0x3a))tmp-=0x30;elseif((tmp>0x40)&&(tmp<0x47))tmp-=(0x40-9);elseif((tmp>0x60)&&(tmp<0x67))tmp-=(0x60-9);dat=dat*16+tmp;}returndat;}externvoidHexToStr(char*dst,intdat);voidHexToStr(char*dst,intdat)//這個函數(shù)的功能是將一個16進制的數(shù)據(jù)轉(zhuǎn)換成相應(yīng)的字符串,調(diào)用時必須注意{chartmp,flg=0;while(dat!=0){tmp=(dat&0xf0000000)>>28;if(tmp!=0)flg=1;dat<<=4;if((!flg)&&(!tmp))continue;elseif(tmp<10)*dst++=0x30+tmp;else*dst++=0x40-9+tmp;}*dst=0;}externvoidDecToStr(char*dst,intdat);voidDecToStr(char*dst,intdat)//這個函數(shù)的功能是將一個10進制的數(shù)據(jù)轉(zhuǎn)換成相應(yīng)的字符串,調(diào)用時必須注意{charflg=0,i=0;floattmp;intco=1000000000;while(i<10){i++;tmp=dat/co;dat%=co;co/=10;if(tmp!=0)flg=1;if((!flg)&&(!tmp))continue;*dst++=0x30+tmp;}*dst=0;}externintDecToHex(unsigneddat);intDecToHex(unsigneddat)//這個函數(shù)的功能是將一個10進制的數(shù)據(jù)轉(zhuǎn)換成相應(yīng)的16進制數(shù)據(jù),調(diào)用時必須注意{unsignedinttmp=0,co=0x10000000;charflg=0;while(dat){if((co<dat)||flg){tmp=tmp*0x10+dat/co;dat%=co;if(!flg)flg=1;}co/=0x10;}returntmp;}externintHexToDec(unsigneddat);intHexToDec(unsigneddat)//這個函數(shù)的功能是將一個16進制的數(shù)據(jù)轉(zhuǎn)換成相應(yīng)的10進制數(shù)據(jù),調(diào)用時必須注意{unsignedinttmp=0,co=10000000;charflg=0;while(dat){if((co<dat)||flg){tmp=tmp*0x10+dat/co;dat%=co;if(!flg)flg=1;}co/=10;}returntmp;}demoshow.c#include<stdio.h>#include<math.h>#include<stdlib.h>#include<minigui/common.h>#include<minigui/minigui.h>#include<minigui/gdi.h>#include<minigui/window.h>#include<minigui/control.h>#include"arm830.h"#defineport0x1#defineport10x1#defineport20x1#defineport30x1#defineport40x1HWNDhMainWnd;//主窗口句柄#include"demo_interface/leddemo.h"#include"demo_interface/iodemo.h"#include"demo_interface/ad0809demo.h"#include"demo_interface/ad7852demo.h"#include"demo_interface/ad2543demo.h"#include"demo_interface/hd7279.c"#include"demo_interface/icl7135.c"#include"demo_interface/8255.c"#include"demo_interface/4in1.c"#include"demo_sensor/ad590demo.h"#include"demo_sensor/humiditydemo.h"http://#include"demo_sensor/pressuredemo.h"#include"demo_sensor/m1820.c"#include"demo_sensor/hall.c"#include"demo_sensor/infrared.c"#include"demo_sensor/sonicdemo.h"#include"demo_communication/candemo.h"#include"demo_communication/gsmdemo.h"#include"demo_communication/Bluetooth.c"#include"demo_communication/wirelessdemo.h"#include"demo_communication/gps.c"#include"demo_communication/rs232_485.c"#include"demo_communication/wifi.c"#include"demo_communication/zigbee.c"#include"demo_communication/gtdemo.h"#include"demo_objector/iccarddemo.h"#include"demo_objector/mfcarddemo.h"#include"demo_objector/audio.c"#include"demo_communication/modem.c"#include"demo_objector/3in1.h"#include"demo_objector/DC_motor.c"#include"demo_objector/step_motor.c"#include"demo_objector/pwm_motor.c"http://#include"demo_objector/sTC.c"#include"demo_objector/PID_temp.c"#include"demo_objector/step3_motor.c"#include"demo_objector/print.c"#include"demo_objector/fingerprint.c"#include"menu/MainMenu.h"staticvoidWelcome(HWNDhWnd,HDChdc){intstartx=30,starty=40,gap=40;TextOut(hdc,startx,starty,"鍵盤使用說明:");TextOut(hdc,startx,starty+gap*1,"本實驗演示系統(tǒng)鍵盤可通過'F'鍵進行兩套鍵盤的切換.");TextOut(hdc,startx,starty+gap*2,"1.功能鍵盤:功能鍵盤為默認鍵盤.程序開始運行時即為功能鍵盤,功能鍵盤主要");TextOut(hdc,startx,starty+gap*3,"實現(xiàn)方向的選擇;'C'鍵用來打開菜單;'E'鍵實現(xiàn)焦點切換;'0'鍵為確定鍵.");TextOut(hdc,startx,starty+gap*4,"2.數(shù)字鍵盤:在功能鍵盤模式下按下'F'切換到數(shù)字鍵盤,數(shù)字鍵盤下進行0-9的數(shù)");TextOut(hdc,startx,starty+gap*5,"字輸入,同時'B'鍵為BACKSPACE功能.");TextOut(hdc,startx,starty+gap*6,"實驗箱的默認設(shè)定:取出實驗箱上SI0--SI7的短接帽.");TextOut(hdc,startx,starty+gap*7,"撥碼開關(guān)SW4:1--ON;2OFF;SW2和S1:全為OFF;SW5:有且只有右邊第1位為ON.");TextOut(hdc,startx,starty+gap*8,"ARM9-S3C2410CPU板的默認設(shè)定:");TextOut(hdc,startx,starty+gap*9,"短接JP1和AREFSEL,調(diào)試時使用直連串口線和交叉網(wǎng)線.");}staticintMenuWinProc(HWNDhWnd,intmessage,WPARAMwParam,LPARAMlParam){HDChdc;switch(message){caseMSG_PAINT:hdc=BeginPaint(hWnd);Welcome(hWnd,hdc);EndPaint(hWnd,hdc);return0;caseMSG_CLOSE:DestroyMainWindow(hWnd);PostQuitMessage(hWnd);return0; caseMSG_COMMAND: switch(wParam){/****************通信類實驗******************/ caseIDM_COM_DEMO1:CAN(hWnd); break; caseIDM_COM_DEMO2:GSM(hWnd); break; caseIDM_COM_DEMO3:BlueTooth(hWnd); break; caseIDM_COM_DEMO4:WIRELESS(hWnd); break; caseIDM_COM_DEMO5:MODEM(hWnd); break; caseIDM_COM_DEMO6:GPS(hWnd); break; caseIDM_COM_DEMO7:RS232_485(hWnd); break; caseIDM_COM_DEMO8:GT(hWnd); break; caseIDM_COM_DEMO9://ZIGBE模塊WIFI(hWnd); break; caseIDM_COM_DEMO10://WIFI模塊ZIGBEE(hWnd); break;/***************接口類實驗********************/caseIDM_INT_DEMO1:Led16(hWnd);//Led16*16實驗break;caseIDM_INT_DEMO2:IO(hWnd);//244-273實驗break;caseIDM_INT_DEMO3:AD0809(hWnd);//AD0809實驗break;caseIDM_INT_DEMO4:AD7852(hWnd);//AD7852實驗break;caseIDM_INT_DEMO5:AD2543(hWnd);//AD2543實驗break;caseIDM_INT_DEMO6:PIO8255(hWnd);//AD7852實驗break;caseIDM_INT_DEMO7:HD7279(hWnd);//AD7852實驗break;caseIDM_INT_DEMO8:ICL7135(hWnd);//AD7852實驗break;caseIDM_INT_DEMO9:PIO8255(hWnd);//AD7852實驗break;caseIDM_INT_DEMO10:M4IN1(hWnd);//AD7852實驗break;/*****************傳感器類實驗***************/caseIDM_TRA_DEMO1:AD590(hWnd);//溫度實驗break;caseIDM_TRA_DEMO2:Humi(hWnd);//濕度\壓力實驗break;caseIDM_TRA_DEMO3:DS1820(hWnd);//1820break;caseIDM_TRA_DEMO4:HallSensor(hWnd);//霍爾電流傳感器break;caseIDM_TRA_DEMO5:IR_sensor(hWnd);//紅外傳感器break;caseIDM_TRA_DEMO6:SonicSensor(hWnd);//超聲波測距break;/*caseIDM_TRA_DEMO7:AllSensor(hWnd);//傳感器綜合break;*//*****************控制對象實驗***************/caseIDM_CON_DEMO1:ICCARD(hWnd);break;caseIDM_CON_DEMO2:MFCARD(hWnd);break;/*caseIDM_TRA_DEMO7:SONIC(hWnd);break;*/caseIDM_CON_DEMO3:AUDIO(hWnd);break;caseIDM_CON_DEMO4:M3IN1(hWnd);break;caseIDM_CON_DEMO5:DCmotor(hWnd); break;caseIDM_CON_DEMO6:SPmotor(hWnd);break;caseIDM_CON_DEMO7:pwmmotor(hWnd); break;caseIDM_CON_DEMO8:temp_control(hWnd);break;caseIDM_CON_DEMO9://三相步進電機SP3motor(hWnd);b

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論