版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 目錄</b></p><p><b> 摘要1</b></p><p><b> 關(guān)鍵字1</b></p><p> Abstract1</p><p> Keywords1</p><p><b>
2、; 1 任務(wù)設(shè)計2</b></p><p> 1.1 選題背景2</p><p> 1.2 計算器介紹2</p><p> 1.2.1 基本結(jié)構(gòu)2</p><p> 1.2.2 計算器的特點2</p><p> 1.3 簡易計算器的設(shè)計目標(biāo)及任務(wù)2</p><p&
3、gt;<b> 2 系統(tǒng)設(shè)計3</b></p><p> 2.1 系統(tǒng)整體設(shè)計3</p><p> 2.2 系統(tǒng)硬件設(shè)計3</p><p> 2.2.1 單片機(jī)最小系統(tǒng)3</p><p> 2.2.2 液晶顯示接口電路5</p><p> 2.2.3 矩陣鍵盤電路5<
4、/p><p> 2.2.4 總體電路連接圖6</p><p> 2.3 系統(tǒng)軟件設(shè)計7</p><p> 2.3.1鍵盤輸入模塊7</p><p> 2.3.2控制模塊7</p><p> 2.3.4顯示模塊9</p><p><b> 3 系統(tǒng)調(diào)試9</b&
5、gt;</p><p> 3.1 Proteus與Keil聯(lián)合仿真調(diào)試9</p><p> 3.2 軟件仿真結(jié)果與硬件調(diào)試結(jié)果10</p><p> 3.3 系統(tǒng)調(diào)試與存在的問題11</p><p> 3.3.1 硬件調(diào)試問題11</p><p> 3.3.2 軟件調(diào)試問題11</p>
6、<p><b> 4 總結(jié)12</b></p><p><b> 參考文獻(xiàn)13</b></p><p><b> 附錄14</b></p><p><b> 曲阜師范大學(xué)</b></p><p><b> 單片機(jī)原理與
7、應(yīng)用</b></p><p><b> 課程設(shè)計報告</b></p><p> 2015年9月 日</p><p> 單片機(jī)原理與應(yīng)用課程設(shè)計任務(wù)書</p><p> 單片機(jī)原理與應(yīng)用課程設(shè)計評閱表</p><p> 注:課程設(shè)計等級:優(yōu)秀(90-100),良好(80-8
8、9),中等(70-79),及格(60-69),不及格(60分以下)。</p><p><b> 簡易計算器的設(shè)計</b></p><p> 物聯(lián)網(wǎng)工程專業(yè)學(xué)生 曹中 李婷婷 李文婧</p><p> 指導(dǎo)老師 黃勇堅</p><p> 摘要:本設(shè)計是基于51系列的單片機(jī)進(jìn)行的十進(jìn)制計算器系統(tǒng)設(shè)計,可以
9、完成計算器的鍵盤輸入,進(jìn)行加、減、乘、除3位無符號數(shù)字的簡單四則運算,并在LED上相應(yīng)的顯示結(jié)果。設(shè)計過程在硬件與軟件方面進(jìn)行同步設(shè)計。硬件方面從功能考慮,主要組成部分包括:鍵盤輸入模塊、運算模塊、控制模塊、顯示模塊。通過鍵盤輸入數(shù)值單片機(jī)進(jìn)行運算后送往LED顯示器顯示。首先選擇內(nèi)部存儲資源豐富的AT89C51單片機(jī),輸入采用4×4矩陣鍵盤。顯示采用LED12864顯示。軟件方面從分析計算器功能、流程圖設(shè)計,再到程序的編寫進(jìn)行
10、系統(tǒng)設(shè)計。針對計算器四則運算算法特別是乘法和除法運算的實現(xiàn),采用C語言進(jìn)行編程,并用Proteus仿真。</p><p> 關(guān)鍵字:單片機(jī) 矩陣鍵盤 LED顯示器 C語言</p><p> The Design of Simple Calculator</p><p> Student majoring in The Internet of things en
11、gineering</p><p> Cao Zhong Li Tingting Li Wenjing</p><p> Tutor Hong Yongjian</p><p> Abstract:This design is based on 51 series microcontroller for decimal calculator sys
12、tem design, can complete the calculator keyboard input, add, subtract, multiply and divide three unsigned Numbers of simple arithmetic, and the corresponding on the LED display results.In the aspect of hardware and softw
13、are design process synchronization design. From a functional hardware, main components include: keyboard input module, calculation module, control module, display module. Through the keyboard inp</p><p> Ke
14、ywords: Microcontroller;Matrix Keyboard; LED display; C language</p><p><b> 1 任務(wù)設(shè)計</b></p><p><b> 1.1 選題背景</b></p><p> 當(dāng)今社會,隨著人們物
15、質(zhì)生活的不斷提高,電子產(chǎn)品已經(jīng)走進(jìn)了家家戶戶,無論是生活或?qū)W習(xí),還是娛樂和消遣幾乎樣樣都離不開電子產(chǎn)品,大型復(fù)雜的計算能力是人腦所不能勝任的,而且比較容易出錯。計算器作為一種快速通用的計算工具方便了用戶的使用。計算器可謂是我們最親密的電子伙伴之一。本設(shè)計著重在于分析計算器軟件和開發(fā)過程中的環(huán)節(jié)和步驟,并從實踐經(jīng)驗出發(fā)對計算器設(shè)計做了詳細(xì)的分析和研究。</p><p> 單片機(jī)由于其微小的體積和極低的成本,廣泛的
16、應(yīng)用于家用電器、工業(yè)控制等領(lǐng)域中。在工業(yè)生產(chǎn)中。單片微型計算機(jī)是微型計算機(jī)的一個重要分支,也是頗具生命力的機(jī)種。單片微型計算機(jī)簡稱單片機(jī),特別適用于控制領(lǐng)域,故又稱為微控制器。</p><p> 本系統(tǒng)就是充分利用了8051芯片的I/O引腳。系統(tǒng)以采用MCS-51系列單片機(jī)Intel8051為中心器件來設(shè)計計算器控制器,實現(xiàn)了能根據(jù)實際輸入值顯示并存儲的功能,計算程序則是參照教材。至于位數(shù)和功能,如果有需要可以
17、通過設(shè)計擴(kuò)充原系統(tǒng)來實現(xiàn) 。</p><p><b> 1.2 計算器介紹</b></p><p> 1.2.1 基本結(jié)構(gòu)</p><p> 計算器一般由運算器、控制器、存儲器、鍵盤、顯示器、電源和一些可選外圍設(shè)備及電子配件通過人工或機(jī)器設(shè)備組成。低檔計算器的運算器、控制器由數(shù)字邏輯電路實現(xiàn)簡單的串行運算,其隨機(jī)存儲器只有一、二個單元,供
18、累加存儲用。高檔計算器由微處理器和只讀存儲器實現(xiàn)各種復(fù)雜的運算程序,有較多的隨機(jī)存儲單元以存放輸入程序和數(shù)據(jù)。鍵盤是計算器的輸入部件,一般采用接觸式或傳感式。為減小計算器的尺寸,一鍵常常有多種功能。顯示器是計算器的輸出部件,有發(fā)光二極管顯示器和液晶顯示器等。除顯示計算結(jié)果外,還常有溢出指示、錯誤指示等。計算器電源采用交流轉(zhuǎn)換器或電池,電池可用交流轉(zhuǎn)換器或太陽能轉(zhuǎn)換器再充電。為節(jié)省電能,計算器都采用CMOS工藝制作的大規(guī)模集成電路(見互補(bǔ)
19、金屬-氧化物-半導(dǎo)體集成電路),并在內(nèi)部裝有定時不操作自動斷電電路。計算器可選用的外圍設(shè)備有微型打印機(jī)、盒式磁帶機(jī)和磁卡機(jī)等。</p><p> 本計算器是以MCS-51系列8051單片機(jī)為核心構(gòu)成的簡易計算器系統(tǒng)。該系統(tǒng)通過單片機(jī)控制,實現(xiàn)對4*4鍵盤掃描進(jìn)行實時的按鍵檢測,并把檢測數(shù)據(jù)存儲下來。整個計算器系統(tǒng)的工作過程為:首先存儲單元初始化,顯示初始值和鍵盤掃描,判斷按鍵位置,查表得出按鍵值,單片機(jī)則對數(shù)據(jù)
20、進(jìn)行儲存與相應(yīng)處理轉(zhuǎn)換,之后送入LED顯示器動態(tài)顯示。整個系統(tǒng)可分為三個主要功能模塊:功能模塊一,實時鍵盤掃描;功能模塊二,數(shù)據(jù)轉(zhuǎn)換成顯示器顯示;功能模塊三,顯示器動態(tài)顯示。</p><p> 1.2.2 計算器的特點</p><p> ?。?)運算的速度很能高。 </p><p><b> ?。?)記憶力很強(qiáng)。</b></p
21、><p> ?。?)有邏輯判斷能力。 </p><p> ?。?)能夠自動控制。 </p><p> ?。?)有較好的通用性。</p><p> 1.3 簡易計算器的設(shè)計目標(biāo)及任務(wù)</p><p> 通過本次課題設(shè)計,應(yīng)用《單片機(jī)應(yīng)用基礎(chǔ)》、《計算機(jī)應(yīng)用基礎(chǔ)》等所學(xué)相關(guān)知識及查閱資料,完成簡易計算器
22、的設(shè)計,以達(dá)到理論與實踐更好的結(jié)合、進(jìn)一步提高綜合運用所學(xué)知識和設(shè)計的能力的目標(biāo)。</p><p> 通過本次設(shè)計的訓(xùn)練,可以使我在基本思路和基本方法上對基于MCS-51單片機(jī)的嵌入式系統(tǒng)設(shè)計有一個比較感性的認(rèn)識,并具備一定程度的設(shè)計能力。</p><p> 現(xiàn)實生活中人們熟知的計算器,其功能主要如下:</p><p><b> ?。?) 鍵盤輸入;&
23、lt;/b></p><p> ?。?) 數(shù)值顯示; </p><p> (3) 加、減、乘、除四則運算;</p><p> ?。?)對錯誤的控制及提示;</p><p> 針對上述功能,計算器軟件程序要完成以下模塊的設(shè)計:</p><p> ?。?)鍵盤輸入檢測模塊</p><p>
24、 ?。?) LCD顯示模塊;</p><p> (3) 算術(shù)運算模塊</p><p> ?。?) 錯誤處理及提示模塊。</p><p><b> 2 系統(tǒng)設(shè)計</b></p><p><b> 2.1系統(tǒng)整體設(shè)計</b></p><p> 系統(tǒng)開始工作后,先由鍵盤
25、輸入鍵值,控制模塊對鍵值進(jìn)行檢測錄入存儲,然后經(jīng)運算模塊運算后送出顯示,如圖2.1:</p><p> 矩陣鍵盤輸入模塊 控制與運算模塊 顯示模塊</p><p><b> 圖2-1</b></p><p> 本文以STC89C52單片機(jī)為主控制器、LCD1602為顯示輸出模塊、4x4矩陣鍵盤為輸入模塊,研究
26、與設(shè)計了一個簡易計算器。其整體設(shè)計框圖如圖2-1所示。</p><p> 其中,單片機(jī)的P0口作為數(shù)據(jù)的輸出端口,輸出數(shù)據(jù)到LCD1602液晶顯示屏上,單片機(jī)的P2口作為其控制端口,用來控制LCD1602顯示輸出數(shù)據(jù);單片機(jī)的P1口作為數(shù)據(jù)的輸入端口,與矩陣鍵盤相連,實現(xiàn)數(shù)據(jù)的輸入。</p><p> 在系統(tǒng)設(shè)計過程中為了使硬件資源盡可能地被合理利用,系統(tǒng)模塊按照以下原則進(jìn)行設(shè)計:盡量
27、使用典型電路,使其與單片機(jī)最小系統(tǒng)容易搭接;設(shè)計完后盡量要留有相應(yīng)的余地,以便于后期修改和二次開發(fā);系統(tǒng)的各模塊之間和軟硬件間設(shè)計兼容性良好;器件選用具有一定的可靠性和抗干擾性,確保系統(tǒng)運行質(zhì)量。 </p><p> 2.2 系統(tǒng)硬件設(shè)計</p><p> 2.2.1 單片機(jī)最小系統(tǒng)</p><p> 單片機(jī)最小系統(tǒng),或者稱為最小應(yīng)用系統(tǒng),是指用最少的元件組
28、成的單片機(jī)可以工作的系統(tǒng).對51系列單片機(jī)來說,最小系統(tǒng)一般應(yīng)該包括:單片機(jī)、振蕩電路、復(fù)位電路。</p><p><b> (1)振蕩電路</b></p><p> 單片機(jī)是一種時序電路,即單片機(jī)是在一定的時序控制下工作的,所以必須提供工作時鐘。時鐘是時序的基礎(chǔ),單片機(jī)本身就如同一個復(fù)雜的同步時序電路,為了保證同步工作方式的實現(xiàn),電路就要在唯一的時鐘信號控制下按
29、時序進(jìn)行工作。</p><p> STC89C52內(nèi)部有一個用于構(gòu)成振蕩器的高增益反相放大器[1],引腳RXD和TXD分別是此放大器的輸入端和輸出端。時鐘可以由內(nèi)部方式產(chǎn)生或外部方式產(chǎn)生。內(nèi)部方式的時鐘電路,在RXD和TXD引腳上外接定時元件,內(nèi)部振蕩器就產(chǎn)生自激振蕩。定時元件通常采用石英晶體和電容組成的并聯(lián)諧振回路。晶振的大小決定單片機(jī)執(zhí)行指令的速度,一般為6-12M。例如使用12M晶振,振蕩周期是1/12微
30、秒,一個機(jī)器周期就應(yīng)該等于12*l/12微秒,也就是1微秒,那么一條雙周期指令的指令周期就是2微秒[2]。電容的大小影響著振蕩器振蕩的穩(wěn)定性和起振的快速性,通常選擇10-3OP的瓷片電容或校正電容。</p><p> 外部方式的時鐘電路,RXD接地,TXD接外部振蕩器。對外部振蕩信號無特殊要求,只要求保證脈沖寬度,一般采用頻率低于12MHz的方波信號。片內(nèi)時鐘發(fā)生器把振蕩頻率兩分頻,產(chǎn)生一個兩相時鐘P1和P2,
31、供單片機(jī)使用。</p><p> 在設(shè)計電路時,我們采用內(nèi)部振蕩電路,晶振和電容應(yīng)盡可能的靠近芯片,以減少CPB板的分布電容,保證振蕩器工作的穩(wěn)定性,提高系統(tǒng)的抗干擾能力[3]。</p><p><b> (2)復(fù)位電路</b></p><p> 復(fù)位是單片機(jī)的初始化操作。其主要功能是把PC初始化為0000H,使單片機(jī)從0000H單元開始
32、執(zhí)行程序。除了進(jìn)入系統(tǒng)的正常初始化之外,當(dāng)由于程序運行出錯或操作錯誤使系統(tǒng)處于死鎖狀態(tài)時,為擺脫困境,也需按復(fù)位鍵重新啟動。</p><p> RST引腳是復(fù)位信號的輸入端。復(fù)位信號是高電平有效,其有效時間應(yīng)持續(xù)24個振蕩周期(即二個機(jī)器周期)以上。若使用頗率為6MHz的晶振,則復(fù)位信號持續(xù)時間應(yīng)超過4us才能完成復(fù)位操作。</p><p> 按鍵手動復(fù)位是通過使復(fù)位端經(jīng)電阻與Vcc電
33、源接通而實現(xiàn)的,其電路如圖2-2-2所示。 </p><p> 圖2-2-2按鍵手動復(fù)位電路</p><p> 最小系統(tǒng)的結(jié)構(gòu)圖如圖2-2-3所示:</p><p> 圖2-2-3單片機(jī)最小系統(tǒng)</p><p> 2.2.2 液晶顯示接口電路</p><p> 本設(shè)計采用LCD液晶顯示器來顯示輸出數(shù)
34、據(jù)。LCD的特性有:(1)+5V電壓,對比可調(diào)度;(2)內(nèi)含復(fù)位電路;(3)提供各種控制命令,如:清屏、字符閃爍、光標(biāo)閃爍、顯示移位等多種功能;(4)有80字節(jié)顯示數(shù)據(jù)存儲器DDRAM;5、內(nèi)建有160個5X7點陣的字型的字符發(fā)生器CGROM;6、8個可由用戶自定義的5X7的字符發(fā)生器CGRAM。</p><p> 本設(shè)計通過D0-D7引腳向LCD寫指令字或?qū)憯?shù)據(jù)以使LCD實現(xiàn)不同的功能或顯示相應(yīng)的數(shù)據(jù)。其接口
35、電路如圖2-2-2所示。</p><p><b> 圖2-2-4</b></p><p> 2.2.3 矩陣鍵盤電路</p><p> 每個按鍵都有它的行值和列值,行值和列值的組合就是識別這個按鍵的編碼。矩陣的行線和列線分別通過兩并行接口和CPU通信。鍵盤的一端(列線)通過電阻接VCC,而接地是通過程序輸出數(shù)字“0”實現(xiàn)的。鍵盤處理程序的
36、任務(wù)是:確定有無鍵按下,判斷哪一個鍵按下,鍵的功能是什么?還要消除按鍵在閉合或斷開時的抖動。兩個并行口中,一個輸出掃描碼,使按鍵逐行動態(tài)接地;另一個并行口輸入按鍵狀態(tài),由行掃描值和回饋信號共同形成鍵編碼而識別按鍵,通過軟件查表,查出該鍵的功能。</p><p> 當(dāng)無按鍵閉合時,P10~P13 與P14~P17 之間開路;當(dāng)有鍵閉合時,與閉合鍵相連的兩條I/O 口線之間短路。判斷有無按鍵按下的方法是:第一步,置
37、列線P14~P17 為輸入狀態(tài),從行線P10~P13 輸出低電平,讀入列線數(shù)據(jù),若某一列線為低電平,則該列線上有鍵閉合。第二步,行線輪流輸出低電平,從列線P14~P17 讀入數(shù)據(jù),若有某一列為低電平,則對應(yīng)行線上有鍵按下。綜合一二兩步的結(jié)果,可確定按鍵編號。但是鍵閉合一次只能進(jìn)行一次鍵功能操作,因此須等到按鍵釋放后,再進(jìn)行鍵功能操作,否則按一次鍵,有可能會連續(xù)多次進(jìn)行同樣的鍵操作。 </p><p><
38、b> 圖2-2-5</b></p><p> 2.2.4 總體電路連接圖</p><p><b> 焊接實物圖:</b></p><p><b> 2.3系統(tǒng)軟件設(shè)計</b></p><p> 2.3.1 鍵盤輸入模塊</p><p> 每個按鍵
39、都有它的行值和列值,行值和列值的組合就是識別這個按鍵的編碼。矩陣的行線和列線分別通過兩并行接口和CPU通信。鍵盤的一端(列線)通過電阻接VCC,而接地是通過程序輸出數(shù)字“0”實現(xiàn)的。鍵盤處理程序的任務(wù)是:確定有無鍵按下,判斷哪一個鍵按下,鍵的功能是什么?還要消除按鍵在閉合或斷開時的抖動。兩個并行口中,一個輸出掃描碼,使按鍵逐行動態(tài)接地;另一個并行口輸入按鍵狀態(tài),由行掃描值和回饋信號共同形成鍵編碼而識別按鍵,通過軟件查表,查出該鍵的功能。
40、</p><p> 當(dāng)無按鍵閉合時,P10~P13 與P14~P17 之間開路;當(dāng)有鍵閉合時,與閉合鍵相連的兩條I/O 口線之間短路。判斷有無按鍵按下的方法是:第一步,置列線P14~P17 為輸入狀態(tài),從行線P10~P13 輸出低電平,讀入列線數(shù)據(jù),若某一列線為低電平,則該列線上有鍵閉合。第二步,行線輪流輸出低電平,從列線P14~P17 讀入數(shù)據(jù),若有某一列為低電平,則對應(yīng)行線上有鍵按下。綜合一二兩步的結(jié)果,可
41、確定按鍵編號。但是鍵閉合一次只能進(jìn)行一次鍵功能操作,因此須等到按鍵釋放后,再進(jìn)行鍵功能操作,否則按一次鍵,有可能會連續(xù)多次進(jìn)行同樣的鍵操作。</p><p> 輸入模塊流程如圖2-3-1:</p><p><b> 圖2-3-1</b></p><p> 2.3.2 控制模塊</p><p> 控制著數(shù)字錄入,數(shù)
42、字錄入是進(jìn)行計算的前提[4],他是從矩陣鍵盤上輸入的數(shù)值、運算符等錄入單片機(jī)處理器進(jìn)行處理,從而得出運算結(jié)果。數(shù)字錄入模塊工作流程入如圖2-3-2:</p><p> 開始 </p><p><b> i=0,j=0</b></p><p><b> 是</b></p><p&
43、gt; 按下數(shù)字鍵 j=j*10+t</p><p><b> 否</b></p><p> 是 </p><p> 按下計算符號鍵 i=j,j=0</p><p> 否 <
44、/p><p><b> 否</b></p><p><b> 按下等于號鍵</b></p><p><b> 是</b></p><p><b> 計算結(jié)果</b></p><p><b> 結(jié)束</b>
45、</p><p><b> 圖2-3-2</b></p><p> 注:其中i是第一個數(shù),j是第二個數(shù),t是鍵盤輸入的數(shù)字</p><p><b> 2.3.4顯示模塊</b></p><p> LCD的引腳說明如表2-3-1所示:</p><p><b>
46、 表2-3-1</b></p><p><b> 表2-3-1</b></p><p><b> 3 系統(tǒng)調(diào)試</b></p><p> 3.1 Proteus與Keil聯(lián)合仿真調(diào)試</p><p> Proteus軟件是英國Labcenterelectronics公司出版的
47、EDA工具軟件。它不僅具有其它EDA工具軟件的仿真功能,還能仿真單片機(jī)及外圍器件。有原理布圖;PCB自動或人工布線;SPICE電路仿真等功能特點。它是目前最好的仿真單片機(jī)及外圍器件的工具。</p><p> Keil軟件提供豐富的庫函數(shù)和功能強(qiáng)大的集成開發(fā)調(diào)試工具,全Windows界面,可以在很短的時間內(nèi)就能學(xué)會使用keil來開發(fā)單片機(jī)應(yīng)用程序。另外重要的一點,只要看一下編譯后生成的匯編代碼,就能體會到Keil
48、生成的目標(biāo)代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢。仿真電路原理圖如圖3-1-1所示:</p><p><b> 圖3-1-1</b></p><p> 3.2 軟件仿真結(jié)果與硬件調(diào)試結(jié)果</p><p> 結(jié)果如圖3-2-1:</p><p><b&g
49、t; 加法:</b></p><p><b> 減法: </b></p><p><b> 乘法: </b></p><p><b> 除法:</b></p><p><b> 圖3-2-1</b></p><p&
50、gt; 3.3 系統(tǒng)調(diào)試與存在的問題</p><p> 3.3.1 硬件調(diào)試問題</p><p><b> 常見故障:</b></p><p> ?。?)邏輯錯誤:它是由設(shè)計錯誤或加工過程中的工藝性錯誤所造成的。這類錯誤包括錯線、開路、短路等。</p><p> (2)元器件失效:有兩方面的原因:一是器件本身已
51、損壞或性能不符合要求;二是組裝錯誤造成元件失效,如電解電容、集成電路安裝方向錯誤等。</p><p> ?。?)可靠性差:因其可靠性差的原因很多,如金屬化孔、接插件接觸不良會造成系統(tǒng)時好時壞,經(jīng)不起振動;走線和布局不合理也會引起系統(tǒng)可靠性差[5]。</p><p> (4)電源故障:若樣機(jī)由電源故障,則加電后很容易造成器件損壞。電源故障包括電壓值不符合設(shè)計要求,電源引線和插座不對,功率不
52、足,負(fù)載能力差等[6]。</p><p> 調(diào)試方法:包括多級調(diào)試和聯(lián)機(jī)調(diào)試。在調(diào)試過程中要針對可能出現(xiàn)的故障認(rèn)真分析,直至檢查出原因并排除。</p><p> 本次硬件調(diào)試過程中,對所出現(xiàn)的問題進(jìn)行了認(rèn)真的分析和改正,最后能夠很好的達(dá)到設(shè)計要求的效果。</p><p> 3.3.2 軟件調(diào)試問題</p><p> 軟件調(diào)試一般分為以
53、下四個階段:</p><p> ?。?)編寫程序并查錯;</p><p> (2)在C語言的編譯系統(tǒng)中編譯源程序;</p><p> ?。?)對程序進(jìn)行編譯連接,并及時發(fā)現(xiàn)程序中存在的錯誤;</p><p><b> ?。?)改正錯誤。</b></p><p> 在本次調(diào)試中出現(xiàn)的問題有:&l
54、t;/p><p> (1)在程序中有的函數(shù)名未定義;</p><p> (2)在抄錄程序時,少錄入一些字符,如:“;”、“{”、“-”等符號,而出現(xiàn)錯誤;</p><p> (3)有一些函數(shù)名錄入時少寫一個字母或順序顛倒;</p><p> ?。?)沒有注意函數(shù)名的調(diào)用及定義;</p><p> ?。?)芯片引腳定義
55、出錯而導(dǎo)致沒有實驗現(xiàn)象。</p><p> 在軟件調(diào)試過程中,對出現(xiàn)的錯誤進(jìn)行了認(rèn)真的分析和修改,多次調(diào)試成功后,能夠很好的達(dá)到既定的設(shè)計效果。</p><p><b> 4 總結(jié)</b></p><p> 我們的題目是簡易計算器的設(shè)計,對于我們這些實踐中的新手來說,這是一次考驗。怎樣才能找到課堂所學(xué)與實際應(yīng)用的最佳結(jié)合點?怎樣讓自己的業(yè)
56、余更接近專業(yè)?怎樣讓自己的計劃更具有序性,而不會忙無一用?這都是我們所要考慮和努力的。這次課程設(shè)計我學(xué)到很多很多的東西,學(xué)會了怎么樣去制定計劃,怎么樣去實現(xiàn)這個計劃,并掌握了在執(zhí)行過程中怎么樣去克服心理上的不良情緒。不僅鞏固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上沒有學(xué)到過的知識,掌握了一種系統(tǒng)的研究方法,可以進(jìn)行一些簡單的編程。通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實踐
57、相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實際動手能力和獨立思考的能力。同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,例如對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固,對C語言掌握得不夠好等。</p><p> 在這里真誠地對所有關(guān)心我、幫助我、鼓勵我的老師、同學(xué)、朋友道聲:“謝謝!”</p><p><b> 參考文獻(xiàn)</b></p&g
58、t;<p> [1]徐愛鈞.智能化測量控制儀表原理與設(shè)計(第二版).北京航天航空大學(xué)出版社,2004.9 </p><p> [2]孫育才等.MCS-51系列單片微型計算機(jī)及其應(yīng)用(第4版).東南大學(xué)出版社,2004.3</p><p> [3]李萍等.智能儀器實驗指導(dǎo)書.大連交通大學(xué),2007.9</p><p> [4]單片機(jī)應(yīng)用技術(shù)(C語
59、言).中國勞動社會保障出版社,2006.6</p><p> [5]武慶生,仇梅等著.單片機(jī)原理與應(yīng)用.電子科技大學(xué)出版,1998.12 </p><p> [6]朱定華著.單片機(jī)原理與接口技術(shù).電子工業(yè)出版社,2001.4 </p><p><b> 附錄:</b></p><p> /*-----------
60、------------------------------------</p><p><b> 名稱:簡易計算器</b></p><p> 日期:2015.10</p><p><b> 內(nèi)容:簡易計算器</b></p><p> ----------------------------
61、--------------------*/</p><p> #include <reg52.h></p><p> #include <intrins.h></p><p> #include "delay.h"</p><p> #define uchar unsigned char
62、</p><p> #define uint unsigned int</p><p> #define lint unsigned long int</p><p> sbit RS = P2^2;</p><p> sbit RW = P2^1;</p><p> sbit E = P2^6;<
63、;/p><p> sbit RES = P2^5;</p><p> sbit PSB = P2^3;</p><p> #define DataPort P0 //MCU P0<------> LCM</p><p> void delayss()</p><p><b>
64、{</b></p><p> uint n=10000;</p><p> while(n--);</p><p><b> }</b></p><p> /*------------------------------------------------</p><p>&l
65、t;b> 檢測</b></p><p> ------------------------------------------------*/</p><p> void Check_Busy()</p><p><b> { </b></p><p><b> RS=0;<
66、/b></p><p><b> RW=1;</b></p><p><b> E=1;</b></p><p> DataPort=0xff;</p><p> while((DataPort&0x80)==0x80);//忙則等待</p><p>&
67、lt;b> E=0;</b></p><p><b> }</b></p><p> /*------------------------------------------------</p><p><b> 寫命令</b></p><p> ------------
68、------------------------------------*/</p><p> void Write_Cmd(unsigned char Cmd)</p><p><b> {</b></p><p> Check_Busy();</p><p><b> RS=0;</b>
69、</p><p><b> RW=0;</b></p><p><b> E=1;</b></p><p> DataPort=Cmd;</p><p> DelayUs2x(5);</p><p><b> E=0;</b></p>
70、;<p> DelayUs2x(5);</p><p><b> }</b></p><p> /*------------------------------------------------</p><p><b> 寫數(shù)據(jù)</b></p><p> ---------
71、---------------------------------------*/</p><p> void Write_Data(unsigned char Data)</p><p><b> {</b></p><p> Check_Busy();</p><p><b> RS=1;</
72、b></p><p><b> RW=0;</b></p><p><b> E=1;</b></p><p> DataPort=Data;</p><p> DelayUs2x(5);</p><p><b> E=0;</b><
73、;/p><p> DelayUs2x(5);</p><p><b> }</b></p><p> /*------------------------------------------------</p><p><b> 液晶屏初始化</b></p><p>
74、------------------------------------------------*/</p><p> void Init_ST7920()</p><p><b> { </b></p><p> DelayMs(40); //大于40MS的延時程序</p><p> PSB=1;
75、 //設(shè)置為8BIT并口工作模式</p><p> DelayMs(1); //延時</p><p> RES=0; //復(fù)位</p><p> DelayMs(1); //延時</p><p> RES=1; /
76、/復(fù)位置高</p><p> DelayMs(10);</p><p> Write_Cmd(0x30); //選擇基本指令集</p><p> DelayUs2x(50); //延時大于100us</p><p> Write_Cmd(0x30); //選擇8bit數(shù)據(jù)流</p>
77、<p> DelayUs2x(20); //延時大于37us</p><p> Write_Cmd(0x0c); //開顯示(無游標(biāo)、不反白)</p><p> DelayUs2x(50); //延時大于100us</p><p> Write_Cmd(0x01); /*清除顯示,并且設(shè)定地址指針為
78、00H*/</p><p> DelayMs(15); //延時大于10ms</p><p> Write_Cmd(0x06); </p><p> /*指定在資料的讀取及寫入時,設(shè)定游標(biāo)的移動方向及指定顯示的移位,光標(biāo)從右向左加1位移動*/</p><p> DelayUs2x(50);
79、//延時大于100us</p><p><b> }</b></p><p> /*------------------------------------------------</p><p><b> 顯示字符串</b></p><p> x:橫坐標(biāo)值,范圍0~8</p>
80、<p> y:縱坐標(biāo)值,范圍1~4</p><p> ------------------------------------------------*/</p><p> void LCD_PutString(unsigned char x,unsigned char y,unsigned char code *s)</p><p><b&
81、gt; { </b></p><p><b> switch(y)</b></p><p><b> {</b></p><p> case 1: Write_Cmd(0x80+x);break;</p><p> case 2: Write_Cmd(0x90+x);break
82、;</p><p> case 3: Write_Cmd(0x88+x);break;</p><p> case 4: Write_Cmd(0x98+x);break;</p><p> default:break;</p><p><b> }</b></p><p> while(
83、*s>0)</p><p><b> { </b></p><p> Write_Data(*s);</p><p><b> s++;</b></p><p> DelayUs2x(50);</p><p><b> }</b><
84、/p><p><b> }</b></p><p> /************清屏*********/</p><p> void ClrScreen()</p><p><b> { </b></p><p> Write_Cmd(0x01);</p>
85、<p> DelayMs(15);</p><p><b> }</b></p><p> /*------------------------------------------------</p><p><b> 主程序</b></p><p> ------------
86、------------------------------------*/</p><p><b> main()</b></p><p><b> { </b></p><p> lint i1,j1,i,t,count,countt,ii,iii,jjj,jj=100000;//存儲兩個數(shù)字</p>
87、<p> lint j=0; </p><p> uchar jx=0;//jx:第一個非零數(shù)檢測位</p><p> uchar yue=0; //yue:四舍五入檢測位</p><p> lint yushu=0;//余數(shù)標(biāo)志檢測</p><p> uchar temp,fo=0x00;//讀取鍵盤
88、數(shù)值 </p><p> i=j=t=count=0; //i:前一個數(shù)字;j:后一個數(shù)字;</p><p> //t:按鍵輸入數(shù)字;count:計算結(jié)果 </p><p> Init_ST7920(); //12864初始化 </p><p><b> while(1)</b><
89、;/p><p><b> { </b></p><p> if(countt>=1000000||i>=1000000||j>=1000000)</p><p><b> {</b></p><p> i=j=count=fo=0;</p><p>
90、 LCD_PutString(0,1,"eeeeeeeeeeeeeeee");</p><p> LCD_PutString(0,2,"eeeeeeeeeeeeeeee");</p><p> LCD_PutString(0,3,"eeeeeeeeeeeeeeee");</p><p> LCD_Pu
91、tString(0,4,"eeeeeeeeeeeeeeee"); </p><p> DelayUs2x(500);</p><p><b> }</b></p><p> /********鍵盤檢測*************/</p><p><b> P1=0xf0;</b
92、></p><p> if(P1!=0xf0)</p><p><b> {</b></p><p> delayss();</p><p> if(P1!=0xf0)</p><p><b> {</b></p><p><b&
93、gt; temp=P1;</b></p><p><b> P1=0x0f;</b></p><p> P1=temp|P1;</p><p> /***********如果檢測到數(shù)字,就把值賦給j************/</p><p> if(P1==0xee||P1==0xde||P1==0
94、xbe||P1==0xed||P1==0xdd||P1==0xbd||P1==0xeb||P1==0xdb||P1==0xbb||P1==0xd7)</p><p><b> {</b></p><p> j=j*10;//j賦值 </p><p> if(P1==0xee)t=7; //按鍵賦值給變量</p><
95、p> if(P1==0xde)t=8;</p><p> if(P1==0xbe)t=9;</p><p> if(P1==0xed)t=4;</p><p> if(P1==0xdd)t=5;</p><p> if(P1==0xbd)t=6;</p><p> if(P1==0xeb)t=1;&l
96、t;/p><p> if(P1==0xdb)t=2;</p><p> if(P1==0xbb)t=3;</p><p> if(P1==0xd7)t=0;</p><p> j=j+t;//累加數(shù)字</p><p> jjj=j; while(P1==0xee||P1==0xde||P1==0xbe||
97、P1==0xed||P1==0xdd||P1==0xbd||P1==0xeb||P1==0xdb||P1==0xbb||P1==0xd7); </p><p><b> }</b></p><p> Write_Cmd(0x88+0);//顯示j</p><p> for(ii=0;ii<6;ii++)</p>&l
98、t;p><b> { </b></p><p> if(jjj/jj!=0)jx=1;</p><p> if(jjj/jj==0&&jx==0)Write_Data(' ');</p><p><b> else</b></p><p> Writ
99、e_Data(jjj/jj+'0'); </p><p> jjj=jjj%jj;</p><p><b> jj=jj/10;</b></p><p><b> }</b></p><p> if(j==0)Write_Data('0');</p&
100、gt;<p> else Write_Data(' ');</p><p><b> jx=0;</b></p><p><b> jjj=j;</b></p><p> jj=100000;</p><p> /**************給i賦值*****
101、********/</p><p> if(P1==0x7e||P1==0x7d||P1==0x7b||P1==0x77)</p><p><b> {</b></p><p> fo=P1;//接收到了運算符號</p><p> if(fo==0x7e) LCD_PutString(0,2,"
102、7;");//除法</p><p> if(fo==0x7d) LCD_PutString(0,2,"x");//乘法</p><p> if(fo==0x7b) LCD_PutString(0,2,"-");//減法 </p><p> if(fo==0x77) LCD_PutString(0,2,&qu
103、ot;+");//加法</p><p> i=j; //如果遇到運算符號把j的值賦給i;</p><p> j=0; //將j的值傳給i后清空</p><p> LCD_PutString(0,3," "); //清空第三行</p><p> iii=i; //i的顯示值</
104、p><p> while(P1==0x7e||P1==0x7d||P1==0x7b||P1==0x77);//當(dāng)按鍵沒松開時不動</p><p><b> }</b></p><p> Write_Cmd(0x80+0);//顯示i</p><p> for(ii=0;ii<6;ii++)</p>
105、<p><b> { </b></p><p> if(iii/jj!=0)jx=1;</p><p> if(iii/jj==0&&jx==0)Write_Data(' ');</p><p><b> else</b></p><p> Wr
106、ite_Data(iii/jj+'0');</p><p> iii=iii%jj;</p><p><b> jj=jj/10;</b></p><p> DelayUs2x(50);</p><p><b> }</b></p><p> if(
107、i==0&&fo!=0x00)Write_Data('0');//i可以取0</p><p> jx=0;//初始化</p><p><b> iii=i;</b></p><p> jj=100000;</p><p> /**********計算并輸出得數(shù)*********
108、*/</p><p> if(P1==0xb7) //等于號輸出得數(shù)</p><p><b> {</b></p><p> if(fo==0x7e)count=i/j;//除法</p><p> if(fo==0x7d)count=i*j;//乘法</p><p> if(fo==0
109、x7b)count=i-j;//減法</p><p> if(fo==0x77)count=i+j;//加法 </p><p> LCD_PutString(0,4,"="); //顯示計算結(jié)果</p><p> countt=count;</p><p> Write_Cmd(0x98+1);</p>
110、<p> for(ii=0;ii<6;ii++)</p><p><b> { </b></p><p> if(count/jj!=0)jx=1;</p><p> if(count/jj==0&&jx==0)Write_Data(' ');</p><p>
111、;<b> else</b></p><p> Write_Data(count/jj+'0');</p><p> count=count%jj;</p><p><b> jj=jj/10;</b></p><p> DelayUs2x(50);</p&g
112、t;<p><b> }</b></p><p> if(countt==0)Write_Data('0');//結(jié)果可取0</p><p> jx=0; //初始化</p><p> if(fo==0x7e&&i%j!=0) //除法顯示余數(shù)</p><p&g
113、t;<b> {</b></p><p><b> i1=i;</b></p><p><b> j1=j;</b></p><p><b> i1=i1%j1;</b></p><p> if(i/j==0){Write_Cmd(0x98+3)
114、;Write_Data('0');}</p><p> LCD_PutString(4,4,".");</p><p> Write_Cmd(0x98+5);</p><p> for(ii=0;ii<6;ii++)</p><p><b> { </b></p&g
115、t;<p> if(ii<=4){Write_Data((10*i1)/j1+'0');</p><p> i1=(10*i1)%j1;</p><p> DelayUs2x(50);}</p><p><b> else</b></p><p><b> {<
116、;/b></p><p> yue=(10*i1)%j1;</p><p> if((10*yue)/j1>=5)Write_Data(((10*i1)/j1+1)+'0');</p><p> else Write_Data((10*i1)/j1+'0'); </p><p><b
117、> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> /***********清除重置*************/</p><p>
118、 if(P1==0xe7)</p><p><b> {</b></p><p> i=j=count=countt=0;fo=0x00;ClrScreen();</p><p><b> }</b></p><p><b> }</b></p><
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)課程設(shè)計簡易計算器
- 單片機(jī)課程設(shè)計-簡易計算器
- 單片機(jī)課程設(shè)計簡易計算器
- 單片機(jī)課程設(shè)計--簡易計算器
- 課程設(shè)計---單片機(jī)簡易計算器設(shè)計
- 單片機(jī)課程設(shè)計報告---簡易計算器
- 單片機(jī)課程設(shè)計報告-簡易計算器
- 單片機(jī)課程設(shè)計--簡易數(shù)字計算器
- 簡易計算器單片機(jī)課程設(shè)計報告
- 單片機(jī)課程設(shè)計---簡易計算器的設(shè)計
- 單片機(jī)課程設(shè)計報告-- 簡易計算器設(shè)計
- 單片機(jī)課程設(shè)計--簡易計算器的設(shè)計
- 基于51單片機(jī)簡易計算器課程設(shè)計
- 單片機(jī)計算器課程設(shè)計
- 單片機(jī)課程設(shè)計--計算器
- 單片機(jī)課程設(shè)計-計算器
- 課程設(shè)計-單片機(jī)計算器
- 簡易計算器設(shè)計-單片機(jī)原理及應(yīng)用課程設(shè)計
- 單片機(jī)課程設(shè)計報告--簡易計算器的設(shè)計、制作
- 單片機(jī)簡易計算器設(shè)計
評論
0/150
提交評論