2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩26頁(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>  目錄</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è)計(jì)2</b></p><p>  1.1 選題背景2</p><p>  1.2 計(jì)算器介紹2</p><p>  1.2.1 基本結(jié)構(gòu)2</p><p>  1.2.2 計(jì)算器的特點(diǎn)2</p><p>  1.3 簡(jiǎn)易計(jì)算器的設(shè)計(jì)目標(biāo)及任務(wù)2</p><p&

3、gt;<b>  2 系統(tǒng)設(shè)計(jì)3</b></p><p>  2.1 系統(tǒng)整體設(shè)計(jì)3</p><p>  2.2 系統(tǒng)硬件設(shè)計(jì)3</p><p>  2.2.1 單片機(jī)最小系統(tǒng)3</p><p>  2.2.2 液晶顯示接口電路5</p><p>  2.2.3 矩陣鍵盤(pán)電路5<

4、/p><p>  2.2.4 總體電路連接圖6</p><p>  2.3 系統(tǒng)軟件設(shè)計(jì)7</p><p>  2.3.1鍵盤(pán)輸入模塊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)試與存在的問(wèn)題11</p><p>  3.3.1 硬件調(diào)試問(wèn)題11</p><p>  3.3.2 軟件調(diào)試問(wèn)題11</p>

6、<p><b>  4 總結(jié)12</b></p><p><b>  參考文獻(xiàn)13</b></p><p><b>  附錄14</b></p><p><b>  單片機(jī)原理與應(yīng)用</b></p><p><b>  課程設(shè)計(jì)

7、報(bào)告</b></p><p>  2015年9月 日</p><p>  單片機(jī)原理與應(yīng)用課程設(shè)計(jì)任務(wù)書(shū)</p><p>  單片機(jī)原理與應(yīng)用課程設(shè)計(jì)評(píng)閱表</p><p>  注:課程設(shè)計(jì)等級(jí):優(yōu)秀(90-100),良好(80-89),中等(70-79),及格(60-69),不及格(60分以下)。</p>&l

8、t;p><b>  簡(jiǎn)易計(jì)算器的設(shè)計(jì)</b></p><p>  物聯(lián)網(wǎng)工程專(zhuān)業(yè)學(xué)生 曹中 李婷婷 李文婧</p><p>  指導(dǎo)老師 黃勇堅(jiān)</p><p>  摘要:本設(shè)計(jì)是基于51系列的單片機(jī)進(jìn)行的十進(jìn)制計(jì)算器系統(tǒng)設(shè)計(jì),可以完成計(jì)算器的鍵盤(pán)輸入,進(jìn)行加、減、乘、除3位無(wú)符號(hào)數(shù)字的簡(jiǎn)單四則運(yùn)算,并在LED上相應(yīng)的顯示結(jié)果

9、。設(shè)計(jì)過(guò)程在硬件與軟件方面進(jìn)行同步設(shè)計(jì)。硬件方面從功能考慮,主要組成部分包括:鍵盤(pán)輸入模塊、運(yùn)算模塊、控制模塊、顯示模塊。通過(guò)鍵盤(pán)輸入數(shù)值單片機(jī)進(jìn)行運(yùn)算后送往LED顯示器顯示。首先選擇內(nèi)部存儲(chǔ)資源豐富的AT89C51單片機(jī),輸入采用4×4矩陣鍵盤(pán)。顯示采用LED12864顯示。軟件方面從分析計(jì)算器功能、流程圖設(shè)計(jì),再到程序的編寫(xiě)進(jìn)行系統(tǒng)設(shè)計(jì)。針對(duì)計(jì)算器四則運(yùn)算算法特別是乘法和除法運(yùn)算的實(shí)現(xiàn),采用C語(yǔ)言進(jìn)行編程,并用Proteu

10、s仿真。</p><p>  關(guān)鍵字:?jiǎn)纹瑱C(jī) 矩陣鍵盤(pán) LED顯示器 C語(yǔ)言</p><p>  The Design of Simple Calculator</p><p>  Student majoring in The Internet of things engineering</p><p>  Cao Zhong Li Ti

11、ngting Li Wenjing</p><p>  Tutor Hong Yongjian</p><p>  Abstract:This design is based on 51 series microcontroller for decimal calculator system design, can complete the calculator keyboard

12、 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 software design process synchronization design. From

13、a functional hardware, main components include: keyboard input module, calculation module, control module, display module. Through the keyboard inp</p><p>  Keywords: Microcontroller;Matrix Keyboar

14、d; LED display; C language</p><p><b>  1 任務(wù)設(shè)計(jì)</b></p><p><b>  1.1 選題背景</b></p><p>  當(dāng)今社會(huì),隨著人們物質(zhì)生活的不斷提高,電子產(chǎn)品已經(jīng)走進(jìn)了家家戶戶,無(wú)論是生活或?qū)W習(xí),還是娛樂(lè)和消遣幾乎樣樣都離不開(kāi)電

15、子產(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è)重要分支,也是頗

