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

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  課程設(shè)計(jì)報(bào)告</b></p><p>  題 目 計(jì)算器課程設(shè)計(jì) 課 程 名 稱 單片機(jī)原理及接口技術(shù) </p><p>  院 部 名 稱 </p><p>  專 業(yè)

2、 </p><p>  班 級(jí) </p><p>  學(xué) 生 姓 名 </p><p>  學(xué) 號(hào) </p><p>  地 點(diǎn)

3、</p><p>  學(xué) 時(shí) </p><p>  指 導(dǎo) 教 師 </p><p><b>  目 錄</b></p><p><b>  摘要2</b></p><p>

4、<b>  第一章 緒論3</b></p><p>  1.1 課題簡(jiǎn)介3</p><p>  1.2 設(shè)計(jì)目的3</p><p>  1.3 設(shè)計(jì)任務(wù)3</p><p>  第二章 課題背景5</p><p>  2.1 單片機(jī)發(fā)展現(xiàn)狀5</p><p>  

5、2.2 計(jì)算器發(fā)展現(xiàn)狀5</p><p>  2.3 單片機(jī)簡(jiǎn)介5</p><p>  2.4 矩陣鍵盤7</p><p>  2.5 計(jì)算器設(shè)計(jì)思路7</p><p>  第三章 硬件系統(tǒng)設(shè)計(jì)9</p><p>  3.1 鍵盤接口電路9</p><p>  3.2 LED顯示模塊

6、10</p><p>  3.3 運(yùn)算模塊11</p><p>  第四章 軟件設(shè)計(jì)12</p><p>  4.1 C語(yǔ)言的特點(diǎn)12</p><p>  4.2 鍵盤掃描程序設(shè)計(jì)12</p><p>  4.3 算術(shù)運(yùn)算程序設(shè)計(jì)13</p><p>  4.4 顯示程序設(shè)計(jì)14&

7、lt;/p><p>  第五章 系統(tǒng)調(diào)試與存在的問(wèn)題15</p><p>  5.1 軟件調(diào)試15</p><p>  5.2 硬件調(diào)試15</p><p><b>  總 結(jié)16</b></p><p><b>  參考文獻(xiàn)17</b></p><

8、p>  附錄一C語(yǔ)言源程序18</p><p><b>  主函數(shù):18</b></p><p>  鍵盤掃描函數(shù):21</p><p>  數(shù)碼管輸出函數(shù):25</p><p>  附錄二 Protel仿真電路27</p><p>  附錄三 Proteus仿真電路28<

9、/p><p><b>  摘要</b></p><p>  計(jì)算機(jī)在人們的日常生活中是比較常見(jiàn)的電子產(chǎn)品之一。可是它還在發(fā)展之中,以后必將出現(xiàn)功能更加強(qiáng)大的計(jì)算器,基于這樣的理念,本次設(shè)計(jì)是用單片機(jī)設(shè)計(jì)計(jì)算器。該設(shè)計(jì)系統(tǒng)是以AT89C51單片機(jī)為核心,外接矩陣鍵盤,通過(guò)鍵盤掃描輸入數(shù)據(jù),經(jīng)過(guò)單片機(jī)執(zhí)行處理,再由LED數(shù)碼管作為顯示輸出,軟件程序用C語(yǔ)言編寫,具有較好的移植

10、性。實(shí)驗(yàn)報(bào)告詳細(xì)介紹了整個(gè)計(jì)算器系統(tǒng)的硬件組成結(jié)構(gòu),工作原理以及軟件程序設(shè)計(jì)。計(jì)算其具有簡(jiǎn)單的整數(shù)加減乘除功能。</p><p>  整個(gè)計(jì)算器系統(tǒng)的工作過(guò)程為:首先存儲(chǔ)單元初始化,顯示初始值和鍵盤掃描,判斷按鍵位置,查表得出按鍵值,單片機(jī)則對(duì)數(shù)據(jù)進(jìn)行儲(chǔ)存與相應(yīng)處理轉(zhuǎn)換,之后送入LED顯示器動(dòng)態(tài)顯示。整個(gè)系統(tǒng)可分為三個(gè)主要功能模塊:功能模塊一,實(shí)時(shí)鍵盤掃描;功能模塊二,數(shù)據(jù)轉(zhuǎn)換成顯示器顯示;功能模塊三,顯示器動(dòng)態(tài)

11、顯示。</p><p>  關(guān)鍵字:計(jì)算器AT89C51 C語(yǔ)言</p><p><b>  第一章 緒論</b></p><p><b>  1.1 課題簡(jiǎn)介</b></p><p>  當(dāng)今社會(huì),隨著人們物質(zhì)生活的不斷提高,電子產(chǎn)品已經(jīng)走進(jìn)了家家戶戶,無(wú)論是生活或?qū)W習(xí),還是娛樂(lè)和消遣幾乎樣樣都離

