基于嵌入式系統的微型打印機模塊設計與實現_第1頁
基于嵌入式系統的微型打印機模塊設計與實現_第2頁
基于嵌入式系統的微型打印機模塊設計與實現_第3頁
基于嵌入式系統的微型打印機模塊設計與實現_第4頁
基于嵌入式系統的微型打印機模塊設計與實現_第5頁
已閱讀5頁,還剩49頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

基于嵌入式系統的微型打印機模塊設計與實現Designandimplementationofthemicro-printermodulebasedonembeddedsystems學部:信息專業:計算機科學與技術畢業設計(論文)完成時間:自2012年12月至2013年5月摘要我們現在生活的年代,各種形態各種功能的打印機我們已經隨處可見,例如噴墨打印機、激光打印機、針式打印機等等。其中微型打印機也已經在各個領域里面使用頻繁了,例如超市、小商品店、郵政機構、金融行業、公用企事業單位、警務系統等等。發展至今,微型打印機衍生出極其多的種類,并且使用范圍也變得更加的專一。本文主要介紹以EL-RAM-860開發板為平臺的,基于嵌入式系統的微型打印機模塊設計與實現。主要內容有:EL-RAM-860開發板與微型打印機模塊的電路的設計,微型打印機驅動程序軟件結構設計,驅動程序的編寫與調用,在EL-RAM-860開發板上連接并且測試微型打印機模塊。系統實現了以下功能:設計編寫微型打印機驅動程序,調用函數與過程,使EL-RAM-860開發板可以與EPSON公司的M-150II型打印機芯通信,最終使EL-RAM-860驅動微型打印機模塊打印簡單文字。關鍵詞:RAM;Linux;微型打印機;嵌入式系統;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. 嵌入式系統簡介 21.4. 課題研究方向和設計目標 22. 設計系統 22.1. EL-RAM-860開發板: 22.2. 打印機芯 33. 系統硬件設計 43.1. 方案設計 43.2. 硬件設計 54. 系統軟件設計 64.1. 軟件設計 65. 驅動程序主要功能實現 75.1. 建立對話框 75.2. 建立控件 85.3. 建立幫助對話框 95.4. 建立模板對話框 135.5. 子功能函數 186. 結論 21參考文獻 22致謝 23附錄 24附錄一、其他代碼 24arm830.h 24demoshow.c 31附錄二、附圖 421緒論背景與意義微型打印機在工業商業領域應用非常廣,幾乎成為所有行業辦公用品中必不可少的一部分。市場上各種各樣的微型打印機可以通過打印方式分為兩種,針點式和熱敏。熱敏打印機憑借打印速度快、噪聲小等優點而收到市場的青睞,贏得了大部分的市場份額;但是針點式微型打印機也因為其獨特的工作原理及打印性能在一些專業的應用領域無法被替代。本文通過剖析M-150Ⅱ微型打印機機芯的組成結構和驅動原理,對針點式微型打印機的開發設計的主要原理做了詳盡的論述,盡可能去設計一種結構、實用性強的針點式微型打印機制作方案。微型打印機簡介作為一種常見的微型打印機,我國打印機市場初期就有一些利用EPSON打印機芯來生產產品的公司。針式打印機的技術已經成熟,它的結構簡單、性能價格比高、生產成本低。盡管工作式的聲音較大、打印圖像的清晰度低、針頭耗損概率高,但是通過技術的改進,針式打印機擁有了極快的打印速度、打印時的聲音也被一定比例的降低、打印分辨率也得到了提高。這些改變,讓針式打印機變得越來越專用化,逐漸成為銀行存折、金融票據打印、學術研究領域連續打印、條形碼打印、快速跳行打印和復寫紙打印等特殊應用領域不可替代的工具。另外,因為針式打印的針頭地控制很簡單,所以可以通過相對廉價的控制板方案來進行生產,從而降低了成本和價格。進過多年的發展,針式打印機已經發展處了許多種類,他們適用于不同的行業領域,不同的針式打印機也有著各自的優缺點。從9針到24針,針式打印機憑借其低廉的價格、很少的打印成本和易用性一直非常的流行。但是他的缺點也很明顯,針式打印機的打印質量不高,工作室會產生一定的噪音。我所采用的M-150Ⅱ型針式打印機機芯是基于嵌入式系統的一種擊打式打印機,其最大的特點就是打印速度快,在短時間內可以完成較大的打印任務。主要應用于一些自助服務終端,如ATM機、排隊叫號機、自助加油機、醫療檢測設備電腦彩票機等。所以,基于嵌入式系統的針式打印機為人類提供了很多非常便利的服務,是現代人類生活中不可缺少的一部分。嵌入式系統簡介嵌入式是一種專用的計算機系統,作為裝置或設備的一部分,專為實際應用開發的一種技術,軟件硬件均可剪裁。通常,嵌入式系統是一個控制程序存儲在ROM中的嵌入式處理器控制板,主要是由CPU,外圍硬件設備和操作系統組成。事實上,所有帶有數字接口的設備,如手表、微波爐、錄像機、汽車等,都使用嵌入式系統,有些嵌入式系統還包含操作系統,但大多數嵌入式系統都是是由單個程序實現整個控制邏輯。近年來,嵌入式技術憑借其體積小,集合度高,功能性強,應用廣泛,更新快等特點,在市場中站穩了腳跟,在各行業的產品設計中得到了廣泛的應用。課題研究方向和設計目標通過研究嵌入式系統的工作原理,熟悉使用ARM開發板EL-RAM-860,將EPSON微型打印機核心與EL-RAM-860開發板相連,通過C語言開發驅動程序,使EL-RAM-860開發板可以在嵌入式linux操作系統中,驅動外接行式打印機模塊,實現基于嵌入式系統的行式打印機打印服務。設計系統EL-RAM-860開發板:EL-RAM-860開發板使我最終選定的開發板(見圖1)。首先簡單介紹一下此開發板:圖1EL-RAM-860開發板EL-ARM-860型嵌入式實驗開發系統可以運行VxWorks、WinCE、pSOS、QNX、ucosII、linux、uclinux等多種嵌入式操作系統,是專門為《嵌入式系統原理開發與設計》課程設計的實驗工具,同時EL-ARM-860型嵌入式系統也是工程師們理想的開發工具。EL-ARM-860型教學實驗系統采用了ARM920T核、Omap35xx等國內普遍認同的32位CPU,從而可以進行多模塊的應用實驗。使用時可根據試驗情況連接不同種類的CPU板,同時兼容ARM7與ARM9。開發板具有很好的拓展性,通過使用Tech_V,可以制作出出不同用途的接口板。開發板還有很多外圍的擴展設備,例如語音編解碼、人機接口等單元,數字、模擬信號發生器,數字量IO輸入輸出。打印機芯本次課題采用的是EPSON公司的M-150Ⅱ型打印機芯(見圖3)。圖3M-150Ⅱ打印機芯EPSONM-150Ⅱ型打印機芯簡介:

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