16、具生命力的機(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>  1.

17、2 計(jì)算器介紹</b></p><p>  1.2.1 基本結(jié)構(gòu)</p><p>  計(jì)算器一般由運(yùn)算器、控制器、存儲(chǔ)器、鍵盤(pán)、顯示器、電源和一些可選外圍設(shè)備及電子配件通過(guò)人工或機(jī)器設(shè)備組成。低檔計(jì)算器的運(yùn)算器、控制器由數(shù)字邏輯電路實(shí)現(xiàn)簡(jiǎn)單的串行運(yùn)算,其隨機(jī)存儲(chǔ)器只有一、二個(gè)單元,供累加存儲(chǔ)用。高檔計(jì)算器由微處理器和只讀存儲(chǔ)器實(shí)現(xiàn)各種復(fù)雜的運(yùn)算程序,有較多的隨機(jī)存儲(chǔ)單元以存放輸

18、入程序和數(shù)據(jù)。鍵盤(pán)是計(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)體集成電路),并在內(nèi)部裝有定時(shí)不操作自動(dòng)斷電電路。計(jì)算器可選用的外圍設(shè)備有微型

19、打印機(jī)、盒式磁帶機(jī)和磁卡機(jī)等。</p><p>  本計(jì)算器是以MCS-51系列8051單片機(jī)為核心構(gòu)成的簡(jiǎn)易計(jì)算器系統(tǒng)。該系統(tǒng)通過(guò)單片機(jī)控制,實(shí)現(xiàn)對(duì)4*4鍵盤(pán)掃描進(jìn)行實(shí)時(shí)的按鍵檢測(cè),并把檢測(cè)數(shù)據(jù)存儲(chǔ)下來(lái)。整個(gè)計(jì)算器系統(tǒng)的工作過(guò)程為:首先存儲(chǔ)單元初始化,顯示初始值和鍵盤(pán)掃描,判斷按鍵位置,查表得出按鍵值,單片機(jī)則對(duì)數(shù)據(jù)進(jìn)行儲(chǔ)存與相應(yīng)處理轉(zhuǎn)換,之后送入LED顯示器動(dòng)態(tài)顯示。整個(gè)系統(tǒng)可分為三個(gè)主要功能模塊:功能模塊一

20、,實(shí)時(shí)鍵盤(pán)掃描;功能模塊二,數(shù)據(jù)轉(zhuǎn)換成顯示器顯示;功能模塊三,顯示器動(dòng)態(tài)顯示。</p><p>  1.2.2 計(jì)算器的特點(diǎn)</p><p>  (1)運(yùn)算的速度很能高。 </p><p><b> ?。?)記憶力很強(qiáng)。</b></p><p> ?。?)有邏輯判斷能力。 </p>&l

21、t;p> ?。?)能夠自動(dòng)控制。 </p><p> ?。?)有較好的通用性。</p><p>  1.3 簡(jiǎn)易計(jì)算器的設(shè)計(jì)目標(biāo)及任務(wù)</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ì)的能力的目標(biāo)。</p&

22、gt;<p>  通過(guò)本次設(shè)計(jì)的訓(xùn)練,可以使我在基本思路和基本方法上對(duì)基于MCS-51單片機(jī)的嵌入式系統(tǒng)設(shè)計(jì)有一個(gè)比較感性的認(rèn)識(shí),并具備一定程度的設(shè)計(jì)能力。</p><p>  現(xiàn)實(shí)生活中人們熟知的計(jì)算器,其功能主要如下:</p><p><b>  (1) 鍵盤(pán)輸入;</b></p><p> ?。?) 數(shù)值顯示; </p

23、><p> ?。?) 加、減、乘、除四則運(yùn)算;</p><p> ?。?)對(duì)錯(cuò)誤的控制及提示;</p><p>  針對(duì)上述功能,計(jì)算器軟件程序要完成以下模塊的設(shè)計(jì):</p><p>  (1)鍵盤(pán)輸入檢測(cè)模塊</p><p> ?。?) LCD顯示模塊;</p><p> ?。?) 算術(shù)運(yùn)算模塊&

24、lt;/p><p> ?。?) 錯(cuò)誤處理及提示模塊。</p><p><b>  2 系統(tǒng)設(shè)計(jì)</b></p><p><b>  2.1系統(tǒng)整體設(shè)計(jì)</b></p><p>  系統(tǒng)開(kāi)始工作后,先由鍵盤(pán)輸入鍵值,控制模塊對(duì)鍵值進(jìn)行檢測(cè)錄入存儲(chǔ),然后經(jīng)運(yùn)算模塊運(yùn)算后送出顯示,如圖2.1:</p

25、><p>  矩陣鍵盤(pán)輸入模塊 控制與運(yùn)算模塊 顯示模塊</p><p><b>  圖2-1</b></p><p>  本文以STC89C52單片機(jī)為主控制器、LCD1602為顯示輸出模塊、4x4矩陣鍵盤(pán)為輸入模塊,研究與設(shè)計(jì)了一個(gè)簡(jiǎn)易計(jì)算器。其整體設(shè)計(jì)框圖如圖2-1所示。</p><p>