12、不開(kāi)電子產(chǎn)品,大型復(fù)雜的計(jì)算能力是人腦所不能勝任的,而且比較容易出錯(cuò)。計(jì)算器作為一種快速通用的計(jì)算工具方便了用戶的使用。計(jì)算器可謂是我們最親密的電子伙伴之一。本設(shè)計(jì)著重在于分析計(jì)算器軟件和開(kāi)發(fā)過(guò)程中的環(huán)節(jié)和步驟,并從實(shí)踐經(jīng)驗(yàn)出發(fā)對(duì)計(jì)算器設(shè)計(jì)做了詳細(xì)的分析和研究。</p><p>  單片機(jī)由于其微小的體積和極低的成本,廣泛的應(yīng)用于家用電器、工業(yè)控制等領(lǐng)域中。在工業(yè)生產(chǎn)中。單片微型計(jì)算機(jī)是微型計(jì)算機(jī)的一個(gè)重要分支,

13、也是頗具生命力的機(jī)種。單片微型計(jì)算機(jī)簡(jiǎn)稱單片機(jī),特別適用于控制領(lǐng)域,故又稱為微控制器。</p><p>  本系統(tǒng)就是充分利用了8051芯片的I/O引腳。系統(tǒng)以采用MCS-51系列單片機(jī)Intel8051為中心器件來(lái)設(shè)計(jì)計(jì)算器控制器,實(shí)現(xiàn)了能根據(jù)實(shí)際輸入值顯示并存儲(chǔ)的功能,計(jì)算程序則是參照教材。至于位數(shù)和功能,如果有需要可以通過(guò)設(shè)計(jì)擴(kuò)充原系統(tǒng)來(lái)實(shí)現(xiàn) 。</p><p><b> 

14、 1.2 設(shè)計(jì)目的</b></p><p>  通過(guò)本次課題設(shè)計(jì),應(yīng)用《單片機(jī)應(yīng)用基礎(chǔ)》、《計(jì)算機(jī)應(yīng)用基礎(chǔ)》等所學(xué)相關(guān)知識(shí)及查閱資料,完成簡(jiǎn)易計(jì)算器的設(shè)計(jì),以達(dá)到理論與實(shí)踐更好的結(jié)合、進(jìn)一步提高綜合運(yùn)用所學(xué)知識(shí)和設(shè)計(jì)的能力的目的。</p><p>  通過(guò)本次設(shè)計(jì)的訓(xùn)練,可以使我在基本思路和基本方法上對(duì)基于MCS-51單片機(jī)的嵌入式系統(tǒng)設(shè)計(jì)有一個(gè)比較感性的認(rèn)識(shí),并具備一定程度的

15、設(shè)計(jì)能力。</p><p><b>  1.3 設(shè)計(jì)任務(wù)</b></p><p>  在本次課程設(shè)計(jì)中,主要完成如下方面的設(shè)計(jì)任務(wù):</p><p> ?。?)簡(jiǎn)要闡述單片機(jī)技術(shù)發(fā)展的國(guó)內(nèi)外現(xiàn)狀及LED動(dòng)態(tài)顯示和矩陣鍵盤基本原理;</p><p>  (2)掌握AT89C51的最小電路及外圍擴(kuò)展電路的設(shè)計(jì)方法;</

16、p><p> ?。?)了解單片機(jī)數(shù)據(jù)轉(zhuǎn)換功能及工作過(guò)程;</p><p> ?。?)完成主要功能模塊的硬件電路設(shè)計(jì)及必要的參數(shù)確定;</p><p> ?。?)自學(xué)Protel、Proteus等在課程設(shè)計(jì)中要用到的軟件。</p><p><b>  第二章 課題背景</b></p><p>  目前,

17、51系列單片機(jī)在我國(guó)的各行各業(yè)得到了廣泛應(yīng)用,各大專業(yè)院校、職業(yè)培訓(xùn)學(xué)校,均開(kāi)設(shè)了單片機(jī)原理與應(yīng)用方面的課程,這是一門技術(shù)性和實(shí)踐性很強(qiáng)的學(xué)科,必須通過(guò)一系列的軟硬件實(shí)驗(yàn)、理論聯(lián)系實(shí)際,才能學(xué)好、學(xué)懂,取得較好的學(xué)習(xí)效果。</p><p>  2.1 單片機(jī)發(fā)展現(xiàn)狀</p><p>  單片機(jī)的發(fā)展趨勢(shì):低功耗CMOS化;微型單片化;主流與多品種共存;單片機(jī)從8位、16位到32位,數(shù)不勝數(shù)

18、,應(yīng)有盡有,有與主流C51系列兼容的,也有不兼容的,但它們各具特色,互成互補(bǔ),為單片機(jī)的應(yīng)用提供廣闊的天地。</p><p>  2.2 計(jì)算器發(fā)展現(xiàn)狀</p><p>  計(jì)算器一般由運(yùn)算器、控制器、存儲(chǔ)器、鍵盤、顯示器、電源和一些可選外圍設(shè)備及電子配件通過(guò)人工或機(jī)器設(shè)備組成。低檔計(jì)算器的運(yùn)算器、控制器由數(shù)字邏輯電路實(shí)現(xiàn)簡(jiǎn)單的串行運(yùn)算,其隨機(jī)存儲(chǔ)器只有一、二個(gè)單元,供累加存儲(chǔ)用。高檔計(jì)算

