嵌入式--計(jì)算器--試驗(yàn)報(bào)告_第1頁(yè)
嵌入式--計(jì)算器--試驗(yàn)報(bào)告_第2頁(yè)
嵌入式--計(jì)算器--試驗(yàn)報(bào)告_第3頁(yè)
嵌入式--計(jì)算器--試驗(yàn)報(bào)告_第4頁(yè)
嵌入式--計(jì)算器--試驗(yàn)報(bào)告_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余2頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

1、計(jì)算器設(shè)計(jì)實(shí)驗(yàn)報(bào)告一、實(shí)驗(yàn)設(shè)計(jì)主要分工04009320文斌:算法設(shè)計(jì),LCD顯示。 04* 張希:界而(按鈕控件)設(shè)計(jì),文件內(nèi)容讀取。 共同調(diào)試、完善設(shè)計(jì)。二、程序設(shè)計(jì)實(shí)現(xiàn)功能效果(1)支持整數(shù)、小數(shù)基本加減乘除運(yùn)算;(2)有優(yōu)先級(jí)的判別訃算。優(yōu)先級(jí)由高到低一次為括號(hào)運(yùn)算、乘除運(yùn)算、加減運(yùn)算。(3)支持鍵盤(pán)輸入和觸摸屏輸入;(4)能讀取指左目錄下文本內(nèi)容(內(nèi)容為汁算表達(dá)式)并計(jì)算得出結(jié)果,將內(nèi)容和結(jié)果顯 示在LCD上。程序任務(wù)開(kāi)始后,等待鍵盤(pán)或觸摸屏的輸入。輸入鍵有09數(shù)字鍵、+-*/()運(yùn)算符、 del退格鍵、clear清屏鍵、read讀指定目錄文本內(nèi)容并計(jì)算鍵、enter* =鍵、小數(shù)點(diǎn)

2、鍵。每當(dāng)有字符輸入時(shí),觸摸屏相應(yīng)鍵顯示“AAA”,100ms后恢復(fù)原相應(yīng)按鍵符號(hào),同時(shí)LCD 屏幕上顯示相應(yīng)字符。當(dāng)輸入del鍵時(shí),屏幕顯示去掉最后一位字符。當(dāng)輸入二號(hào)后,得 出計(jì)算結(jié)果,結(jié)果顯示于表達(dá)式的下一行。若是除零錯(cuò)誤,則結(jié)果顯示為/0ERR0R!”。若 有非法字符(觸摸點(diǎn)不能識(shí)別為設(shè)計(jì)按鍵符則視為非法字符),則結(jié)果輸出為“Syntax Error!”。若表達(dá)式有運(yùn)算符連續(xù)輸入,則忽略前面的運(yùn)算符,只取最后一位運(yùn)算符計(jì)算, 正常顯示數(shù)字結(jié)果。當(dāng)輸入* clear鍵時(shí),情況顯示區(qū)域。當(dāng)輸入read鍵時(shí),從指龍目錄 文本文件中讀取表達(dá)式并計(jì)算。將表達(dá)式內(nèi)容和汁算結(jié)果顯示在LCD上。LCD顯

