計(jì)算器單片機(jī)技術(shù)課程設(shè)計(jì)_第1頁
已閱讀1頁,還剩56頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  《單片機(jī)技術(shù)》課程設(shè)計(jì)說明書</p><p><b>  計(jì)算器</b></p><p>  學(xué) 院: </p><p>  學(xué)生姓名: </p><p>  指導(dǎo)教師: 職稱 </p><p>  專 業(yè): <

2、/p><p>  班 級(jí): </p><p>  學(xué) 號(hào): </p><p>  完成時(shí)間: </p><p>  湖南工學(xué)院《單片機(jī)技術(shù)》課程設(shè)計(jì)課題任務(wù)書</p><p>  學(xué)院: 專業(yè):</p>

3、;<p><b>  摘 要</b></p><p>  隨著社會(huì)的發(fā)展,科學(xué)的進(jìn)步,人們的生活水平在逐步的提搞,尤其是微電子技術(shù)的發(fā)展,猶如雨后春筍般變化。單片機(jī)的應(yīng)用已經(jīng)越來越貼近生活,用單片機(jī)來實(shí)現(xiàn)一些電子設(shè)計(jì)也變得容易起來。計(jì)算器在人們的日常中是比較常見的電子產(chǎn)品之一??墒撬€在發(fā)展之中,以后必將出現(xiàn)功能更加強(qiáng)大的計(jì)算器。基于這樣的理念,本次設(shè)計(jì)是用單片機(jī)來設(shè)計(jì)的計(jì)算

4、器。</p><p>  該設(shè)計(jì)以STC89C54RD+單片機(jī)為控制運(yùn)算器,以4*4矩陣鍵盤和6個(gè)獨(dú)立按鍵控制,以LCD1602液晶顯示,以USB接口充電來供電。</p><p>  對(duì)于此計(jì)算器我用了23個(gè)按鍵,10個(gè)數(shù)字鍵,4個(gè)常用運(yùn)算鍵,1個(gè)等號(hào)鍵,1個(gè)清零鍵,1個(gè)平方鍵,1個(gè)開方鍵,3個(gè)三角函數(shù)運(yùn)算鍵,1個(gè)十進(jìn)制轉(zhuǎn)十六進(jìn)制按鍵和1個(gè)十六進(jìn)制轉(zhuǎn)十進(jìn)制按鍵。</p>&l

5、t;p>  該計(jì)算器上電后能自動(dòng)顯示系統(tǒng)提示符“P.”,進(jìn)入準(zhǔn)備工作狀態(tài)。能實(shí)現(xiàn)基本的加、減、乘、除、平方、開方;還能實(shí)現(xiàn)三角函數(shù)運(yùn)算和十進(jìn)制、十六進(jìn)制轉(zhuǎn)換運(yùn)算。已符合設(shè)計(jì)要求,具有一定的推廣價(jià)值。</p><p>  關(guān)鍵詞:單片機(jī);LCD1602液晶顯示;矩陣鍵盤;獨(dú)立式鍵盤</p><p><b>  目 錄</b></p><p&g

6、t;<b>  1 緒論1</b></p><p>  1.1 計(jì)算器研究意義1</p><p>  1.2 實(shí)現(xiàn)功能1</p><p>  1.3 工作原理2</p><p>  2 計(jì)算器硬件系統(tǒng)設(shè)計(jì)3</p><p>  2.1 STC89C54RD+單片機(jī)簡介3&l

7、t;/p><p>  2.2 電源模塊4</p><p>  2.3 復(fù)位模塊4</p><p>  2.4 時(shí)鐘模塊4</p><p>  2.5 下載模塊5</p><p>  2.6 顯示模塊5</p><p>  2.7 輸入模塊6</p><p&

8、gt;  2.8 電路原理圖7</p><p>  2.9 電路實(shí)物圖7</p><p>  2.10 元器件清單7</p><p>  3 計(jì)算器軟件系統(tǒng)設(shè)計(jì)7</p><p>  3.1 單片機(jī)資源使用8</p><p>  3.2 監(jiān)控函數(shù)模塊8</p><p>  

9、3.3 顯示模塊8</p><p>  3.4 鍵掃模塊9</p><p>  3.5 延時(shí)模塊9</p><p>  3.6 定時(shí)模塊10</p><p>  3.7 系統(tǒng)程序清單10</p><p>  4 實(shí)物調(diào)試11</p><p>  4.1 操作使用說明1

10、1</p><p>  4.2 測試過程11</p><p>  4.3 計(jì)算器誤差分析14</p><p>  4.4 設(shè)計(jì)體會(huì)14</p><p><b>  結(jié)束語16</b></p><p><b>  參考文獻(xiàn)17</b></p>&l

11、t;p><b>  致 謝18</b></p><p><b>  附 錄19</b></p><p>  附錄A 電路原理圖19</p><p>  附錄B 電路實(shí)物圖20</p><p>  附錄C 元器件清單21</p><p>  附錄D

12、程序清單22</p><p><b>  1 緒論 </b></p><p>  1.1 計(jì)算器研究意義</p><p>  中國古代最早采用的一種計(jì)算工具叫籌策,又被叫做算籌。這種算籌多用竹子制成,也有用木頭,獸骨充當(dāng)材料的。約二百七十枚一束,放在布袋里可隨身攜帶。 直到今天仍在使用的珠算盤,是中國古代計(jì)算工具領(lǐng)域中的另一項(xiàng)發(fā)明,明代時(shí)

13、的珠算盤已經(jīng)與現(xiàn)代的珠算盤幾乎相同。 17世紀(jì)初,西方國家的計(jì)算工具有了較大的發(fā)展,英國數(shù)學(xué)家納皮爾發(fā)明的“納皮爾算籌”,英國牧師奧卻德發(fā)明了圓柱型對(duì)數(shù)計(jì)算尺,這種計(jì)算尺不僅能做加減乘除、乘方、開方運(yùn)算,甚至可以計(jì)算三角函數(shù),指數(shù)函數(shù)和對(duì)數(shù)函數(shù),這些計(jì)算工具不僅帶動(dòng)了計(jì)算器的發(fā)展,也為現(xiàn)代計(jì)算器發(fā)展奠定了良好的基礎(chǔ),成為現(xiàn)代社會(huì)應(yīng)用廣泛的計(jì)算工具。</p><p>  隨著電子技術(shù)的不斷發(fā)展,計(jì)算器的功能也越來越