19、器由微處理器和只讀存儲(chǔ)器實(shí)現(xiàn)各種復(fù)雜的運(yùn)算程序,有較多的隨機(jī)存儲(chǔ)單元以存放輸入程序和數(shù)據(jù)。鍵盤是計(jì)算器的輸入部件,一般采用接觸式或傳感式。為減小計(jì)算器的尺寸,一鍵常常有多種功能。顯示器是計(jì)算器的輸出部件,有發(fā)光二極管顯示器和液晶顯示器等。除顯示計(jì)算結(jié)果外,還常有溢出指示、錯(cuò)誤指示等。計(jì)算器電源采用交流轉(zhuǎn)換器或電池,電池可用交流轉(zhuǎn)換器或太陽(yáng)能轉(zhuǎn)換器再充電。為節(jié)省電能,計(jì)算器都采用CMOS工藝制作的大規(guī)模集成電路(見(jiàn)互補(bǔ)金屬-氧化物-半導(dǎo)體

20、集成電路),并在內(nèi)部裝有定時(shí)不操作自動(dòng)斷電電路。計(jì)算器可選用的外圍設(shè)備有微型打印機(jī)、盒式磁帶機(jī)和磁卡機(jī)等。</p><p><b>  2.3 單片機(jī)簡(jiǎn)介</b></p><p>  8051是MCS-51系列單片機(jī)的典型產(chǎn)品,以這一代表性的機(jī)型進(jìn)行系統(tǒng)的講解。8051單片機(jī)包含中央處理器、程序存儲(chǔ)器(ROM)、數(shù)據(jù)存儲(chǔ)器(RAM)、定時(shí)/計(jì)數(shù)器、并行接口、串行接口和

21、中斷系統(tǒng)等幾大單元及數(shù)據(jù)總線、地址總線和控制總線等三大總線,其內(nèi)部結(jié)構(gòu)如圖2.1所示,現(xiàn)在分別加以說(shuō)明:</p><p>  圖2.1 8051內(nèi)部結(jié)構(gòu)圖</p><p><b>  中央處理器:</b></p><p>  中央處理器(CPU)是整個(gè)單片機(jī)的核心部件,是8位數(shù)據(jù)寬度的處理器,能處理8位二進(jìn)制數(shù)據(jù)或代碼,CPU負(fù)責(zé)控制、指揮和調(diào)

22、度整個(gè)單元系統(tǒng)協(xié)調(diào)的工作,完成運(yùn)算和控制輸入輸出功能等操作。</p><p>  數(shù)據(jù)存儲(chǔ)器(RAM):</p><p>  8051內(nèi)部有128個(gè)8位用戶數(shù)據(jù)存儲(chǔ)單元和128個(gè)專用寄存器單元,它們是統(tǒng)一編址的,專用寄存器只能用于存放控制指令數(shù)據(jù),用戶只能訪問(wèn),而不能用于存放用戶數(shù)據(jù),所以,用戶能使用的RAM只有128個(gè),可存放讀寫的數(shù)據(jù),運(yùn)算的中間結(jié)果或用戶定義的字型表。</p&g

23、t;<p>  程序存儲(chǔ)器(ROM):</p><p>  8051共有4096個(gè)8位掩膜ROM,用于存放用戶程序,原始數(shù)據(jù)或表格。</p><p><b>  定時(shí)/計(jì)數(shù)器:</b></p><p>  8051有兩個(gè)16位的可編程定時(shí)/計(jì)數(shù)器,以實(shí)現(xiàn)定時(shí)或計(jì)數(shù)產(chǎn)生中斷,用于控制程序轉(zhuǎn)向。</p><p>

24、;  并行輸入輸出(I/O)口:</p><p>  8051共有4組8位I/O口(P0、 P1、P2和P3),用于對(duì)外部數(shù)據(jù)的傳輸。</p><p><b>  全雙工串行口:</b></p><p>  8051內(nèi)置一個(gè)全雙工串行通信口,用于與其它設(shè)備間的串行數(shù)據(jù)傳送,該串行口既可以用作異步通信收發(fā)器,也可以當(dāng)同步移位器使用。</p&

25、gt;<p><b>  中斷系統(tǒng):</b></p><p>  8051具備較完善的中斷功能,有兩個(gè)外中斷、兩個(gè)定時(shí)/計(jì)數(shù)器中斷和一個(gè)串行中斷,可滿足不同的控制要求,并具有2級(jí)的優(yōu)先級(jí)別選擇。</p><p><b>  時(shí)鐘電路:</b></p><p>  8051內(nèi)置最高頻率達(dá)12MHz的時(shí)鐘電路,用

26、于產(chǎn)生整個(gè)單片機(jī)運(yùn)行的脈沖時(shí)序,但8051單片機(jī)需外置振蕩電容。</p><p>  單片機(jī)的結(jié)構(gòu)有兩種類型,一種是程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器分開(kāi)的形式,即哈佛(Harvard)結(jié)構(gòu),另一種是采用通用計(jì)算機(jī)廣泛使用的程序存儲(chǔ)器與數(shù)據(jù)存儲(chǔ)器合二為一的結(jié)構(gòu),即普林斯頓(Princeton)結(jié)構(gòu)。INTEL的 MCS-51系列單片機(jī)采用的是哈佛結(jié)構(gòu)的形式,而后續(xù)產(chǎn)品16位的MCS-96系列單片機(jī)則采用普林斯頓結(jié)構(gòu)。<