由于M-150系列打印機十分小巧,耗能極少,所以M-150系列是眾多打印應用場合的理想打印機,從掌上終端到坐式計算機以及小型測量儀器都可使用該型打印機。M-150Ⅱ機芯是利用打印鋼針撞擊色帶和紙打印出點陣組成的字符圖形。打印采用44.5mm標準紙寬。在25℃,4.5VDC電壓下,每點陣行100ms。打印原理是:系統硬件設計方案設計使用的主要設備:EL-RAM-860開發板ARM處理器芯片EPSONM150II微型打印機模塊SHARPTFT_LCD液晶屏方案總流程示意圖(圖4)開開始加裝打印機模塊加載驅動程序打印成功結束是運行測試打印命令否圖4總體設計流程圖硬件設計嵌入式終端硬件系統,系統采用Samsung公司基于ARM公司的ARM920T處理器核生產的S3C2410處理器為處理器,該CPU是一款32位微控制器。考慮到嵌入式終端需要包含實時操作操作系統、圖形用戶界面(GUI)、英文及漢字字庫、打印驅動程序等,我使用了一片容量為256K×16的靜態RAM及一片容量為1M×16的Flash。操作系統時,按照顯示器的提示,選擇界面上提供的是個功能按鈕,如“幫助”是用來查看程序中的幫助信息,“輸入”是用來輸入要打印的文字,“打印”是用來控制打印機進行打印輸出,“退出”是用來退出打印程序。系統軟件設計軟件設計軟件設計流程圖如下圖:開開始初始化打印機設置清空緩沖區wParam=PRI_HELP建立幫助對話框wParam=PRI_SEND是否建立輸入對話框wParam=PRI_OK建立打印對話框wParam=PRI_CANCEL是是否否結束是否圖6系統軟件流程圖驅動程序主要功能實現驅動程序主要分為四部分:1.建立對話框2.建立控件3.建立幫助對話框4.建立模板對話框下面開始設計代碼:建立對話框通過代碼建立對話框,通過DLGTEMPLATE函數創建一個重疊式窗口、彈出式窗口或子窗口。它指定窗口類,窗口標題,窗口風格,以及窗口的初始位置及大小。WS_BORDER|WS_CAPTION表示帶有邊框和帶有標題。WS_EX_NONE表示此對話框沒有擴展風格。分別創建兩個窗口,主對話框和幫助對話框。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結構體來定義所需要的控件,此結構體代碼為:typedefstruct{char*class_name;//controlclassDWORDdwStyle;//controlstyleintx,y,w,h;//controlpositionindialogintid;//controlidentifierconstchar*caption;//controlcaptionDWORDdwAddData;//additionaldataDWORDdwExStyle;//controlextendedstyle}CTRLDATA;定義常量“PRI_ITEM_NUM”“PRI_HELP_NUM”來確定控件的個數。代碼如下:CTRLDATAPRIItem[PRI_ITEM_NUM];CTRLDATAPRIHelpItem[PRI_HELP_NUM];建立幫助對話框創建幫助對話框時,首先建立一個消息響應的函數PRIHelpProc,通過傳遞message,wParam消息參數來識別用戶的操作,使用switch語句來執行命令。編寫幫助對話框功能,添加幫助對話框的標題,控件數量數目和控件種類,每個控件使用8個屬性來定義控件類型,控件名稱,控件所在的位置,控件顯示的標題信息。幫助對話框PRIHelp需要在這里定義3個屬性:定義對話框的標題信息caption:微型打印機試驗幫助;定義對話框的控件個數controlnr:自定義常數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型的,用來顯示提示的具體內容,需要定義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型的,用來實現退出功能,需要定義8個屬性:定義控件的控制類型類class_name為:button;定義控件的顯示形式dwStyle為:WS_TABSTOP|WS_VISIBLE|BS_PUSHBUTTON定義控件的位置,X,Y值:130,100;定義控件的大小,W,H值:50,25;定義控件的名稱id值:PRI_HLP_CANCEL;定義控件的標題信息caption:退出。在對話框上創建好所有的控件之后,通過DialogBoxIndirectParam函數定義對話框輸出顯示。以下是實現代碼: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);}建立模板對話框創建模板對話框時,首先需要對設備進行初始化,然后建立模板對話框的消息響應的函數PRIProc,通過對PRIProc函數傳遞message,wParam消息參數來識別用戶的操作,使用switch語句來執行命令。編寫模板對話框功能,添加模板對話框的標題,控件數量數目和控件種類,每個控件使用8個屬性來定義控件類型,控件名稱,控件所在的位置,控件顯示的標題信息。模板對話框PRIITEM需要在這里定義3個屬性:定義對話框的標題信息caption:微型打印機試驗;定義對話框的控件個數controlnr:自定義常數PRI_ITEM_NUM;定義對話框的控件類型controls:PRIItem。第一個控件是button型的,用來實現打開幫助對話框,需要定義8個屬性:定義控件的控制類型類class_name為:button;定義控件的顯示形式dwStyle為:WS_TABSTOP|WS_VISIBLE;定義控件的位置,X,Y值:25,100;定義控件的大小,W,H值:50,25;定義控件的名稱id值:PRI_HELP;定義控件的標題信息caption:幫助。第二個控件是button型的,用來實現打印功能,需要定義8個屬性:定義控件的控制類型類class_name為:button;定義控件的顯示形式dwStyle為:WS_TABSTOP|WS_VISIBLE;定義控件的位置,X,Y值:130,100;定義控件的大小,W,H值:50,25;定義控件的名稱id值:PRI_OK;定義控件的標題信息caption:打印。第三個控件是button型的,用來實現退出功能,需要定義8個屬性:定義控件的控制類型類class_name為:button;定義控件的顯示形式dwStyle為:WS_TABSTOP|WS_VISIBLE|BS_PUSHBUTTON定義控件的位置,X,Y值:235,100;定義控件的大小,W,H值:50,25;定義控件的名稱id值:PRI_CANCEL;定義控件的標題信息caption:退出。在對話框上創建好所有的控件之后,通過DialogBoxIndirectParam函數定義對話框輸出顯示。以下是實現代碼: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++]);//發送單個字符 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);}子功能函數此驅動一共包含4個功能子函數:初始化功能函數;發送字符功能函數;傳遞數據功能函數;顯示字符功能函數;初始化函數:將打印機的各項參數修改成初始數值。發送字符功能函數:在滿足發送條件(LSR&0x20)==0,將字符傳送給GM450RL。傳遞數據功能函數:建立一個變量len用來記錄字符串長度,然后使用while循環進行計數,統計出字符串長度。建立for循環使用發送字符功能函數Sendch依次發送字符給GM450RL。顯示字符功能函數:初始化GM160后通過傳遞數據功能函數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; }/************發送字符*****************/voidsendch(charch){while((LSR&0x20)==0);//maybehaveproblemGM450RL=ch;}/****************senddata*******************/voidSendData(char*content){intlen=0,i;while((content[len])!='\0')len++;//統計數組字符數for(i=0;i<len;i++)sendch(content[i]);//發送單個字符sendch(26);//26代表結束換行}/*****************GSMsendshortmessage**********************/voidSendShortMessage(char*data){ inti;Init_GM160();//初始化GM160SendData(data);printf("\r\nprint\r\nData(%s)\r\n",data);return;}結論本課題所有的操作都是基于ARM版試驗系統EL-RAM-860。學校在進行ARM板嵌入式系統應用教學時可以添加打印功能的實驗方案,可以讓同學們在學習的時候更加的直觀形象。驅動程序均使用C語言編寫而成,結構非常鮮明,具有很強的可讀性強,但是在速度上相對于匯編語言而言較慢。產品在開發選取均是身邊易于獲取的器件,使用的開發平臺和微型打印機模塊在市場上也具有一定的使用空間,通過研究此課題,有利于將書本上的知識與實際市場應用很好的結合起來,為走出校門,盡快的服務于社會架設了一條很好的橋梁。

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

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

附錄附錄一、其他代碼 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);//打開驅動switch(mode){case0:i=ioctl(fd,1,(unsignedlong)cmd);//發送一般的AT指令,格式AT+...0xdbreak;case1:i=ioctl(fd,2,(unsignedlong)cmd);//發送短信內容,格式...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)//這個函數的功能是將一個字符串轉換成相應的16進制數據,調用時必須注意{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)//這個函數的功能是將一個字符串轉換成相應的16進制數據,調用時必須注意{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)//這個函數的功能是將一個16進制的數據轉換成相應的字符串,調用時必須注意{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)//這個函數的功能是將一個10進制的數據轉換成相應的字符串,調用時必須注意{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)//這個函數的功能是將一個10進制的數據轉換成相應的16進制數據,調用時必須注意{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)//這個函數的功能是將一個16進制的數據轉換成相應的10進制數據,調用時必須注意{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,"本實驗演示系統鍵盤可通過'F'鍵進行兩套鍵盤的切換.");TextOut(hdc,startx,starty+gap*2,"1.功能鍵盤:功能鍵盤為默認鍵盤.程序開始運行時即為功能鍵盤,功能鍵盤主要");TextOut(hdc,startx,starty+gap*3,"實現方向的選擇;'C'鍵用來打開菜單;'E'鍵實現焦點切換;'0'鍵為確定鍵.");TextOut(hdc,startx,starty+gap*4,"2.數字鍵盤:在功能鍵盤模式下按下'F'切換到數字鍵盤,數字鍵盤下進行0-9的數");TextOut(hdc,startx,starty+gap*5,"字輸入,同時'B'鍵為BACKSPACE功能.");TextOut(hdc,startx,starty+gap*6,"實驗箱的默認設定:取出實驗箱上SI0--SI7的短接帽.");TextOut(hdc,startx,starty+gap*7,"撥碼開關SW4:1--ON;2OFF;SW2和S1:全為OFF;SW5:有且只有右邊第1位為ON.");TextOut(hdc,startx,starty+gap*8,"ARM9-S3C2410CPU板的默認設定:");TextOut(hdc,startx,starty+gap*9,"短接JP1和AREFSEL,調試時使用直連串口線和交叉網線.");}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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論