14、強(qiáng)大,已經(jīng)不僅僅限于單純的數(shù)學(xué)運(yùn)算和函數(shù)運(yùn)算,各種功能強(qiáng)大的計(jì)算器在財(cái)務(wù)、銀行、工程、測繪等方面也得到了廣泛的應(yīng)用。國內(nèi)的計(jì)算器從產(chǎn)生到發(fā)展成熟,也經(jīng)歷了一段過程。從簡單的計(jì)算到復(fù)雜的計(jì)算,從單功能到多功能。近年來國內(nèi)的計(jì)算器呈現(xiàn)出新的特點(diǎn),不僅設(shè)計(jì)精巧、緊湊,功能實(shí)用、簡練。包括:數(shù)據(jù)記錄、聲音提示、公式運(yùn)算、財(cái)務(wù)計(jì)算、外幣兌換、解方程式、衡(計(jì))量換算、 將數(shù)值轉(zhuǎn)換為中文大寫金額和英文 等,而且成本也減少了。而隨著計(jì)算機(jī)的普及,又出

15、現(xiàn)了軟件計(jì)算器,軟件計(jì)算器的功能更加強(qiáng)大,而且計(jì)算的位數(shù)增加,更加精確,而且懂得計(jì)算機(jī)的人可以借助軟件來設(shè)計(jì)各種不同的計(jì)算器,實(shí)現(xiàn)功能裁剪,因此非常靈活。軟件計(jì)算器的缺點(diǎn)是攜帶不便。真正來說國內(nèi)計(jì)算器的設(shè)計(jì)是以實(shí)用為前提的。</p><p>  而國外的計(jì)算器的發(fā)展已經(jīng)發(fā)展到各行各業(yè),外設(shè)大多凝集了其它產(chǎn)品的功能,而且許多功能讓人覺得實(shí)在離譜。把實(shí)用性和科學(xué)應(yīng)用聯(lián)合起來才能適應(yīng)更多的應(yīng)用場合,因此決定設(shè)計(jì)一個(gè)實(shí)用

16、性和科學(xué)性相結(jié)合的計(jì)算器作為我的研究課題。</p><p>  在檢測系統(tǒng)設(shè)計(jì)中熟悉并了解將作為單片機(jī)為控制核心,并輔以矩陣鍵盤和獨(dú)立式鍵盤以實(shí)現(xiàn)課題所要求的功能。本課題主要要求掌握計(jì)算器相應(yīng)的軟硬件實(shí)現(xiàn)方法。扎實(shí)掌握并運(yùn)用課題相關(guān)的學(xué)科理論知識(shí),根據(jù)實(shí)際電路盡量設(shè)計(jì)制作出完美的計(jì)算器,以實(shí)現(xiàn)理論與實(shí)踐的統(tǒng)一。</p><p><b>  1.2 實(shí)現(xiàn)功能</b>&

17、lt;/p><p>  計(jì)算器在上電或按鍵復(fù)位之后能自動(dòng)顯示系統(tǒng)提示符“P”,進(jìn)入準(zhǔn)備工作狀態(tài)。</p><p>  計(jì)算器能實(shí)現(xiàn)基本的加、減、乘、除、平方、開方。</p><p><b>  實(shí)現(xiàn)三角函數(shù)運(yùn)算。</b></p><p>  能十進(jìn)制、十六進(jìn)制轉(zhuǎn)換運(yùn)算。</p><p><b&g

18、t;  1.3 工作原理</b></p><p>  設(shè)計(jì)一個(gè)計(jì)算器,設(shè)計(jì)中采用的是STC89C54RD+ 單片機(jī)用軟件實(shí)現(xiàn)數(shù)據(jù)信號(hào)的輸出。該單片機(jī)是一個(gè)微型計(jì)算機(jī),包括中央處理器 CPU,RAM,ROM,I/O 接口電路、定時(shí)計(jì)數(shù)器、串行通訊等,是計(jì)算器設(shè)計(jì)的核心。總體原理為:利用 STC89C54RD+ 單片機(jī)構(gòu)造多功能處理,可進(jìn)行計(jì)時(shí)以及監(jiān)控外部中斷系統(tǒng),通過C語言對(duì)單片機(jī)的編程即可進(jìn)行運(yùn)算傳

19、送信號(hào),并可以通過鍵盤進(jìn)行各種功能的轉(zhuǎn)換,當(dāng)輸出的信號(hào)通過顯示器顯示輸出的信息。硬件系統(tǒng)以STC89C54RD+單片機(jī)為控制核心,輔以LCD1602液晶顯示、鍵盤輸入模塊等電路實(shí)現(xiàn)計(jì)算器的基本功能;軟件系統(tǒng)包括包含延時(shí)模塊、鍵掃模塊、顯示模塊、定時(shí)模塊、監(jiān)控函數(shù)模塊。總體設(shè)計(jì)框圖如圖1所示。</p><p>  圖1 總體硬件電路框圖</p><p>  2 計(jì)算器硬件系統(tǒng)設(shè)計(jì)<

20、/p><p>  2.1 STC89C54RD+單片機(jī)簡介</p><p>  以STC89C54RD+單片機(jī)為控制核心,外擴(kuò)外圍電路,完成計(jì)算器所需要的外圍電路。顯示模塊,輸入模塊,復(fù)位模塊等。STC89C54RD+單片機(jī)內(nèi)部配以基本單元:即三個(gè)定時(shí)/計(jì)數(shù)器、5個(gè)中斷源??捎删幊虂韺?shí)現(xiàn)根據(jù)定時(shí)、計(jì)數(shù)時(shí)計(jì)數(shù)溢出而產(chǎn)生的中斷申請(qǐng)信號(hào)中斷功能,并由LCD1602液晶對(duì)被測值進(jìn)行顯示。STC89C

21、54RD+系列單片機(jī),具有反應(yīng)速度極快,工作效率特高的特點(diǎn)。</p><p>  STC89C54RD+單片機(jī)的基本特點(diǎn)是低功耗、高性能,片內(nèi)由4KB可編程/擦除只讀存儲(chǔ)器的8位COMS微控制器組成,通過結(jié)合高密度、非易失存儲(chǔ)技術(shù)來保證單片機(jī)引腳與相應(yīng)指令系統(tǒng)的高兼容度。由于芯片里FLASH的存在,因此可以通過通用的非易失存儲(chǔ)編程器實(shí)現(xiàn)在線編程以及重復(fù)編程等功能。在通常情況下,當(dāng)系統(tǒng)掉電時(shí),數(shù)據(jù)存儲(chǔ)器的內(nèi)容立即會(huì)