27、;/p><p><b>  2.4 矩陣鍵盤</b></p><p>  鍵盤是單片機(jī)系統(tǒng)中最常用的人機(jī)對(duì)話輸入設(shè)備,用戶通過(guò)鍵盤向單片機(jī)輸入數(shù)據(jù)或指令。鍵盤控制程序需完成的任務(wù)有:監(jiān)測(cè)是否有鍵按下,有鍵按下時(shí),若無(wú)硬件去抖動(dòng)電路時(shí),應(yīng)用軟件延時(shí)方法消除按鍵抖動(dòng)影響;當(dāng)有多個(gè)鍵同時(shí)按下時(shí),只處理一個(gè)按鍵,不管一次按鍵持續(xù)多長(zhǎng)時(shí)間,僅執(zhí)行一次按鍵功能程序。</p>

28、;<p>  矩陣按鍵掃描程序是一種節(jié)省I/O口的方法,按鍵數(shù)目越多節(jié)省I/O口就越可觀,思路:先判斷某一列(行)是否有按鍵按下,再判斷該行(列)是哪一只鍵按下。但是,在程序的寫法上,采用了最簡(jiǎn)單的方法,使得程序效率最高。本程序中,如果檢測(cè)到某鍵按下了,就不再檢測(cè)其它的按鍵,這完全能滿足絕大多數(shù)需要,又能節(jié)省大量的CPU時(shí)間。</p><p>  2.5 計(jì)算器設(shè)計(jì)思路</p><

29、;p>  根據(jù)功能和指示要求,本系統(tǒng)選用以MCS-51單片機(jī)為主控機(jī)。通過(guò)擴(kuò)展必要的外圍接口電路,實(shí)現(xiàn)對(duì)計(jì)算器的設(shè)計(jì)。</p><p><b>  具體設(shè)計(jì)如下:</b></p><p> ?。?)由于要設(shè)計(jì)的是簡(jiǎn)單的計(jì)算器,可以進(jìn)行四則運(yùn)算,為了得到教好的顯示效果,采用LCD顯示數(shù)據(jù)和結(jié)果。</p><p>  (2) 另外鍵盤包括數(shù)字

30、鍵(0-9)、符號(hào)鍵(+、-、*、/)、清除鍵和等號(hào)鍵,故只需要16個(gè)按鍵即可,設(shè)計(jì)中采用集成的計(jì)算機(jī)鍵盤。</p><p>  (3) LED開(kāi)始顯示零,等待輸入數(shù)值,當(dāng)輸入第一個(gè)數(shù)字,LED顯示輸入值,當(dāng)輸入+、-、*、/運(yùn)算符后,LED顯示0,輸入第二個(gè)數(shù)字,LED顯示第二個(gè)輸入數(shù)字,按“=” 就會(huì)在LED上顯示運(yùn)算結(jié)果。</p><p> ?。?)由于只進(jìn)行整數(shù)運(yùn)算,當(dāng)計(jì)算9

31、47;4結(jié)果只顯示整數(shù)部分,即結(jié)果只顯示2。</p><p> ?。?)計(jì)算最大數(shù)字為255,當(dāng)輸入256時(shí),將顯示0。</p><p>  第三章 硬件系統(tǒng)設(shè)計(jì)</p><p>  硬件系統(tǒng)是指構(gòu)成微機(jī)系統(tǒng)的實(shí)體和裝置,通常由運(yùn)算器、控制器、存儲(chǔ)器、輸入接口電路和輸入設(shè)備、輸出接口電路和輸出設(shè)備等組成。單片機(jī)實(shí)質(zhì)上是一個(gè)硬件的芯片,在實(shí)際應(yīng)用中,通常很難直接和被控

32、對(duì)象進(jìn)行電氣連接,必須外加各種擴(kuò)展接口電路、外部設(shè)備、被控對(duì)象等硬件和軟件,才能構(gòu)成一個(gè)單片機(jī)應(yīng)用系統(tǒng)。本設(shè)計(jì)選用以AT89S51單片機(jī)為主控單元。顯示部分:采用LCD靜態(tài)顯示。按鍵部分,采用4*4鍵盤。 硬件電路原理圖如圖3-1所示:</p><p>  圖3-1 硬件電路原理圖</p><p>  3.1 鍵盤接口電路</p><p>  計(jì)算機(jī)輸入數(shù)字和其他功

