版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、物理與電子工程學(xué)院嵌入式系統(tǒng)設(shè)計(jì)設(shè)計(jì)性實(shí)驗(yàn)報(bào)告題 目 基于UCOS-II操作系統(tǒng)的簡易計(jì)算器設(shè)計(jì)系別電子科學(xué)與技術(shù)系年級電科111班級 050211101學(xué)生姓名 卜建鋒指導(dǎo)教師 浦煒實(shí)驗(yàn)時(shí)間 2014-5-29物理與電子工程學(xué)院設(shè)計(jì)實(shí)驗(yàn)報(bào)告課題要求21. 本課題的目的32. 運(yùn)行環(huán)境3正文4一. 課題分析4二. 系統(tǒng)設(shè)計(jì)9三. 技術(shù)實(shí)現(xiàn)問題 23四. 總結(jié)與體會24設(shè)計(jì)性實(shí)驗(yàn)報(bào)告成績:指導(dǎo)教師簽名:24課題要求1. 本課題的目的在ucOS-II下設(shè)計(jì)一個(gè)圖形化界面的計(jì)算器,實(shí)現(xiàn)計(jì)算器功能。利 用ucOS-II下圖形界面設(shè)計(jì)的API函數(shù)設(shè)計(jì)一個(gè)操作界面,含數(shù)字鍵、運(yùn) 算鍵。可以利用觸摸屏功能進(jìn)
2、行操作運(yùn)算,同時(shí)利用實(shí)驗(yàn)箱上的小鍵盤 輸入進(jìn)行運(yùn)算。該項(xiàng)目將主要涉及對ucOS-II下相關(guān)API函數(shù)的使用、基本圖形控件 的使用、消息傳遞機(jī)制的掌握運(yùn)用等方面的綜合設(shè)計(jì)能力的培養(yǎng)和提高。2. 運(yùn)行環(huán)境是ARM公司推出的新一代代碼編譯使用:CodeWarrior for ARM Developer SuiteCodeWarrior for ARM Developer SuiteARM集成開發(fā)工具。(圖 1-1)代碼修改使用:source insight為了方便的修改代碼使用,source in sight。Source In sight是一個(gè)面 向項(xiàng)目開發(fā)的程序編輯器和代碼瀏覽器,能分析源代碼并
3、在工作的同時(shí) 動態(tài)維護(hù)它自己的符號數(shù)據(jù)庫,并自動顯示有用的上下文信息。SourceIn sight提供了快速和革新的訪問源代碼和源信息的能力。:(圖 1-2)9課題分析圖形化界面的計(jì)算器的設(shè)計(jì)包括以下幾個(gè)部分:觸摸屏界面的設(shè)計(jì),觸摸屏按鍵功能設(shè)計(jì),文本框界面設(shè)計(jì),小鍵盤按鍵功能設(shè)計(jì),計(jì)算器 邏輯功能的設(shè)計(jì)。1、觸摸屏界面以及功能設(shè)計(jì)觸摸屏界面設(shè)計(jì)包括文本框的設(shè)計(jì)以及模擬按鍵的設(shè)計(jì)主要用到繪圖API以及圖形控件,觸摸屏尺寸為320*240。文本框的尺寸為20*260, 模擬按鍵尺寸30*40。具體分布見下(圖1-3 )。(0, 0)(0,320)1 2 3CLEAR0B=(240, 0)(圖 1
4、-3)計(jì)算機(jī)界面設(shè)計(jì)完畢后既是設(shè)計(jì)相應(yīng)的按鍵功能,相應(yīng)觸摸屏按鍵用到了消息循環(huán),觸摸屏消息的類型pMsg-Message為OSM_TOUCH_SCRE參數(shù)pMsg-WPara中包含坐標(biāo)信息。用下面的語句獲得(x, y )坐標(biāo)值:Touch_Positio n.x=pMsg-WPara m&O xffff;Touch_Positio n.y=pMsg-WParam16;得到了點(diǎn)擊觸摸點(diǎn)的坐標(biāo)后,用if(Is In Rect2(X,丫)語句判斷這個(gè)坐標(biāo)點(diǎn)落在哪個(gè)按鍵區(qū)域范圍內(nèi),便可知道點(diǎn)擊的是哪個(gè)按鍵。此時(shí)將 按鍵值存在全局變量 sysnumber中,以備下面處理使用。為了調(diào)試方便 使用Uart_
5、Printf(the key is Xn);及時(shí)的將按下的鍵值通過超級終端接受查看。例如語句:if(IsI nRect2(pLi ne_Button_RECT, pTouch_Positio n) /7Uart_Pri ntf(the key is 7n);sys nu mber = 7;可知按鍵按下的是7 鍵,按鍵與sysnumber值的對應(yīng)表如下:按鍵012345678鍵值012345678按鍵9+-*/=CEB鍵值911121314171615(圖 1-4)2、文本框的設(shè)計(jì)文本框控件的設(shè)計(jì),使用 CreateTextCtrl()函數(shù)來創(chuàng)建文本框控件,同樣必須指定文本框的唯一 ID。用Se
6、tTextCtrlText()函數(shù)即可將Uni code文本添加到文本框中,而GetTextCtrlText()函數(shù)用來獲取文本框中字符串的指針。用AppendChar2TextCtrl() 函數(shù)和TextCtrlDeleteChar()函數(shù)分別在文本框中追加一個(gè)字符或刪除最后一個(gè)字符。也可以用SetTextCtrlEdit()函數(shù)設(shè)置文本框?yàn)榫庉嫚顟B(tài),使文本框可以響應(yīng)鍵盤消息,通過鍵盤輸入文字。創(chuàng)建文本框的代碼如下, 創(chuàng)建一個(gè)20*260的文本框用于顯示計(jì)算結(jié)果。void CreateText()structRECT rect;/定義矩形框結(jié)構(gòu)U16 str20=0;SetRect(&rec
7、t, 50,10,270,30); /設(shè)置 PID 參數(shù)軸 1P 的文本框pTextCtrl二CreateTextCtrl(ID_Mai nTextCtrl,&rect,FONTSIZE_MIDDLE,CTRL_ST YLE_FRAME,NULL,NULL);In t2U ni code(sys nu mber,str);將整形數(shù)據(jù)轉(zhuǎn)換為 Uni code 數(shù)據(jù)SetTextCtrlText(pTextCtrl, str,TRUE);/設(shè)置文本框內(nèi)容3、小鍵盤按鍵功能設(shè)計(jì)對于鍵盤消息來說其類型pMsg-Message= OSM_KEY參數(shù) pMsg- WParam則是按鍵的鍵碼。鍵盤中斷服務(wù)程
8、序只向鍵盤郵箱中 發(fā)送一個(gè)消息,通知鍵盤掃描任務(wù)發(fā)生按鍵事件。當(dāng)鍵盤掃描任務(wù) 等到該郵箱的消息后就會從鍵盤掃描芯片讀取掃描碼,繼而將該掃 描碼對應(yīng)的鍵碼用鍵盤消息發(fā)送到消息隊(duì)列。應(yīng)用程序在Main_Task任務(wù)中等待消息,并對該消息進(jìn)行判斷和 處理,如果是鍵盤消息則提取出鍵碼,變換為對應(yīng)字符,然后通過 超級終端接受查看。實(shí)際設(shè)計(jì)時(shí),可通過超級終端接受按鍵值,查看小鍵盤各個(gè)按鍵 對應(yīng)的按鍵值,再按照上表(圖1-4 ),設(shè)置按鍵值變量sys nu mber。4、計(jì)算器邏輯功能的設(shè)計(jì)計(jì)算邏輯是本設(shè)計(jì)的關(guān)鍵所在,根據(jù)觸摸屏或小鍵盤按下不同的鍵, 設(shè)置不同的狀態(tài)。本次設(shè)計(jì)所實(shí)現(xiàn)的功能是:實(shí)現(xiàn)兩位數(shù)的加法
9、,減法, 乘法,除法,結(jié)果支持負(fù)數(shù)顯示。參與運(yùn)算的數(shù)值不能太大,不然在進(jìn)行乘法的時(shí)候可能會溢出,導(dǎo)致 結(jié)果出錯(cuò)。所以設(shè)置參與運(yùn)算的數(shù)最大100 0000,若超出視為溢出,向物理與電子工程學(xué)院設(shè)計(jì)實(shí)驗(yàn)報(bào)告用戶報(bào)錯(cuò),并清零要求重新輸入。在做除法時(shí),考慮到除數(shù)不能為零, 所以在程序設(shè)計(jì)時(shí),進(jìn)行判斷,當(dāng)除數(shù)為零時(shí),向用戶報(bào)錯(cuò),并要求重 新輸入除數(shù)。本設(shè)計(jì)支持輸入清零功能,當(dāng)用戶在輸入運(yùn)算數(shù)出錯(cuò)的, 可以點(diǎn)擊“ CLEAR ”按鍵,清零并進(jìn)行再次輸入。支持觸摸屏和按鍵交 叉輸入,并視為有效參與運(yùn)算數(shù)。運(yùn)算流程圖如下:清零報(bào)錯(cuò)開始J清零1Y 輸入第一個(gè)數(shù)超出范圍CLEAR輸入運(yùn)算符號清零Y輸入第二個(gè)數(shù)超出
10、范圍CLEAR清零報(bào)錯(cuò)11輸入等號執(zhí)行運(yùn)算物理與電子工程學(xué)院設(shè)計(jì)實(shí)驗(yàn)報(bào)告19二.系統(tǒng)設(shè)計(jì)1、硬件系統(tǒng)9.fh I液晶電路:觸摸屏用于顯示,并通過觸摸屏功能輸入數(shù)據(jù)用于計(jì)算2、軟件系統(tǒng)基于UCOS-II操作系統(tǒng)的簡易計(jì)算器設(shè)計(jì),主要在UCOS-II操作系統(tǒng)的基礎(chǔ)上,結(jié)合硬件進(jìn)行進(jìn)一步的功能開發(fā)與設(shè)計(jì)。uCOS-ll任務(wù)是一個(gè)無返回的無窮循環(huán)。uc/os-ii總是運(yùn)行進(jìn)入就緒狀態(tài)的最高優(yōu)先級的 任務(wù),所以,確定哪個(gè)任務(wù)優(yōu)先級最高,下面該哪個(gè)任務(wù)運(yùn)行,這個(gè)工 作就是由調(diào)度器(scheduler)來完成的。任務(wù)級的調(diào)度是由函數(shù) OSSched()完成的,而中斷級的調(diào)度是由函數(shù) OS In tExt()
11、完成。對于 OSSched(),它內(nèi)部調(diào)用的是 OS_TASK_SW()完 成實(shí)際的調(diào)度;OSIntExt()內(nèi)部調(diào)用的是OSCtxSwO實(shí)現(xiàn)調(diào)度。任務(wù)切 換分為兩部,第一步:將被掛起任務(wù)的處理器寄存器推入自己的任務(wù)堆 棧。第二步:然后將進(jìn)入就緒狀態(tài)的最高優(yōu)先級的任務(wù)的寄存器值從堆 棧中恢復(fù)到寄存器中。任務(wù)的5種狀態(tài)睡眠態(tài):任務(wù)駐留于程序空間中,暫時(shí)沒交給ucos-ii處理。就緒態(tài):任務(wù)一旦建立,這個(gè)任務(wù)就進(jìn)入了就緒態(tài)。運(yùn)行態(tài):調(diào)用OSStart ()可以啟動多任務(wù)。 OSStart ()函數(shù)只能調(diào)用一次,一旦調(diào)用,系統(tǒng)將運(yùn)行進(jìn)入就緒態(tài)并且優(yōu)先級最高的任 務(wù)。等待狀態(tài):正在運(yùn)行的任務(wù),通過延遲
12、函數(shù)或pend (掛起)相關(guān)函數(shù)后, 將進(jìn)入等待狀態(tài)。中斷狀態(tài):正在運(yùn)行的任務(wù)是可以被中斷的,除非該任務(wù)將中斷關(guān)閉或者ucos-ii將中斷關(guān)閉。基于UCOS-II操作系統(tǒng)的簡易計(jì)算器只用到了一個(gè)任務(wù),所以無需創(chuàng)建其他的任務(wù)。任務(wù)的主要功能是:響應(yīng)觸摸屏消息,讀取觸摸屏對于 點(diǎn)的按鍵信息;響應(yīng)小鍵盤按鍵消息,讀取對應(yīng)的按鍵值信息。讀取完 成后,進(jìn)行相應(yīng)的計(jì)算邏輯,最終將計(jì)算的結(jié)果通過文本框顯示在觸摸 屏上。同時(shí)通過超級終端串口,向上位機(jī)及時(shí)發(fā)送對應(yīng)的按鍵信息,以 便調(diào)試程序,以及查看觸摸屏校準(zhǔn)情況。3、核心代碼for(;)pMsg=WaitMessage(O);switch(pMsg-Messa
13、ge)case OSM_KEY: 鍵盤消息Uart_Printf(C_flag=%d,pMsg-WParam);switch(pMsg-WParam)case 1: sysnumber=14;break;/case 2: sysnumber=13;break;/*case 3: sysnumber=12;break;/-case 7: sysnumber=11;break;/+case 14: sysnumber=17; break;/ =case 4: sysnumber=7;break;/case 5: sysnumber=8;break;/case 6: sysnumber=9;brea
14、k;/case 8: sysnumber=4; break;/case 9: sysnumber=5; break;/case 10:sysnumber=6; break;/case 11:sysnumber=1; break;/case 12:sysnumber=2; break;/case 13:sysnumber=3; break;/case 15:sysnumber=0; break;/case 16: sysnumber=16; break;/ claer*算器處理部分 */加減乘除功能if(sysnumber = 11)&(sysnumber10000000)/溢出報(bào)錯(cuò),清零重新輸
15、入U(xiǎn)art_Printf(The number is too large !n);Tmp1 = 0;ans = 0;elseTmp1 = ans;Uart_Printf(Tmp1=%dn,Tmp1);Int2Unicode(Tmp1,string);將整形數(shù)據(jù)轉(zhuǎn)換為 Unicode 數(shù)據(jù)SetTextCtrlText(pTextCtrl, string,TRUE);/設(shè)置文本框內(nèi)容elseans = Tmp2;ans *=10;ans+=sysnumber;if(ans10000000)/溢出報(bào)錯(cuò),清零重新輸入large 川!n);Uart_Printf(The number is tooTm
16、p2 = 0;ans = 0;elseTmp2= ans;Uart_Printf(Tmp2=%dn,Tmp2);lnt2Unicode(Tmp2,string);將整形數(shù)據(jù)轉(zhuǎn)換為 Unicode 數(shù)據(jù)SetTextCtrlText(pTextCtrl, string,TRUE);設(shè)置文本框內(nèi)容if(sysnumber = 15) / 清零鍵ans = 0;Tmp2 = 0;Tmp1 = 0;Int2Unicode(ans,string);/將整形數(shù)據(jù)轉(zhuǎn)換為 Unicode 數(shù)據(jù)SetTextCtrlText(pTextCtrl, string,TRUE);/設(shè)置文本框內(nèi)容break;物理與電子
17、工程學(xué)院設(shè)計(jì)實(shí)驗(yàn)報(bào)告case OSM_TOUCH_SCREEN: / 觸摸屏消息Touch_Position.x=pMsg-WPara m&O xffff;Touch_Position.y=pMsg-WParam16;else if(lslnRect2(pSIX_Button_RECT , pTouch_Position)/6Uart_Printf(the key is 6n);22j按鍵值彳得讀取 */說明:數(shù)值鍵盤0-9對應(yīng)數(shù)值0-9/功能鍵盤B (15)CE(16)=(17)/+ (11)-(12)*(13)/(14)if(lslnRect2(pLine_Button_RECT , pT
18、ouch_Position) /7Uart_Printf(the key is 7n);sysnumber = 7;else if(lslnRect2(pCircle_Button_RECT , pTouch_Position)/4Uart_Printf(the key is 4 n);sysnumber = 4;else if(lslnRect2(pCurve_Button_RECT , pTouch_Position)/1Uart_Printf(the key is 1n);sysnumber = 1;sysnumber = 0; else if(lslnRect2(pEIGHT_Butt
19、on_RECT , pTouch_Position)/8Uart_Printf(the key is 8n);sysnumber = 8;else if(lslnRect2(pFIVE_Button_RECT , pTouch_Position)/5Uart_Printf(the key is 5n);sysnumber = 5;else if(lslnRect2(pTWO_Button_RECT , pTouch_Position)/2Uart_Printf(the key is 2n);sysnumber = 2;else if(lslnRect2(pB_Button_RECT , pTo
20、uch_Position)/BUart_Printf(the key is Bn);sysnumber = 15;else if(lslnRect2(pNINE_Button_RECT , pTouch_Position)/9Uart_Printf(the key is 9n);sysnumber = 9;物理與電子工程學(xué)院設(shè)計(jì)實(shí)驗(yàn)報(bào)告sysnumber = 6;else if(lslnRect2(pTHREE_Button_RECT , pTouch_Position)/3Uart_Printf(the key is 3n);sysnumber = 3;else if(lslnRect2(p
21、EQUAL_Button_RECT , pTouch_Position)/=Uart_Printf(the key is =n);sysnumber = 17;else if(lslnRect2(pADD_Button_RECT , pTouch_Position)/+Uart_Printf(the key is +n);sysnumber = 11;else if(lslnRect2(pDEC_Button_RECT , pTouch_Position)/-Uart_Printf(the key is -n);sysnumber = 12;else if(lslnRect2(pMUL_But
22、ton_RECT , pTouch_Position)/* Uart_Printf(the key is *n);sysnumber = 13;sysnumber = 14;else if(lslnRect2(pDIV_Button_RECT , pTouch_Position)/Uart_Printf(the key is 八n);24物理與電子工程學(xué)院設(shè)計(jì)實(shí)驗(yàn)報(bào)告else if(lslnRect2(pCLEAR_Button_RECT , pTouch_Position)/CEUart_Printf(the key is CE !n);sysnumber = 15;Uart_Printf(
23、C_flag=%dn,sysnumber);/說明:數(shù)值鍵盤0-9 對應(yīng)數(shù)值0-9/功能鍵盤B (15)CE(16)=(17)/+ (11)*(13)/- (12)/(14)26*/算器處理部分 */*/if(sysnumber = 11)&(sysnumber10000000) / 溢出報(bào)錯(cuò),清零重新輸入Tmp1 = 0;ans = 0;elseTmp1 = ans;Uart_Printf(Tmp1=%dn,Tmp1);lnt2Unicode(Tmp1,string);將整形數(shù)據(jù)轉(zhuǎn)換為 Unicode 數(shù)據(jù)SetTextCtrlText(pTextCtrl, string,TRUE);設(shè)置文
24、本框內(nèi)容elseans = Tmp2;ans *=10;ans+=sysnumber;if(ans10000000) / 溢出報(bào)錯(cuò),清零重新輸入U(xiǎn)art_Printf(The number is too large !n);Tmp2 = 0;ans = 0;elseTmp2= ans;Uart_Printf(Tmp2=%dn,Tmp2);Int2Unicode(Tmp2,string);將整形數(shù)據(jù)轉(zhuǎn)換為 Unicode 數(shù)據(jù)SetTextCtrlText(pTextCtrl, string,TRUE);設(shè)置文本框內(nèi)容if(sysnumber = 15)/ 清零鍵ans = 0;物理與電子工程學(xué)
25、院設(shè)計(jì)實(shí)驗(yàn)報(bào)告Tmp1 = 0;lnt2Unicode(ans,string);將整形數(shù)據(jù)轉(zhuǎn)換為 Unicode 數(shù)據(jù)SetTextCtrlText(pTextCtrl, string,TRUE);設(shè)置文本框內(nèi)容break;*/DeleteMessage(pMsg);OSTimeDly1000);DestoryDC(pdc);33代碼分析:首先輸入一個(gè)十進(jìn)制數(shù)(小于100 0000 ),既前一次的按鍵值乘以10加上本次按鍵值,即為輸入的數(shù)據(jù)。代碼實(shí)現(xiàn)如下:ans = Tmp2;ans *=10;ans+=sysnumber;當(dāng)?shù)谝淮屋斎虢Y(jié)束,輸入符號時(shí),修改標(biāo)志變量C_flag為1,進(jìn)入下一次
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/Z 17215.682-2024電測量數(shù)據(jù)交換DLMS/COSEM組件第82部分:社區(qū)網(wǎng)絡(luò)Mesh通信配置
- 水電建設(shè)招標(biāo)文件內(nèi)容
- 九年級歷史上冊 第二單元 近代社會的確立與動蕩 第9課 古老印度的抗?fàn)幗贪?北師大版
- 2024秋七年級語文上冊 第6單元 第21課 女媧造人教案 新人教版
- 2024-2025學(xué)年高中歷史 第五單元 經(jīng)濟(jì)全球化的趨勢 第27課 綜合探究:中國如何應(yīng)對全球化的挑戰(zhàn)(2)教學(xué)教案 岳麓版必修2
- 2024秋四年級英語上冊 Unit 1 The Clothes We Wear Lesson 1 Skirt and Trousers教案 冀教版(三起)
- 2023三年級語文上冊 第八單元 24 司馬光說課稿 新人教版
- 高考地理一輪復(fù)習(xí)第十八章資源安全與國家安全第二節(jié)耕地資源與糧食安全課件
- 消防泵房管理制度
- 自愿贈與的合同(2篇)
- 互聯(lián)網(wǎng)信息審核員考試題庫大全-下(判斷、填空題匯總)
- 印刷品投標(biāo)方案
- 高頻電子線路教學(xué)大綱
- 中央空調(diào)隱蔽工程驗(yàn)收記錄表
- 中國普通食物營養(yǎng)成分表(修正版)
- 第12課 明朝的興亡【知識精研】 《中國歷史》 中職中專 高效課堂課件
- 99版-干部履歷表-A4打印
- 現(xiàn)患率調(diào)查匯總表
- 低壓電纜測絕緣施工方案
- 電動機(jī)基礎(chǔ)知識介紹
- 重慶十八中學(xué)2024屆物理八上期末教學(xué)質(zhì)量檢測試題含解析
評論
0/150
提交評論