22、被保存下來,而此時(shí)單片機(jī)其他一切都會(huì)停止工作,直到產(chǎn)生下一個(gè)中斷或硬件復(fù)位信號(hào)整個(gè)系統(tǒng)才會(huì)重新開始工作。</p><p>  STC89C54RD+的內(nèi)部特點(diǎn):具有40個(gè)引腳、8K片內(nèi)程序存儲(chǔ)器空間、256B的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器,32個(gè)外部雙向輸入/輸出I/O口,5個(gè)中斷優(yōu)先級(jí)2層中斷嵌套中斷,2個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)狗(WDT)電路,片內(nèi)時(shí)鐘振蕩器。STC89C54RD+引腳圖如圖2所示。</p&

23、gt;<p>  圖2 STC89C54RD+引腳圖</p><p><b>  2.2 電源模塊</b></p><p>  電源電路是給計(jì)算器提供電源,此電路包括一個(gè)發(fā)光二極管、電阻、導(dǎo)線組成。光二極管的作用主要是:運(yùn)用二極管的單向?qū)щ娞匦詠硖崾倦娫词欠窠油ɑ蛴^察電源是否一直保持通電正常、穩(wěn)定,并且100Ω的電阻與二極管串聯(lián),其作用是保護(hù)二極管不

24、會(huì)因?yàn)殡娏魍蝗蛔兇蠖粺龎?。電源電路是采用USB接口來供電,如圖3所示。</p><p><b>  圖3 電源電路</b></p><p><b>  2.3 復(fù)位模塊</b></p><p>  復(fù)位電路的作用是按下復(fù)位鍵可以使顯示界面回到最開始的地方。課程設(shè)計(jì)按鍵復(fù)位電路由一個(gè)電阻一個(gè)電容和一個(gè)按鍵組成,大小分別

25、為10µF,1k,200Ω,1KΩ電阻一端接電源,另一端接電容的正極接到單片機(jī)的復(fù)位引腳,按鍵與10µF電容并聯(lián),當(dāng)按鍵按下時(shí),1kΩ電阻與VCC直接相連,在RST產(chǎn)生復(fù)位所需的高電平。當(dāng)按鍵松開的,VCC給電容充電,RST仍為高電平,而當(dāng)電容充電完成后,相當(dāng)于短路,則為低電平,正常工作。復(fù)位電路如圖4所示。</p><p><b>  圖4 復(fù)位電路</b></

26、p><p><b>  2.4 時(shí)鐘模塊</b></p><p>  晶振電路的作用是產(chǎn)生單片機(jī)所必須的時(shí)鐘頻率。單片機(jī)工作所需的同步時(shí)鐘信號(hào)由由以下兩種方法獲得,第一:由單片機(jī)片內(nèi)時(shí)鐘電路結(jié)合外部晶振、電容產(chǎn)生;第二:直接從單片機(jī)外部引入脈沖信號(hào)。設(shè)計(jì)中用第一方法,有石英晶體和微調(diào)電容(一般取值30pF左右)組成,石英晶體產(chǎn)生震蕩,單片機(jī)振蕩電路產(chǎn)生的脈沖信號(hào)稱振蕩信

27、號(hào),它的頻率等于石英晶體的振蕩頻率(fosc),簡稱晶振頻率,振蕩脈沖信號(hào)還不是單片機(jī)工作所需的時(shí)鐘信號(hào),時(shí)鐘信號(hào)必須由振蕩脈沖信號(hào)經(jīng)單片機(jī)片內(nèi)時(shí)鐘電路的處理后才能產(chǎn)生。</p><p>  課程設(shè)計(jì)晶振電路主要由振蕩電路和分頻電路組成。其中振蕩電路由高增益反相器以及并聯(lián)外接的石英晶體和電容構(gòu)成產(chǎn)生振蕩脈沖。而分頻電路則用于把振蕩脈沖分頻,已得到所需的時(shí)鐘信號(hào)。振蕩電路由單片機(jī)芯片的XTAL1端輸入,XTAL2端

28、輸出。此時(shí)同時(shí)并接一個(gè)石英晶體振蕩器以及兩個(gè)30pF電容。而STC89C54RD+中自帶有分頻電路所以不需要外接電路對(duì)脈沖信號(hào)進(jìn)行分頻。晶振頻率是12MHz。如圖5所示。</p><p><b>  圖5 時(shí)鐘電路</b></p><p><b>  2.5 下載模塊</b></p><p>  由于STC89C54R

29、D+支持flash在線寫入、擦除,所以下載電路是必不可少的部分。由下載口進(jìn)行單片機(jī)與電腦的連接。并由下載電路產(chǎn)生電源提供給單片機(jī)工作。主要是由P30、P31兩個(gè)引腳下載,實(shí)現(xiàn)計(jì)算機(jī)與單片機(jī)的通信。</p><p><b>  2.6 顯示模塊</b></p><p>  發(fā)光二極管LED是單片機(jī)應(yīng)用系統(tǒng)中的一宗簡單而常用的輸出設(shè)備,其在系統(tǒng)中的主要作用是顯示單片機(jī)的

30、輸出數(shù)據(jù)、狀態(tài)等。因而作為典型的外圍器件,LED顯示單元是反映系統(tǒng)輸出和操作輸入的有效器件。LED具備數(shù)字接口可以方便的和大年紀(jì)系統(tǒng)連接;它的優(yōu)點(diǎn)是價(jià)格低,壽命長,對(duì)電壓電流的要求低及容易實(shí)現(xiàn)多路等,因而在單片機(jī)應(yīng)用系統(tǒng)中獲得了廣泛的應(yīng)用。</p><p>  液晶LCD1602顯示器用于輸入信號(hào)以及運(yùn)算結(jié)果的顯示。它是一種專門用來顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣型液晶模塊。它由若干個(gè)5X7或者5X11等點(diǎn)陣字符位組

31、成,每個(gè)點(diǎn)陣字符位都可以顯示一個(gè)字符,每位之間有一個(gè)點(diǎn)距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用。 1602型LCD基本操作程序如表1所示。</p><p>  表1 LCD1602基本操作程序</p><p>  電路主要由電位器、可變換串行及并行通信方式的短接電路、供電電路構(gòu)成,具體電路如圖6所示。</p><p>  圖6 LCD1602顯示