3、示界而如下:輸入顯示: 結(jié)果輸岀:del123+clear456read789enter(0)/三、程序算法實(shí)現(xiàn)1、計(jì)算算法首先將輸入的0為數(shù)字、+-*/ ()運(yùn)算符的內(nèi)容存儲(chǔ)于一個(gè)全局變M cal number中, 表達(dá)為中綴表達(dá)式。用void str2repol ()函數(shù),將輸入字符串cal number轉(zhuǎn)換成逆波 蘭表達(dá)式并存于全局?jǐn)?shù)組char repol maxs中。str2repol ()函數(shù)中綴表達(dá)式轉(zhuǎn)成逆波蘭 后綴表達(dá)式算法如下:(1)首先構(gòu)造一個(gè)運(yùn)算符棧stackmaxs,此運(yùn)算符在棧內(nèi)遵循越往棧頂優(yōu)先級(jí)越高的原則。(2) 讀入一個(gè)中綴表示算術(shù)表達(dá)式strmaxs(注:str

4、i=cal i)(3) 從左至右掃描該算術(shù)表達(dá)式,從第一個(gè)字符開(kāi)始判斷,如果該字符是數(shù)字,則分析 到該數(shù)字串的結(jié)束并將該數(shù)字串直接輸出到repolmaxs中。(4) 如果不是數(shù)字,該字符則是運(yùn)算符,此時(shí)需比較優(yōu)先關(guān)系。步驟如下:若為左括號(hào)(則壓入運(yùn)算符棧頂:若為其他運(yùn)算符,則將該字符與運(yùn)算符棧頂?shù)倪\(yùn)算符的優(yōu)先關(guān)系相比較。若該字符優(yōu)先關(guān)系高于此時(shí)運(yùn)算符棧頂?shù)倪\(yùn)算符,則將該運(yùn)算符入棧。若該字符優(yōu)先關(guān)系不高于此時(shí)運(yùn)算符棧頂?shù)倪\(yùn)算符,則將棧頂?shù)倪\(yùn)算符從棧中彈岀到repolmaxs,直到棧頂運(yùn)算符的優(yōu)先級(jí)低于當(dāng)前運(yùn)算符,將該字符入棧。若為有括號(hào)(,則彈出運(yùn)算符棧頂?shù)倪\(yùn)算符至到repolmaxs,直到遇到

5、左括號(hào)憚出并作廢此開(kāi)括號(hào)。(5) 重復(fù)上述操作。中綴表達(dá)式轉(zhuǎn)成逆波蘭后綴表達(dá)式后,calculate ()函數(shù)計(jì)算后綴表達(dá)式的值算法如下:用局部數(shù)組stackEtop存放運(yùn)算結(jié)果,top初值為0.(1) 依次讀入后綴表達(dá)式repolEmaxs的字符ch,循環(huán)判斷ch。(2) 若ch為運(yùn)算符,則stack top-1與stack top做相應(yīng)運(yùn)算。若運(yùn)算只需單操作數(shù)則stack top做相應(yīng)運(yùn)算。運(yùn)算結(jié)果存F stack top-1 然后top。否則ch為數(shù)字或小數(shù)點(diǎn),為數(shù)字則d=*d+ch- 0 ; (d初始值為0,用丁-存放連續(xù)數(shù)字字符的數(shù)學(xué)值)。遇小數(shù)點(diǎn),d保持原值。小數(shù)點(diǎn)后的數(shù)字符與 小

6、數(shù)點(diǎn)前的數(shù)字符一樣處理,i記錄小數(shù)點(diǎn)后的數(shù)字符個(gè)數(shù)。最后d=d/(10*i), top+;stacktop二d。注:若str2repol()函數(shù)遇非法字符時(shí),LCD輸出相應(yīng)提示,不調(diào)用calculate。若calculate ()函數(shù)遇除零,則不做運(yùn)算,LCD輸出“/0ERR0R!”。2、按鍵控件3、LCD輸岀顯示將字符串轉(zhuǎn)為Unicode編碼,在指定坐標(biāo)處用文本模式顯示字符串。實(shí)現(xiàn)函數(shù)如下:void lcddisplay (char *str, int xx, int yy)PDC pdc;(int)d;derr=l:則標(biāo)志位將輸入字符串轉(zhuǎn)成逆波蘭表達(dá)式:(6) void calculate

