功能部件-1、gpio應(yīng)用開(kāi)發(fā)_第1頁(yè)
功能部件-1、gpio應(yīng)用開(kāi)發(fā)_第2頁(yè)
功能部件-1、gpio應(yīng)用開(kāi)發(fā)_第3頁(yè)
功能部件-1、gpio應(yīng)用開(kāi)發(fā)_第4頁(yè)
功能部件-1、gpio應(yīng)用開(kāi)發(fā)_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

文檔 GeneralPurposeInput/Output,詞語(yǔ)縮“MINIARMM3350工控機(jī)主板”縮寫(xiě)為“MINIARMM3350”或GPIO應(yīng)用開(kāi) 讀 寫(xiě) 獲取GPIO的個(gè) 讀一個(gè)GPIO口的狀 設(shè)置一個(gè)GPIO的電平狀 GPO口上次設(shè)置的電平狀 GPIO使用示 溫馨提 免責(zé)....................................................................................................................................參考文 GPIOGPIO(GeneralPurposeInput/Output)即通用輸入輸出端口,在中的應(yīng)用非常廣泛。它可以用來(lái)控制簡(jiǎn)單的外設(shè),如蜂鳴器、LED燈、繼電器等單端口設(shè)備,也可以用來(lái)MINIARMM3350提供了WindowsEmbeddedCompact7GPIO的驅(qū)DeviceIoControl()WindowsEmbeddedCEAPIGPIO過(guò)于復(fù)雜,而在VS2008下用C\C++或MFC使用該包。epcIoLib包可對(duì)MINIARMM3350的GPI0~GPI7及GPO0~GPO7進(jìn)行以下操作 GPIO口的引腳定義詳見(jiàn)產(chǎn)品GPI0GPIO中編號(hào)為0的輸,GPI1是指GPIO中為1的輸,依此類(lèi)推。GPO0是指GPIO中為0的輸出口,GPO1是指GPIO中為1的輸出口,依此類(lèi)推。epcIoLib包的結(jié)構(gòu)及組統(tǒng)之上,即epcIoLib包是對(duì)MINIARMM3350工控機(jī)主板上GPIO操作的API函數(shù)進(jìn)行了一層封裝,這樣,用戶就可以方便地通過(guò)epcIoLib包來(lái)操作MINIARMM3350工控機(jī)主板上的GPIO,而無(wú)需了解WindowsEmbeddedCE下關(guān)于GPIO設(shè)備控制的I/O控制命令。圖1.1epcIoLib包的結(jié)DLL的替代文件被編譯到應(yīng)用程序項(xiàng)epcIoLib.dll:epcIoLib包的動(dòng)態(tài)文件,該文件包含實(shí)際的GPIO口操作代碼。在應(yīng)用程序運(yùn)行時(shí),必須將該文件到應(yīng)用程序的同一下。圖1.2epcIoLibepcIoLib包的函數(shù)說(shuō)明及使用方epcIoLib包提供的API函數(shù)原型和使用說(shuō)明如表1.1~表1.9所示讀該函數(shù)用于全部輸入端口(GPI)的電平狀態(tài),函數(shù)原型及用法見(jiàn) 1.11.1讀intepcIoRead(DWORD全部GPIdwPinState:接收GPI>0=0電平狀態(tài),大于GPI引腳個(gè)數(shù)的位無(wú)效。GPI引腳 0123456 0123456if(iRet==0){MessageBox(_T("ReadGPIO}elsedwInState&=}GPI的輸入電平狀 寫(xiě)該函數(shù)用于設(shè)置全部輸出端口(GPO)的電平狀態(tài),函數(shù)原型及用法見(jiàn) 1.21.2寫(xiě)intepcIoWrite(DWORD設(shè)置全部輸出端口(GPO)的電平狀dwPinState:輸出端口(GPO)電平狀dwPinState每一位對(duì)應(yīng)相應(yīng)輸出引腳的電平狀態(tài),大于GPOGPO引腳 0123456 0123456dwOutState=if(iRet==0){}else/*GPOMessageBox(_T("Write0x55toGPIO}獲取GPIO的個(gè)該函數(shù)用于獲取 M3350工控機(jī)主板上GPIO的個(gè)數(shù)函數(shù)原型及用法見(jiàn)表1.31.3獲取GPIOintepcIoGetNumber(DWORD*dwInNumber,DWORD獲取GPIOdwInNumberdwOutNumber:接收輸出引腳個(gè)>0MINIARMM3350工控機(jī)主板上沒(méi)有如果成功執(zhí)行,則返回GPIO一個(gè)即能作輸入又能作輸出的口線被認(rèn)為是兩個(gè)使用示例if(iGpioNumber==0){MessageBox(_T("GetIoPinNumber}else/*GPIOstrIoNumber.Format(_T("GpiostrIoNumber.Format(_T("GpioNumberis%dAndInputPinis%dOutPutPinis%d"),}重新初始化引腳電平狀態(tài)不受影響,輸出引腳全部置1,函數(shù)原型及用法見(jiàn)表1.4。1.4重新初始化BOOL重新初始化無(wú)TRUE:成功;FALSE和調(diào)用此函數(shù)后,全部輸入引腳電平狀態(tài)不受影響,輸出引腳全部 1使用示例MessageBox(_T("重新初始化GPIO失敗}elseMessageBox(_T("重新初始化GPIO成功

/*重新初始化 }讀一個(gè)GPIO口的狀該函數(shù)用于單個(gè)GPI的電平狀態(tài),函數(shù)原型及用法見(jiàn) 1.51.5讀一個(gè)GPIOBOOLepcIoGetAPin(DWORDPinNumber,DWORD*獲取一個(gè)GPIPinNumber:要獲取的輸入引腳dwPinState:指向引腳電平狀態(tài)的指針,*dwPinState為1:高電平0:低電TRUE:成功;FALSE:失dwPin=if(FALSE==bRet){MessageBox(_T("獲取GPIO輸出口電平狀態(tài)失敗}elseif(dwPinState)}else}}設(shè)置一個(gè)GPIO的電平狀該函數(shù)用于設(shè)置單個(gè)GPO的電平狀態(tài),函數(shù)原型及用法見(jiàn) 1.61.6設(shè)置一個(gè)GPOBOOLepcIoSetAPin(DWORDdwPinNumber,DWORD設(shè)置一個(gè)GPOdwPinNumber:要設(shè)置的輸出引腳的 TRUE:成功;FALSE和dwPin=if(FALSE=={}elseMessageBox(_T(“設(shè)置GPO3為高電平成功/*GPIOGPO該函數(shù)用于獲取GPO輸出端口最近一次設(shè)置的電平狀態(tài),函數(shù)原型及用法見(jiàn) 1.7表1.7GPO口的設(shè)置狀intepcIoGetLastOutState(DWORD獲取GPOdwPinState:接收GPO>0:=0:對(duì)應(yīng)GPO1的電平狀態(tài),依此類(lèi)推,大于GPO引腳個(gè)數(shù)的位無(wú)效GPO引腳:0123456 0123456if(0=={}else/*獲取epcIoLib包的版本表1.8獲取epcIoLib包的版本voidepcIoGetVersion(DWORD獲取epcIoLib包的版本無(wú)/*獲取epcIoLib獲取epcIoLib包的版本信表1.9獲取epcIoLib包的版本信constWCHAR*無(wú)和該函數(shù)自動(dòng)分配緩沖區(qū),返回的字符串以’\0’結(jié)constconstWCHARszInfo=/*獲取epcIoLibGPIO使用示PC機(jī)的Windows中打開(kāi)VisualStudio2008一個(gè)基于MFC智能設(shè)備的框工程GPIODemo。 下,分別如圖1.3和圖1.4所示。圖1.3包相關(guān)文件到工 圖1.4epcIoLib.dll到WindowsEmbeddedCE窗口左邊選定“配置屬性”“器”“輸入”,在“附加依賴項(xiàng)”內(nèi)輸1.5#include#include"epcIoLib為該框添加五個(gè)按鍵、十六個(gè)復(fù)選框及一些靜態(tài)控件,它們的ID號(hào)及標(biāo)題如1.10按鍵IDID寫(xiě)(0(空IDC_OUT7~01234567(空IDC_IN7~GPI電平狀GPIO個(gè)1.6為框添加三個(gè)成員變量。如 1.7所示,在工作區(qū)的類(lèi)視圖中右CGPIODemoDlg,在彈出的快捷菜單中選擇“添加”“添加變量圖1.7為框添加成員變“”為Private。如圖1.8所示,然后單擊OK按鍵。這樣就為框添加了一個(gè)類(lèi)型為unsignedlong的成員變量dwGpioNumber。1.8為按照(7)~(8)的步驟,框添加兩個(gè)unsignedlong類(lèi)型的成員變量為和dwOutNumber,它們的類(lèi)型都為Private型口自動(dòng)定位到OnInitDialog()函數(shù)處,修改OnInitDialog(),如程序1.1所示。程序1.1框初始化代**Function ** **input **output **Returned BOOLCGPIODemoDlg::OnInitDialog(){CStringstrGpioNumber;SetIcon(m_hIcon,FALSE);CenterWindow(GetDesktopWindow());//centertothehpc////TODO:Addextrainitializationif(dwGpioNumber==0)returnFALSE;}/*GPIOstrGpioNumber.Format(_T("共%d個(gè)GPIO,輸入%d個(gè),輸出%d個(gè)CStatic*GpioStatic=(CStatic*)GetDlgItem(IDC_GPIO_NUMBER);return/*一次GPI的狀 }為框添加一個(gè)成員函數(shù)。如 1.9所示,在工作區(qū)的類(lèi)視圖中右CGPIODemoDlg,在彈出的快捷菜單中選擇“添加”“添加函數(shù)圖1.9為框添加成員函然后單擊“完成“。這樣即為CGPIODemoDlg類(lèi)添加了一個(gè)成員函數(shù)voidgpioOutState(unsignedlongdwState)。1.10程序1.2gpioOutState(unsignedlongdwState)函數(shù)代**Function****input將dwState的低八位位狀態(tài)顯示在八個(gè)復(fù)dwState**output**Returned無(wú)voidCGPIODemoDlg::gpioOutState(unsignedlongdwState){CButton*OutStat[0]OutStat[0]=(CButton*)GetDlgItem(IDC_OUT0);OutStat[1]=(CButton*)GetDlgItem(IDC_OUT1);OutStat[2]=(CButton*)GetDlgItem(IDC_OUT2);OutStat[3]=(CButton*)GetDlgItem(IDC_OUT3);OutStat[4]=(CButton*)GetDlgItem(IDC_OUT4);OutStat[5]=(CButton*)GetDlgItem(IDC_OUT5);OutStat[6]=(CButton*)GetDlgItem(IDC_OUT6);OutStat[7]=(CButton*)GetDlgItem(IDC_OUT7);*for(int{{OutStat[i]->}elseOutStat[i]->}}1.6中的各個(gè)按鍵,按下面的步驟為每個(gè)按鍵單擊事件添加相應(yīng)的代碼。添加“寫(xiě)(0~FF)”按鍵單擊事件代碼,如程序1.3所示程序1.3添加"寫(xiě)(0~FF)"按鍵單擊事件代**Function ** **input **output **Returned voidCGPIODemoDlg::OnWrite0ToFf(){DWORDfor(DWORDi=0;i<=0xFF;i++)if(0=={MessageBox(_T("GPIO/*00xFF/*}if(0==}/*/*}}}if(0==}/*/*}}程序1.4其它按鍵代**Function ** "單個(gè)輸出"按鈕單擊事件**input **output **Returned voidCGPIODemoDlg::OnOutOne(){DWORDfor(DWORDdwPinNumber=0;dwPinNumber<dwGpioOutNumber;dwPinNumber++)if(FALSE=={"));}if(0=={"));}設(shè)置一個(gè)GPIO為低}for(dwPinNumber=0;dwPinNumber<dwGpioOutNumber;dwPinNumber++)if(FALSE==epcIoSetAPin(7-{"));}/*GPIOif(0==epcIoGetLastOutState(&dwState)){ /*獲取上次輸出的狀態(tài) MessageBox(_T("獲取GOIO輸出口狀態(tài)失敗"));}}}**Function ** "寫(xiě)多個(gè)IO"按鈕單擊事件**input **output **Returned voidCGPIODemoDlg::OnWriteMuiltIo(){UCHARucData=0;DWORDdwPinData; *OutStat[0]=(CButton*)GetDlgItem(IDC_OUT0);OutStat[1]=(CButton*)GetDlgItem(IDC_OUT1);OutStat[2]=(CButton*)GetDlgItem(IDC_OUT2);OutStat[3]=(CButton*)GetDlgItem(IDC_OUT3);OutStat[4]=(CButton*)GetDlgItem(IDC_OUT4);OutStat[5]=(CButton*)GetDlgItem(IDC_OUT5);OutStat[6]=(CButton*)GetDlgItem(IDC_OUT6);OutStat[7]=(CButton*)GetDlgItem(IDC_OUT7);*for(inti=0;i<8;i++)if((uiStat&0x03)==0x01){ucData|=}}dwPinData=iRet=epcIoWrite(dwPinData); /*寫(xiě)GPIO口 if(0==iRet){}}**Function ** "重新初始化"按鈕單擊事件**input **output **Returned voidCGPIODemoDlg::OnReInit(){if(FALSE==epcIoReInit()){ /*重新初始化GPIO MessageBox(_T("重新初始化GPIO失敗"));}elseMessageBox(_T("重新初始化GPIO成功}if(0==epcIoGetLastOutState(&dwState)){ /*獲取初始化后的輸出狀態(tài) MessageBox(_T("獲取GOIO輸出口狀態(tài)失敗"));} /*顯示輸出狀 }**Function ** "關(guān)于"按鈕單擊事件**input **output **Returned voidCGPIODemoDlg::OnButtonAbout(){constWCHAR*szInfo; /*獲取epcIoLibszInfo=/*epcIoLib}在VisualStudio2008中,選擇類(lèi)視圖的框,然后在屬性框中選擇“消息”欄,1.11圖1.12為框增加WM_TIMER消還是使用epcIoGetAPin()函數(shù)來(lái)GPI的狀態(tài)。如果定義了宏程序 定時(shí)GPI的狀**Function****input**output**Returned無(wú)無(wú)GPI的狀#define voidCGPIODemoDlg::OnTimer(UINT{ *InStat[0]=(CButton*)GetDlgItem(IDC_IN0);InStat[1]=(CButton*)GetDlgItem(IDC_IN1);InStat[2]=(CButton*)GetDlgItem(IDC_IN2);InStat[3]=(CButton*)GetDlgItem(IDC_IN3);InStat[4]=(CButton*)GetDlgItem(IDC_IN4);InStat[5]=(CButton*)GetDlgItem(IDC_IN5);InStat[6]=(CButtonInStat[7]=(CButton#ifdefif(0==iRet){}for(inti=0;i<8;i++){/*讀出為 的GPIO口電平狀態(tài){InStat[i]->}elseInStat[i]->/*GPI}DWORDfor(DWORDdwPinNumber=0;dwPinNumber<dwGpioInNumber;dwPinNumber++)iRet=if(FALSE==iRet)MessageBox(_T("獲取GPIO輸出口電平狀態(tài)失敗}if(dwPinState)In

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論