26、  其中,單片機(jī)的P0口作為數(shù)據(jù)的輸出端口,輸出數(shù)據(jù)到LCD1602液晶顯示屏上,單片機(jī)的P2口作為其控制端口,用來(lái)控制LCD1602顯示輸出數(shù)據(jù);單片機(jī)的P1口作為數(shù)據(jù)的輸入端口,與矩陣鍵盤(pán)相連,實(shí)現(xiàn)數(shù)據(jù)的輸入。</p><p>  在系統(tǒng)設(shè)計(jì)過(guò)程中為了使硬件資源盡可能地被合理利用,系統(tǒng)模塊按照以下原則進(jìn)行設(shè)計(jì):盡量使用典型電路,使其與單片機(jī)最小系統(tǒng)容易搭接;設(shè)計(jì)完后盡量要留有相應(yīng)的余地,以便于后期修改和二次開(kāi)

27、發(fā);系統(tǒng)的各模塊之間和軟硬件間設(shè)計(jì)兼容性良好;器件選用具有一定的可靠性和抗干擾性,確保系統(tǒng)運(yùn)行質(zhì)量。 </p><p>  2.2 系統(tǒng)硬件設(shè)計(jì)</p><p>  2.2.1 單片機(jī)最小系統(tǒng)</p><p>  單片機(jī)最小系統(tǒng),或者稱為最小應(yīng)用系統(tǒng),是指用最少的元件組成的單片機(jī)可以工作的系統(tǒng).對(duì)51系列單片機(jī)來(lái)說(shuō),最小系統(tǒng)一般應(yīng)該包括:單片機(jī)、振蕩電路、復(fù)位電路

28、。</p><p><b>  (1)振蕩電路</b></p><p>  單片機(jī)是一種時(shí)序電路,即單片機(jī)是在一定的時(shí)序控制下工作的,所以必須提供工作時(shí)鐘。時(shí)鐘是時(shí)序的基礎(chǔ),單片機(jī)本身就如同一個(gè)復(fù)雜的同步時(shí)序電路,為了保證同步工作方式的實(shí)現(xiàn),電路就要在唯一的時(shí)鐘信號(hào)控制下按時(shí)序進(jìn)行工作。</p><p>  STC89C52內(nèi)部有一個(gè)用于構(gòu)成振

29、蕩器的高增益反相放大器[1],引腳RXD和TXD分別是此放大器的輸入端和輸出端。時(shí)鐘可以由內(nèi)部方式產(chǎn)生或外部方式產(chǎn)生。內(nèi)部方式的時(shí)鐘電路,在RXD和TXD引腳上外接定時(shí)元件,內(nèi)部振蕩器就產(chǎn)生自激振蕩。定時(shí)元件通常采用石英晶體和電容組成的并聯(lián)諧振回路。晶振的大小決定單片機(jī)執(zhí)行指令的速度,一般為6-12M。例如使用12M晶振,振蕩周期是1/12微秒,一個(gè)機(jī)器周期就應(yīng)該等于12*l/12微秒,也就是1微秒,那么一條雙周期指令的指令周期就是2微

30、秒[2]。電容的大小影響著振蕩器振蕩的穩(wěn)定性和起振的快速性,通常選擇10-3OP的瓷片電容或校正電容。</p><p>  外部方式的時(shí)鐘電路,RXD接地,TXD接外部振蕩器。對(duì)外部振蕩信號(hào)無(wú)特殊要求,只要求保證脈沖寬度,一般采用頻率低于12MHz的方波信號(hào)。片內(nèi)時(shí)鐘發(fā)生器把振蕩頻率兩分頻,產(chǎn)生一個(gè)兩相時(shí)鐘P1和P2,供單片機(jī)使用。</p><p>  在設(shè)計(jì)電路時(shí),我們采用內(nèi)部振蕩電路,

31、晶振和電容應(yīng)盡可能的靠近芯片,以減少CPB板的分布電容,保證振蕩器工作的穩(wěn)定性,提高系統(tǒng)的抗干擾能力[3]。</p><p><b>  (2)復(fù)位電路</b></p><p>  復(fù)位是單片機(jī)的初始化操作。其主要功能是把PC初始化為0000H,使單片機(jī)從0000H單元開(kāi)始執(zhí)行程序。除了進(jìn)入系統(tǒng)的正常初始化之外,當(dāng)由于程序運(yùn)行出錯(cuò)或操作錯(cuò)誤使系統(tǒng)處于死鎖狀態(tài)時(shí),為擺脫

32、困境,也需按復(fù)位鍵重新啟動(dòng)。</p><p>  RST引腳是復(fù)位信號(hào)的輸入端。復(fù)位信號(hào)是高電平有效,其有效時(shí)間應(yīng)持續(xù)24個(gè)振蕩周期(即二個(gè)機(jī)器周期)以上。若使用頗率為6MHz的晶振,則復(fù)位信號(hào)持續(xù)時(shí)間應(yīng)超過(guò)4us才能完成復(fù)位操作。</p><p>  按鍵手動(dòng)復(fù)位是通過(guò)使復(fù)位端經(jīng)電阻與Vcc電源接通而實(shí)現(xiàn)的,其電路如圖2-2-2所示。 </p><p>

33、  圖2-2-2按鍵手動(dòng)復(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è)計(jì)采用LCD液晶顯示器來(lái)顯示輸出數(shù)據(jù)。LCD的特性有:(1)+5V電壓,對(duì)比可調(diào)度;(2)內(nèi)含復(fù)位電路;(3)提供各種控制命令,如