33、能按鍵時(shí)要用到很多按鍵,在這種情況下,編程會(huì)很簡(jiǎn)單,但是會(huì)占用大量的I/O口資源,因此在很多情況下都不采用這樣的方式,而是采用矩陣鍵盤的方式。矩陣鍵盤采用四條I/O線作為行線,四條I/O線作為列線組成鍵盤,在行線和列線的每個(gè)交叉點(diǎn)上設(shè)置一個(gè)按鍵。這樣鍵盤上按鍵的數(shù)量就為4*4個(gè)。這樣行列式鍵盤結(jié)構(gòu)能有效的提高單片機(jī)系統(tǒng)中I/O口的利用率。</p><p>  計(jì)算器的鍵盤布局:一般有16個(gè)鍵組成,在單片機(jī)中正好有

34、一個(gè)P端口實(shí)現(xiàn)16個(gè)按鍵功能,這種形式在單片機(jī)系統(tǒng)中最常用。</p><p>  3.2 LED顯示模塊</p><p>  發(fā)光二極管LED是單片機(jī)應(yīng)用中簡(jiǎn)單而常用的輸出設(shè)備,其在系統(tǒng)中的主要作用是顯示單片機(jī)的輸出數(shù)據(jù)、狀態(tài)等。因而作為典型的外圍設(shè)備,LED顯示單元是反映系統(tǒng)輸出和操作輸入的有效器件。LED具備數(shù)字接口可以方便的和系統(tǒng)連接。</p><p><

35、;b>  3.3 運(yùn)算模塊</b></p><p>  MCS-51單片機(jī)是在一塊芯片中集成了CPU、RAM、ROM、定時(shí)器/計(jì)數(shù)器和多功能I/O等計(jì)算機(jī)所需要的基本功能部件。如果按功能劃分,它由以下功能部件組成,即微處理器(CPU),數(shù)據(jù)存儲(chǔ)器(RAM),程序存儲(chǔ)器(ROM/EPROM),并行I/O口,串行口,定時(shí)器/計(jì)數(shù)器,中斷系統(tǒng)及特殊功能寄存器(SFR)。單片機(jī)是靠程序運(yùn)行的,并且可以修

36、改。通過(guò)不同的程序?qū)崿F(xiàn)不同的功能,尤其是特殊的一些功能,通過(guò)使用單片機(jī)編寫的程序可以實(shí)現(xiàn)高智能、高效率以及高可靠性,因此采用單片機(jī)作為計(jì)算器的主要功能部件,可以很快的實(shí)現(xiàn)運(yùn)算功能。</p><p><b>  第四章 軟件設(shè)計(jì)</b></p><p>  4.1 C語(yǔ)言的特點(diǎn)</p><p>  本設(shè)計(jì)是硬件電路和軟件編程相結(jié)合的設(shè)計(jì)方案,選擇

37、的編程語(yǔ)言是C語(yǔ)言。C語(yǔ)言語(yǔ)言簡(jiǎn)潔,使用方便,靈活,運(yùn)算豐富,表達(dá)化類型多樣化,數(shù)據(jù)結(jié)構(gòu)類型豐富,具有結(jié)構(gòu)化的控制語(yǔ)句,程序設(shè)計(jì)自由度大,有很好的可重用性,可移植性等特點(diǎn)。</p><p>  4.2 鍵盤掃描程序設(shè)計(jì)</p><p>  鍵掃程序的過(guò)程為:開(kāi)始時(shí),先判斷是否有鍵閉合,無(wú)鍵閉合時(shí),返回繼續(xù)判斷,有鍵閉合時(shí),先去抖動(dòng),然后確定是否有鍵按下,若無(wú)鍵按下,則返回繼續(xù)判斷是否有鍵閉

38、合,若有鍵按下,則判斷鍵號(hào),然后釋放,若釋放按鍵完畢,則返回,若沒(méi)有釋放按鍵,則返回繼續(xù)釋放。其流程圖如圖所示。</p><p>  4.3 算術(shù)運(yùn)算程序設(shè)計(jì)</p><p>  首先初始化參數(shù),送LED低位顯示“0”,高位不顯示。然后掃描鍵盤看是否有鍵盤輸入,若有,讀取鍵碼。判斷鍵碼是數(shù)字鍵、清零鍵還是功能鍵(+ - * ∕=)),是數(shù)值鍵則送LED顯示并保存數(shù)值,是清零鍵則做清零處理,

39、是功能鍵就判斷是“=”還是運(yùn)算鍵,若是“=”則計(jì)算出最后結(jié)果并送LED顯示,若是運(yùn)算鍵則保存相對(duì)運(yùn)算程序的首地址。運(yùn)算程序框圖如圖所示:</p><p>  4.4 顯示程序設(shè)計(jì)</p><p>  LED開(kāi)始顯示零,等待輸入數(shù)值,當(dāng)輸入第一個(gè)數(shù)字,LED顯示輸入值,當(dāng)輸入+、-、*、/運(yùn)算符后,LED顯示0,輸入第二個(gè)數(shù)字,LED顯示第二個(gè)輸入數(shù)字,按“=” 就會(huì)在LED上顯示運(yùn)算結(jié)果。

40、</p><p>  第五章 系統(tǒng)調(diào)試與存在的問(wèn)題</p><p><b>  5.1 軟件調(diào)試</b></p><p>  軟件調(diào)試一般分為以下四個(gè)階段:</p><p>  (1)編寫程序并檢查;</p><p><b> ?。?)編寫源程序;</b></p>