32、電路</p><p><b>  2.7 輸入模塊</b></p><p>  輸入模塊的作用是給單片機(jī)系統(tǒng)提供輸入信號(hào)。通過外部按鍵使單片機(jī)接收信號(hào),課程設(shè)計(jì)采用的是4*4的矩陣鍵盤和6個(gè)獨(dú)立式鍵盤。在矩陣式鍵盤中,行連接線和列連接線分別占用4條I/O口線,共連接16個(gè)按鍵。行線連接的接口為輸入口,用于輸入按鍵的行位置信息,列線連接的接口為輸出口,用于輸出掃描電平

33、,當(dāng)按鍵按下鍵時(shí)由高電平變?yōu)榈碗娖?,如圖7所示。6個(gè)獨(dú)立式鍵盤按鍵的一端并接在一起接地。當(dāng)按下某個(gè)鍵,該鍵處變?yōu)榈碗娖?。如圖8所示。</p><p>  圖7 4*4矩陣式鍵盤</p><p>  圖8 6個(gè)獨(dú)立式鍵盤</p><p>  2.8 電路原理圖</p><p>  電路原理圖見附錄A。</p><p&g

34、t;  2.9 電路實(shí)物圖</p><p>  電路實(shí)物圖見附錄B。</p><p>  2.10 元器件清單</p><p>  元器件清單見附錄C。</p><p>  3 計(jì)算器軟件系統(tǒng)設(shè)計(jì)</p><p>  應(yīng)用C語言編來編寫課題程序,它由監(jiān)控函數(shù)、液晶顯示、鍵掃、延時(shí)、定時(shí)等模塊組成。具體程序見附錄D。

35、</p><p>  3.1 單片機(jī)資源使用</p><p>  P1: 基本輸入輸出口;</p><p>  P2.7:E(1602液晶);</p><p>  P2.6:RW(1602液晶);</p><p>  P2.5:RS(1602液晶);</p><p>  P2.4:T0(定時(shí)/

36、計(jì)數(shù)器);</p><p>  3.2 監(jiān)控函數(shù)模塊</p><p>  監(jiān)控函數(shù) ,用于設(shè)置上電或復(fù)位后能自動(dòng)顯示系統(tǒng)提示符“P”,調(diào)用各個(gè)主要模塊,主要實(shí)現(xiàn)計(jì)算器的加、減、乘、除、開方、平方等功能。相關(guān)程序流程圖如圖9所示,具體程序見附錄D。</p><p>  圖9 監(jiān)控函數(shù)流程圖</p><p><b>  3.3 顯

37、示模塊</b></p><p>  液晶顯示是通過在主程序中調(diào)用相關(guān)的液晶功能函數(shù)來執(zhí)行相應(yīng)功能,經(jīng)過液晶接在單片機(jī)上的P2部分管腳,通過液晶功能函數(shù)LCD1602的調(diào)用對(duì)液晶進(jìn)行操作,將各類指令寫入液晶模塊,用來驅(qū)動(dòng)液晶以實(shí)現(xiàn)不同的顯示功能。簡單來說,就是用作LCD1602液晶屏顯示,將顯示的數(shù)據(jù)傳送至LCD1602模塊化函數(shù)中,將需要顯示的內(nèi)容顯示在LCD1602液晶屏上。相關(guān)程序流程圖如圖10所

38、示,詳細(xì)程序見附錄D。</p><p>  圖10 液晶顯示流程圖</p><p><b>  3.4 鍵掃模塊</b></p><p>  當(dāng)有操作按鍵按下時(shí),單片機(jī)首先會(huì)先判斷鍵值,然后依據(jù)判斷出的鍵值來執(zhí)行相應(yīng)的鍵功能程序,并由液晶顯示操作狀態(tài)。相關(guān)程序流程圖如圖11所示,詳細(xì)程序見附錄D。</p><p> 

39、 圖11 按鍵程序流程圖</p><p><b>  3.5 延時(shí)模塊</b></p><p>  延時(shí)模塊用于延時(shí),等待等需要的調(diào)用。</p><p><b>  3.6 定時(shí)模塊</b></p><p>  定時(shí)器0,以工作方式1工作,采用中斷方式。</p><p>

40、;  3.7 系統(tǒng)程序清單</p><p>  課題軟件系統(tǒng)程序清單見附錄D。</p><p><b>  4 實(shí)物調(diào)試</b></p><p>  4.1 操作使用說明</p><p>  該設(shè)計(jì)利用4*4矩陣鍵盤和6個(gè)獨(dú)立按鍵作為數(shù)據(jù)和命令的輸入裝置,LCD1602液晶為顯示器,實(shí)現(xiàn)的運(yùn)算有加、減、乘、除、平方

41、SQU、開方SQR、三角函數(shù)(sin、cos、tan)、十進(jìn)制轉(zhuǎn)十六進(jìn)制DEC、十六進(jìn)制轉(zhuǎn)十進(jìn)制HEX。</p><p>  采用4*4矩陣鍵盤和6個(gè)獨(dú)立按鍵作為輸入端,實(shí)現(xiàn)數(shù)據(jù)輸入功能。設(shè)計(jì)鍵盤的各個(gè)按鍵功能如表2所示。</p><p>  表2 按鍵功能設(shè)置</p><p>  如表2所示,此計(jì)算器我用了23個(gè)按鍵,10個(gè)數(shù)字鍵,4個(gè)常用運(yùn)算鍵,1個(gè)等號(hào)鍵,1

42、個(gè)清零鍵,1個(gè)平方鍵,1個(gè)開方鍵,3個(gè)三角函數(shù)運(yùn)算鍵,1個(gè)十進(jìn)制轉(zhuǎn)十六進(jìn)制按鍵和1個(gè)十六進(jìn)制轉(zhuǎn)十進(jìn)制按鍵。</p><p>  當(dāng)計(jì)算器上電后能自動(dòng)顯示系統(tǒng)提示符“P.”,進(jìn)入準(zhǔn)備工作狀態(tài)。這時(shí)輸入數(shù)字,液晶屏?xí)@示輸入的數(shù)據(jù),輸入完數(shù)據(jù)后按下功能鍵,再按“=”鍵,屏幕上顯示出計(jì)算的結(jié)果。如果要再次計(jì)算,按下復(fù)位鍵,重新初始化。</p><p><b>  4.2 測試過程&l