34、:清屏、字符閃爍、光標(biāo)閃爍、顯示移位等多種功能;(4)有80字節(jié)顯示數(shù)據(jù)存儲(chǔ)器DDRAM;5、內(nèi)建有160個(gè)5X7點(diǎn)陣的字型的字符發(fā)生器CGROM;6、8個(gè)可由用戶自定義的5X7的字符發(fā)生器CGRAM。</p><p>  本設(shè)計(jì)通過(guò)D0-D7引腳向LCD寫(xiě)指令字或?qū)憯?shù)據(jù)以使LCD實(shí)現(xiàn)不同的功能或顯示相應(yīng)的數(shù)據(jù)。其接口電路如圖2-2-2所示。</p><p><b>  圖2-2

35、-4</b></p><p>  2.2.3 矩陣鍵盤(pán)電路</p><p>  每個(gè)按鍵都有它的行值和列值,行值和列值的組合就是識(shí)別這個(gè)按鍵的編碼。矩陣的行線和列線分別通過(guò)兩并行接口和CPU通信。鍵盤(pán)的一端(列線)通過(guò)電阻接VCC,而接地是通過(guò)程序輸出數(shù)字“0”實(shí)現(xiàn)的。鍵盤(pán)處理程序的任務(wù)是:確定有無(wú)鍵按下,判斷哪一個(gè)鍵按下,鍵的功能是什么?還要消除按鍵在閉合或斷開(kāi)時(shí)的抖動(dòng)。兩個(gè)

36、并行口中,一個(gè)輸出掃描碼,使按鍵逐行動(dòng)態(tài)接地;另一個(gè)并行口輸入按鍵狀態(tài),由行掃描值和回饋信號(hào)共同形成鍵編碼而識(shí)別按鍵,通過(guò)軟件查表,查出該鍵的功能。</p><p>  當(dāng)無(wú)按鍵閉合時(shí),P10~P13 與P14~P17 之間開(kāi)路;當(dāng)有鍵閉合時(shí),與閉合鍵相連的兩條I/O 口線之間短路。判斷有無(wú)按鍵按下的方法是:第一步,置列線P14~P17 為輸入狀態(tài),從行線P10~P13 輸出低電平,讀入列線數(shù)據(jù),若某一列線為低電

37、平,則該列線上有鍵閉合。第二步,行線輪流輸出低電平,從列線P14~P17 讀入數(shù)據(jù),若有某一列為低電平,則對(duì)應(yīng)行線上有鍵按下。綜合一二兩步的結(jié)果,可確定按鍵編號(hào)。但是鍵閉合一次只能進(jìn)行一次鍵功能操作,因此須等到按鍵釋放后,再進(jìn)行鍵功能操作,否則按一次鍵,有可能會(huì)連續(xù)多次進(jìn)行同樣的鍵操作。 </p><p><b>  圖2-2-5</b></p><p>  2.

38、2.4 總體電路連接圖</p><p><b>  焊接實(shí)物圖:</b></p><p><b>  2.3系統(tǒng)軟件設(shè)計(jì)</b></p><p>  2.3.1 鍵盤(pán)輸入模塊</p><p>  每個(gè)按鍵都有它的行值和列值,行值和列值的組合就是識(shí)別這個(gè)按鍵的編碼。矩陣的行線和列線分別通過(guò)兩并行接口和

39、CPU通信。鍵盤(pán)的一端(列線)通過(guò)電阻接VCC,而接地是通過(guò)程序輸出數(shù)字“0”實(shí)現(xiàn)的。鍵盤(pán)處理程序的任務(wù)是:確定有無(wú)鍵按下,判斷哪一個(gè)鍵按下,鍵的功能是什么?還要消除按鍵在閉合或斷開(kāi)時(shí)的抖動(dòng)。兩個(gè)并行口中,一個(gè)輸出掃描碼,使按鍵逐行動(dòng)態(tài)接地;另一個(gè)并行口輸入按鍵狀態(tài),由行掃描值和回饋信號(hào)共同形成鍵編碼而識(shí)別按鍵,通過(guò)軟件查表,查出該鍵的功能。</p><p>  當(dāng)無(wú)按鍵閉合時(shí),P10~P13 與P14~P17

40、之間開(kāi)路;當(dāng)有鍵閉合時(shí),與閉合鍵相連的兩條I/O 口線之間短路。判斷有無(wú)按鍵按下的方法是:第一步,置列線P14~P17 為輸入狀態(tài),從行線P10~P13 輸出低電平,讀入列線數(shù)據(jù),若某一列線為低電平,則該列線上有鍵閉合。第二步,行線輪流輸出低電平,從列線P14~P17 讀入數(shù)據(jù),若有某一列為低電平,則對(duì)應(yīng)行線上有鍵按下。綜合一二兩步的結(jié)果,可確定按鍵編號(hào)。但是鍵閉合一次只能進(jìn)行一次鍵功能操作,因此須等到按鍵釋放后,再進(jìn)行鍵功能操作,否則