41、<p> ?。?)進(jìn)行編譯生成可執(zhí)行程序。</p><p>  在本次調(diào)試中出現(xiàn)的問(wèn)題有:</p><p> ?。?)在程序中有的函數(shù)名未定義;</p><p> ?。?)在抄錄程序時(shí),少錄入一些字符,如:“;”、“{”、“-”等符號(hào),而出現(xiàn)錯(cuò)誤;</p><p> ?。?)有一些函數(shù)名錄入時(shí)少寫一個(gè)字母或順序顛倒;</p

42、><p>  (4)沒(méi)有注意函數(shù)名的調(diào)用及定義;</p><p>  (5)芯片引腳定義出錯(cuò)而導(dǎo)致沒(méi)有實(shí)驗(yàn)現(xiàn)象。</p><p>  在軟件調(diào)試過(guò)程中,對(duì)出現(xiàn)的錯(cuò)誤進(jìn)行了認(rèn)真的分析和修改,多次調(diào)試成功后,能夠很好的達(dá)到既定的設(shè)計(jì)效果。</p><p><b>  5.2 硬件調(diào)試</b></p><p&g

43、t;  在AT89C51中載入編寫好的程序,運(yùn)行電路,觀察是否執(zhí)行命令,運(yùn)算結(jié)果是否正確。如果不正確,檢查電路、修改程序,反復(fù)磨合,最終得到理想結(jié)果。</p><p><b>  總 結(jié)</b></p><p>  我的題目是簡(jiǎn)易計(jì)算器的設(shè)計(jì),對(duì)于我們這些實(shí)踐中的新手來(lái)說(shuō),這是一次考驗(yàn)。怎樣才能找到課堂所學(xué)與實(shí)際應(yīng)用的最佳結(jié)合點(diǎn),怎樣讓自己的業(yè)余更接近專業(yè),怎樣讓自己

44、的計(jì)劃更具有序性,而不會(huì)忙無(wú)一用,這都是我們所要考慮和努力的。這次課程設(shè)計(jì)我學(xué)到很多很多的東西,學(xué)會(huì)了怎么樣去制定計(jì)劃,怎么樣去實(shí)現(xiàn)這個(gè)計(jì)劃,并掌握了在執(zhí)行過(guò)程中怎么樣去克服心理上的不良情緒。不僅鞏固了以前所學(xué)過(guò)的知識(shí),而且學(xué)到了很多在書本上沒(méi)有學(xué)到過(guò)的知識(shí),掌握了一種系統(tǒng)的研究方法,可以進(jìn)行一些簡(jiǎn)單的編程。通過(guò)這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出

45、結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。同時(shí)在設(shè)計(jì)的過(guò)程中發(fā)現(xiàn)了自己的不足之處,例如對(duì)以前所學(xué)過(guò)的知識(shí)理解得不夠深刻,掌握得不夠牢固,對(duì)C語(yǔ)言掌握得不夠好等。在這里真誠(chéng)地對(duì)所有關(guān)心我、幫助我、鼓勵(lì)我的老師和同學(xué)們。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1]徐愛(ài)鈞.智能化測(cè)量控制儀表原理與設(shè)計(jì)(第二版).北京

46、航天航空大學(xué)出版社,2004.9 </p><p>  [2]孫育才等.MCS-51系列單片微型計(jì)算機(jī)及其應(yīng)用(第4版).東南大學(xué)出版社,2004.3</p><p>  [3]李萍等.智能儀器實(shí)驗(yàn)指導(dǎo)書.大連交通大學(xué),2007.9</p><p>  [4]單片機(jī)應(yīng)用技術(shù)(C語(yǔ)言).中國(guó)勞動(dòng)社會(huì)保障出版社,2006.6</p><p>  

47、[5]武慶生,仇梅等著.單片機(jī)原理與應(yīng)用.電子科技大學(xué)出版,1998.12 </p><p>  [6]朱定華著.單片機(jī)原理與接口技術(shù).電子工業(yè)出版社,2001.4 [7]王宜懷,劉曉升等著.嵌入式應(yīng)用技術(shù)基礎(chǔ)教程.北京清華大學(xué)出版社,2005.7 </p><p>  [8]王威著.HCS12微控制器原理及應(yīng)用.北京航空航天大學(xué)出版社,2007.10 </p><p&

48、gt;  [9]龔運(yùn)新著.單片機(jī)C語(yǔ)言開(kāi)發(fā)技術(shù).北京清華大學(xué)出版社,2006.10 </p><p>  [10]周立功.單片機(jī)實(shí)驗(yàn)與實(shí)踐.北京航空航天大學(xué)出版社,2004.3</p><p><b>  附錄一C語(yǔ)言源程序</b></p><p><b>  主函數(shù):</b></p><p>  

49、#include<reg51.h></p><p>  #include<intrins.h></p><p>  #include"key.h"</p><p>  #include"display.h"</p><p>  unsigned char tempdata[6]=