43、t;/b></p><p>  界面顯示以及測試的結(jié)果:各層界面顯示以及測試的結(jié)果與示波器所測得圖形及參數(shù)為:</p><p> ?。?)當(dāng)上電顯示后,顯示的是系統(tǒng)提示符“P.”,進(jìn)入準(zhǔn)備工作狀態(tài)。如圖12所示。</p><p>  圖12 上電顯示界面</p><p>  當(dāng)輸入12加27后,得出計(jì)算結(jié)果39。如圖13所示</

44、p><p>  圖13 計(jì)算結(jié)果顯示界面</p><p> ?。?)當(dāng)輸入數(shù)字765,按下十進(jìn)制轉(zhuǎn)十六進(jìn)制DEC功能鍵后,計(jì)算的的數(shù)據(jù)為2FD。如圖14所示。</p><p>  圖14 計(jì)算結(jié)果顯示界面</p><p> ?。?)當(dāng)輸入數(shù)字2,按下平方SQU功能鍵后,計(jì)算的數(shù)據(jù)為4。如圖15所示。</p><p> 

45、 圖15 計(jì)算結(jié)果顯示界面</p><p> ?。?)當(dāng)輸入數(shù)字8乘11時(shí),計(jì)算的數(shù)據(jù)為88。如圖16所示。</p><p>  圖16 計(jì)算結(jié)果顯示界面 </p><p>  4.3 計(jì)算器誤差分析</p><p>  計(jì)算器的計(jì)算功能有精度上的誤差,不適用保留小數(shù)點(diǎn)的計(jì)算,因?yàn)椴荒芗s到整數(shù)。</p><p>

46、<b>  誤差分析:</b></p><p> ?。?)硬件電路中焊接時(shí),不能做到所有器件的線路都很合理,在操作是會(huì)有相互影響。</p><p> ?。?)程序參數(shù)設(shè)計(jì)不夠合理,以及計(jì)算過程中沒有保留小數(shù)點(diǎn),計(jì)算量多的話導(dǎo)致不精準(zhǔn),主要是精確度不高。   </p><p>  (3)實(shí)驗(yàn)用的元器件,如芯片易受溫度的影響,實(shí)驗(yàn)時(shí)間過長,即會(huì)產(chǎn)生

47、誤差。   </p><p><b>  4.4 設(shè)計(jì)體會(huì)</b></p><p>  通過做計(jì)算器的課程設(shè)計(jì),我收獲良多。我大體總結(jié)了以下幾點(diǎn):</p><p> ?。?)基本功要過硬,不能馬虎經(jīng)常犯小錯(cuò)誤。提高自己找錯(cuò)糾錯(cuò)能力,通常錯(cuò)誤總是那幾種,多練習(xí)就熟練了。</p><p> ?。?)要善于查找資料,提高自己

48、的資料查詢能力,要善于利用網(wǎng)絡(luò)來獲得知識(shí),獲得幫助。開始著手程序設(shè)計(jì)時(shí),有些功能感覺無從下手,都不知道要干什么,這些問題這要找到相關(guān)的資料就會(huì)得到提示從而理解所要解決問題的大致方向。有了明確的目的,就可以發(fā)揮自己的頭腦來完成它了。 </p><p> ?。?)要善于思考,程序中有些實(shí)現(xiàn)難點(diǎn)和最初完成程序時(shí)免不了的許多不足就需要自己根據(jù)代碼認(rèn)真思考來解決。只有這樣才能糾正程序的不足,并使其更加人性化。 </p

49、><p>  這次課程設(shè)計(jì)讓我們學(xué)到了很多,不僅鞏固了C語言知識(shí),而且也培養(yǎng)了我們的動(dòng)手能力,令我們的創(chuàng)造性思維得到拓展。期待今后有更多類似的鍛煉機(jī)會(huì)。 </p><p>  通過這次課程設(shè)計(jì),可以明顯的感覺到它彌補(bǔ)了課程教學(xué)的和實(shí)驗(yàn)中知識(shí)的深度和廣度方面的不足,也讓我們進(jìn)一步掌握了程序設(shè)計(jì)的基本方法和編程技巧,同時(shí)也鞏固所學(xué)理論知識(shí),似然花費(fèi)了不止一點(diǎn)點(diǎn)的時(shí)間和精力,不過那確實(shí)挺值得的,既讓

50、我們認(rèn)識(shí)到自己知識(shí)方面的缺陷,又培養(yǎng)了我獨(dú)立分析問題、解決問題的能力。 </p><p>  課程設(shè)計(jì)是需要大量時(shí)間去動(dòng)手練習(xí)才能體驗(yàn)到它的內(nèi)涵的,同時(shí)還需要用心地投入,時(shí)間和情感花下去之后,的確感受到有所收獲,增加了對(duì)編程的興趣。通過這次課程設(shè)計(jì),掌握了對(duì)話框的相關(guān)操作,也體會(huì)到書寫代碼一定要仔細(xì),有時(shí)候一小點(diǎn)拼寫錯(cuò)誤會(huì)浪費(fèi)很多調(diào)試程序的時(shí)間??傊?,這次課程設(shè)計(jì)學(xué)到了很多,通過實(shí)踐真正的做到了學(xué)有所用。<

51、/p><p><b>  結(jié)束語</b></p><p>  通過這次設(shè)計(jì),攻克了許多難題。從LCD1602的使用,到各個(gè)數(shù)字如何入,這些是我們學(xué)過,但是還不是太懂的。而且許多芯片并不像我們想象的那么難,只要知道讀寫程序序,只要知道命令字,就可以很容易使用這些芯片了,并不是我們要學(xué)一個(gè)才能用一個(gè),只要我們有說明書,我們可以很好的使用很大部分器件。對(duì)于51單片機(jī),我一直是用

52、匯編的,但對(duì)于此次設(shè)計(jì)我完全用C語言,因?yàn)镃語言的可讀性很好,層次分明,而不像匯編都是在寄存器器間操作,很煩瑣,對(duì)于寫太長的程序很不好寫,而且用C語言我們可以用到C語言函數(shù)庫,這是個(gè)很好的東西,也可以用到變量,而不像匯編只能用到寄存器,這樣有助于運(yùn)用。</p><p>  最后要說的是這次程序?qū)懙糜悬c(diǎn)痛苦,剛開始的時(shí)候無從下手,不知道怎么開始寫。所以對(duì)于程序流程圖是個(gè)很重要的東西,我們應(yīng)該先考慮功能,考慮好主流程