41、按一次鍵,有可能會(huì)連續(xù)多次進(jìn)行同樣的鍵操作。</p><p>  輸入模塊流程如圖2-3-1:</p><p><b>  圖2-3-1</b></p><p>  2.3.2 控制模塊</p><p>  控制著數(shù)字錄入,數(shù)字錄入是進(jìn)行計(jì)算的前提[4],他是從矩陣鍵盤(pán)上輸入的數(shù)值、運(yùn)算符等錄入單片機(jī)處理器進(jìn)行處理,從而

42、得出運(yùn)算結(jié)果。數(shù)字錄入模塊工作流程入如圖2-3-2:</p><p>  開(kāi)始 </p><p><b>  i=0,j=0</b></p><p><b>  是</b></p><p>  按下數(shù)字鍵 j=j*10+t</p><p&g

43、t;<b>  否</b></p><p>  是 </p><p>  按下計(jì)算符號(hào)鍵 i=j,j=0</p><p>  否 </p><p><b>  否</b></p>

44、;<p><b>  按下等于號(hào)鍵</b></p><p><b>  是</b></p><p><b>  計(jì)算結(jié)果</b></p><p><b>  結(jié)束</b></p><p><b>  圖2-3-2</b>

45、</p><p>  注:其中i是第一個(gè)數(shù),j是第二個(gè)數(shù),t是鍵盤(pán)輸入的數(shù)字</p><p><b>  2.3.4顯示模塊</b></p><p>  LCD的引腳說(shuō)明如表2-3-1所示:</p><p><b>  表2-3-1</b></p><p><b>

46、;  表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軟件是英國(guó)Labcenterelectronics公司出版的EDA工具軟件。它不僅具有其它EDA工具軟件的仿真功能,還能仿真單片機(jī)及外圍器件。有原理布圖;P

47、CB自動(dòng)或人工布線;SPICE電路仿真等功能特點(diǎn)。它是目前最好的仿真單片機(jī)及外圍器件的工具。</p><p>  Keil軟件提供豐富的庫(kù)函數(shù)和功能強(qiáng)大的集成開(kāi)發(fā)調(diào)試工具,全Windows界面,可以在很短的時(shí)間內(nèi)就能學(xué)會(huì)使用keil來(lái)開(kāi)發(fā)單片機(jī)應(yīng)用程序。另外重要的一點(diǎn),只要看一下編譯后生成的匯編代碼,就能體會(huì)到Keil生成的目標(biāo)代碼效率非常之高,多數(shù)語(yǔ)句生成的匯編代碼很緊湊,容易理解。在開(kāi)發(fā)大型軟件時(shí)更能體現(xiàn)高級(jí)

48、語(yǔ)言的優(yōu)勢(shì)。仿真電路原理圖如圖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>  加法:</b></p><p><b> 

49、 減法: </b></p><p><b>  乘法: </b></p><p><b>  除法:</b></p><p><b>  圖3-2-1</b></p><p>  3.3 系統(tǒng)調(diào)試與存在的問(wèn)題</p><p>  3.3.1

50、 硬件調(diào)試問(wèn)題</p><p><b>  常見(jiàn)故障:</b></p><p>  (1)邏輯錯(cuò)誤:它是由設(shè)計(jì)錯(cuò)誤或加工過(guò)程中的工藝性錯(cuò)誤所造成的。這類(lèi)錯(cuò)誤包括錯(cuò)線、開(kāi)路、短路等。</p><p> ?。?)元器件失效:有兩方面的原因:一是器件本身已損壞或性能不符合要求;二是組裝錯(cuò)誤造成元件失效,如電解電容、集成電路安裝方向錯(cuò)誤等。</p

51、><p> ?。?)可靠性差:因其可靠性差的原因很多,如金屬化孔、接插件接觸不良會(huì)造成系統(tǒng)時(shí)好時(shí)壞,經(jīng)不起振動(dòng);走線和布局不合理也會(huì)引起系統(tǒng)可靠性差[5]。</p><p>  (4)電源故障:若樣機(jī)由電源故障,則加電后很容易造成器件損壞。電源故障包括電壓值不符合設(shè)計(jì)要求,電源引線和插座不對(duì),功率不足,負(fù)載能力差等[6]。</p><p>  調(diào)試方法:包括多級(jí)調(diào)試和聯(lián)

52、機(jī)調(diào)試。在調(diào)試過(guò)程中要針對(duì)可能出現(xiàn)的故障認(rèn)真分析,直至檢查出原因并排除。</p><p>  本次硬件調(diào)試過(guò)程中,對(duì)所出現(xiàn)的問(wèn)題進(jìn)行了認(rèn)真的分析和改正,最后能夠很好的達(dá)到設(shè)計(jì)要求的效果。</p><p>  3.3.2 軟件調(diào)試問(wèn)題</p><p>  軟件調(diào)試一般分為以下四個(gè)階段:</p><p> ?。?)編寫(xiě)程序并查錯(cuò);</p&g

53、t;<p> ?。?)在C語(yǔ)言的編譯系統(tǒng)中編譯源程序;</p><p>  (3)對(duì)程序進(jìn)行編譯連接,并及時(shí)發(fā)現(xiàn)程序中存在的錯(cuò)誤;</p><p><b>  (4)改正錯(cuò)誤。</b></p><p>  在本次調(diào)試中出現(xiàn)的問(wèn)題有:</p><p> ?。?)在程序中有的函數(shù)名未定義;</p>

