




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
嵌入式課程設(shè)計(jì)|自1103高云峰嵌入式控制系統(tǒng)課程設(shè)計(jì)計(jì)算器學(xué)院:自動(dòng)化學(xué)院班級(jí):自1103姓名:高云峰學(xué)號(hào):41151092指導(dǎo)教師:楊旭同組人:2014年7月12日摘要本設(shè)計(jì)在EmbeddedVisualC++集成開發(fā)環(huán)境下編寫程序,通過鍵盤或觸摸屏的輸入,實(shí)現(xiàn)計(jì)算器的順序計(jì)算并且實(shí)現(xiàn)判斷優(yōu)先級(jí)計(jì)算,自動(dòng)判斷數(shù)據(jù)的正確性(不多于小數(shù)點(diǎn)、數(shù)字以0開頭、左右括號(hào)前出現(xiàn)數(shù)字)及合理性(被除數(shù)為0、單個(gè)數(shù)據(jù)超過10位),在4位LED上面輪流顯示8位計(jì)算結(jié)果,控制LED燈和驅(qū)動(dòng)LED數(shù)碼管的應(yīng)用程序,并在WinCE平臺(tái)下運(yùn)行,實(shí)現(xiàn)在PXA270實(shí)驗(yàn)箱的數(shù)碼管上和對(duì)話框的數(shù)字顯示控件上同步顯示手動(dòng)輸入的數(shù)字、數(shù)碼管按照預(yù)設(shè)頻率循環(huán)顯示數(shù)字等功能。關(guān)鍵詞:WinCE操作系統(tǒng)EVC集成開發(fā)環(huán)境PXA270實(shí)驗(yàn)箱LEDGPIO對(duì)話編輯框AbstractThisapplicationisattemptedimplementacalculatorwhichhastheabilitytoorderlycalculateandjudgethepriorityofthecalculation,aswellastotestthevalidityandtherationalityofthedata.ItistriggeredbytheinputfromthekeyboardorthetouchscreenandprogrammedinEmbeddedVisualC++integrateddevelopmentenvironment.Besides,withtheWinceplatform,itcoulduse4LEDtoindicatethe8-bitoutcomeofthecalculatorcircularly,controlthe4LEDanddrivetheapplicationprogramofthedigitalLED,soastocompletethemissionwhichaimstoshowthenumberkeyedbytheoperatorbothontheLEDofthePXA270experimentalboxandtheeditboxofthescreensimultaneously.Theapplicationalsoownsthefunctiontochangethecolorofthenumbershowedintheeditboxofthescreeninaconstantfrequency.Keywords:WinCEOSEVCIDEPXA270experimentboxLEDGPIODialogueeditbox目錄27991設(shè)計(jì)目的 設(shè)計(jì)目的(1)通過理論學(xué)習(xí)、查閱資料、軟件設(shè)計(jì)、系統(tǒng)調(diào)試等環(huán)節(jié),鞏固和提高所學(xué)的知識(shí)和應(yīng)用水平,進(jìn)一步學(xué)習(xí)和領(lǐng)悟嵌入式程序開發(fā)的方法和流程。全面綜合的應(yīng)用所學(xué)基礎(chǔ)知識(shí),建立起一個(gè)完整的嵌入式系統(tǒng)開發(fā)過程的概念。(2)了解WinCE操作系統(tǒng)的概念。學(xué)會(huì)在EmbeddedVisualC++集成開發(fā)環(huán)境中開發(fā)應(yīng)用程序。(3)通過做實(shí)驗(yàn),測(cè)試應(yīng)用程序功能,直觀的了解PXA270實(shí)驗(yàn)設(shè)備的組成部分,尤其是課程設(shè)計(jì)中經(jīng)常用的一些外部設(shè)備。(4)通過課程設(shè)計(jì),了解嵌入式編程的特點(diǎn),并且通過自己的實(shí)踐,解決嵌入式編程的各種問題。(5)通過完成這個(gè)課程設(shè)計(jì),要培養(yǎng)分析問題和解決問題的能力;實(shí)際動(dòng)手操作的能力;查閱中外文獻(xiàn)的能力;制定設(shè)計(jì)方案的能力;計(jì)算機(jī)應(yīng)用的能力;設(shè)計(jì)計(jì)算和繪圖的能力;語言文字表達(dá)的能力;團(tuán)隊(duì)合作的能力,并能從中得到一定的收獲與啟發(fā)。2設(shè)計(jì)功能與設(shè)計(jì)特色2.1設(shè)計(jì)功能本次嵌入式控制系統(tǒng)課程設(shè)計(jì)試圖將老師提供的課程設(shè)計(jì)題目綜合在一起,以對(duì)話框?yàn)橹鹘缑妫肊VC編程,盡可能的實(shí)現(xiàn)一個(gè)集多種功能于一體的綜合小設(shè)計(jì)。其功能包括:(1)創(chuàng)建了一個(gè)計(jì)算器,可以實(shí)現(xiàn)順序計(jì)算與判別優(yōu)先級(jí)計(jì)算;可以自動(dòng)判斷數(shù)據(jù)的正確性(如:參加計(jì)算的數(shù)不多于10位,否則提示“數(shù)據(jù)溢出”);提示“算術(shù)邏輯錯(cuò)誤”,在一些常見的錯(cuò)誤方面,如:數(shù)字以0開頭,被除數(shù)為0;有括號(hào)優(yōu)先級(jí)運(yùn)算。(2)創(chuàng)建文本編輯框,用于顯示運(yùn)算式及輸出結(jié)果,并將文本框的背景色設(shè)置為黑色。設(shè)置“清零”按鈕控件,用來清除輸入框內(nèi)容,以便重新輸入新的內(nèi)容;設(shè)置“清除”按鈕控件,用來將前一步輸錯(cuò)的內(nèi)容刪除,可以接著輸入正確的內(nèi)容。(3)創(chuàng)建了一個(gè)LED數(shù)字顯示控件,該控件可以顯示輸入框內(nèi)輸入的內(nèi)容及計(jì)算器輸出結(jié)果,此外結(jié)合PXA270八段數(shù)碼管,將計(jì)算內(nèi)容同時(shí)顯示在數(shù)碼管上。創(chuàng)建了一個(gè)循環(huán)模塊,其功能是將計(jì)數(shù)器的計(jì)算結(jié)果在PXA270的4個(gè)八段數(shù)碼管上循環(huán)顯示。循環(huán)方式為右循環(huán),設(shè)置循環(huán)間隔時(shí)間為任意輸入值。2.2設(shè)計(jì)特色本次設(shè)計(jì)不僅能夠完成課程設(shè)計(jì)題目的其中計(jì)算機(jī)的基本要求,并且我們小組精益求精,將3項(xiàng)要求結(jié)合在一塊,并在原有功能的基礎(chǔ)上進(jìn)行了修改和完善,實(shí)現(xiàn)了更為理想的功能,實(shí)現(xiàn)了計(jì)算器的各種功能,我們主要的設(shè)計(jì)特色有:(1)本設(shè)計(jì)功能豐富,分模塊進(jìn)行,分為計(jì)算器、顯示、顏色三個(gè)模塊,界面設(shè)計(jì)以GroupBox控件劃分,界面顯得清楚明了且整齊大方。(2)在顯示模塊中,含有“清除”、“清零”按鈕,可以方便重新輸入新的內(nèi)容,而不必關(guān)閉對(duì)話框再打開輸入,同時(shí)這也是考慮到PXA270實(shí)驗(yàn)箱上鍵盤部分沒有清除鍵而增加的。(3)在顏色模塊中,用戶通過改變是三個(gè)滑條的值,來改變計(jì)算機(jī)顯示文本框中數(shù)字的顏色。在改變滑動(dòng)條的同時(shí),可以在右邊的編輯框中顯示當(dāng)前紅、綠、藍(lán)三原色各自的數(shù)值,這樣可以十分準(zhǔn)確的改變顏色為用戶需要的顏色。程序設(shè)計(jì)時(shí)分別編寫有改變字體顏色的函數(shù)和改變背景顏色的函數(shù)(已注釋),通過簡(jiǎn)單修改即去除注釋,也可完成改變背景顏色的功能,或者同時(shí)使用兩種功能。(4)在數(shù)碼管顯示模塊,可以輪流顯示多于四位的的內(nèi)容和小數(shù)點(diǎn),且循環(huán)間隔的時(shí)間都不是固定的,可以進(jìn)行修改,這樣更加有利于用戶在使用時(shí),當(dāng)不滿足其需求時(shí)可以方便修改。(5)為了處理異常情況,比如說編輯框未輸入內(nèi)容或輸入不正確的內(nèi)容,將給出報(bào)錯(cuò)信息,提示輸入正確的內(nèi)容。3功能模塊設(shè)計(jì)3.1計(jì)算器模塊3.1.1任務(wù)要求1)順序計(jì)算與判別優(yōu)先級(jí)計(jì)算:實(shí)現(xiàn)加減乘除及括號(hào)的計(jì)算。2)自動(dòng)判斷數(shù)據(jù)的正確性及運(yùn)算過程的正確性:除數(shù)為0,兩個(gè)數(shù)之間沒有運(yùn)算符連接,以及括號(hào)處理遇到的各種問題。其中包括括號(hào)前沒有出現(xiàn)運(yùn)算符就出現(xiàn)了數(shù)字,以及括號(hào)后也出現(xiàn)了數(shù)字,而沒有進(jìn)行運(yùn)算符號(hào)的連接;出現(xiàn)了多個(gè)小數(shù)點(diǎn)的問題;數(shù)據(jù)溢出的問題。3)實(shí)現(xiàn)退格、清零功能。3.1.2設(shè)計(jì)思路1)界面設(shè)計(jì)計(jì)數(shù)器模塊的界面設(shè)計(jì)如圖3.1,所有控件放在一個(gè)組框GroupBox中。圖3.1計(jì)算器界面多個(gè)Button按鈕,包含數(shù)字“0-9”的ID分別為IDC_Button_ZERO/ONE/TWO/……/NINE,運(yùn)算符“+-×÷”的ID為IDC_Button_ADD/SUB/MUL/DIV/Equal,清零、后退的ID為IDC_Button_Caption為“清除”的Button控件ID為IDC_Button_CleanIt/IDC_Button_Del。2)程序設(shè)計(jì)思路主要由以下部分組成:(1)根據(jù)返回值,識(shí)別出控制鍵與一般字符鍵,作出不同的處理來實(shí)現(xiàn)對(duì)歷史命令的調(diào)用。(2)對(duì)表達(dá)式的預(yù)處理:檢查括號(hào)的配對(duì)情況(正確配對(duì),則前括號(hào)與后括號(hào)的數(shù)量相同)。負(fù)號(hào)的處理。3.1.3程序部分它的實(shí)現(xiàn)代碼如下:voidCProjectDlg::OnButtonC(){//TODO:AddyourcontrolnotificationhandlercodehereCleanIt();//清除文本框Str.Format(_T("%s"),str);GetDlgItem(IDC_EDIT_CAL)->SetWindowText(Str);}voidCProjectDlg::OnButtonDiv()//加、減、乘,0-9的類似,省略{//TODO:Addyourcontrolnotificationhandlercodeherestr[strlong]='/';//將輸入的字符添加到字符串中strlong++;//字符串長(zhǎng)度+1str[strlong]='\0';//添加字符串結(jié)束標(biāo)志Str.Format(_T("%s"),str);//打印到CString對(duì)象Str中GetDlgItem(IDC_EDIT_CAL)->SetWindowText(Str);//將Str中字符串輸出到編輯框}voidCProjectDlg::Finish()//計(jì)算算式處理主函數(shù){charnum[1000];//記錄獨(dú)立數(shù)字字符串doublesuanshi[100];//記錄由字符串處理成數(shù)字形式的算式doublenumber;//記錄由數(shù)字字符換轉(zhuǎn)換成的數(shù)字intbit;//記錄十字字符串的位數(shù)inti;doubletotal;//記錄最后計(jì)算結(jié)果bit=0;l=0;for(i=0;str[i]!='\0';i++)//從同開始處理整個(gè)字符串成為數(shù)字串{if((str[i]>='0'&&str[i]<='9')||str[i]=='.')//如果為0~9或小數(shù)點(diǎn)則加入要處理為數(shù)字的字符串中{num[bit]=str[i];bit++;}else//如果為符號(hào)則特殊處理{if(bit>10)//如果單個(gè)數(shù)字串位數(shù)超過10位,則報(bào)溢出錯(cuò)誤{AfxMessageBox(_T("數(shù)據(jù)溢出"));return;}num[bit]='\0';//在數(shù)字串后添加結(jié)束標(biāo)志if(str[i]!='('&&(i>0&&str[i-1]!=')'))//如果當(dāng)前字符不為(,或者當(dāng)前字符前一字符不為),則可以處理當(dāng)前數(shù)字串{//理由是(前或者)后出現(xiàn)數(shù)字,則為算式邏輯錯(cuò)誤,不允許參與計(jì)算number=solve(num);//處理當(dāng)前數(shù)字串成為數(shù)字if(number==-1)//若返回為-1則是數(shù)字串出現(xiàn)錯(cuò)位,原因是小數(shù)點(diǎn)多于一個(gè),詳見solve(){//則提示邏輯錯(cuò)誤,結(jié)束計(jì)算AfxMessageBox(_T("算式邏輯錯(cuò)誤"));return;}suanshi[l]=number;//將處理得到的浮點(diǎn)型數(shù)加入數(shù)字算式傳中l(wèi)++;//數(shù)字算式串程度+1}elseif(str[i]=='('&&bit>0)//當(dāng)前符號(hào)為(,并且數(shù)字串位數(shù)大于0,即(前出現(xiàn)數(shù)字,則返回邏輯錯(cuò)誤,結(jié)束{AfxMessageBox(_T("算式邏輯錯(cuò)誤"));return;}elseif(str[i]==')'&&str[i+1]!='\0'&&str[i+1]>'0'&&str[i+1]<'9')//若當(dāng)前符號(hào)為),并且字符串后一位沒有結(jié)束{//并且后一位為數(shù)字,則提示邏輯錯(cuò)誤,結(jié)束AfxMessageBox(_T("算式邏輯錯(cuò)誤"));//理由詳見上return;}switch(str[i])//如果沒有出現(xiàn)以上不合法操作,則將當(dāng)前符號(hào),以特殊數(shù)字的方式加入數(shù)字算式串{case'+':suanshi[l]=-1;break;case'-':suanshi[l]=-2;break;case'*':suanshi[l]=-3;break;case'/':suanshi[l]=-4;break;case'(':suanshi[l]=-5;break;case')':suanshi[l]=-6;break;default:break;}l++;bit=0;}}num[bit]='\0';//給算式結(jié)束后最后的一個(gè)數(shù)字進(jìn)行處理if(i>0&&str[i-1]!=')')//處理方式同上{number=solve(num);if(number==-1){AfxMessageBox(_T("算式邏輯錯(cuò)誤"));return;}suanshi[l]=number;l++;}total=0.0;//給計(jì)算結(jié)果清零total=tryit(suanshi);//對(duì)算式進(jìn)行計(jì)算,詳見tryit()if(n<l&&suss)//如果n<l,suss為真,即算式?jīng)]有計(jì)算完成就跳出,多余了反括號(hào),報(bào)錯(cuò){AfxMessageBox(_T("算式邏輯錯(cuò)誤"));return;}Str.Format(_T("%0.5lf"),total);//將得到的結(jié)果打印到Str中GetDlgItem(IDC_EDIT_CAL)->SetWindowText(Str);//將Str中字符串輸出到Edit框中LEDDisplay();//數(shù)碼管顯示}doubleCProjectDlg::tryit(double*suanshi)//加減計(jì)算主函數(shù),將括號(hào)、乘除法視為獨(dú)立數(shù)字進(jìn)行加減運(yùn)算{doubletotal=0;if(suanshi[n]>=0)//若算式開始第一位是數(shù)字{total=calculate(suanshi);//直接開始計(jì)算以這個(gè)數(shù)字為主的部分if(suanshi[n]==-6)//如果計(jì)算結(jié)束后的負(fù)號(hào)為),則后移一位n++;}while(n<l&&suss)//如果算式?jīng)]有處理完,并且沒有出現(xiàn)除數(shù)為0時(shí),繼續(xù)運(yùn)算{if(suanshi[n]==-1)//當(dāng)符號(hào)為+時(shí){n++;total+=calculate(suanshi);}elseif(suanshi[n]==-2)//當(dāng)符號(hào)為-時(shí){n++;total-=calculate(suanshi);}elseif(suanshi[n]==-5)//當(dāng)整個(gè)數(shù)字算式第一位就為(時(shí){total=calculate(suanshi);n++;}elseif(suanshi[n]==-6)//當(dāng)符號(hào)為),跳出當(dāng)前子部分計(jì)算{break;}elseif(suanshi[n]>0)//當(dāng)當(dāng)前位為數(shù)字時(shí),出現(xiàn)算式邏輯錯(cuò)誤,理由是不可能處理出連續(xù)兩個(gè)數(shù)字,兩個(gè)數(shù)字必須由符號(hào)隔開{AfxMessageBox(_T("算式邏輯錯(cuò)誤"));suss=false;return0;}}returntotal;}doubleCProjectDlg::calculate(double*suanshi)//數(shù)字子部分的乘除運(yùn)算{doublenumber;if(suanshi[n]==-5)//當(dāng)子部分算式第一位為(時(shí),調(diào)用tryit對(duì)子部分進(jìn)行遞歸運(yùn)算{n++;number=tryit(suanshi);}elsenumber=suanshi[n];//當(dāng)子部分算式第一位為數(shù)字時(shí),直接加入子部分結(jié)果中while(n<l){if(suanshi[n]>-3&&suanshi[n]<0)//當(dāng)符號(hào)位出現(xiàn)+-號(hào)時(shí),跳出子部分處理,回到加減處理中{break;}n++;if(n==l)//當(dāng)n等于l時(shí),結(jié)束運(yùn)算break;if(suanshi[n]>-3)//當(dāng)符號(hào)位出現(xiàn)數(shù)字,或者加減號(hào)時(shí),結(jié)束子部分處理,回到加減處理中{break;}if(suanshi[n]==-3)//當(dāng)符號(hào)為*號(hào)時(shí){n++;number*=calculate(suanshi);//使用遞歸運(yùn)算,處理乘號(hào)后可能出現(xiàn)括號(hào)}elseif(suanshi[n]==-4)//當(dāng)符號(hào)為/號(hào){n++;if(suanshi[n]==0)//當(dāng)除數(shù)為0時(shí),返回錯(cuò)誤{AfxMessageBox(_T("算式邏輯錯(cuò)誤"));suss=false;return0;}if(suanshi[n]>0)//當(dāng)除號(hào)后為數(shù)字{number/=suanshi[n];//直接除掉,不能遞歸}elseif(suanshi[n]==-5)//當(dāng)除號(hào)后出現(xiàn)括號(hào),則進(jìn)行遞歸,防止出現(xiàn)算式優(yōu)先級(jí)錯(cuò)誤number/=calculate(suanshi);}elseif(suanshi[n]==-5)//當(dāng)數(shù)字位后出現(xiàn)(,則是邏輯錯(cuò)誤,結(jié)束{AfxMessageBox(_T("算式邏輯錯(cuò)誤"));suss=false;return0;}if(suanshi[n]==-6)//當(dāng)出現(xiàn))時(shí),結(jié)束子部分的計(jì)算,跳出{break;}}returnnumber;//返回子部分的計(jì)算值}doubleCProjectDlg::solve(char*num)//將字符串處理為數(shù)字{doublenumber=0;doublexiaoshu=0;inti,j;for(i=0;num[i]!='\0'&&num[i]!='.';i++){number=number*10+num[i]-'0';}if(num[i]=='.')//處理小數(shù)點(diǎn)后的數(shù){for(j=i+1;num[j]!='\0';j++){if(num[j]=='.')//如果小數(shù)點(diǎn)后的數(shù)中又出現(xiàn)小數(shù)點(diǎn),報(bào)錯(cuò)return-1;xiaoshu=xiaoshu*10+num[j]-'0';}for(j=i+1;num[j]!='\0';j++){xiaoshu/=10.0;31}number+=xiaoshu;}returnnumber;//返回轉(zhuǎn)換值}voidCProjectDlg::CleanIt(){str[0]='\0';n=0;l=0;strlong=0;suss=true;times=0;m_bValue=true;T=0;}voidCProjectDlg::OnButtonEqual(){//TODO:Addyourcontrolnotificationhandlercodeherestr[strlong]='\0';//等于號(hào)被按下是,進(jìn)行計(jì)算,并且清除一部分記錄Finish();CleanIt();}BOOLCProjectDlg::PreTranslateMessage(MSG*pMsg)//鍵盤的消息響應(yīng){//TODO:Addyourspecializedcodehereand/orcallthebaseclassif(pMsg->message==WM_KEYDOWN){switch(pMsg->wParam){caseVK_NUMPAD0:str[strlong]='0';break;caseVK_NUMPAD1:str[strlong]='1';break;caseVK_NUMPAD2:str[strlong]='2';break;caseVK_NUMPAD3:str[strlong]='3';break;caseVK_NUMPAD4:str[strlong]='4';break;caseVK_NUMPAD5:str[strlong]='5';break;caseVK_NUMPAD6:str[strlong]='6';break;caseVK_NUMPAD7:str[strlong]='7';break;caseVK_NUMPAD8:str[strlong]='8';break;caseVK_NUMPAD9:str[strlong]='9';break;caseVK_ADD:str[strlong]='+';break;caseVK_SUBTRACT:str[strlong]='-';break;caseVK_MULTIPLY:str[strlong]='*';break;caseVK_DIVIDE:str[strlong]='/';break;caseVK_DECIMAL:str[strlong]='.';break;caseVK_RETURN:if(::GetDlgCtrlID(pMsg->hwnd)!=IDC_BUTTON_EQUAL){GotoDlgCtrl(GetDlgItem(IDC_BUTTON_EQUAL));}OnButtonEqual();returnFALSE;break;default:returnCDialog::PreTranslateMessage(pMsg);break;}strlong++;str[strlong]='\0';Str.Format(_T("%s"),str);GetDlgItem(IDC_EDIT_CAL)->SetWindowText(Str);}returnCDialog::PreTranslateMessage(pMsg);}voidCProjectDlg::OnButtonPoint()//添加小數(shù)點(diǎn)進(jìn)字符串{//TODO:Addyourcontrolnotificationhandlercodeherestr[strlong]='.';strlong++;str[strlong]='\0';Str.Format(_T("%s"),str);GetDlgItem(IDC_EDIT_CAL)->SetWindowText(Str);}voidCProjectDlg::OnButtonDel()//退格{//TODO:Addyourcontrolnotificationhandlercodehere(strlong>0)?(strlong--):(strlong=strlong);//當(dāng)字符串長(zhǎng)度不為0時(shí),字符串長(zhǎng)度-1,添加結(jié)束標(biāo)志str[strlong]='\0';Str.Format(_T("%s"),str);GetDlgItem(IDC_EDIT_CAL)->SetWindowText(Str);}3.2顯示模塊(LED數(shù)碼管)3.2.1任務(wù)要求1)LED數(shù)碼管驅(qū)動(dòng)程序:實(shí)現(xiàn)在目標(biāo)板上的LED數(shù)碼管顯示計(jì)數(shù)器輸入的運(yùn)算符及計(jì)算后的結(jié)果。如果超過四位,則輪流顯示。3.2.2設(shè)計(jì)思路這個(gè)模塊,即綜合了實(shí)驗(yàn)8和實(shí)驗(yàn)9的內(nèi)容。計(jì)數(shù)器模塊的界面設(shè)計(jì)如圖3.1中,為了將整個(gè)模塊綜合起來,當(dāng)“=”按鍵按下時(shí),實(shí)現(xiàn)LED的顯示。數(shù)碼管顯示的關(guān)鍵部分是如何顯示4位數(shù)之后的部分,就要用到輪流顯示,每次裝入緩沖4位數(shù)字(包括小數(shù)點(diǎn)),通過定時(shí)器,可以設(shè)置停留時(shí)間的不一樣,第一組數(shù)據(jù)停的時(shí)間長(zhǎng)一點(diǎn),后面的稍微短些。3.2.3程序?qū)崿F(xiàn)voidCProjectDlg::LEDDisplay()//LED顯示函數(shù){inti,j,len;BYTEdata[4];DWORDbytes;len=Str.GetLength();//獲取計(jì)算結(jié)果的字符串長(zhǎng)度for(i=0;i<len-3;i++)//從字符串0位顯示到len-3位,每次顯示四位數(shù){memset(data,0,4);//緩沖清0for(j=i;j<i+4;j++)//依次將要顯示的四位寫入緩沖{if(Str[j]!='.')data[j-i]=ledfont[Str[j]-'0'];elsedata[j-i]=0x01;//當(dāng)前位為小數(shù)點(diǎn)時(shí)}WriteFile(m_hDev,data,4,&bytes,NULL);//將緩沖區(qū)數(shù)據(jù)以流形式寫入外設(shè)if(i==0)Sleep(3000);//如果為最前四位,顯示3秒elseSleep(500);//每前進(jìn)一位停留0.5秒}}3.3其他(1)打開設(shè)備并做確認(rèn)因?yàn)槲覀兊脑O(shè)計(jì)中要驅(qū)動(dòng)PXA270實(shí)驗(yàn)箱上的八段數(shù)碼管和LED燈,因此在對(duì)話框初始化的時(shí)候需要打開設(shè)備,并做一個(gè)確認(rèn),如果失敗,則彈出提示對(duì)話框。這部分程序代碼添加在OnInitDialog中,實(shí)現(xiàn)代碼如下:m_hDev=CreateFile(_T("LED2:"),GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);//初始化外設(shè)數(shù)碼管,掛載外設(shè),建立流連接if(m_hDev==INVALID_HANDLE_VALUE)//如果返回值為失敗,輸出打開設(shè)備失敗{AfxMessageBox(_T("打開設(shè)備失敗"));}m_hDevL=CreateFile(_T("GIO1:"),GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);//初始化LED燈,掛載if(m_hDevL==INVALID_HANDLE_VALUE){AfxMessageBox(_T("打開設(shè)備失敗LED"));}(2)添加處理窗口失敗的響應(yīng)函數(shù)選擇View-ClassWizard,在彈出的對(duì)話框中,添加系統(tǒng)用來處理窗口失敗時(shí)發(fā)送的消息WM_DESTORY,點(diǎn)擊“AddFunction”,再點(diǎn)擊“EditCode”。添加代碼如下:voidCProjectDlg::OnDestroy(){CDialog::OnDestroy();//TODO:AddyourmessagehandlercodehereCloseHandle(m_hDev);}4使用手冊(cè)與測(cè)試結(jié)果性能分析4.1使用手冊(cè)通過設(shè)計(jì)對(duì)話框界面、查閱相關(guān)書籍,編寫控件程序、不斷調(diào)試,完善設(shè)計(jì)功能,最終我們小組完成的對(duì)話框界面如圖3.1。下面具體說明此操作界面的使用方法。(1)雙擊打開WinCE系統(tǒng)“我的電腦”中“pro.exe”文件,顯示如圖4.1的界面?;蛘唿c(diǎn)擊本地電腦WindowsCE的軟件運(yùn)行,也可以直接彈出本地的運(yùn)行程序。(2)在Display模塊中,通過鍵盤或是界面輸入合理的運(yùn)算表達(dá)式,可以看到在結(jié)果框顯示,輸入“=”,可在結(jié)果框中顯示,同時(shí)在PXA270實(shí)驗(yàn)箱的八段數(shù)碼管也顯示,測(cè)試結(jié)果如圖4.2。圖3.1計(jì)算器界面圖4.1一般計(jì)算結(jié)果顯示圖4.2超過四位計(jì)算結(jié)果顯示圖4.3除數(shù)為零計(jì)算結(jié)果顯示圖4.4數(shù)碼管移位顯示(3)當(dāng)計(jì)算結(jié)果小于9999且除數(shù)非零時(shí),輸出結(jié)果與圖4.1類似,圖中為6×8的結(jié)果。(4)當(dāng)計(jì)算結(jié)果大于9999且除數(shù)非零時(shí),輸出結(jié)果與圖4.2類似,溢出位在實(shí)驗(yàn)箱的數(shù)碼管上不顯示。(5)當(dāng)除數(shù)為零時(shí),計(jì)算結(jié)果如圖4.3所示,彈出
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 整車制造綠色環(huán)保技術(shù)應(yīng)用考核試卷
- 木材采伐作業(yè)成本控制考核試卷
- 衛(wèi)生材料的社會(huì)影響與企業(yè)責(zé)任考核試卷
- 在建工地安全課件模板
- 工廠院內(nèi)改造合同范本
- 公司聘用合同范本6
- 土地小院出租合同范本
- 團(tuán)隊(duì)合作合同范本
- 鋁廠服裝租借合同范本
- 小學(xué)生注意力課件
- 《調(diào)整心態(tài)迎接中考》主題班會(huì)
- 冠心病患者運(yùn)動(dòng)恐懼的現(xiàn)狀及影響因素分析
- 全國(guó)2018年10月自考00043經(jīng)濟(jì)法概論(財(cái)經(jīng)類)試題及答案
- 《又見平遙》課件
- 噴涂設(shè)備點(diǎn)檢表
- 廣東省佛山市《綜合基礎(chǔ)知識(shí)》事業(yè)單位國(guó)考真題
- 02 第2章 城市與城市化-城市管理學(xué)
- 六年級(jí)上冊(cè)英語教案-Culture 2 Going Green 第二課時(shí) 廣東開心英語
- 警察叔叔是怎樣破案的演示文稿課件
- 2019石景山初三一模語文試題及答案
- 09式 新擒敵拳 教學(xué)教案 教學(xué)法 圖解
評(píng)論
0/150
提交評(píng)論