53、,再從主流程出發(fā),再到各個(gè)基本模塊,寫程序不是很難,難的是你要如何寫。所以最先做個(gè)詳細(xì)的分析,結(jié)構(gòu)分析,再著手寫程序,這樣各部分就很好的銜接下去了,而不是一個(gè)頭就扎到程序里去,這樣做不好。只有明確的任務(wù)才能寫的更好。</p><p>  萬事開頭難,只要你去做,你就會(huì)發(fā)現(xiàn)這個(gè)沒有你想象中的那么難,你不去做,就會(huì)覺得很難。而且這次設(shè)計(jì)對(duì)我來說是一次寶貴的經(jīng)驗(yàn),不是說寫這個(gè)程序有多難,硬件設(shè)計(jì)有多難,而是我對(duì)于設(shè)計(jì)流

54、程的掌握,如果我再做一個(gè)設(shè)計(jì)我會(huì)知道首先該如何做,而不是像現(xiàn)在這樣在摸索,這是一個(gè)很好的開始。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 常喜茂,孔英會(huì),付小寧.C51基礎(chǔ)與應(yīng)用實(shí)例.北京:電子工業(yè)出版社,2009.1.</p><p>  [2] 陳志旺,陳志茹,閻巍山.51系列單片機(jī)系統(tǒng)設(shè)計(jì)與實(shí)踐。北京:電子

55、工業(yè)出版社,2009.</p><p>  [3] 戴佳,戴衛(wèi)恒.51單片機(jī)C語言應(yīng)用程序設(shè)計(jì)實(shí)例精講.北京:電子工業(yè)出版社,2005.</p><p>  [4] 劉文濤.單片機(jī)語言C51單片機(jī)典型應(yīng)用設(shè)計(jì).北京:人民郵電出版社,2005.</p><p>  [5] 邊春元.C51單片機(jī)典型模塊設(shè)計(jì)與應(yīng)用.北京:機(jī)械工業(yè)出版社,2006.</p>

56、<p><b>  致 謝</b></p><p>  本次課程設(shè)計(jì)得到班導(dǎo)凌老師的熱心指導(dǎo),在這里對(duì)凌老師表示最衷心的感謝。凌老師平易近人,對(duì)學(xué)生的設(shè)計(jì)進(jìn)度和學(xué)習(xí)很關(guān)心。在畢業(yè)設(shè)計(jì)的前期,首先給我們介紹了不少有用的資料和書籍;在硬件設(shè)計(jì)等方面給予悉心的指導(dǎo);在調(diào)試的過程中凌老師給每個(gè)出現(xiàn)的問題給予及時(shí)的指導(dǎo)。在寫課程設(shè)計(jì)的階段,凌老師讓我們提前給她評(píng)審,不論內(nèi)容字體,還是格式上

57、的問題都一一指出。待人平和、工作認(rèn)真、治學(xué)嚴(yán)謹(jǐn),給我留下很深刻的印象。更重要的是,她善于與學(xué)生溝通,不僅在畢業(yè)設(shè)計(jì)上給我及時(shí)的指導(dǎo),更為我大學(xué)最后階段的學(xué)習(xí)提出了許多寶貴的意見。這一切都在潛移默化地影響著我,為我以后進(jìn)入工作崗位樹立了良好的榜樣。 </p><p>  最后向所有幫助和關(guān)心過我的人表示衷心感謝!</p><p><b>  附 錄</b></p

58、><p>  附錄A 電路原理圖 </p><p>  附錄B 電路實(shí)物圖</p><p>  附錄C 元器件清單</p><p><b>  附錄D 程序清單</b></p><p>  /**********************************</p><

59、p><b>  程 序 名:計(jì)算器</b></p><p><b>  編 寫 者:李月潔</b></p><p><b>  指導(dǎo)老師:凌云</b></p><p>  時(shí) 間:2016.12.20</p><p>  班 級(jí):電氣本1405班</p&

60、gt;<p>  功 能:計(jì)算器能進(jìn)行加、減、乘、除、開方、平方、三角函數(shù)(sin、cos、tan)、十進(jìn)制與十六進(jìn)制的轉(zhuǎn)換等運(yùn)算。</p><p>  說 明:LCD SCLK(E)連至P27,SID(RW)連至P26,CS(RS)連至P25</p><p>  型 號(hào):STC89C54RD+ 使用晶振為12MHz</p><p&

61、gt;  *******************************************************************/</p><p>  #include <reg51.h></p><p>  #include <math.h></p><p>  #include <stdlib.h></p

62、><p>  #define uint unsigned int</p><p>  #define uchar unsigned char</p><p>  #define K 3.1415926/180</p><p>  sbit RS=P2^5;</p><p>  sbit RW=P2^6;</p>

63、<p>  sbit EN=P2^7; //使能信號(hào)</p><p>  sbit BEEP=P2^4;</p><p>  sbit SQUARE=P2^0;//開方是16號(hào)鍵</p><p>  sbit COS=P2^1;</p><p>  sbit SIN=P2^2;</p><p>  sbi

64、t TAN=P2^3;</p><p>  sbit HEX=P3^6;</p><p>  sbit DEC=P3^7;</p><p>  #define GPIO_KEY P1</p><p>  uchar code keycode[16]={0xEE,0XDE,0XBE,0X7E,0XED,0XDD,0XBD,0X7D,0XEB,0

65、XDB,0XBB,0X7B,0XE7,0XD7,0XB7,0X77};//待查詢的按鍵值</p><p>  uchar dat[16]="p.";</p><p>  uchar result[16]=" ";</p><p>  uchar opr[4]="\n";</p><p&g

