2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

2、 </p><p>  班 級 </p><p>  學(xué) 生 姓 名 </p><p>  學(xué) 號 </p><p>  地 點

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

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

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

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

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

8、p>  附錄一C語言源程序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>  計算機在人們的日常生活中是比較常見的電子產(chǎn)品之一??墒撬€在發(fā)展之中,以后必將出現(xiàn)功能更加強大的計算器,基于這樣的理念,本次設(shè)計是用單片機設(shè)計計算器。該設(shè)計系統(tǒng)是以AT89C51單片機為核心,外接矩陣鍵盤,通過鍵盤掃描輸入數(shù)據(jù),經(jīng)過單片機執(zhí)行處理,再由LED數(shù)碼管作為顯示輸出,軟件程序用C語言編寫,具有較好的移植

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

47、[5]武慶生,仇梅等著.單片機原理與應(yīng)用.電子科技大學(xué)出版,1998.12 </p><p>  [6]朱定華著.單片機原理與接口技術(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]龔運新著.單片機C語言開發(fā)技術(shù).北京清華大學(xué)出版社,2006.10 </p><p>  [10]周立功.單片機實驗與實踐.北京航空航天大學(xué)出版社,2004.3</p><p><b>  附錄一C語言源程序</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、  獨立按鍵掃描函數(shù),返回掃描鍵值</p><p>  左邊一列從上向下對應(yīng)P30,P31,P32,P33</p><p>  分別是0,1,2,3號鍵</p><p>  ------------------------------------------------*/</p><p>  void delay50us(unsigned

71、int t) //50us 延時</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ù),使用行列逐級掃描法</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; //檢測第一行</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; //檢測第二行</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; //檢測第三行</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; //檢測第四行<

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)的鍵顯示相對應(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};//共陽 </p><p>  unsigned c

91、har code WeiMa[]={0x01,0x02,0x04,0x08,0x10,0x20};//分別對應(yīng)相應(yīng)的數(shù)碼管點亮,即位碼 </p><p>  #define DataPort P0 //定義數(shù)據(jù)端口 程序中遇到DataPort 則用P0替換</p><p>  void delay_50us(uint t) //50us 延時 </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); // 掃描間隙延時,時間太長會閃爍,太短不亮

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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論