50、{11,11,11,11,11,11},temp[6];</p><p>  bit firstflag;</p><p>  void main(void) </p><p><b>  {</b></p><p>  unsigned char keynum,i,sign,a,b;</p>

51、<p><b>  while(1)</b></p><p><b>  {</b></p><p>  keynum=KeyPro();</p><p>  if(keynum!=0xff)</p><p><b>  {</b></p><p&

52、gt;  if((keynum=='+')||(keynum=='-')||(keynum=='*')||(keynum=='/')||(keynum=='=')||(keynum=='c'))</p><p><b>  {</b></p><p><b>  

53、i=0;</b></p><p>  if(firstflag==0)</p><p><b>  {</b></p><p>  firstflag=1;</p><p><b>  } </b></p><p>  for(i=0;i<6;i++)&l

54、t;/p><p>  temp[i]=0;</p><p><b>  i=0;</b></p><p>  if(keynum!='=')</p><p><b>  {</b></p><p>  sign=keynum;</p><p&g

55、t;  if(sign=='c')</p><p><b>  {</b></p><p><b>  a=b=0;</b></p><p><b>  sign=0;</b></p><p>  firstflag=0;</p><p>

56、;<b>  i=0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p&g

57、t;  firstflag=0;</p><p>  switch(sign)</p><p><b>  {</b></p><p>  case'+':a=a+b;break;</p><p>  case'-':a=a-b;break;</p><p>  c

58、ase'*':a=a*b;break;</p><p>  case'/':a=a/b;break;</p><p>  default:break;</p><p><b>  }</b></p><p><b>  b=0;</b></p><

59、p><b>  }</b></p><p><b>  }</b></p><p>  else if(i<6)</p><p><b>  {</b></p><p>  if((i==1)&&temp[0]=='0')</

60、p><p><b>  {</b></p><p>  temp[0]=keynum-'0';</p><p><b>  i=0;</b></p><p><b>  }</b></p><p><b>  else</b&

61、gt;</p><p><b>  {</b></p><p>  temp[i]=keynum-'0';</p><p>  if(firstflag==0)</p><p>  a=a*10+temp[i];</p><p><b>  else</b>&

62、lt;/p><p>  b=b*10+temp[i];</p><p><b>  i++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p&g

63、t;<p>  if(firstflag==0)</p><p><b>  {</b></p><p>  tempdata[3]=a/100;</p><p>  tempdata[4]=a/10%10;</p><p>  tempdata[5]=a%10;</p><p>&

64、lt;b>  if(a<100)</b></p><p>  tempdata[3]=11;</p><p><b>  if(a<10)</b></p><p><b>  {</b></p><p>  tempdata[4]=11;</p><

65、p>  tempdata[3]=11;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  

66、tempdata[3]=b/100;</p><p>  tempdata[4]=b/10%10;</p><p>  tempdata[5]=b%10;</p><p><b>  if(b<100)</b></p><p>  tempdata[3]=11;</p><p><b&

67、gt;  if(b<10)</b></p><p><b>  {</b></p><p>  tempdata[4]=11;</p><p>  tempdata[3]=11;</p><p><b>  }</b></p><p><b>  

68、}</b></p><p>  display(tempdata);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  鍵盤掃描函數(shù):</b></p><p>  #ifndef _

69、_KEY_H__</p><p>  #define __KEY_H__</p><p>  #define KeyPort P3</p><p>  /*------------------------------------------------</p><p>  將跳線帽套在J5的BIN針上</p><p>

70、  獨(dú)立按鍵掃描函數(shù),返回掃描鍵值</p><p>  左邊一列從上向下對(duì)應(yīng)P30,P31,P32,P33</p><p>  分別是0,1,2,3號(hào)鍵</p><p>  ------------------------------------------------*/</p><p>  void delay50us(unsigned

71、int t) //50us 延時(shí)</p><p><b>  {</b></p><p>  unsigned char j; </p><p>  for(;t>0;t--) </p><p>  for(j=19;j>0;j--) </p><p><b>  

72、;</b></p><p><b>  }</b></p><p>  unsigned char KeyScan(void) //鍵盤掃描函數(shù),使用行列逐級(jí)掃描法</p><p><b>  {</b></p><p>  unsigned char Val;</p>

73、<p>  KeyPort=0xf0;//高四位置高,低四位拉低</p><p>  if(KeyPort!=0xf0)//表示有按鍵按下</p><p><b>  {</b></p><p>  delay50us(200); //去抖</p><p>  if(KeyPort!=0xf0)</p&

74、gt;<p>  { //表示有按鍵按下</p><p>  KeyPort=0xfe; //檢測(cè)第一行</p><p>  if(KeyPort!=0xfe)</p><p><b>  {</b></p><p>  Val=KeyPort&0xf0;</p>

75、<p>  Val+=0x0e;</p><p>  while(KeyPort!=0xfe);</p><p>  delay50us(200); //去抖</p><p>  while(KeyPort!=0xfe);</p><p>  return Val;</p><p><b>  }&

76、lt;/b></p><p>  KeyPort=0xfd; //檢測(cè)第二行</p><p>  if(KeyPort!=0xfd)</p><p><b>  {</b></p><p>  Val=KeyPort&0xf0;</p><p>  Val+=0x0d;</p&

77、gt;<p>  while(KeyPort!=0xfd);</p><p>  delay50us(200); //去抖</p><p>  while(KeyPort!=0xfd);</p><p>  return Val;</p><p><b>  }</b></p><p&g

78、t;  KeyPort=0xfb; //檢測(cè)第三行</p><p>  if(KeyPort!=0xfb)</p><p><b>  {</b></p><p>  Val=KeyPort&0xf0;</p><p>  Val+=0x0b;</p><p>  while(KeyPor

79、t!=0xfb);</p><p>  delay50us(200); //去抖</p><p>  while(KeyPort!=0xfb);</p><p>  return Val;</p><p><b>  }</b></p><p>  KeyPort=0xf7; //檢測(cè)第四行<

80、;/p><p>  if(KeyPort!=0xf7)</p><p><b>  {</b></p><p>  Val=KeyPort&0xf0;</p><p>  Val+=0x07;</p><p>  while(KeyPort!=0xf7);</p><p&g

81、t;  delay50us(200); //去抖</p><p>  while(KeyPort!=0xf7);</p><p>  return Val;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  

82、}</b></p><p>  return 0xff;</p><p><b>  }</b></p><p>  unsigned char KeyPro(void)</p><p><b>  {</b></p><p>  switch(KeyScan()

83、)</p><p><b>  {</b></p><p>  case 0xbe:return '9';break;//4 9</p><p>  case 0xbd:return '6';break;//5 6</p><p>  case 0xbb:return '3&#

84、39;;break;//6 3</p><p>  case 0xde:return '8';break;//8 8</p><p>  case 0xdd:return '5';break;//9 5</p><p>  case 0xdb:return '2';break;//a 2</p>

85、<p>  case 0xd7:return '0';break;//b 0</p><p>  case 0xee:return '7';break;//c 7</p><p>  case 0xed:return '4';break;//d 4</p><p>  case 0xeb:return

86、'1';break;//e 1</p><p>  case 0xe7:return 'c';break;//f c</p><p>  case 0x7e:return '/';break;//0 按下相應(yīng)的鍵顯示相對(duì)應(yīng)的碼值 /</p><p>  case 0x7d:return '*';

87、break;//1 x</p><p>  case 0x7b:return '-';break;//2 - </p><p>  case 0x77:return '+';break;//3 + </p><p>  case 0xb7:return '=';break;//7 =</p&g

88、t;<p>  default:return 0xff;break;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  #endif</b></p><p><b>  數(shù)碼管輸出函數(shù):</

89、b></p><p>  #ifndef __DISPLAY_H__</p><p>  #define __DISPLAY_H__</p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  //0

90、 1 2 3 4 5 6 7 8 9- 滅 _</p><p>  unsigned char code DuanMa[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0xf7,0xab,0x8e};//共陽(yáng) </p><p>  unsigned c

91、har code WeiMa[]={0x01,0x02,0x04,0x08,0x10,0x20};//分別對(duì)應(yīng)相應(yīng)的數(shù)碼管點(diǎn)亮,即位碼 </p><p>  #define DataPort P0 //定義數(shù)據(jù)端口 程序中遇到DataPort 則用P0替換</p><p>  void delay_50us(uint t) //50us 延時(shí) </p><p>

92、<b>  {</b></p><p>  uchar j; </p><p>  for(;t>0;t--) </p><p>  for(j=19;j>0;j--) </p><p><b>  ;</b></p><p><b>  }<

93、;/b></p><p>  void SEG_Latch(void) //段碼鎖存子程序 </p><p><b>  {</b></p><p><b>  P2|=0x01;</b></p><p><b>  _nop_();</b></p>&

94、lt;p>  P2&= 0xfe;</p><p><b>  }</b></p><p>  void BIT_Latch(void) //位碼鎖存子程序 </p><p><b>  {</b></p><p>  P2|= 0x02; //P2.7~P2.5=110,Y6=

95、0,Y6C=1,即U8的LE=1,位碼數(shù)據(jù)選通 </p><p><b>  _nop_();</b></p><p>  P2&= 0xfd; //P2.7~P2.5=000,Y6=1,Y6C=0,即U8的LE=0,位碼數(shù)據(jù)被鎖存 </p><p><b>  }</b></p><p&g

96、t;  void display(uchar *point)</p><p><b>  {</b></p><p>  unsigned char i=0;</p><p>  for(i=0;i<6;i++)</p><p><b>  {</b></p><p>

97、  DataPort=WeiMa[i];</p><p>  BIT_Latch();</p><p>  DataPort=DuanMa[*(point+i)]; //取顯示數(shù)據(jù),段碼 </p><p>  SEG_Latch();</p><p>  delay_50us(20); // 掃描間隙延時(shí),時(shí)間太長(zhǎng)會(huì)閃爍,太短不亮

98、 </p><p>  DataPort=0xff; //關(guān)顯示,消除重影 </p><p>  SEG_Latch();</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  #endif</b>

溫馨提示

  • 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ù)僅提供信息存儲(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)論