




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
《嵌入式系統(tǒng)及應(yīng)用》實(shí)驗(yàn)報(bào)告〔2023—2023學(xué)年第一學(xué)期〕題目:簡(jiǎn)易科學(xué)計(jì)算器班級(jí):電子科學(xué)與技術(shù)(1)班姓名:學(xué)號(hào):指導(dǎo)教師:2023年1月10日目錄1.設(shè)計(jì)內(nèi)容…………………32重點(diǎn)要解決的問題及創(chuàng)新性;…………33.概要設(shè)計(jì)3.1中斷控制局部……………………33.2顯示函數(shù)編寫………43.3運(yùn)算符函數(shù)編寫……………64.詳細(xì)設(shè)計(jì)…………………94.1驅(qū)動(dòng)程序頭文件……………………94.2顯示界面編寫調(diào)試……………..104.3控件程序………………214.3.1數(shù)字按鈕對(duì)應(yīng)函數(shù)………………214.3.2運(yùn)算符號(hào)對(duì)應(yīng)函數(shù)………………265.實(shí)驗(yàn)、調(diào)試及測(cè)試結(jié)果與分析?!?1.6.用戶使用說明…………317.結(jié)論…………………328.參考文獻(xiàn)……………32設(shè)計(jì)內(nèi)容:本次設(shè)計(jì)主要以LM3S9B92開發(fā)板作為主要的開發(fā)平臺(tái),首先在這里對(duì)開發(fā)板的結(jié)構(gòu),和最重要的Cortex-M3微處理器,以及搭載的觸摸屏液晶顯示模塊。設(shè)計(jì)一個(gè)簡(jiǎn)易計(jì)算器,能夠?qū)崿F(xiàn)以觸摸界面的形式給出簡(jiǎn)易計(jì)算器的操作界面,能實(shí)現(xiàn)簡(jiǎn)單的加、減、乘、除操作,并且將運(yùn)算步驟都呈現(xiàn)在顯示屏上。重點(diǎn)要解決的問題及創(chuàng)新性:重點(diǎn):1.設(shè)計(jì)計(jì)算器界面,將計(jì)算機(jī)控件布局到開發(fā)板上。2.添加計(jì)算器控件的相應(yīng)代碼,使得計(jì)算器能夠?qū)崿F(xiàn)加減乘除根本功能。3.創(chuàng)新性:1.界面的創(chuàng)新2.計(jì)算器實(shí)現(xiàn)的運(yùn)算過程顯示在結(jié)果輸入框內(nèi),使得能夠記錄運(yùn)算過程。概要設(shè)計(jì)〔說明設(shè)計(jì)系統(tǒng)的組成及主要實(shí)現(xiàn)方法,并采用流程圖等圖形方式形象化說明〕;軟件設(shè)計(jì)根本包括了以下三個(gè)局部的內(nèi)容:中斷控制局部、顯示局部和運(yùn)算局部3.1中斷控制局部中斷控制功能的實(shí)現(xiàn)是在驅(qū)動(dòng)程序當(dāng)中,因?yàn)槭桥c硬件功能連接十分緊密的一個(gè)能實(shí)現(xiàn)。但在實(shí)際應(yīng)用中又與操作緊密相關(guān),是軟件設(shè)計(jì)中十分重要的局部。其根本編程原理是由Cortex-M3提供了一套中斷控制器所提供的API。中斷控制器API提供了一組函數(shù),用來處理嵌套向量中斷控制器〔NVIC〕。這些函數(shù)執(zhí)行以下功能:使能和禁止中斷、注冊(cè)中斷處理程序和設(shè)置中斷的優(yōu)先級(jí)。同時(shí)在驅(qū)動(dòng)文件中,重寫了一些關(guān)于中斷控制的函數(shù)。在操作中,對(duì)觸屏操作時(shí),會(huì)產(chǎn)生一個(gè)軟件中斷,然后對(duì)所進(jìn)行操作后,例如觸摸屏的觸點(diǎn)X,Y值進(jìn)行鎖存。然后對(duì)鎖存的數(shù)據(jù)進(jìn)行讀取,通過LCD顯示相關(guān)的API函數(shù),將得到的數(shù)值進(jìn)行轉(zhuǎn)化成對(duì)應(yīng)函數(shù)操作,或顯示,或運(yùn)算等等。最后將相關(guān)操作的結(jié)果,反映到LCD顯示屏。其流程圖如圖4.1所示。圖4.1中斷控制流程圖3.2顯示函數(shù)編寫顯示功能,顯示功能實(shí)現(xiàn)流程是如圖4.2所示,將按鍵結(jié)果顯示在LCD上的。圖3.2LCD讀/寫操作流程在具體的實(shí)現(xiàn)過程中,本實(shí)驗(yàn)平臺(tái)搭載的觸摸屏,在軟件上是靠一個(gè)WIDGET隊(duì)列處理系統(tǒng)來接受顯示資源,即主界面上的功能按鈕,邊框和顯示區(qū)域等。在聲明了類似canvas〔…〕等畫圖,畫按鈕等方法后,在main函數(shù)中調(diào)用該方法。并調(diào)用函數(shù)WidgetAdd(…函數(shù)名,函數(shù)名…),添加到消息隊(duì)列中。最后用一個(gè)死循環(huán),循環(huán)執(zhí)調(diào)用WidgetMessageQueueProcess()這么一個(gè)函數(shù),完成LCD上顯示輸出所需要的內(nèi)容。所以在完成顯示輸出時(shí),要調(diào)用畫圖的方法,再在主函數(shù)中,將畫圖的方法添加到消息隊(duì)列,然后循環(huán)輸出即可。而在完成運(yùn)算功能后的顯示輸出理論上是一樣的,只是改變了內(nèi)存當(dāng)中的變量。調(diào)用Canvas〔…〕函數(shù)作為一個(gè)變量顯示區(qū)域,將完成計(jì)算后的結(jié)果從內(nèi)存中取出,利用sprintf(變量名,顯示格式,變量名)這樣一個(gè)函數(shù)將輸出結(jié)果存入對(duì)應(yīng)Canvas的變量名中。調(diào)用CanvasTextSet(…)改變Canvas(…)內(nèi)變量的值,重新放入消息隊(duì)列WidgetPaint((tWidget*)&g_Result),完成一個(gè)顯示輸出的功能。另一方面,顯示效果的更改,是利用更新好的Canvas進(jìn)行對(duì)前一次的輸出結(jié)果的覆蓋。為了保證不會(huì)有顯示前次效果的問題,那么對(duì)顯示的長(zhǎng)度進(jìn)行有一定位數(shù)的預(yù)留,每次顯示相同長(zhǎng)度。如果數(shù)字長(zhǎng)度缺乏,那么同樣預(yù)留了長(zhǎng)度,這樣可以對(duì)前次的顯示結(jié)果完成一個(gè)覆蓋的效果,防止顯示錯(cuò)誤。同時(shí)對(duì)輸入的數(shù)字有位數(shù)長(zhǎng)度的限定,即當(dāng)位數(shù)到達(dá)一定時(shí),那么只顯示當(dāng)前輸入的數(shù)字,而不能繼續(xù)輸入。方便確定運(yùn)算結(jié)果的位數(shù),也可以使得最后輸出結(jié)果時(shí)不會(huì)因長(zhǎng)度缺乏而又被覆蓋不完全的錯(cuò)誤??偨Y(jié),顯示輸出軟件編寫上是在不斷調(diào)用消息隊(duì)列WidgetMessageQueueProcess()時(shí)候,更新消息中的內(nèi)容,并且重寫覆蓋已經(jīng)顯示的內(nèi)容,到達(dá)完成顯示所需數(shù)字和運(yùn)算結(jié)果這樣的效果。3.3運(yùn)算符函數(shù)編寫除了顯示局部,本次設(shè)計(jì)另一大塊的設(shè)計(jì)局部是函數(shù)運(yùn)算模塊的設(shè)計(jì)。作為一個(gè)計(jì)算器,除了顯示輸入數(shù)字外,更重要的是得到所需要的計(jì)算結(jié)果。所以,在完成數(shù)字顯示結(jié)果的同時(shí),應(yīng)該考慮的是將輸入數(shù)字,按照對(duì)應(yīng)的按鈕進(jìn)行計(jì)算,輸出結(jié)果。函數(shù)運(yùn)算編寫包含幾個(gè)局部:第一,在能顯示輸入的數(shù)字以后,我們要將不斷輸入的數(shù)字變成對(duì)應(yīng)的數(shù)進(jìn)行輸出。圖3.3數(shù)字組合成數(shù)顯示流程圖如下圖,輸入數(shù)字轉(zhuǎn)化成數(shù),關(guān)鍵是要記錄兩個(gè)局部,一個(gè)是存儲(chǔ)當(dāng)前輸入數(shù)字,和已經(jīng)輸出的數(shù)。將已經(jīng)輸出的數(shù)乘10和當(dāng)前數(shù)字相加那么成為一個(gè)新的數(shù)輸出。有小數(shù)點(diǎn)的數(shù)一樣,在按下小數(shù)點(diǎn)后,改變一個(gè)標(biāo)記位,同時(shí)聲明一個(gè)新的計(jì)數(shù)器,每輸入一個(gè)數(shù)字后乘以10的負(fù)計(jì)數(shù)次方,再加上已輸出的數(shù)后,成為一個(gè)新的數(shù)。一個(gè)數(shù)輸入完畢后,將數(shù)放入一個(gè)數(shù)組中,以便在之后運(yùn)算過程中讀取輸入結(jié)果。對(duì)數(shù)的顯示輸出完成后,是按下相應(yīng)運(yùn)算符后進(jìn)行對(duì)應(yīng)的運(yùn)算。根本運(yùn)算輸出流程圖如圖3.4圖3.4根據(jù)運(yùn)算符號(hào)輸出結(jié)果流程圖完成運(yùn)算符結(jié)果運(yùn)算和顯示的有兩個(gè)要點(diǎn),其一要在運(yùn)算函數(shù)中傳入已輸入數(shù)字,和已存在的之前的預(yù)算結(jié)果,這兩個(gè)數(shù)利用兩個(gè)變量進(jìn)行保存。為了方便對(duì)兩個(gè)變量進(jìn)行操作,所以兩個(gè)變量定義成全局變量來保存兩者的值,方便在整個(gè)循環(huán)過程中調(diào)用,能夠更簡(jiǎn)單和直觀的對(duì)變量進(jìn)行讀取,存放運(yùn)算結(jié)果。第二,要定義符號(hào)的標(biāo)志位,再按下按鈕后,利用switch–case-default語(yǔ)句來根據(jù)標(biāo)志位對(duì)運(yùn)算符號(hào)進(jìn)行判斷。根據(jù)對(duì)應(yīng)的運(yùn)算符號(hào),對(duì)之前的兩組數(shù)字進(jìn)行預(yù)算。即根據(jù)符號(hào),將傳進(jìn)來的前一次預(yù)算結(jié)果和當(dāng)前輸入的數(shù)進(jìn)行對(duì)應(yīng)的加減乘除預(yù)算,運(yùn)算完畢后將運(yùn)算結(jié)果輸出顯示在顯示屏上,顯示方法相同,不再詳述。最后,在實(shí)際操作過程中,在一次運(yùn)算計(jì)算完畢后,或者對(duì)當(dāng)前輸入有錯(cuò)誤,將要重新輸入的時(shí)候,要有一個(gè)對(duì)已保存的數(shù)據(jù)進(jìn)行擦出,或者當(dāng)前輸入的數(shù)字進(jìn)行取消的操作。結(jié)束一次運(yùn)算,根本上就是將運(yùn)算結(jié)果置零,顯示在屏幕上,并且之前內(nèi)存中保存的運(yùn)算結(jié)果和輸入數(shù)置零,計(jì)數(shù)器清零。這樣回收已經(jīng)占用的數(shù)組空間,可以節(jié)約內(nèi)存,提升一定的運(yùn)算效率。而去除一次輸入結(jié)果,只要將當(dāng)前輸入的數(shù)清零,計(jì)數(shù)器自減,顯示結(jié)果置零,輸出即可。詳細(xì)設(shè)計(jì)〔各模塊的設(shè)計(jì)分析、程序流程圖等內(nèi)容〕4.1驅(qū)動(dòng)程序頭文件我們?cè)诰帉懗绦虻臅r(shí)候,要寫入相應(yīng)的頭文件,并且加載相應(yīng)的驅(qū)動(dòng)程序文件,然后才能調(diào)用相關(guān)的驅(qū)動(dòng)程序中初始化函數(shù),和中斷控制函數(shù)等,實(shí)現(xiàn)相關(guān)功能。圖4.1相關(guān)頭文件加載4.2顯示界面編寫調(diào)試顯示界面局部,分為三大塊,即計(jì)算器邊框,算數(shù)結(jié)果輸出區(qū)域,和計(jì)算器按鈕三大局部。每個(gè)局部使用了對(duì)應(yīng)的API函數(shù)。4.2.1算數(shù)結(jié)果輸出區(qū)域調(diào)用了Canvas函數(shù),是一個(gè)算數(shù)結(jié)果輸出區(qū)域設(shè)置區(qū)域的實(shí)現(xiàn)功能函數(shù)。Canvas( //Name //pParent //pNext //pChild g_Result, 0, 0, 0, //pDisplay //lX //lY &g_sKitronix320x240x16_SSD2119, 0, 0, //lWidth //lHeight //ulStyle 320, 50, CANVAS_STYLE_OUTLINE|CANVAS_STYLE_TEXT| CANVAS_STYLE_TEXT_RIGHT|CANVAS_STYLE_TEXT_OPAQUE, //填充顏色 //外邊框顏色 //文字顏色 //字體 ClrBlack, ClrWhite, ClrWhite, &g_sFontCm22b, //pcText //pucImage //pfnOnPaint "0", 0, 0 );計(jì)算機(jī)邊框使用Container()函數(shù)Container( //Name //pParent //pNext //pChild g_NumberContainer, 0, 0, 0, //pDisplay //lX //lY &g_sKitronix320x240x16_SSD2119, 0, 50, //lWidth //lHeight //ulStyle 320, 189, CTR_STYLE_OUTLINE, //填充顏色 //外邊框顏色 //文字顏色 //字體 0, ClrWhite, 0, 0, //pcText 0 );計(jì)算器按鍵使用RectangularButton函數(shù),共設(shè)置“0-9〞,“+〞,“—〞,“*〞,“/〞,“=〞,“c〞,“CE〞,“.〞這17個(gè)按鍵。相應(yīng)代碼:RectangularButton( //Name //pParent //pNext //pChild g_Num1Button, 0, 0, 0, //pDisplay //lX //lY &g_sKitronix320x240x16_SSD2119, 50, 55, //lWidth //lHeight //ulStyle 50, 41, PB_STYLE_TEXT|PB_STYLE_OUTLINE|PB_STYLE_FILL, //填充顏色 //按鍵填充顏色 //外框顏色 //文字顏色 ClrGreen, ClrRed, ClrWhite, ClrWhite, //字體 //pcText //pucImage //pucPressImage &g_sFontCm22b, "1", 0, 0, //usAutoRepeatDelay//usAutoRepeatRate //pfnOnClick 0, 0, OnNumber );RectangularButton( //Name //pParent //pNext //pChild g_Num2Button, 0, 0, 0, //pDisplay //lX //lY &g_sKitronix320x240x16_SSD2119, 105, 55, //lWidth //lHeight //ulStyle 50, 41, PB_STYLE_TEXT|PB_STYLE_OUTLINE|PB_STYLE_FILL, //填充顏色 //按鍵填充顏色 //外框顏色 //文字顏色 ClrGreen, ClrRed, ClrWhite, ClrWhite, //字體 //pcText //pucImage //pucPressImage &g_sFontCm22b, "2", 0, 0, //usAutoRepeatDelay//usAutoRepeatRate //pfnOnClick 0, 0, OnNumber );RectangularButton( //Name //pParent //pNext //pChild g_Num3Button, 0, 0, 0, //pDisplay //lX //lY &g_sKitronix320x240x16_SSD2119, 160, 55, //lWidth //lHeight //ulStyle 50, 41, PB_STYLE_TEXT|PB_STYLE_OUTLINE|PB_STYLE_FILL, //填充顏色 //按鍵填充顏色 //外框顏色 //文字顏色 ClrGreen, ClrRed, ClrWhite, ClrWhite, //字體 //pcText //pucImage //pucPressImage &g_sFontCm22b, "3", 0, 0, //usAutoRepeatDelay//usAutoRepeatRate //pfnOnClick 0, 0, OnNumber );RectangularButton( //Name //pParent //pNext //pChild g_Num4Button, 0, 0, 0, //pDisplay //lX //lY &g_sKitronix320x240x16_SSD2119, 50, 101, //lWidth //lHeight //ulStyle 50, 41, PB_STYLE_TEXT|PB_STYLE_OUTLINE|PB_STYLE_FILL, //填充顏色 //按鍵填充顏色 //外框顏色 //文字顏色 ClrGreen, ClrRed, ClrWhite, ClrWhite, //字體 //pcText //pucImage //pucPressImage &g_sFontCm22b, "4", 0, 0, //usAutoRepeatDelay//usAutoRepeatRate //pfnOnClick 0, 0, OnNumber );RectangularButton( //Name //pParent //pNext //pChild g_Num5Button, 0, 0, 0, //pDisplay //lX //lY &g_sKitronix320x240x16_SSD2119, 105, 101, //lWidth //lHeight //ulStyle 50, 41, PB_STYLE_TEXT|PB_STYLE_OUTLINE|PB_STYLE_FILL, //填充顏色 //按鍵填充顏色 //外框顏色 //文字顏色 ClrGreen, ClrRed, ClrWhite, ClrWhite, //字體 //pcText //pucImage //pucPressImage &g_sFontCm22b, "5", 0, 0, //usAutoRepeatDelay//usAutoRepeatRate //pfnOnClick 0, 0, OnNumber );RectangularButton( //Name //pParent //pNext //pChild g_Num6Button, 0, 0, 0, //pDisplay //lX //lY &g_sKitronix320x240x16_SSD2119, 160, 101, //lWidth //lHeight //ulStyle 50, 41, PB_STYLE_TEXT|PB_STYLE_OUTLINE|PB_STYLE_FILL, //填充顏色 //按鍵填充顏色 //外框顏色 //文字顏色 ClrGreen, ClrRed, ClrWhite, ClrWhite, //字體 //pcText //pucImage //pucPressImage &g_sFontCm22b, "6", 0, 0, //usAutoRepeatDelay//usAutoRepeatRate //pfnOnClick 0, 0, OnNumber );RectangularButton( //Name //pParent //pNext //pChild g_Num7Button, 0, 0, 0, //pDisplay //lX //lY &g_sKitronix320x240x16_SSD2119, 50, 146, //lWidth //lHeight //ulStyle 50, 41, PB_STYLE_TEXT|PB_STYLE_OUTLINE|PB_STYLE_FILL, //填充顏色 //按鍵填充顏色 //外框顏色 //文字顏色 ClrGreen, ClrRed, ClrWhite, ClrWhite, //字體 //pcText //pucImage //pucPressImage &g_sFontCm22b, "7", 0, 0, //usAutoRepeatDelay//usAutoRepeatRate //pfnOnClick 0, 0, OnNumber );RectangularButton( //Name //pParent //pNext //pChild g_Num8Button, 0, 0, 0, //pDisplay //lX //lY &g_sKitronix320x240x16_SSD2119, 105, 146, //lWidth //lHeight //ulStyle 50, 41, PB_STYLE_TEXT|PB_STYLE_OUTLINE|PB_STYLE_FILL, //填充顏色 //按鍵填充顏色 //外框顏色 //文字顏色 ClrGreen, ClrRed, ClrWhite, ClrWhite, //字體 //pcText //pucImage //pucPressImage &g_sFontCm22b, "8", 0, 0, //usAutoRepeatDelay//usAutoRepeatRate //pfnOnClick 0, 0, OnNumber );RectangularButton( //Name //pParent //pNext //pChild g_Num9Button, 0, 0, 0, //pDisplay //lX //lY &g_sKitronix320x240x16_SSD2119, 160, 146, //lWidth //lHeight //ulStyle 50, 41, PB_STYLE_TEXT|PB_STYLE_OUTLINE|PB_STYLE_FILL, //填充顏色 //按鍵填充顏色 //外框顏色 //文字顏色 ClrGreen, ClrRed, ClrWhite, ClrWhite, //字體 //pcText //pucImage //pucPressImage &g_sFontCm22b, "9", 0, 0, //usAutoRepeatDelay//usAutoRepeatRate //pfnOnClick 0, 0, OnNumber );RectangularButton( //Name //pParent //pNext //pChild g_Num0Button, 0, 0, 0, //pDisplay //lX //lY &g_sKitronix320x240x16_SSD2119, 50, 193, //lWidth //lHeight //ulStyle 100, 41, PB_STYLE_TEXT|PB_STYLE_OUTLINE|PB_STYLE_FILL, //填充顏色 //按鍵填充顏色 //外框顏色 //文字顏色 ClrGreen, ClrRed, ClrWhite, ClrWhite, //字體 //pcText //pucImage //pucPressImage &g_sFontCm22b, "0", 0, 0, //usAutoRepeatDelay//usAutoRepeatRate //pfnOnClick 0, 0, OnNumber );RectangularButton( //Name //pParent //pNext //pChild g_PointButton, 0, 0, 0, //pDisplay //lX //lY &g_sKitronix320x240x16_SSD2119, 160, 193, //lWidth //lHeight //ulStyle 50, 41, PB_STYLE_TEXT|PB_STYLE_OUTLINE|PB_STYLE_FILL, //填充顏色 //按鍵填充顏色 //外框顏色 //文字顏色 ClrBlue, ClrRed, ClrWhite, ClrWhite, //字體 //pcText //pucImage //pucPressImage &g_sFontCm22b, ".", 0, 0, //usAutoRepeatDelay//usAutoRepeatRate //pfnOnClick 0, 0, OnPoint );RectangularButton( //Name //pParent //pNext //pChild g_AddButton, 0, 0, 0, //pDisplay //lX //lY &g_sKitronix320x240x16_SSD2119, 215, 55, //lWidth //lHeight //ulStyle 50, 41, PB_STYLE_TEXT|PB_STYLE_OUTLINE|PB_STYLE_FILL, //填充顏色 //按鍵填充顏色 //外框顏色 //文字顏色 ClrBlue, ClrRed, ClrWhite, ClrWhite, //字體 //pcText //pucImage //pucPressImage &g_sFontCm22b, "+", 0, 0, //usAutoRepeatDelay//usAutoRepeatRate //pfnOnClick 0, 0, OnCalculate );RectangularButton( //Name //pParent //pNext //pChild g_SubtractButton, 0, 0, 0, //pDisplay //lX //lY &g_sKitronix320x240x16_SSD2119, 215, 101, //lWidth //lHeight //ulStyle 50, 41, PB_STYLE_TEXT|PB_STYLE_OUTLINE|PB_STYLE_FILL, //填充顏色 //按鍵填充顏色 //外框顏色 //文字顏色 ClrBlue, ClrRed, ClrWhite, ClrWhite, //字體 //pcText //pucImage //pucPressImage &g_sFontCm22b, "-", 0, 0, //usAutoRepeatDelay//usAutoRepeatRate //pfnOnClick 0, 0, OnCalculate );RectangularButton( //Name //pParent //pNext //pChild g_MultiplyButton, 0, 0, 0, //pDisplay //lX //lY &g_sKitronix320x240x16_SSD2119, 215, 146, //lWidth //lHeight //ulStyle 50, 41, PB_STYLE_TEXT|PB_STYLE_OUTLINE|PB_STYLE_FILL, //填充顏色 //按鍵填充顏色 //外框顏色 //文字顏色 ClrBlue, ClrRed, ClrWhite, ClrWhite, //字體 //pcText //pucImage //pucPressImage &g_sFontCm22b, "*", 0, 0, //usAutoRepeatDelay//usAutoRepeatRate //pfnOnClick 0, 0, OnCalculate );RectangularButton( //Name //pParent //pNext //pChild g_DivideButton, 0, 0, 0, //pDisplay //lX //lY &g_sKitronix320x240x16_SSD2119, 215, 193, //lWidth //lHeight //ulStyle 50, 41, PB_STYLE_TEXT|PB_STYLE_OUTLINE|PB_STYLE_FILL, //填充顏色 //按鍵填充顏色 //外框顏色 //文字顏色 ClrBlue, ClrRed, ClrWhite, ClrWhite, //字體 //pcText //pucImage //pucPressImage &g_sFontCm22b, "/", 0, 0, //usAutoRepeatDelay//usAutoRepeatRate //pfnOnClick 0, 0, OnCalculate );RectangularButton( //Name //pParent //pNext //pChild g_CButton, 0, 0, 0, //pDisplay //lX //lY &g_sKitronix320x240x16_SSD2119, 275, 55, //lWidth //lHeight //ulStyle 40, 41, PB_STYLE_TEXT|PB_STYLE_OUTLINE|PB_STYLE_FILL, //填充顏色 //按鍵填充顏色 //外框顏色 //文字顏色 ClrRed, ClrYellow, ClrWhite, ClrWhite, //字體 //pcText //pucImage //pucPressImage &g_sFontCm22b, "C", 0, 0, //usAutoRepeatDelay//usAutoRepeatRate //pfnOnClick 0, 0, OnReset );RectangularButton( //Name //pParent //pNext //pChild g_CEButton, 0, 0, 0, //pDisplay //lX //lY &g_sKitronix320x240x16_SSD2119, 275, 101, //lWidth //lHeight //ulStyle 40, 41, PB_STYLE_TEXT|PB_STYLE_OUTLINE|PB_STYLE_FILL, //填充顏色 //按鍵填充顏色 //外框顏色 //文字顏色 ClrRed, ClrYellow, ClrWhite, ClrWhite, //字體 //pcText //pucImage //pucPressImage &g_sFontCm22b, "CE", 0, 0, //usAutoRepeatDelay//usAutoRepeatRate //pfnOnClick 0, 0, OnReset );RectangularButton( //Name //pParent //pNext //pChild g_EqualButton, 0, 0, 0, //pDisplay //lX //lY &g_sKitronix320x240x16_SSD2119, 275, 146, //lWidth //lHeight //ulStyle 40, 87, PB_STYLE_TEXT|PB_STYLE_OUTLINE|PB_STYLE_FILL, //填充顏色 //按鍵填充顏色 //外框顏色 //文字顏色 ClrRed, ClrYellow, ClrWhite, ClrWhite, //字體 //pcText //pucImage //pucPressImage &g_sFontCm22b, "=", 0, 0, //usAutoRepeatDelay//usAutoRepeatRate //pfnOnClick 0, 0, OnCalculate1 );4.3控件程序4.3.1數(shù)字按鈕對(duì)應(yīng)函數(shù)voidOnNumber(tWidget*pWidget){ //第一次輸入,和運(yùn)算完畢后對(duì)屏幕進(jìn)行輸出的初始化 if(isCalOff==true) { WidgetRemove((tWidget*)&g_Result); strcpy(ucResult,""); isCalOff=false; WidgetPaint(WIDGET_ROOT); } if(pWidget==(tWidget*)(&g_Num1Button)) { slResult=1; strcpy(ucNumber,"1"); count++; } if(pWidget==(tWidget*)(&g_Num2Button)) { slResult=2; strcpy(ucNumber,"2"); count++; } if(pWidget==(tWidget*)(&g_Num3Button)) { slResult=3; strcpy(ucNumber,"3"); count++; } if(pWidget==(tWidget*)(&g_Num4Button)) { slResult=4; strcpy(ucNumber,"4"); count++; } if(pWidget==(tWidget*)(&g_Num5Button)) { slResult=5; strcpy(ucNumber,"5"); count++; } if(pWidget==(tWidget*)(&g_Num6Button)) { slResult=6; strcpy(ucNumber,"6"); count++; } if(pWidget==(tWidget*)(&g_Num7Button)) { slResult=7; strcpy(ucNumber,"7"); count++; } if(pWidget==(tWidget*)(&g_Num8Button)) { slResult=8; strcpy(ucNumber,"8"); count++; } if(pWidget==(tWidget*)(&g_Num9Button)) { slResult=9; strcpy(ucNumber,"9"); count++; } if(pWidget==(tWidget*)(&g_Num0Button)) { slResult=0; strcpy(ucNumber,"0"); count++; } if(count<11&&isPointCheck==false) { outputNumber=outputNumber*10+slResult; if(outputNumber==0) { strcpy(ucResult,"0"); count=0; } else { strcat(ucResult,ucNumber); } } elseif(pointCount<7&&isPointCheck==true) { pointCount++; outputNumber=outputNumber+(slResult*(pow(10,-pointCount))); strcat(ucResult,ucNumber); } len++; CanvasTextSet(&g_Result,ucResult); WidgetPaint((tWidget*)&g_Result);}//小數(shù)點(diǎn)按鈕voidOnPoint(tWidget*pWidget){ //Putyourcodeshere if(isPointCheck==false){ isCalOff=false; strcpy(ucNumber,"."); } isPointCheck=true; strcat(ucResult,ucNumber); len++;}voidOnReset(tWidget*pWidget)//兩種重置按鈕{ if(pWidget==(tWidget*)(&g_CButton)) { strcpy(ucNumber,"0"); WidgetRemove((tWidget*)&g_Result); strcpy(ucResult,"0"); CanvasTextSet(&g_Result,ucResult); WidgetPaint((tWidget*)&g_Result); } if(pWidget==(tWidget*)(&g_CEButton)) { inti=len-1; while((ucResult[i]>='0')&&(ucResult[i]<='9')) { ucResult[i]=NULL; i--; } len=i+1; CanvasTextSet(&g_Result,ucResult); WidgetPaint((tWidget*)&g_Result); } isPointCheck=false; pointCount=0; outputNumber=0; count=0;}4.3.2運(yùn)算符號(hào)對(duì)應(yīng)函數(shù)voidOnCalculate(tWidget*pWidget){ if(pWidget==(tWidget*)(&g_AddButton)) { operators=1; strcat(ucResult,"+"); } if(pWidget==(tWidget*)(&g_SubtractButton)) { operators=2; strcat(ucResult,"-"); } if(pWidget==(tWidget*)(&g_MultiplyButton)) { operators=3; strcat(ucResult,"*"); } if(pWidget==(tWidget*)(&g_DivideButton)) { operators=4; strcat(ucResult,"/"); } len++; count=0; isPointCheck=false; pointCount=0; outputNumber=0; CanvasTextSet(&g_Result,ucResult); WidgetPaint((tWidget*)&g_Result);}voidOnCalculate1(tWidget*pWidget){ inta[20],b[20],count1=0,count2=0,num,i,j; b[0]=0; for(i=0;i<len;i++) { if((ucResult[i]>='0')&&(ucResult[i]<='9'))num=num*10+ucResult[i]-'0'; else { intf,ff; switch(ucResult[i]) { case'+': f=1; ff=1; break; case'-': f=2; ff=1; break; case'*': f=3; ff=2; break; case'/': f=4; ff=2; break; } if(ff>b[count2]) { a[count1++]=num; b[count2++]=ff; num=0; } else { switch (f) { case1: a[count1]=a[count1]+num; b[count2]=f; break; case2: a[count1]=a[count1]-num; b[count2]=f; break; case3: a[count1]=a[count1]*num; b[count2]=f; break; case4: a[count1]=a[count1]/num; b[count2]=f; break; } num=0; } } } a[count1++]=num; while(count2>0) { switch(b[count2]) { case1: a[count1-1]=a[count1-1]+a[count2]; break; case2: a[count1-1]=a[count1-1]-a[count2]; break; case3: a[count1-1]=a[count1-1]*a[count1]; break; case4: a[count1-1]=a[count1-1]/a[count1]; break; } count1--; count2--; } WidgetRemove((tWidget*)&g_Result); strcpy(ucResult,""); for(i=0;a[count1]!=0;i++) { s[i]=a[count1]%10; a[count1]=(a[count1]-s[i])/10; } for(j=0;j<=i;j++) ucResult[j]=s[i-j]; CanvasTextSet(&g_Result,ucResult); WidgetPaint((tWidget*)&g_Result);}intmain(void){ tContextsContext; SysCtlLDOSet(SYSCTL_LDO_2_75V); SysCtlClockSet(SYSCTL_USE_PLL| SYSCTL_OSC_MAIN| SYSCTL_XTAL_16MHZ|SYSCTL_SYSDIV_4); PinoutSet(); Kitronix320x240x16_SSD2119Init(); GrContextInit(&sContext,&g_sKitronix320x240x16_SSD2119); TouchScreenInit(); TouchScreenCallbackSet(WidgetPointerMessage); //widget消息隊(duì)列內(nèi)容添加 WidgetAdd((tWidget*)&g_NumberContainer,(tWidget*)&g_Result); WidgetAdd((tWidget*)&g_NumberContainer,(tWidget*)&g_Num1Button); WidgetAdd((tWidget*)&g
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年安全評(píng)價(jià)師(中級(jí))職業(yè)技能鑒定安全檢測(cè)案例分析試題
- 2025年文職人員招聘考試公共科目試卷四十三:軍事裝備維護(hù)
- 2025年征信數(shù)據(jù)分析挖掘考試題庫(kù):征信數(shù)據(jù)分析挖掘項(xiàng)目評(píng)估標(biāo)準(zhǔn)
- 2025年會(huì)計(jì)職稱考試《初級(jí)會(huì)計(jì)實(shí)務(wù)》章節(jié)重難點(diǎn)突破實(shí)戰(zhàn)案例與解析試題
- 2025年聚碳酸酯(PC)及合金項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告
- 2025年鍛造工(高級(jí))職業(yè)技能鑒定真題分析與備考
- 2025年德語(yǔ)TestDaF閱讀真題試卷:德語(yǔ)閱讀能力全面訓(xùn)練卷
- 2025年對(duì)外漢語(yǔ)教師資格證考試課程與教學(xué)論試題
- 寵物食品分銷協(xié)議
- 個(gè)人工資增長(zhǎng)證明書年收入增長(zhǎng)證明(5篇)
- 北京朝陽(yáng)社區(qū)工作者招聘歷年真題
- 安全及文明施工承諾書
- 工程量計(jì)算書(全部)
- 經(jīng)偵總論試題
- 陜西省安康市教育聯(lián)盟2023-2024學(xué)年高一下學(xué)期期末考試數(shù)學(xué)試卷
- 2023-2024學(xué)年景德鎮(zhèn)市珠山區(qū)數(shù)學(xué)五年級(jí)第二學(xué)期期末監(jiān)測(cè)試題含解析
- 小鎮(zhèn)文旅康養(yǎng)項(xiàng)目可研報(bào)告【健康養(yǎng)老】【旅游康養(yǎng)】
- CTD申報(bào)資料:創(chuàng)新藥IND模塊一-行政文件和藥品信息
- EHS專項(xiàng)施工EHS管理組織機(jī)構(gòu)
- 生理學(xué)神經(jīng)系統(tǒng)的功能
- 發(fā)電廠機(jī)組優(yōu)化調(diào)度與運(yùn)行控制策略
評(píng)論
0/150
提交評(píng)論