54、<p> ?。?)在抄錄程序時(shí),少錄入一些字符,如:“;”、“{”、“-”等符號(hào),而出現(xiàn)錯(cuò)誤;</p><p> ?。?)有一些函數(shù)名錄入時(shí)少寫(xiě)一個(gè)字母或順序顛倒;</p><p>  (4)沒(méi)有注意函數(shù)名的調(diào)用及定義;</p><p> ?。?)芯片引腳定義出錯(cuò)而導(dǎo)致沒(méi)有實(shí)驗(yàn)現(xiàn)象。</p><p>  在軟件調(diào)試過(guò)程中,對(duì)出現(xiàn)的

55、錯(cuò)誤進(jìn)行了認(rèn)真的分析和修改,多次調(diào)試成功后,能夠很好的達(dá)到既定的設(shè)計(jì)效果。</p><p><b>  4 總結(jié)</b></p><p>  我們的題目是簡(jiǎn)易計(jì)算器的設(shè)計(jì),對(duì)于我們這些實(shí)踐中的新手來(lái)說(shuō),這是一次考驗(yàn)。怎樣才能找到課堂所學(xué)與實(shí)際應(yīng)用的最佳結(jié)合點(diǎn)?怎樣讓自己的業(yè)余更接近專(zhuān)業(yè)?怎樣讓自己的計(jì)劃更具有序性,而不會(huì)忙無(wú)一用?這都是我們所要考慮和努力的。這次課程設(shè)

56、計(jì)我學(xué)到很多很多的東西,學(xué)會(huì)了怎么樣去制定計(jì)劃,怎么樣去實(shí)現(xiàn)這個(gè)計(jì)劃,并掌握了在執(zhí)行過(guò)程中怎么樣去克服心理上的不良情緒。不僅鞏固了以前所學(xué)過(guò)的知識(shí),而且學(xué)到了很多在書(shū)本上沒(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),從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。同

57、時(shí)在設(shè)計(jì)的過(guò)程中發(fā)現(xiàn)了自己的不足之處,例如對(duì)以前所學(xué)過(guò)的知識(shí)理解得不夠深刻,掌握得不夠牢固,對(duì)C語(yǔ)言掌握得不夠好等。</p><p>  在這里真誠(chéng)地對(duì)所有關(guān)心我、幫助我、鼓勵(lì)我的老師、同學(xué)、朋友道聲:“謝謝!”</p><p><b>  參考文獻(xiàn)</b></p><p>  [1]徐愛(ài)鈞.智能化測(cè)量控制儀表原理與設(shè)計(jì)(第二版).北京航天航空

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

59、慶生,仇梅等著.單片機(jī)原理與應(yīng)用.電子科技大學(xué)出版,1998.12 </p><p>  [6]朱定華著.單片機(jī)原理與接口技術(shù).電子工業(yè)出版社,2001.4 </p><p><b>  附錄:</b></p><p>  /*-----------------------------------------------</p>

60、<p><b>  名稱:簡(jiǎn)易計(jì)算器</b></p><p>  日期:2015.10</p><p><b>  內(nèi)容:簡(jiǎn)易計(jì)算器</b></p><p>  ------------------------------------------------*/</p><p>  #in

61、clude <reg52.h></p><p>  #include <intrins.h></p><p>  #include "delay.h"</p><p>  #define uchar unsigned char </p><p>  #define uint unsigned int

62、</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;</p><p>  sbit RES = P2^5;</p>

63、<p>  sbit PSB = P2^3;</p><p>  #define DataPort P0 //MCU P0<------> LCM</p><p>  void delayss()</p><p><b>  {</b></p><p>  uint n=10000;&

64、lt;/p><p>  while(n--);</p><p><b>  }</b></p><p>  /*------------------------------------------------</p><p><b>  檢測(cè)</b></p><p>  ----

65、--------------------------------------------*/</p><p>  void Check_Busy()</p><p><b>  { </b></p><p><b>  RS=0;</b></p><p><b>  RW=1;</

66、b></p><p><b>  E=1;</b></p><p>  DataPort=0xff;</p><p>  while((DataPort&0x80)==0x80);//忙則等待</p><p><b>  E=0;</b></p><p><

67、;b>  }</b></p><p>  /*------------------------------------------------</p><p><b>  寫(xiě)命令</b></p><p>  ------------------------------------------------*/</p>

68、<p>  void Write_Cmd(unsigned char Cmd)</p><p><b>  {</b></p><p>  Check_Busy();</p><p><b>  RS=0;</b></p><p><b>  RW=0;</b>&

69、lt;/p><p><b>  E=1;</b></p><p>  DataPort=Cmd;</p><p>  DelayUs2x(5);</p><p><b>  E=0;</b></p><p>  DelayUs2x(5);</p><p>

70、<b>  }</b></p><p>  /*------------------------------------------------</p><p><b>  寫(xiě)數(shù)據(jù)</b></p><p>  ------------------------------------------------*/</p&