66、t;  int result_size=0;</p><p>  int opr_flag=0;</p><p>  int count=0;</p><p>  char hex[16]={'0','1','2','3','4','5','6','

67、;7','8','9','A','B','C','D','E','F'};</p><p>  void delay(uint z);</p><p>  void init();</p><p>  void write_comm

68、and(uchar com);//寫指令</p><p>  void write_data(uchar date);//寫數(shù)據(jù)</p><p>  void show_word(int row,int size,char* dat);</p><p>  void show_value(int row,int size,char* str);</p>

69、<p>  int keyscan();</p><p>  uchar getkey(int value);</p><p>  uchar* getValue(uchar* temp);</p><p>  double func_calc(uchar* key,int flag);</p><p>  char* decTo

70、Hex(char* d,int count,int* s);</p><p>  int hexToDec(char* h,int count);</p><p>  int getIntegerSize(double n);</p><p>  char* ftoa(double num,int iSize,int dSize);</p><p

71、>  void clear()</p><p><b>  {</b></p><p>  write_command(0x01);//清屏</p><p><b>  }</b></p><p>  uchar busy_check()//忙檢查(有返回值)</p><p

72、><b>  {</b></p><p>  uchar temp;</p><p>  RS=0;//選擇命令寄存器</p><p>  RW=1;//讀操作選擇</p><p>  EN=1; //一個(gè)高脈沖讀走</p><p><b>  delay(1);</b>

73、;</p><p>  temp=P0;//讀回P0的值</p><p><b>  EN=0;</b></p><p>  return temp;//返回值</p><p><b>  }</b></p><p>  void main()</p><

74、p><b>  {</b></p><p>  int statu=0;</p><p>  int KeyValue;</p><p><b>  int i=0;</b></p><p>  double temp;</p><p><b>  int s

75、ize;</b></p><p>  uchar key[16]="\n";</p><p>  uchar screen[16]="\n";</p><p>  init();//初始化</p><p><b>  BEEP=0;</b></p>&l

76、t;p>  write_command(0x80);</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  KeyValue=keyscan();</p><p>  if(KeyValue!=0)//如果有鍵按下</p>

77、<p><b>  {</b></p><p><b>  count++;</b></p><p>  if(count==1)//第一次按下時(shí),清屏</p><p><b>  {</b></p><p><b>  clear();</b&g

78、t;</p><p><b>  }</b></p><p>  if(KeyValue>0 && KeyValue<16)//如果按鍵號(hào)在1到16之間就顯示在第一行</p><p><b>  {</b></p><p>  key[count-1]=getkey(Ke

79、yValue);</p><p><b>  }</b></p><p>  if(KeyValue>0 && KeyValue<15 && opr_flag==0)//沒有按下等號(hào)之前,更新顯示輸入的字符</p><p><b>  {</b></p><

80、p><b>  clear();</b></p><p>  show_word(1,count,key);</p><p><b>  }</b></p><p>  else if(KeyValue>0 && KeyValue<15 && opr_flag==1)//等

81、號(hào)按下后,清屏,標(biāo)志置0,顯示第一行</p><p><b>  {</b></p><p><b>  clear();</b></p><p>  opr_flag=0;</p><p>  show_word(1,count,key);</p><p><b&g

82、t;  }</b></p><p>  if(KeyValue>15 && KeyValue<23)//如果按下的是第16到22號(hào)鍵</p><p><b>  {</b></p><p>  count--;//不記錄該鍵</p><p>  switch (KeyValue)&

83、lt;/p><p><b>  {</b></p><p>  case 16:opr[0]='S';opr[1]='Q';opr[2]='U';opr[3]='(';opr_flag=4;break;//squre</p><p>  case 17:opr[0]='S

84、9;;opr[1]='Q';opr[2]='R';opr[3]='(';opr_flag=5;break;//squre root</p><p>  case 18:opr[0]='s';opr[1]='i';opr[2]='n';opr[3]='(';opr_flag=6;break;//sin&l

85、t;/p><p>  case 19:opr[0]='c';opr[1]='o';opr[2]='s';opr[3]='(';opr_flag=7;break;//cos</p><p>  case 20:opr[0]='t';opr[1]='a';opr[2]='n';opr[3

86、]='(';opr_flag=8;break;//tan</p><p>  case 21:opr[0]='H';opr[1]='E';opr[2]='X';opr[3]='(';opr_flag=9;break;//hex</p><p>  case 22:opr[0]='D';opr[1

87、]='E';opr[2]='C';opr[3]='(';opr_flag=10;break;//dec</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(opr_flag>=4)//如果opr_flag==4,顯示

88、相應(yīng)的符號(hào)到第一行</p><p><b>  {</b></p><p>  show_word(1,4,opr);</p><p><b>  }</b></p><p>  if(KeyValue>0 && KeyValue<15 && opr_f

89、lag>=4)</p><p><b>  {</b></p><p><b>  clear();</b></p><p>  show_word(1,4,opr);</p><p>  show_value(1,count,key);</p><p><b&g

90、t;  }</b></p><p>  if(KeyValue==15 && opr_flag<4)//'='鍵被按下</p><p><b>  {</b></p><p>  show_word(2,result_size,getValue(key));</p><p&

91、gt;  result_size=0;</p><p><b>  }</b></p><p>  else if(KeyValue==15 && opr_flag>=4 && opr_flag<10)</p><p><b>  {</b></p><p&g

92、t;  temp=func_calc(key,opr_flag);</p><p>  result_size=getIntegerSize(temp);</p><p>  ftoa(temp,result_size,3);</p><p>  show_word(2,result_size+4,result);</p><p><b

93、>  }</b></p><p>  else if(KeyValue==15 && opr_flag==10)</p><p><b>  {</b></p><p>  decToHex(key,count-1,&size);</p><p>  //show_word(2,

94、size,result);</p><p>  show_word(2,size,decToHex(key,count-1,&size));</p><p>  //show_word(2,5,"ok");</p><p><b>  }</b></p><p><b>  }<

95、;/b></p><p><b>  }</b></p><p><b>  }</b></p><p>  //十進(jìn)制轉(zhuǎn)十六進(jìn)制</p><p>  char* decToHex(char* d,int count,int *s)</p><p><b> 

96、 {</b></p><p><b>  int i;</b></p><p>  int temp=0;</p><p><b>  int size;</b></p><p>  int rem;//remainder</p><p>  for(i=0;i&

97、lt;count;i++)</p><p><b>  {</b></p><p><b>  temp*=10;</b></p><p>  temp+=d[i]-'0';</p><p><b>  }</b></p><p><

98、;b>  i=0;</b></p><p>  while(temp>0)</p><p><b>  {</b></p><p>  result[i++]=hex[temp%16];</p><p><b>  temp/=16;</b></p><p

99、><b>  }</b></p><p><b>  size=i;</b></p><p><b>  *s=size;</b></p><p>  for(i=0;i<size-i-1;i++)//反序</p><p><b>  {</b>

100、;</p><p>  temp=result[i];</p><p>  result[i]=result[size-i-1];</p><p>  result[size-1-i]=temp;</p><p><b>  }</b></p><p>  return result;</p

101、><p><b>  }</b></p><p>  //十六進(jìn)制轉(zhuǎn)十進(jìn)制</p><p>  int hexToDec(char* h,int count)</p><p><b>  {</b></p><p><b>  int dec;</b><

