嵌入式實驗cortex-M3計算器_第1頁
嵌入式實驗cortex-M3計算器_第2頁
嵌入式實驗cortex-M3計算器_第3頁
嵌入式實驗cortex-M3計算器_第4頁
嵌入式實驗cortex-M3計算器_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

《嵌入式系統(tǒng)及應(yīng)用》實驗報告〔2023—2023學(xué)年第一學(xué)期〕題目:簡易科學(xué)計算器班級:電子科學(xué)與技術(shù)(1)班姓名:學(xué)號:指導(dǎo)教師:2023年1月10日目錄1.設(shè)計內(nèi)容…………………32重點要解決的問題及創(chuàng)新性;…………33.概要設(shè)計3.1中斷控制局部……………………33.2顯示函數(shù)編寫………43.3運算符函數(shù)編寫……………64.詳細設(shè)計…………………94.1驅(qū)動程序頭文件……………………94.2顯示界面編寫調(diào)試……………..104.3控件程序………………214.3.1數(shù)字按鈕對應(yīng)函數(shù)………………214.3.2運算符號對應(yīng)函數(shù)………………265.實驗、調(diào)試及測試結(jié)果與分析?!?1.6.用戶使用說明…………317.結(jié)論…………………328.參考文獻……………32設(shè)計內(nèi)容:本次設(shè)計主要以LM3S9B92開發(fā)板作為主要的開發(fā)平臺,首先在這里對開發(fā)板的結(jié)構(gòu),和最重要的Cortex-M3微處理器,以及搭載的觸摸屏液晶顯示模塊。設(shè)計一個簡易計算器,能夠?qū)崿F(xiàn)以觸摸界面的形式給出簡易計算器的操作界面,能實現(xiàn)簡單的加、減、乘、除操作,并且將運算步驟都呈現(xiàn)在顯示屏上。重點要解決的問題及創(chuàng)新性:重點:1.設(shè)計計算器界面,將計算機控件布局到開發(fā)板上。2.添加計算器控件的相應(yīng)代碼,使得計算器能夠?qū)崿F(xiàn)加減乘除根本功能。3.創(chuàng)新性:1.界面的創(chuàng)新2.計算器實現(xiàn)的運算過程顯示在結(jié)果輸入框內(nèi),使得能夠記錄運算過程。概要設(shè)計〔說明設(shè)計系統(tǒng)的組成及主要實現(xiàn)方法,并采用流程圖等圖形方式形象化說明〕;軟件設(shè)計根本包括了以下三個局部的內(nèi)容:中斷控制局部、顯示局部和運算局部3.1中斷控制局部中斷控制功能的實現(xiàn)是在驅(qū)動程序當(dāng)中,因為是與硬件功能連接十分緊密的一個能實現(xiàn)。但在實際應(yīng)用中又與操作緊密相關(guān),是軟件設(shè)計中十分重要的局部。其根本編程原理是由Cortex-M3提供了一套中斷控制器所提供的API。中斷控制器API提供了一組函數(shù),用來處理嵌套向量中斷控制器〔NVIC〕。這些函數(shù)執(zhí)行以下功能:使能和禁止中斷、注冊中斷處理程序和設(shè)置中斷的優(yōu)先級。同時在驅(qū)動文件中,重寫了一些關(guān)于中斷控制的函數(shù)。在操作中,對觸屏操作時,會產(chǎn)生一個軟件中斷,然后對所進行操作后,例如觸摸屏的觸點X,Y值進行鎖存。然后對鎖存的數(shù)據(jù)進行讀取,通過LCD顯示相關(guān)的API函數(shù),將得到的數(shù)值進行轉(zhuǎn)化成對應(yīng)函數(shù)操作,或顯示,或運算等等。最后將相關(guān)操作的結(jié)果,反映到LCD顯示屏。其流程圖如圖4.1所示。圖4.1中斷控制流程圖3.2顯示函數(shù)編寫顯示功能,顯示功能實現(xiàn)流程是如圖4.2所示,將按鍵結(jié)果顯示在LCD上的。圖3.2LCD讀/寫操作流程在具體的實現(xiàn)過程中,本實驗平臺搭載的觸摸屏,在軟件上是靠一個WIDGET隊列處理系統(tǒng)來接受顯示資源,即主界面上的功能按鈕,邊框和顯示區(qū)域等。在聲明了類似canvas〔…〕等畫圖,畫按鈕等方法后,在main函數(shù)中調(diào)用該方法。并調(diào)用函數(shù)WidgetAdd(…函數(shù)名,函數(shù)名…),添加到消息隊列中。最后用一個死循環(huán),循環(huán)執(zhí)調(diào)用WidgetMessageQueueProcess()這么一個函數(shù),完成LCD上顯示輸出所需要的內(nèi)容。所以在完成顯示輸出時,要調(diào)用畫圖的方法,再在主函數(shù)中,將畫圖的方法添加到消息隊列,然后循環(huán)輸出即可。而在完成運算功能后的顯示輸出理論上是一樣的,只是改變了內(nèi)存當(dāng)中的變量。調(diào)用Canvas〔…〕函數(shù)作為一個變量顯示區(qū)域,將完成計算后的結(jié)果從內(nèi)存中取出,利用sprintf(變量名,顯示格式,變量名)這樣一個函數(shù)將輸出結(jié)果存入對應(yīng)Canvas的變量名中。調(diào)用CanvasTextSet(…)改變Canvas(…)內(nèi)變量的值,重新放入消息隊列WidgetPaint((tWidget*)&g_Result),完成一個顯示輸出的功能。另一方面,顯示效果的更改,是利用更新好的Canvas進行對前一次的輸出結(jié)果的覆蓋。為了保證不會有顯示前次效果的問題,那么對顯示的長度進行有一定位數(shù)的預(yù)留,每次顯示相同長度。如果數(shù)字長度缺乏,那么同樣預(yù)留了長度,這樣可以對前次的顯示結(jié)果完成一個覆蓋的效果,防止顯示錯誤。同時對輸入的數(shù)字有位數(shù)長度的限定,即當(dāng)位數(shù)到達一定時,那么只顯示當(dāng)前輸入的數(shù)字,而不能繼續(xù)輸入。方便確定運算結(jié)果的位數(shù),也可以使得最后輸出結(jié)果時不會因長度缺乏而又被覆蓋不完全的錯誤??偨Y(jié),顯示輸出軟件編寫上是在不斷調(diào)用消息隊列WidgetMessageQueueProcess()時候,更新消息中的內(nèi)容,并且重寫覆蓋已經(jīng)顯示的內(nèi)容,到達完成顯示所需數(shù)字和運算結(jié)果這樣的效果。3.3運算符函數(shù)編寫除了顯示局部,本次設(shè)計另一大塊的設(shè)計局部是函數(shù)運算模塊的設(shè)計。作為一個計算器,除了顯示輸入數(shù)字外,更重要的是得到所需要的計算結(jié)果。所以,在完成數(shù)字顯示結(jié)果的同時,應(yīng)該考慮的是將輸入數(shù)字,按照對應(yīng)的按鈕進行計算,輸出結(jié)果。函數(shù)運算編寫包含幾個局部:第一,在能顯示輸入的數(shù)字以后,我們要將不斷輸入的數(shù)字變成對應(yīng)的數(shù)進行輸出。圖3.3數(shù)字組合成數(shù)顯示流程圖如下圖,輸入數(shù)字轉(zhuǎn)化成數(shù),關(guān)鍵是要記錄兩個局部,一個是存儲當(dāng)前輸入數(shù)字,和已經(jīng)輸出的數(shù)。將已經(jīng)輸出的數(shù)乘10和當(dāng)前數(shù)字相加那么成為一個新的數(shù)輸出。有小數(shù)點的數(shù)一樣,在按下小數(shù)點后,改變一個標(biāo)記位,同時聲明一個新的計數(shù)器,每輸入一個數(shù)字后乘以10的負計數(shù)次方,再加上已輸出的數(shù)后,成為一個新的數(shù)。一個數(shù)輸入完畢后,將數(shù)放入一個數(shù)組中,以便在之后運算過程中讀取輸入結(jié)果。對數(shù)的顯示輸出完成后,是按下相應(yīng)運算符后進行對應(yīng)的運算。根本運算輸出流程圖如圖3.4圖3.4根據(jù)運算符號輸出結(jié)果流程圖完成運算符結(jié)果運算和顯示的有兩個要點,其一要在運算函數(shù)中傳入已輸入數(shù)字,和已存在的之前的預(yù)算結(jié)果,這兩個數(shù)利用兩個變量進行保存。為了方便對兩個變量進行操作,所以兩個變量定義成全局變量來保存兩者的值,方便在整個循環(huán)過程中調(diào)用,能夠更簡單和直觀的對變量進行讀取,存放運算結(jié)果。第二,要定義符號的標(biāo)志位,再按下按鈕后,利用switch–case-default語句來根據(jù)標(biāo)志位對運算符號進行判斷。根據(jù)對應(yīng)的運算符號,對之前的兩組數(shù)字進行預(yù)算。即根據(jù)符號,將傳進來的前一次預(yù)算結(jié)果和當(dāng)前輸入的數(shù)進行對應(yīng)的加減乘除預(yù)算,運算完畢后將運算結(jié)果輸出顯示在顯示屏上,顯示方法相同,不再詳述。最后,在實際操作過程中,在一次運算計算完畢后,或者對當(dāng)前輸入有錯誤,將要重新輸入的時候,要有一個對已保存的數(shù)據(jù)進行擦出,或者當(dāng)前輸入的數(shù)字進行取消的操作。結(jié)束一次運算,根本上就是將運算結(jié)果置零,顯示在屏幕上,并且之前內(nèi)存中保存的運算結(jié)果和輸入數(shù)置零,計數(shù)器清零。這樣回收已經(jīng)占用的數(shù)組空間,可以節(jié)約內(nèi)存,提升一定的運算效率。而去除一次輸入結(jié)果,只要將當(dāng)前輸入的數(shù)清零,計數(shù)器自減,顯示結(jié)果置零,輸出即可。詳細設(shè)計〔各模塊的設(shè)計分析、程序流程圖等內(nèi)容〕4.1驅(qū)動程序頭文件我們在編寫程序的時候,要寫入相應(yīng)的頭文件,并且加載相應(yīng)的驅(qū)動程序文件,然后才能調(diào)用相關(guān)的驅(qū)動程序中初始化函數(shù),和中斷控制函數(shù)等,實現(xiàn)相關(guān)功能。圖4.1相關(guān)頭文件加載4.2顯示界面編寫調(diào)試顯示界面局部,分為三大塊,即計算器邊框,算數(shù)結(jié)果輸出區(qū)域,和計算器按鈕三大局部。每個局部使用了對應(yīng)的API函數(shù)。4.2.1算數(shù)結(jié)果輸出區(qū)域調(diào)用了Canvas函數(shù),是一個算數(shù)結(jié)果輸出區(qū)域設(shè)置區(qū)域的實現(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 );計算機邊框使用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 );計算器按鍵使用RectangularButton函數(shù),共設(shè)置“0-9〞,“+〞,“—〞,“*〞,“/〞,“=〞,“c〞,“CE〞,“.〞這17個按鍵。相應(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ù)字按鈕對應(yīng)函數(shù)voidOnNumber(tWidget*pWidget){ //第一次輸入,和運算完畢后對屏幕進行輸出的初始化 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ù)點按鈕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ī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消息隊列內(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等.壓縮文件請下載最新的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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論