71、gt;<p>  void Write_Data(unsigned char Data)</p><p><b>  {</b></p><p>  Check_Busy();</p><p><b>  RS=1;</b></p><p><b>  RW=0;</b

72、></p><p><b>  E=1;</b></p><p>  DataPort=Data;</p><p>  DelayUs2x(5);</p><p><b>  E=0;</b></p><p>  DelayUs2x(5);</p><

73、;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的延時(shí)程序</p><p>  PSB=1; //設(shè)置為8BIT并口工作模式</p><p>  De

75、layMs(1); //延時(shí)</p><p>  RES=0; //復(fù)位</p><p>  DelayMs(1); //延時(shí)</p><p>  RES=1; //復(fù)位置高</p><p>  DelayMs(10);</p&g

76、t;<p>  Write_Cmd(0x30); //選擇基本指令集</p><p>  DelayUs2x(50); //延時(shí)大于100us</p><p>  Write_Cmd(0x30); //選擇8bit數(shù)據(jù)流</p><p>  DelayUs2x(20); //延時(shí)大于37us<

77、;/p><p>  Write_Cmd(0x0c); //開(kāi)顯示(無(wú)游標(biāo)、不反白)</p><p>  DelayUs2x(50); //延時(shí)大于100us</p><p>  Write_Cmd(0x01); /*清除顯示,并且設(shè)定地址指針為00H*/</p><p>  DelayMs(15);

78、 //延時(shí)大于10ms</p><p>  Write_Cmd(0x06); </p><p>  /*指定在資料的讀取及寫(xiě)入時(shí),設(shè)定游標(biāo)的移動(dòng)方向及指定顯示的移位,光標(biāo)從右向左加1位移動(dòng)*/</p><p>  DelayUs2x(50); //延時(shí)大于100us</p><p><b>  }<

79、/b></p><p>  /*------------------------------------------------</p><p><b>  顯示字符串</b></p><p>  x:橫坐標(biāo)值,范圍0~8</p><p>  y:縱坐標(biāo)值,范圍1~4</p><p>  -

80、-----------------------------------------------*/</p><p>  void LCD_PutString(unsigned char x,unsigned char y,unsigned char code *s)</p><p><b>  { </b></p><p><b> 

81、 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;</p><p>  case 3: Write_Cmd(0x88+x

82、);break;</p><p>  case 4: Write_Cmd(0x98+x);break;</p><p>  default:break;</p><p><b>  }</b></p><p>  while(*s>0)</p><p><b>  { </b

83、></p><p>  Write_Data(*s);</p><p><b>  s++;</b></p><p>  DelayUs2x(50);</p><p><b>  }</b></p><p><b>  }</b></p>

84、;<p>  /************清屏*********/</p><p>  void ClrScreen()</p><p><b>  { </b></p><p>  Write_Cmd(0x01);</p><p>  DelayMs(15);</p><p><

85、;b>  }</b></p><p>  /*------------------------------------------------</p><p><b>  主程序</b></p><p>  ------------------------------------------------*/</p>

