版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、計算器設計實驗報告一、實驗設計主要分工04009320文斌:算法設計,LCD顯示。 04* 張希:界而(按鈕控件)設計,文件內(nèi)容讀取。 共同調(diào)試、完善設計。二、程序設計實現(xiàn)功能效果(1)支持整數(shù)、小數(shù)基本加減乘除運算;(2)有優(yōu)先級的判別訃算。優(yōu)先級由高到低一次為括號運算、乘除運算、加減運算。(3)支持鍵盤輸入和觸摸屏輸入;(4)能讀取指左目錄下文本內(nèi)容(內(nèi)容為汁算表達式)并計算得出結果,將內(nèi)容和結果顯 示在LCD上。程序任務開始后,等待鍵盤或觸摸屏的輸入。輸入鍵有09數(shù)字鍵、+-*/()運算符、 del退格鍵、clear清屏鍵、read讀指定目錄文本內(nèi)容并計算鍵、enter* =鍵、小數(shù)點
2、鍵。每當有字符輸入時,觸摸屏相應鍵顯示“AAA”,100ms后恢復原相應按鍵符號,同時LCD 屏幕上顯示相應字符。當輸入del鍵時,屏幕顯示去掉最后一位字符。當輸入二號后,得 出計算結果,結果顯示于表達式的下一行。若是除零錯誤,則結果顯示為/0ERR0R!”。若 有非法字符(觸摸點不能識別為設計按鍵符則視為非法字符),則結果輸出為“Syntax Error!”。若表達式有運算符連續(xù)輸入,則忽略前面的運算符,只取最后一位運算符計算, 正常顯示數(shù)字結果。當輸入* clear鍵時,情況顯示區(qū)域。當輸入read鍵時,從指龍目錄 文本文件中讀取表達式并計算。將表達式內(nèi)容和汁算結果顯示在LCD上。LCD顯
3、示界而如下:輸入顯示: 結果輸岀:del123+clear456read789enter(0)/三、程序算法實現(xiàn)1、計算算法首先將輸入的0為數(shù)字、+-*/ ()運算符的內(nèi)容存儲于一個全局變M cal number中, 表達為中綴表達式。用void str2repol ()函數(shù),將輸入字符串cal number轉(zhuǎn)換成逆波 蘭表達式并存于全局數(shù)組char repol maxs中。str2repol ()函數(shù)中綴表達式轉(zhuǎn)成逆波蘭 后綴表達式算法如下:(1)首先構造一個運算符棧stackmaxs,此運算符在棧內(nèi)遵循越往棧頂優(yōu)先級越高的原則。(2) 讀入一個中綴表示算術表達式strmaxs(注:str
4、i=cal i)(3) 從左至右掃描該算術表達式,從第一個字符開始判斷,如果該字符是數(shù)字,則分析 到該數(shù)字串的結束并將該數(shù)字串直接輸出到repolmaxs中。(4) 如果不是數(shù)字,該字符則是運算符,此時需比較優(yōu)先關系。步驟如下:若為左括號(則壓入運算符棧頂:若為其他運算符,則將該字符與運算符棧頂?shù)倪\算符的優(yōu)先關系相比較。若該字符優(yōu)先關系高于此時運算符棧頂?shù)倪\算符,則將該運算符入棧。若該字符優(yōu)先關系不高于此時運算符棧頂?shù)倪\算符,則將棧頂?shù)倪\算符從棧中彈岀到repolmaxs,直到棧頂運算符的優(yōu)先級低于當前運算符,將該字符入棧。若為有括號(,則彈出運算符棧頂?shù)倪\算符至到repolmaxs,直到遇到
5、左括號憚出并作廢此開括號。(5) 重復上述操作。中綴表達式轉(zhuǎn)成逆波蘭后綴表達式后,calculate ()函數(shù)計算后綴表達式的值算法如下:用局部數(shù)組stackEtop存放運算結果,top初值為0.(1) 依次讀入后綴表達式repolEmaxs的字符ch,循環(huán)判斷ch。(2) 若ch為運算符,則stack top-1與stack top做相應運算。若運算只需單操作數(shù)則stack top做相應運算。運算結果存F stack top-1 然后top。否則ch為數(shù)字或小數(shù)點,為數(shù)字則d=*d+ch- 0 ; (d初始值為0,用丁-存放連續(xù)數(shù)字字符的數(shù)學值)。遇小數(shù)點,d保持原值。小數(shù)點后的數(shù)字符與 小
6、數(shù)點前的數(shù)字符一樣處理,i記錄小數(shù)點后的數(shù)字符個數(shù)。最后d=d/(10*i), top+;stacktop二d。注:若str2repol()函數(shù)遇非法字符時,LCD輸出相應提示,不調(diào)用calculate。若calculate ()函數(shù)遇除零,則不做運算,LCD輸出“/0ERR0R!”。2、按鍵控件3、LCD輸岀顯示將字符串轉(zhuǎn)為Unicode編碼,在指定坐標處用文本模式顯示字符串。實現(xiàn)函數(shù)如下:void lcddisplay (char *str, int xx, int yy)PDC pdc;(int)d;derr=l:則標志位將輸入字符串轉(zhuǎn)成逆波蘭表達式:(6) void calculate
7、():計算函數(shù)功能:判別標志位err。為1則輸出Syntax Error ! ! M并退出,否則繼續(xù)- 判別逆波蘭表達式內(nèi)容;判別小數(shù)點-對數(shù)字做相應加權判別運算符-做相應運算調(diào)用double型轉(zhuǎn)字符串函數(shù);調(diào)用字符串結果顯示函數(shù)。(7) char *doub2str(double d, char *str): double 型轉(zhuǎn)字符串函數(shù)功能:判別d是否為負數(shù)。是則字符串首位置-;d取反,繼續(xù)-判別d小數(shù)部分是否為零。是則整數(shù)轉(zhuǎn)字符串,否則再繼續(xù)一小數(shù)轉(zhuǎn)字符串 將double型數(shù)字轉(zhuǎn)換成字符串類型:存儲字符串并返回。(8) void lcddi splay (char *str, int x
8、x, in t yy):字符串顯示函數(shù)功能:將字符串str顯示在LCD的指定坐標(xx, yy)o(9) void redraw (char key):重畫按鈕函數(shù)功能:響應相應函數(shù):重畫相應按鈕;延時100ms后恢復原按鈕。(10) char zb2key (int x, int y):坐標轉(zhuǎn)按鍵函數(shù)功能:將觸摸點坐標(X, y)轉(zhuǎn)換成相應按鍵字符。(11) void dcr (char key):退格、清屏、讀文件函數(shù)功能:響應退格鍵,屏幕顯示去除最后一位字符,當前輸入后前一次輸入置0: 響應清屏鍵,清楚顯示區(qū)域內(nèi)容: 響應讀文件,調(diào)用讀文件函數(shù)。(12) void readfileO :
9、讀文件函數(shù)功能:讀取指定目錄文本文件:顯示文本內(nèi)容;計算內(nèi)容(表達式)并顯示。(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/*計算后綴表達式的值*/double stackmaxs, dO, dl, dd;/*作為棧使用*/unsigned int re;char ch, *restr, *rez;int t=l, top=0, counter, i ;/*t 為ex下標,top為stackT標*/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除零錯誤! 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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 老子學院研學課程設計
- 課程設計介紹家鄉(xiāng)特色
- 年度認證機構戰(zhàn)略市場規(guī)劃報告
- 2024版培訓勞動合同范本
- 二零二五年度醫(yī)療設備租賃免責責任書4篇
- 2024版真石漆購銷合同樣本3篇
- 2025年度特種貨物運輸合同規(guī)范8篇
- 西華大學統(tǒng)計課程設計
- 2024版鍋爐工勞動合同
- 2025年度商業(yè)大廈物業(yè)管理與客戶關系管理合同4篇
- 火災安全教育觀后感
- 農(nóng)村自建房屋安全協(xié)議書
- 快速康復在骨科護理中的應用
- 國民經(jīng)濟行業(yè)分類和代碼表(電子版)
- ICU患者外出檢查的護理
- 公司收購設備合同范例
- 廣東省潮州市2023-2024學年高二上學期語文期末考試試卷(含答案)
- 2024年光伏發(fā)電項目EPC總包合同
- 子女放棄房產(chǎn)繼承協(xié)議書
- 氧化還原反應配平專項訓練
- 試卷(完整版)python考試復習題庫復習知識點試卷試題
評論
0/150
提交評論