102、;/p><p><b>  int i=0;</b></p><p>  int temp=0;</p><p>  for(i=0;i<count;i++)</p><p><b>  {</b></p><p><b>  temp*=16;</b>

103、;</p><p>  temp+=h[i]-'0';</p><p><b>  }</b></p><p>  return temp;</p><p><b>  }</b></p><p>  //計(jì)算整形數(shù)據(jù)的位數(shù)</p><p&

104、gt;  int getIntegerSize(double n)</p><p><b>  {</b></p><p>  int count=0;</p><p><b>  int temp;</b></p><p><b>  if(n<0)</b></p

105、><p><b>  temp=-n;</b></p><p><b>  else</b></p><p><b>  temp=n;</b></p><p><b>  do</b></p><p><b>  {<

106、/b></p><p><b>  temp/=10;</b></p><p><b>  count++;</b></p><p>  }while(temp>0);</p><p>  return count;</p><p><b>  }<

107、;/b></p><p>  //浮點(diǎn)強(qiáng)制轉(zhuǎn)換成字符串函數(shù)</p><p>  char* ftoa(double num,int iSize,int dSize)</p><p><b>  {</b></p><p><b>  int i=0;</b></p><p&

108、gt;<b>  int j=0;</b></p><p>  double decimal;</p><p>  int temp=(int)num;</p><p><b>  int a;</b></p><p>  decimal=num-temp;</p><p>

109、  if(num>=0)</p><p><b>  {</b></p><p>  for(i=0;i<iSize;i++)</p><p><b>  {</b></p><p>  a=temp/pow(10,iSize-i-1);</p><p>  te

110、mp%=(int)pow(10,iSize-i-1);</p><p>  result[i]=a+'0';</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p>&l

111、t;p><b>  {</b></p><p>  result[0]='-';</p><p>  temp=-temp;</p><p>  for(i=1;i<iSize+1;i++)</p><p><b>  {</b></p><p>

112、  a=temp/pow(10,iSize-i);</p><p>  temp%=(int)pow(10,iSize-i);</p><p>  result[i]=a+'0';</p><p><b>  }</b></p><p><b>  }</b></p>

113、<p>  if(decimal!=0)</p><p><b>  {</b></p><p>  result[i++]='.';</p><p>  if(decimal<0)</p><p>  decimal=-decimal;</p><p>  tem

114、p=(int)(pow(10,dSize)*decimal);</p><p>  for(j=0;j<dSize;j++)</p><p><b>  {</b></p><p>  a=temp/pow(10,dSize-j-1);</p><p>  temp%=(int)pow(10,dSize-j-1);

115、</p><p>  result[i+j]=a+'0';</p><p><b>  }</b></p><p><b>  }</b></p><p>  else if(decimal==0)</p><p><b>  {</b>

116、;</p><p>  result[i]=' ';</p><p>  result[i+1]=' ';</p><p>  result[i+2]=' ';</p><p>  result[i+3]=' ';</p><p><b>  }

117、</b></p><p>  return result;</p><p><b>  }</b></p><p>  //平方、開方、正弦、余弦、正切計(jì)算函數(shù)</p><p>  double func_calc(uchar* key,int flag)</p><p><b&

118、gt;  {</b></p><p><b>  int i;</b></p><p>  int value=0;</p><p>  double temp;</p><p>  double decimal;</p><p>  int integer;</p>&

119、lt;p><b>  int tmp;</b></p><p>  if(flag>=4 && flag<=8)</p><p><b>  {</b></p><p>  for(i=0;key[i]!='=';i++)</p><p><b

120、>  {</b></p><p>  value*=10;</p><p>  value+=key[i]-'0';</p><p><b>  }</b></p><p>  switch(flag)</p><p><b>  {</b>

121、</p><p>  case 4:temp=value*value;break;</p><p>  case 5:temp=sqrt(value);break;</p><p>  case 6:temp=sin(value*K);break;</p><p>  case 7: temp=cos(value*K);break;&l

122、t;/p><p>  case 8: temp=tan(value*K);break;</p><p>  default: break;</p><p><b>  }</b></p><p><b>  }</b></p><p>  else if(flag==9) /

123、/hex to dec</p><p><b>  {</b></p><p>  temp=hexToDec(key,count-1);</p><p><b>  }</b></p><p>  return temp;</p><p><b>  }<

124、/b></p><p>  //鍵值轉(zhuǎn)換成字符函數(shù)</p><p>  uchar getkey(int value)</p><p><b>  {</b></p><p>  uchar temp;</p><p>  switch(value)</p><p>

125、<b>  {</b></p><p>  case 1:temp='0';break;</p><p>  case 2:temp='1';break;</p><p>  case 3:temp='2';break;</p><p>  case 4:temp='

126、;3';break;</p><p>  case 5:temp='4';break;</p><p>  case 6:temp='5';break;</p><p>  case 7:temp='6';break;</p><p>  case 8:temp='7';

127、break;</p><p>  case 9:temp='8';break;</p><p>  case 10:temp='9';break;</p><p>  case 11:temp='+';break;</p><p>  case 12:temp='-';break

128、;</p><p>  case 13:temp='*';break;</p><p>  case 14:temp='/';break;</p><p>  case 15:temp='=';break;</p><p>  default :break;</p><p&g

129、t;<b>  }</b></p><p>  return temp;</p><p><b>  }</b></p><p>  uchar* getValue(uchar* temp)</p><p><b>  {</b></p><p><

130、;b>  int i=0;</b></p><p>  //int flag=0;</p><p>  int left_Val=0;</p><p>  int right_Val=0;</p><p>  char operator;</p><p><b>  int val;<

131、;/b></p><p>  int val_tmp;</p><p>  for(i=0;temp[i]!='=';i++)</p><p><b>  {</b></p><p>  if(temp[i]=='+'||temp[i]=='-'||temp[i]==

132、'*'||temp[i]=='/')</p><p><b>  {</b></p><p>  opr_flag=2;</p><p>  operator=temp[i];</p><p><b>  }</b></p><p>  if(

133、temp[i]>='0' && temp[i]<='9' && opr_flag!=2)</p><p><b>  {</b></p><p>  left_Val*=10;</p><p>  left_Val+=temp[i]-'0';</p

134、><p><b>  }</b></p><p>  else if(temp[i]>='0' && temp[i]<='9' && opr_flag==2)</p><p><b>  {</b></p><p>  righ

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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)論