86、<p><b>  main()</b></p><p><b>  { </b></p><p>  lint i1,j1,i,t,count,countt,ii,iii,jjj,jj=100000;//存儲(chǔ)兩個(gè)數(shù)字</p><p>  lint j=0; </p><p>  uc

87、har jx=0;//jx:第一個(gè)非零數(shù)檢測(cè)位</p><p>  uchar yue=0; //yue:四舍五入檢測(cè)位</p><p>  lint yushu=0;//余數(shù)標(biāo)志檢測(cè)</p><p>  uchar temp,fo=0x00;//讀取鍵盤(pán)數(shù)值 </p><p>  i=j=t=count=0; //i:前

88、一個(gè)數(shù)字;j:后一個(gè)數(shù)字;</p><p>  //t:按鍵輸入數(shù)字;count:計(jì)算結(jié)果 </p><p>  Init_ST7920(); //12864初始化 </p><p><b>  while(1)</b></p><p><b>  { </b></p

89、><p>  if(countt>=1000000||i>=1000000||j>=1000000)</p><p><b>  {</b></p><p>  i=j=count=fo=0;</p><p>  LCD_PutString(0,1,"eeeeeeeeeeeeeeee")

90、;</p><p>  LCD_PutString(0,2,"eeeeeeeeeeeeeeee");</p><p>  LCD_PutString(0,3,"eeeeeeeeeeeeeeee");</p><p>  LCD_PutString(0,4,"eeeeeeeeeeeeeeee"); </

91、p><p>  DelayUs2x(500);</p><p><b>  }</b></p><p>  /********鍵盤(pán)檢測(cè)*************/</p><p><b>  P1=0xf0;</b></p><p>  if(P1!=0xf0)</p>

92、;<p><b>  {</b></p><p>  delayss();</p><p>  if(P1!=0xf0)</p><p><b>  {</b></p><p><b>  temp=P1;</b></p><p><

93、b>  P1=0x0f;</b></p><p>  P1=temp|P1;</p><p>  /***********如果檢測(cè)到數(shù)字,就把值賦給j************/</p><p>  if(P1==0xee||P1==0xde||P1==0xbe||P1==0xed||P1==0xdd||P1==0xbd||P1==0xeb||P1=

94、=0xdb||P1==0xbb||P1==0xd7)</p><p><b>  {</b></p><p>  j=j*10;//j賦值 </p><p>  if(P1==0xee)t=7; //按鍵賦值給變量</p><p>  if(P1==0xde)t=8;</p><p>  if

95、(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;</p><p>  if(P1==0xdb)t=2;</p>

96、<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||P1==0xed||P1==0xdd||P1==0xbd||P1==0xeb||P1==0xdb

97、||P1==0xbb||P1==0xd7); </p><p><b>  }</b></p><p>  Write_Cmd(0x88+0);//顯示j</p><p>  for(ii=0;ii<6;ii++)</p><p><b>  { </b></p><p

98、>  if(jjj/jj!=0)jx=1;</p><p>  if(jjj/jj==0&&jx==0)Write_Data(' ');</p><p><b>  else</b></p><p>  Write_Data(jjj/jj+'0'); </p><p&

99、gt;  jjj=jjj%jj;</p><p><b>  jj=jj/10;</b></p><p><b>  }</b></p><p>  if(j==0)Write_Data('0');</p><p>  else Write_Data(' ');<

100、;/p><p><b>  jx=0;</b></p><p><b>  jjj=j;</b></p><p>  jj=100000;</p><p>  /**************給i賦值*************/</p><p>  if(P1==0x7e||P1=

101、=0x7d||P1==0x7b||P1==0x77)</p><p><b>  {</b></p><p>  fo=P1;//接收到了運(yùn)算符號(hào)</p><p>  if(fo==0x7e) LCD_PutString(0,2,"÷");//除法</p><p>  if(fo==0x7d

102、) LCD_PutString(0,2,"x");//乘法</p><p>  if(fo==0x7b) LCD_PutString(0,2,"-");//減法 </p><p>  if(fo==0x77) LCD_PutString(0,2,"+");//加法</p><p>  i=j; //如

103、果遇到運(yùn)算符號(hào)把j的值賦給i;</p><p>  j=0; //將j的值傳給i后清空</p><p>  LCD_PutString(0,3," "); //清空第三行</p><p>  iii=i; //i的顯示值</p><p>  while(P1==0x7e||P1==0x7d||P1==

104、0x7b||P1==0x77);//當(dāng)按鍵沒(méi)松開(kāi)時(shí)不動(dòng)</p><p><b>  }</b></p><p>  Write_Cmd(0x80+0);//顯示i</p><p>  for(ii=0;ii<6;ii++)</p><p><b>  { </b></p><

105、;p>  if(iii/jj!=0)jx=1;</p><p>  if(iii/jj==0&&jx==0)Write_Data(' ');</p><p><b>  else</b></p><p>  Write_Data(iii/jj+'0');</p><p&g

106、t;  iii=iii%jj;</p><p><b>  jj=jj/10;</b></p><p>  DelayUs2x(50);</p><p><b>  }</b></p><p>  if(i==0&&fo!=0x00)Write_Data('0');/

107、/i可以取0</p><p>  jx=0;//初始化</p><p><b>  iii=i;</b></p><p>  jj=100000;</p><p>  /**********計(jì)算并輸出得數(shù)**********/</p><p>  if(P1==0xb7) //等于號(hào)輸出得數(shù)

108、</p><p><b>  {</b></p><p>  if(fo==0x7e)count=i/j;//除法</p><p>  if(fo==0x7d)count=i*j;//乘法</p><p>  if(fo==0x7b)count=i-j;//減法</p><p>  if(fo==

109、0x77)count=i+j;//加法 </p><p>  LCD_PutString(0,4,"="); //顯示計(jì)算結(jié)果</p><p>  countt=count;</p><p>  Write_Cmd(0x98+1);</p><p>  for(ii=0;ii<6;ii++)</p>&

110、lt;p><b>  { </b></p><p>  if(count/jj!=0)jx=1;</p><p>  if(count/jj==0&&jx==0)Write_Data(' ');</p><p><b>  else</b></p><p> 

111、 Write_Data(count/jj+'0');</p><p>  count=count%jj;</p><p><b>  jj=jj/10;</b></p><p>  DelayUs2x(50);</p><p><b>  }</b></p>&

112、lt;p>  if(countt==0)Write_Data('0');//結(jié)果可取0</p><p>  jx=0; //初始化</p><p>  if(fo==0x7e&&i%j!=0) //除法顯示余數(shù)</p><p><b>  {</b></p><p><

113、;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);Write_Data('0');}</p><p> 

114、 LCD_PutString(4,4,".");</p><p>  Write_Cmd(0x98+5);</p><p>  for(ii=0;ii<6;ii++)</p><p><b>  { </b></p><p>  if(ii<=4){Write_Data((10*i1)/j

115、1+'0');</p><p>  i1=(10*i1)%j1;</p><p>  DelayUs2x(50);}</p><p><b>  else</b></p><p><b>  {</b></p><p>  yue=(10*i1)%j1;<

116、;/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>  }</b></p><p><b> 

117、 }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /***********清除重置*************/</p><p>  if(P1==0xe7)</p><p><b>  {&

118、lt;/b></p><p>  i=j=count=countt=0;fo=0x00;ClrScreen();</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  } </b></p><p&

溫馨提示

  • 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)論