7、():計(jì)算函數(shù)功能:判別標(biāo)志位err。為1則輸出Syntax Error ! ! M并退出,否則繼續(xù)- 判別逆波蘭表達(dá)式內(nèi)容;判別小數(shù)點(diǎn)-對(duì)數(shù)字做相應(yīng)加權(quán)判別運(yùn)算符-做相應(yīng)運(yùn)算調(diào)用double型轉(zhuǎn)字符串函數(shù);調(diào)用字符串結(jié)果顯示函數(shù)。(7) char *doub2str(double d, char *str): double 型轉(zhuǎn)字符串函數(shù)功能:判別d是否為負(fù)數(shù)。是則字符串首位置-;d取反,繼續(xù)-判別d小數(shù)部分是否為零。是則整數(shù)轉(zhuǎn)字符串,否則再繼續(xù)一小數(shù)轉(zhuǎn)字符串 將double型數(shù)字轉(zhuǎn)換成字符串類型:存儲(chǔ)字符串并返回。(8) void lcddi splay (char *str, int x

8、x, in t yy):字符串顯示函數(shù)功能:將字符串str顯示在LCD的指定坐標(biāo)(xx, yy)o(9) void redraw (char key):重畫(huà)按鈕函數(shù)功能:響應(yīng)相應(yīng)函數(shù):重畫(huà)相應(yīng)按鈕;延時(shí)100ms后恢復(fù)原按鈕。(10) char zb2key (int x, int y):坐標(biāo)轉(zhuǎn)按鍵函數(shù)功能:將觸摸點(diǎn)坐標(biāo)(X, y)轉(zhuǎn)換成相應(yīng)按鍵字符。(11) void dcr (char key):退格、清屏、讀文件函數(shù)功能:響應(yīng)退格鍵,屏幕顯示去除最后一位字符,當(dāng)前輸入后前一次輸入置0: 響應(yīng)清屏鍵,清楚顯示區(qū)域內(nèi)容: 響應(yīng)讀文件,調(diào)用讀文件函數(shù)。(12) void readfileO :

9、讀文件函數(shù)功能:讀取指定目錄文本文件:顯示文本內(nèi)容;計(jì)算內(nèi)容(表達(dá)式)并顯示。(13) void clc 0 :清屏函數(shù)功能:清除顯示區(qū)域內(nèi)容。六、完整【】程序itinclude /ucos-ii/* uC/OS interface */include /ucosii/add/,zinclude /ucosii/add/,zinclude /inc/#include#include /inc/sys/#include /src/gui/include include char TextFilename=7sys/ucos/f j/; n);OSTaskCreate (Main.Task, (v

10、oid *)0, (OS.STK *)&血in_StackSTACKSIZET, Main_Task_Prio);OSAddTask_Init (1);LCDprintf(Starting uCOS一II.n);LCD_printf (Entering graph mode n);LCD_ChangeMode (DspGraNIode);OSStart 0;return 0;/*判定為數(shù)字*/repolt=ch:t+;ch二stri;i+;i;repo 1 t二二;t+;/*if(ch 9 &ch!=.)er= error!;lcddisplay(er, xz, yz+20); ch=,二;c

11、h二stri;i+;while(top!=0) repolLt=stacktop;t+;top;repo 1 t二二;void calculate 0/*計(jì)算后綴表達(dá)式的值*/double stackmaxs, dO, dl, dd;/*作為棧使用*/unsigned int re;char ch, *restr, *rez;int t=l, top=0, counter, i ;/*t 為ex下標(biāo),top為stackT標(biāo)*/static int zh=l:ch=repolt;t+;while(ch!=,二)switch(ch)case +:stackCtop-l=stack top-1 +s

12、tacktop;top-一;break;,case 一 :stacktop-1=stacktop-1-stacktop;top;break;case *:stack Ltop-l=stack top-1 * stack top;top;break;case I :if (stacktop !=0)stackEtopl=stacktop-l/stacktop:;else printf Cnt除零錯(cuò)誤! n); lcddisplay(ERROR!, xz, yz);if(ch!=&zh=l)dl二*dl+chO;if (ch=,)zh=O;if(ch!=&zh=O)dO=*dO+ch- O; counter+;ch=repolZt;t+;d 一二(int)d;for(i=0;i10;i+)d *二 10;strj+ = (int)d+0;d 一二(int)d;whi

溫馨提示

  • 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)論