單片機(jī)課程設(shè)計(jì)十進(jìn)制加法計(jì)算器設(shè)計(jì)_第1頁
已閱讀1頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  目錄</b></p><p>  1、摘 要----------------------------------------------------------------------2</p><p>  2、設(shè)計(jì)任務(wù)和要求--------------------------------------------------------2

2、</p><p>  3、單片機(jī)簡(jiǎn)要原理--------------------------------------------------------3</p><p>  3.1 AT89C51的介紹------------------------------------------------3</p><p>  3.2 單片機(jī)最小系統(tǒng)---------

3、---------------------------------------8</p><p>  3.3 七段共陽極數(shù)碼管---------------------------------------------9 </p><p>  4、硬件設(shè)計(jì)-----------------------------------------------------------------9

4、 </p><p>  4.1 鍵盤電路的設(shè)計(jì)-------------------------------------------------9</p><p>  4.2 顯示電路的設(shè)計(jì)-----------------------------------------------11</p><p>  5、 軟件設(shè)計(jì)-------------------

5、-----------------------------------------12</p><p>  5.1 系統(tǒng)設(shè)計(jì)------------------------------------------------------12</p><p>  5.2 顯示與按鍵設(shè)計(jì)---------------------------------------------14</p&

6、gt;<p>  系統(tǒng)調(diào)試.-------------------------------------------------------------22</p><p>  6.1系統(tǒng)初始狀態(tài)的調(diào)試------------------------------------------22</p><p>  6.2鍵盤輸入功能的調(diào)試----------------------

7、--------------------23</p><p>  6.3系統(tǒng)運(yùn)算功能的調(diào)試------------------------------------------25</p><p>  7、心得體會(huì)----------------------------------------------------------------26</p><p>  參

8、考文獻(xiàn)--------------------------------------------------------------------29</p><p>  附錄 系統(tǒng)硬件電路圖--------------------------------------------------29</p><p>  -----------</p><p><b&

9、gt;  1、摘要</b></p><p>  近年來隨著科技的飛速發(fā)展,單片機(jī)的應(yīng)用正在不斷深入,同時(shí)帶動(dòng)傳統(tǒng)控制檢測(cè)技術(shù)日益更新。在實(shí)時(shí)檢測(cè)和自動(dòng)控制的單片機(jī)應(yīng)用系統(tǒng)中,單片機(jī)往往作為一個(gè)核心部件來使用,僅單片機(jī)方面知識(shí)是不夠的,還應(yīng)根據(jù)具體硬件結(jié)構(gòu)軟硬件結(jié)合,加以完善。</p><p>  本設(shè)計(jì)是實(shí)現(xiàn)兩位數(shù)的加減運(yùn)算的簡(jiǎn)易計(jì)算器,實(shí)現(xiàn)鍵盤輸入,由七段LED數(shù)碼管輸出;程

10、序都是根據(jù)教材內(nèi)和網(wǎng)絡(luò)中的程序參考編寫而成,在功能上還并不十分完善,限制也較多。本設(shè)計(jì)重在設(shè)計(jì)構(gòu)思,使得我們用專業(yè)知識(shí)、專業(yè)技能分析和解決問題,通過設(shè)計(jì)使得我們對(duì)所學(xué)知識(shí)徹底鞏固。</p><p><b>  2、設(shè)計(jì)任務(wù)和要求</b></p><p>  本次課程設(shè)計(jì),我選題是單片機(jī)十進(jìn)制加法計(jì)算器軟設(shè)計(jì) ,設(shè)計(jì)任務(wù)為: </p><p> 

11、 設(shè)計(jì)一鍵盤顯示裝置,鍵盤上除需定義10個(gè)十進(jìn)制數(shù)字鍵外還要相應(yīng)的功能鍵,其它鍵不定義無響應(yīng)。利用此系統(tǒng)可分別可輸入十進(jìn)制被加數(shù)與加數(shù),實(shí)現(xiàn)兩數(shù)相加并將結(jié)果以十進(jìn)制形式顯示出來。(擴(kuò)展:多位10進(jìn)制數(shù)相加)</p><p>  本課程設(shè)計(jì)的十進(jìn)制加法計(jì)算器的計(jì)算范圍為0~255,計(jì)算結(jié)果全為整數(shù),計(jì)算結(jié)果溢出結(jié)果不顯示。</p><p>  1、加法:三位加法,計(jì)算結(jié)果超過255溢出不顯示

12、</p><p>  2、減法:三位減法,計(jì)算結(jié)果若小于零溢出不顯示</p><p>  3、乘法:三位數(shù)乘法</p><p><b>  4、除法:整數(shù)除法</b></p><p><b>  5、有清零功能</b></p><p>  3、 單片機(jī)簡(jiǎn)要原理</p&g

13、t;<p>  在該課程設(shè)計(jì)中,主要用到一個(gè)AT89C51芯片和串接的共陰數(shù)碼管。作為該設(shè)計(jì)的主要部分,下面將對(duì)它們的原理及功能做詳細(xì)介紹和說明。</p><p>  3.1 AT89C51的介紹:</p><p>  圖一 AT89C51外形結(jié)構(gòu)和引腳分布圖</p><p>  芯片AT89C51的外形結(jié)構(gòu)和引腳圖如圖一所示。AT89C51是一種

14、帶4K字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機(jī)。該器件采用ATMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,ATMEL的AT89C51是一種高效微控制器,為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)

15、廉的方案。</p><p>  其功能特性描述:AT89C51單片機(jī)在電子行業(yè)中有著廣泛的應(yīng)用。AT89C52具有以下標(biāo)準(zhǔn)功能: 8k字節(jié)Flash,256字節(jié)RAM, 32 位I/O 口線,看門狗定時(shí)器,2 個(gè)數(shù)據(jù)指針,三個(gè)16 位 定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口, 片內(nèi)晶振及時(shí)鐘電路,8 位微控制器 8K 字節(jié)在系統(tǒng)可編程 Flash ROM。</p><p> 

16、 P0 口:P0口是一個(gè)8位漏極開路的雙向I/O口。作為輸出口,每位能驅(qū)動(dòng)8個(gè)TTL邏 輯電平。對(duì)P0端口寫“1”時(shí),引腳用作高阻抗輸入端用。 </p><p>  在訪問外部數(shù)據(jù)存儲(chǔ)器或程序存儲(chǔ)器時(shí),P0口被分時(shí)轉(zhuǎn)換地址(低8 位)和數(shù)據(jù)總線復(fù)用,在訪問期間激活內(nèi)部上拉電阻。 </p><p>  在Flash 編程時(shí),P0 口接收指令字節(jié),而在程序校驗(yàn)時(shí),輸出指令字節(jié),校驗(yàn)時(shí),要求外接

17、上拉電阻。 </p><p>  P1 口:P1 口是一個(gè)具有內(nèi)部上拉電阻的8 位雙向I/O 口,P1 輸出緩沖器能驅(qū)動(dòng)4 個(gè)TTL 邏輯電平。對(duì)P1 端口寫“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流(IIL)。</p><p>  此外,P1.0和P1.2分別作定時(shí)器/計(jì)數(shù)器2的外部計(jì)數(shù)輸入(P1

18、.0/T2)和時(shí)器/計(jì)數(shù)器2的觸發(fā)輸入(P1.1/T2EX),具體如下表所示。在flash編程和校驗(yàn)時(shí),P1口接收低8位地址字節(jié)。 </p><p>  P1端口引腳號(hào)第二功能: </p><p>  P1.0 T2(定時(shí)器/計(jì)數(shù)器T2的外部計(jì)數(shù)輸入),時(shí)鐘輸出 </p><p>  P1.1 T2EX(定時(shí)器/計(jì)數(shù)器T2的捕捉/重載觸發(fā)信號(hào)和方向控制) </

19、p><p>  P2 口:P2 是一個(gè)帶有內(nèi)部上拉電阻的8 位雙向I/O 口,P2 的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4 個(gè)TTL邏輯門電路。對(duì)端口P2 寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口,作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流(IIL)。 </p><p>  在訪問外部程序存儲(chǔ)器或16 位地址的外部數(shù)據(jù)存儲(chǔ)器(例如執(zhí)行MOV

20、X @DPTR 指令)時(shí),P2 口送出高8 位地址數(shù)據(jù)。在訪問8 位地址的外部數(shù)據(jù)存儲(chǔ)器(如執(zhí)行MOVX @RI 指令)時(shí),P2 口輸出P2 鎖存器的內(nèi)容。 </p><p>  Flash 編程或校驗(yàn)時(shí),P2亦接收高位地址和一些控制信號(hào)。</p><p>  P3 口:P3 口是一組帶有內(nèi)部上拉電阻的8 位雙向I/O 口。P3 口輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4 個(gè)TTL 邏輯門電路

21、。對(duì)P3 口寫入“1”時(shí),它們被內(nèi)部上拉電阻拉高并可作為輸入端口。此時(shí),被外部拉低的P3 口將用上拉電阻輸出電流(IIL)。</p><p>  P3 口還接收一些用于Flash 閃速存儲(chǔ)器編程和程序校驗(yàn)的控制信號(hào)。 </p><p>  P3 口除了作為一般的I/O 口線外,更重要的用途是它的第二功能。</p><p>  P3口亦作為AT89C52特殊功能(第二

22、功能)使用,如下所示。 </p><p>  在flash編程和校驗(yàn)時(shí),P3口也接收一些控制信號(hào)。 </p><p>  P3端口引腳第二功能:</p><p>  P3.0 RXD(串行輸入口)</p><p>  P3.1 TXD(串行輸出口)</p><p>  P3.2 INTO(外中斷0)</p>

23、<p>  P3.3 INT1(外中斷1)</p><p>  P3.4 TO(定時(shí)/計(jì)數(shù)器0)</p><p>  P3.5 T1(定時(shí)/計(jì)數(shù)器1)</p><p>  P3.6 WR(外部數(shù)據(jù)存儲(chǔ)器寫選通)</p><p>  P3.7 RD(外部數(shù)據(jù)存儲(chǔ)器讀選通)</p><p>  RST——復(fù)位

24、輸入。當(dāng)振蕩器工作時(shí),RST引腳出現(xiàn)兩個(gè)機(jī)器周期以上高電平將是單片機(jī)復(fù)位。</p><p>  ALE/PROG——當(dāng)訪問外部程序存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器時(shí),ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節(jié)。一般情況下,ALE仍以時(shí)鐘振蕩頻率的1/6輸出固定的脈沖信號(hào),因此它可對(duì)外輸出時(shí)鐘或用于定時(shí)目的。要注意的是:每當(dāng)訪問外部數(shù)據(jù)存儲(chǔ)器時(shí)將跳過一個(gè)ALE脈沖。對(duì)FLASH存儲(chǔ)器編程期間,該引腳還用于輸入編程脈沖

25、(PROG)。</p><p>  如有必要,可通過對(duì)特殊功能寄存器(SFR)區(qū)中的8EH單元的D0位置位,可禁止ALE操作。該位置位后,只有一條MOVX和MOVC指令才能將ALE激活。此外,該引腳會(huì)被微弱拉高,單片機(jī)執(zhí)行外部程序時(shí),應(yīng)設(shè)置ALE禁止位無效。</p><p>  PSEN——程序儲(chǔ)存允許(PSEN)輸出是外部程序存儲(chǔ)器的讀選通信號(hào),當(dāng)AT89C52由外部程序存儲(chǔ)器取指令(或

26、數(shù)據(jù))時(shí),每個(gè)機(jī)器周期兩次PSEN有效,即輸出兩個(gè)脈沖,在此期間,當(dāng)訪問外部數(shù)據(jù)存儲(chǔ)器,將跳過兩次PSEN信號(hào)。</p><p>  EA/VPP——外部訪問允許,欲使CPU僅訪問外部程序存儲(chǔ)器(地址為0000H-FFFFH),EA端必須保持低電平(接地)。需注意的是:如果加密位LB1被編程,復(fù)位時(shí)內(nèi)部會(huì)鎖存EA端狀態(tài)。</p><p>  如EA端為高電平(接Vcc端),CPU則執(zhí)行內(nèi)部

27、程序存儲(chǔ)器的指令。</p><p>  FLASH存儲(chǔ)器編程時(shí),該引腳加上+12V的編程允許電源Vpp,當(dāng)然這必須是該器件是使用12V編程電壓Vpp。</p><p><b>  引腳使用說明:</b></p><p>  I/O端口的編程實(shí)際上就是根據(jù)應(yīng)用電路的具體功能和要求對(duì)I/O寄存器進(jìn)行編程。具體步驟如下:</p><

28、;p>  l. 根據(jù)實(shí)際電路的要求,選擇要使用哪些I/O端口。</p><p>  2. 初始化端口的數(shù)據(jù)輸出寄存器,應(yīng)避免端口作為輸出時(shí)的開始階段出現(xiàn)不確定狀態(tài),影響外圍電路正常工作。</p><p>  3. 根據(jù)外圍電路功能,確定PO端口的方向,初始化端口的數(shù)據(jù)方向寄存器。對(duì)于用作輸入的端口可以不考慮方向初始化,因?yàn)镻O的復(fù)位缺省值為輸入。</p><p&g

29、t;  4. 用作輸入的PO管腳,需上拉電阻。</p><p>  5. 最后對(duì)I/O端口進(jìn)行輸出(寫數(shù)據(jù)輸出寄存器)和輸入(讀端口)編程,完成對(duì)外圍電路的相應(yīng)功能。</p><p>  3.2 單片機(jī)最小系統(tǒng)</p><p>  單片機(jī)最小系統(tǒng)就是支持主芯片正常工作的最小部分,包括主控芯片、復(fù)位電路和晶振電路。</p><p><b

30、>  (一) 復(fù)位電路</b></p><p><b>  圖二 復(fù)位電路</b></p><p>  本設(shè)計(jì)采用上電與手動(dòng)復(fù)位電路,電阻分別選取100和10K,電容選取10uF,系統(tǒng)一上電,芯片就復(fù)位,或者中途按按鍵也可以進(jìn)行復(fù)位。</p><p><b>  晶振電路</b></p>

31、<p>  圖三 晶振電路</p><p>  晶振電路是單片機(jī)的心臟,它用于產(chǎn)生單片機(jī)工作所需要的時(shí)鐘信號(hào)。單片機(jī)的晶振選取11.0592MHz,晶振旁電容選取30pF。</p><p>  3.3 七段共陽極數(shù)碼管</p><p>  圖四 七段共陽數(shù)碼管</p><p>  圖為七段共陽數(shù)碼管的引腳圖,從左到右數(shù)碼

32、管的段碼分別為a,b,c,d,e,f,g和小數(shù)點(diǎn)dp,低電平時(shí)點(diǎn)亮,最右邊為位選端。</p><p><b>  4、硬件設(shè)計(jì)</b></p><p>  簡(jiǎn)易數(shù)字計(jì)算器系統(tǒng)硬件設(shè)計(jì)主要包括:鍵盤電路,顯示電路以及其他輔助電路。下面分別進(jìn)行設(shè)計(jì)。 </p><p>  4.1 鍵盤電路的設(shè)計(jì) </p><p>  鍵盤可

33、分為兩類:編碼鍵盤和非編碼鍵盤。編碼鍵盤是較多按鍵(20個(gè)以上)和專用驅(qū)動(dòng)芯片的組合,當(dāng)按下某個(gè)按鍵時(shí),它能夠處理按鍵抖動(dòng)、連擊等問題,直接輸出按鍵的編碼,無需系統(tǒng)軟件干預(yù)。通用計(jì)算機(jī)使用的標(biāo)準(zhǔn)鍵盤就是編碼鍵盤。當(dāng)系統(tǒng)功能比較復(fù)雜,按鍵數(shù)量很多時(shí),采用編碼鍵盤可以簡(jiǎn)化軟件設(shè)計(jì)。但大多數(shù)智能儀器和電子產(chǎn)品的按鍵數(shù)目都不太多(20個(gè)以內(nèi)),為了降低成本和簡(jiǎn)化電路通常采用非編碼鍵盤。非編碼鍵盤的接口電路有設(shè)計(jì)者根據(jù)需要自行決定,按鍵信息通過接

34、口軟件來獲取。本課題需要的是16個(gè)按鍵,故選擇用非編碼鍵盤。</p><p>  計(jì)算器輸入數(shù)字和其他功能按鍵要用到很多按鍵,如果采用獨(dú)立按鍵的方式,在這種情況下,編程會(huì)很簡(jiǎn)單,但是會(huì)占用大量的I/O 口資源,因此在很多情況下都不采用這種方式,而是采用矩陣鍵盤的方案。矩陣鍵盤采用四條I/O 線作為行線,四條I/O 線作為列線組成鍵盤,在行線和列線的每個(gè)交叉點(diǎn)上設(shè)置一個(gè)按鍵。這樣鍵盤上按鍵的個(gè)數(shù)就為4×4

35、個(gè)。這種行列式鍵盤結(jié)構(gòu)能有效地提高單片機(jī)系統(tǒng)中I/O 口的利用率。</p><p>  矩陣鍵盤的工作原理:計(jì)算器的鍵盤布局如圖五所示:一般有16個(gè)鍵組成,在單片機(jī)中正好可以用一個(gè)P口實(shí)現(xiàn)16個(gè)按鍵功能,這種形式在單片機(jī)系統(tǒng)中也最常用。</p><p>  具體電路連接如圖五所示: </p><p>  圖五 4*4鍵盤接口電路</p><p

36、>  4.2 顯示電路的設(shè)計(jì) </p><p>  當(dāng)系統(tǒng)需要顯示少量數(shù)據(jù)時(shí),采用LED數(shù)碼管進(jìn)行顯示是一種經(jīng)濟(jì)實(shí)用的方法。數(shù)碼管顯示有靜態(tài)顯示和動(dòng)態(tài)顯示兩種方法。為了減少端口的使用,故選擇動(dòng)態(tài)顯示。 電路如下圖六所示:</p><p>  圖六 三位數(shù)碼管的顯示電路</p><p><b>  5、 軟件設(shè)計(jì)</b></p&

37、gt;<p>  在十進(jìn)制加法計(jì)算器的軟件規(guī)劃要求下,簡(jiǎn)易計(jì)算器的程序主要包括以下功能模塊:(1)    主模塊,為系統(tǒng)的初始化。(2)   顯示與讀鍵模塊,分為判鍵程序段、運(yùn)算操作子程序、顯示子程序等部分;5.1系統(tǒng)設(shè)計(jì)</p><p> ?。ㄒ唬?系統(tǒng)模塊圖</p><p><b>  圖七 系統(tǒng)模

38、塊圖</b></p><p>  此系統(tǒng)包括晶振電路、復(fù)位電路、LED顯示電路、矩陣按鍵電路運(yùn)算法則指示燈以及單片機(jī)。其中通過輸入鍵盤模塊將數(shù)字0~9和運(yùn)算符號(hào)“+”、“-”、“*”、“/”輸入單片機(jī)進(jìn)行運(yùn)算;運(yùn)算模塊分別根據(jù)輸入的運(yùn)算符進(jìn)行加減乘除運(yùn)算;顯示模塊將運(yùn)算后的數(shù)值通過動(dòng)態(tài)掃描使之在數(shù)碼管上輸出。</p><p><b>  系統(tǒng)總流程圖</b>

39、;</p><p>  主程序主要是用來進(jìn)行初始化的,調(diào)用其他子程序,清空各個(gè)標(biāo)志位,清空緩存區(qū),讀取鍵碼,判斷功能,在LED上作出回應(yīng),主程序流程圖如圖六所示。</p><p> ?。?)數(shù)字送顯示緩沖程序設(shè)計(jì)</p><p>  簡(jiǎn)易計(jì)算器所顯示的數(shù)值最大位三位。要顯示數(shù)值,先判斷數(shù)值大小和位數(shù),如果是超過三位或大于255,將不顯示數(shù)字??芍匦螺斎霐?shù)字,再次計(jì)算

40、。</p><p>  (2)運(yùn)算程序的設(shè)計(jì)</p><p>  首先初始化參數(shù),送LED三位顯示“0”,其它位不顯示。然后掃描鍵盤看是否有鍵輸入,若有,讀取鍵碼。判斷鍵碼是數(shù)字鍵、清零鍵還是功能鍵,是數(shù)值鍵則送LED顯示并保存數(shù)值,是清零鍵則做清零處理,是功能鍵則又判斷是“=”還是運(yùn)算鍵,若是“=”則計(jì)算最后結(jié)果并送LED顯示,若是運(yùn)算鍵則保存相對(duì)運(yùn)算程序的首地址。</p>

41、<p>  5.2 顯示與按鍵設(shè)計(jì)</p><p><b>  LED顯示程序設(shè)計(jì)</b></p><p>  LED顯示器由七段發(fā)光二極管組成,排列成8字形狀,因此也稱為七段LED顯示器。為了顯示數(shù)字或符號(hào),要為L(zhǎng)ED顯示器提供代碼,即字形代碼。七段發(fā)光二極管,再加上一個(gè)小數(shù)點(diǎn)位,共計(jì)8段,因此提供的字形代碼的長(zhǎng)度正好是一個(gè)字節(jié)。簡(jiǎn)易計(jì)算器用到的數(shù)字0

42、~9的共陽極字形代碼如下表:</p><p>  表一 共陽極數(shù)碼管段碼對(duì)照表</p><p><b>  讀鍵子程序設(shè)計(jì)</b></p><p>  為了實(shí)現(xiàn)鍵盤的數(shù)據(jù)輸入功能和命令處理功能,每個(gè)鍵都有其處理子程序,為此每個(gè)鍵都對(duì)應(yīng)一個(gè)碼——鍵碼。為了得到被按鍵的鍵碼,現(xiàn)使用行掃描法識(shí)別按鍵。其程序框圖如圖八:</p>&

43、lt;p>  讀鍵程序使用的是反轉(zhuǎn)法讀鍵,不管鍵盤矩陣的規(guī)模大小,均進(jìn)行兩次讀鍵。第一次所有列線均輸出低電平,從所有讀入鍵盤信息(行信息);第二次所有行線均輸出低電平,從所有行線讀入鍵盤信息(列信息)。將兩次讀鍵信息進(jìn)行組合就可以得到按鍵的特征編碼,然后通過查表得到按鍵的順序編碼。將各特征編碼按希望的順序排成一張表,然后用當(dāng)前讀得的特征碼來查表。當(dāng)表中有該特征碼時(shí),它的位置就是對(duì)應(yīng)的順序編碼;當(dāng)表中沒有該特征碼時(shí),說明這是一個(gè)沒有

44、定義的鍵碼,與沒有按鍵(0FFH)同等看待。 </p><p><b>  流程圖</b></p><p>  圖八 計(jì)算鍵值子程序流程圖</p><p><b>  源程序</b></p><p>  RESULT EQU60H </p>

45、<p>  RESULT1 EQU61H </p><p>  FUNCTIONKEY EQU62H </p><p>  ORG 00H</p><p>  START:MOV R3,#0 </p><p>  MO

46、V FUNCTIONKEY,#0</p><p>  MOV 32H,#00H</p><p>  MOV 33H,#00H</p><p>  MOV 34H,#00H</p><p>  MLOOP:CALL DISP ;調(diào)顯示子程序</p><p>

47、  WAIT:CALL TESTKEY ;判斷有無按鍵</p><p>  JZ WAIT </p><p>  CALL GETKEY ;讀鍵</p><p>  INC R3 ;按鍵個(gè)數(shù)</p><

48、;p>  CJNE A,#0,NEXT1 ;判斷是否數(shù)字鍵</p><p>  LJMP E1 ;轉(zhuǎn)數(shù)字鍵處理</p><p>  NEXT1:CJNE A,#1,NEXT2</p><p>  LJMP E1</p><p>  NEXT2:CJNE A,

49、#2,NEXT3</p><p>  LJMP E1</p><p>  NEXT3:CJNE A,#3,NEXT4</p><p>  LJMP E1</p><p>  NEXT4:CJNE A,#4,NEXT5</p><p>  LJMP E1</p><p

50、>  NEXT5:CJNE A,#5,NEXT6</p><p>  LJMP E1</p><p>  NEXT6:CJNE A,#6,NEXT7</p><p>  LJMP E1</p><p>  NEXT7:CJNE A,#7,NEXT8</p><p>  LJMP

51、 E1</p><p>  NEXT8:CJNE A,#8,NEXT9</p><p>  LJMP E1</p><p>  NEXT9:CJNE A,#9,NEXT10</p><p>  LJMP E1</p><p>  NEXT10:CJNE A,#10,NEXT11

52、 ;判斷是否功能鍵</p><p>  LJMP E2 ;轉(zhuǎn)功能鍵處理</p><p>  NEXT11:CJNE A,#11,NEXT12</p><p>  LJMP E2</p><p>  NEXT12:CJNE A,#12, NEXT13</p>

53、<p>  LJMP E2</p><p>  NEXT13:CJNE A,#13,NEXT14</p><p>  LJMP E2</p><p>  NEXT14:CJNE A,#14,NEXT15</p><p>  LJMP E2</p><p>  NEXT15:

54、LJMP E3 ;判斷是否清除鍵</p><p>  E1:CJNE R3,#1,N1 ;判斷第幾次按鍵</p><p>  LJMP E11 ;為第一個(gè)數(shù)字</p><p>  N1:CJNE R3,#2,N2</p><p

55、>  LJMP E12 ;為第二個(gè)數(shù)字</p><p>  N2:CJNE R3,#3,N3 </p><p>  LJMP E13 ;為第三個(gè)數(shù)字</p><p>  N3:LJMP E3 ;第四個(gè)數(shù)字轉(zhuǎn)溢出</p>&l

56、t;p>  E11:MOV R4,A ;輸入值暫存R4</p><p>  MOV 34H,A ;輸入值送顯示緩存</p><p>  MOV 33H,#00H</p><p>  MOV 32H,#00H</p><p>  LJMP MLOOP

57、 ;等待再次輸入</p><p>  E12: MOV R7,A ;個(gè)位數(shù)暫存R7</p><p>  MOV B,#10</p><p>  MOV A,R4</p><p>  MUL AB ;十位數(shù)</p><p><

58、b>  ADDA,R7</b></p><p>  MOV R4,A ;輸入值存R4</p><p>  MOV 32H,#00H ;輸入值送顯示緩存</p><p>  MOV 33H,34H</p><p>  MOV 34H,R7</p>

59、<p>  LJMP MLOOP</p><p>  E13:MOV R7,A</p><p>  MOV B,#10</p><p>  MOV A,R4</p><p><b>  MUL AB</b></p><p>  JB OV,E3

60、 ;輸入溢出</p><p>  ADD A,R7</p><p>  JB CY,E3 ;輸入溢出</p><p>  MOV R4,A</p><p>  MOV 32H,33H;輸入值送顯示緩存</p><p>  MOV 33H

61、,34H</p><p>  MOV 34H,R7</p><p>  LJMP MLOOP</p><p>  E3:MOV R3,#0 ;按鍵次數(shù)清零</p><p>  MOV R4,#0 ;輸入值清零</p><p>  MOV R

62、ESULT,#0 ;計(jì)算結(jié)果清零</p><p>  MOV FUNCTIONKEY,#0 ;功能鍵設(shè)為零 </p><p>  MOV 32H,#00H;顯示清空</p><p>  MOV 33H,#00H</p><p>  MOV 34H,#00H<

63、;/p><p>  LJMP MLOOP</p><p>  E2:MOV 34H,#00H</p><p>  MOV 33H,#00H</p><p>  MOV 32H,#00H</p><p>  MOV R0,FUNCTIONKEY ;與上次功能鍵交換<

64、;/p><p>  MOV FUNCTIONKEY,A</p><p>  MOV A,R0</p><p>  CJNE A,#10,N21 ;判斷功能鍵</p><p>  LJMP JIA ;"+"</p><p>  N21

65、: CJNE A,#11,N22</p><p>  LJMP JIAN ;"-"</p><p>  N22: CJNE A,#12,N23</p><p>  LJMP CHENG ;"*"</p><p>  

66、N23:CJNE A,#13,N24</p><p>  LJMP CHU ;"/"</p><p>  N24:CJNE A,#0,N25</p><p>  LJMP FIRST ;首次按功能鍵</p><p>  N25:LJMP

67、DEN ;"="</p><p>  N4:LJMP E3</p><p>  FIRST:MOV RESULT,R4 ;輸入值送結(jié)果</p><p>  MOV R3,#0 ;按鍵次數(shù)清零</p><p>  LJMP

68、 DISP1 ;結(jié)果處理</p><p>  JIA:MOV A,RESULT;上次結(jié)果送累加器</p><p>  ADD A,R4;上次結(jié)果加輸入值</p><p>  JB CY,N4;溢出</p><p>  MOV RESULT,A;存本次結(jié)果

69、</p><p>  MOV R3,#0;按鍵次數(shù)清零</p><p>  LJMP DISP1</p><p>  JIAN:MOV A,RESULT</p><p>  SUBB A,R4;上次結(jié)果減輸入值</p><p>  JB CY,N4;負(fù)數(shù)溢出

70、</p><p>  MOV RESULT,A</p><p>  MOV R3,#0</p><p>  LJMP DISP1</p><p>  CHENG:MOV A,RESULT</p><p>  MOV B,A</p><p>  MOV A,R

71、4</p><p>  MUL AB;上次結(jié)果乘輸入值</p><p>  JB OV,N4;溢出</p><p>  MOV RESULT,A</p><p>  LJMP DISP1</p><p>  CHU:MOV A,R4</p>

72、<p>  MOV B,A</p><p>  MOV A,RESULT</p><p>  DIV AB;上次結(jié)果除輸入值</p><p>  MOV RESULT,A</p><p>  MOV R3,#0</p><p>  LJMP DISP1</

73、p><p>  DEN:MOV R3,#0</p><p>  LJMP DISP1</p><p>  DISP1:MOVB,#10</p><p>  MOVA,RESULT;結(jié)果送累加器</p><p>  DIVAB;結(jié)果除10</p><p>

74、  MOVRESULT1,A;暫存"商"</p><p>  MOVA,B;取個(gè)位數(shù)</p><p>  MOV34H,A;個(gè)位數(shù)送顯示緩存</p><p>  MOVA,RESULT1</p><p>  JZDISP11;結(jié)果是否為一位數(shù)</p>&l

75、t;p>  MOVB,#10</p><p>  MOVA,RESULT1</p><p><b>  DIVAB</b></p><p>  MOVRESULT1,A</p><p><b>  MOVA,B</b></p><p>  MOV

76、33H,A;十位送顯示緩存</p><p>  MOVA,RESULT1</p><p>  JZDISP11;結(jié)果是否為二位數(shù)</p><p>  MOV32H,A;百位數(shù)送顯示緩存</p><p>  DISP11:LJMPMLOOP</p><p>  DISP: MOV

77、R0,#34H</p><p>  DIR1: MOV DPTR,#SEGTAB</p><p><b>  MOV A,@R0</b></p><p>  MOVC A,@A+DPTR</p><p><b>  MOV P0,A</b></p><p>  CJNE R

78、0,#34H,DIR2</p><p><b>  SETB P2.0</b></p><p><b>  CALL D1MS</b></p><p><b>  CLR P2.0</b></p><p><b>  DEC R0</b></p&g

79、t;<p><b>  SJMP DIR1</b></p><p>  DIR2: CJNE R0,#33H,DIR3</p><p><b>  SETB P2.1</b></p><p><b>  CALL D1MS</b></p><p><b>

80、;  CLR P2.1</b></p><p><b>  DEC R0</b></p><p><b>  SJMP DIR1</b></p><p>  DIR3: SETB P2.2</p><p><b>  CALL D1MS</b></p>

81、<p><b>  CLR P2.2</b></p><p><b>  RET</b></p><p>  D1MS: MOV R7,#02H</p><p>  DMS: MOV R6,#0F0H</p><p>  DJNZ R6,$</p

82、><p>  DJNZ R7,DMS </p><p><b>  RET</b></p><p>  SEGTAB:DB 0C0H, 0F9H, 0A4H, 0B0H</p><p>  DB 99H, 92H, 82H, 0F8H</p><p>  DB 80

83、H, 90H, 88H, 83H </p><p>  DB 0C6H, 0A1H, 86H, 8EH</p><p>  TESTKEY:ACALL DISP</p><p>  MOVP1,#0FH;讀入鍵狀態(tài)</p><p>  MOVA,P1</p><p&

84、gt;<b>  CPLA</b></p><p>  ANLA,#0FH;高四位不用</p><p><b>  RET</b></p><p>  KEYTABLE:</p><p>  DB0EEH,0EDH,0DDH,0BDH;鍵碼定義</p>

85、;<p>  DB0EBH,0DBH,0BBH,0E7H</p><p>  DB0D7H,0B7H,0DEH,0BEH</p><p>  DB07EH,07DH,07BH,077H</p><p>  GETKEY:MOVR6,#10;讀鍵子程序</p><p>  ACALLDELAY</

86、p><p>  MOVP1,#0FH</p><p><b>  MOVA,P1</b></p><p>  CJNEA,0FH,K12</p><p>  LJMPMLOOP</p><p>  K12: MOVB,A</p><p>  MOVP1,

87、#0EFH</p><p><b>  MOVA,P1</b></p><p>  CJNEA,#0EFH,K13</p><p>  MOVP1,#0DFH</p><p><b>  MOVA,P1</b></p><p>  CJNEA,#0DFH,K1

88、3</p><p>  MOVP1,#0BFH</p><p><b>  MOVA,P1</b></p><p>  CJNEA,#0BFH,K13</p><p>  MOVP1,#07FH</p><p><b>  MOVA,P1</b></p

89、><p>  CJNEA,#07FH,K13</p><p>  LJMPMLOOP</p><p>  K13: ANL A,#0F0H</p><p><b>  ORLA,B</b></p><p><b>  MOVB,A</b></p>

90、<p>  MOVR1,#16</p><p>  MOVR2,#0</p><p>  MOVDPTR,#KEYTABLE</p><p>  K14:MOVA,R2</p><p>  MOVCA,@A+DPTR</p><p>  CJNEA,B,K16</p>&

91、lt;p>  MOVP1,#0FH</p><p>  K15:MOVA,P1</p><p>  CJNEA,#0FH,K15</p><p>  MOVR6,#10</p><p>  ACALLDELAY</p><p><b>  MOVA,R2</b><

92、/p><p><b>  RET</b></p><p>  K16:INCR2</p><p>  DJNZR1,K14</p><p>  AJMPMLOOP</p><p>  ;10ms延時(shí)子程序</p><p>  DELAY:MOVR7,#10<

93、;/p><p>  TS1: MOV R6,#0FFH</p><p><b>  TS2:NOP</b></p><p><b>  NOP</b></p><p>  DJNZR6,TS2</p><p>  DJNZR7,TS1</p>

94、;<p><b>  RET</b></p><p><b>  END</b></p><p><b>  6系統(tǒng)調(diào)試</b></p><p>  6.1系統(tǒng)初始狀態(tài)的調(diào)試</p><p>  系統(tǒng)初始狀態(tài)時(shí),2個(gè)LED顯示器顯示“0”,運(yùn)算法則指示燈全滅。調(diào)試

95、結(jié)果如圖9所示。</p><p>  圖9 系統(tǒng)初始狀態(tài)調(diào)試結(jié)果</p><p>  6.2鍵盤輸入功能的調(diào)試</p><p>  通過鍵盤分別輸入“8”、“*”、“9”,LED顯示電路和運(yùn)算法則指示電路分別顯示相應(yīng)的結(jié)果。調(diào)試結(jié)果如圖11所示。</p><p><b>  (a)輸入“8”</b></p>

96、<p><b>  (b)輸入“*”</b></p><p><b>  (c)輸入“9”</b></p><p>  圖10 鍵盤輸入功能調(diào)試結(jié)果</p><p>  6.3系統(tǒng)運(yùn)算功能的調(diào)試</p><p>  當(dāng)輸入“8”、“*”、“9”后,點(diǎn)擊“=”可得到運(yùn)算結(jié)果“72”,并通過

97、LED顯示電路顯示。調(diào)試結(jié)果如圖11所示。</p><p>  圖11 系統(tǒng)運(yùn)算功能調(diào)試結(jié)果</p><p><b>  心得體會(huì)</b></p><p>  單片機(jī)課程設(shè)計(jì)終于結(jié)束了,通過緊張的工作,完成了我的設(shè)計(jì)任務(wù)-十進(jìn)制加法計(jì)算器。總的來說,這次課程設(shè)計(jì)是比較成功的。當(dāng)然,這其中也經(jīng)歷了許多坎坷,但是在我的堅(jiān)持不懈下,在老師的細(xì)心指導(dǎo)下

98、,在同學(xué)們的熱情幫助下,最終克服了種種困難,取得了成功。</p><p>  起初我還想從老師所給的四個(gè)單片機(jī)課程設(shè)計(jì)題目中選擇一題,后來發(fā)覺自己自己對(duì)計(jì)算器挺感興趣的,所以就決定利用自己所學(xué)的單片機(jī)知識(shí)自己做一個(gè)計(jì)算器。但由于以前從未做過像這種軟硬件相結(jié)合的設(shè)計(jì),所以我請(qǐng)教了好幾個(gè)有參加電子競(jìng)賽的同學(xué)并且在網(wǎng)上和圖書館查閱了不少的有關(guān)于單片機(jī)課程設(shè)計(jì)的文獻(xiàn)以及計(jì)數(shù)器的相關(guān)資料。我在了解計(jì)算機(jī)所需要的主體硬件之后

99、決定編寫程序,在此過程中,其中鍵盤掃描和動(dòng)態(tài)掃描顯示掃描程序困擾了我很久,經(jīng)過三四天的辛苦工作,終于初步把所需要的程序編好了,于是Keil 開始進(jìn)行仿真,在仿真期間也發(fā)現(xiàn)了許多錯(cuò)誤,基本上都是平日容易犯的錯(cuò)誤,比如忘記了子程序標(biāo)號(hào)、死循環(huán)程序、標(biāo)點(diǎn)符號(hào)的漏寫等。經(jīng)過反復(fù)的編譯差錯(cuò),仿真編譯通過后,于是開始在Proteus中連硬件電路,全部接完電路之后將Keil生成的.Hex文件導(dǎo)入進(jìn)行仿真,發(fā)現(xiàn)軟件與硬件不能夠?qū)?yīng)協(xié)調(diào)工作,于是分別對(duì)軟

100、件和硬件進(jìn)行檢查,經(jīng)過反復(fù)的仿真調(diào)試,并且在同學(xué)的幫助和自己對(duì)每個(gè)子程序進(jìn)行仿真觀察下,終于在課設(shè)快結(jié)束時(shí)成功的調(diào)試出結(jié)果了。這就是我這一周課設(shè)的經(jīng)過,看似簡(jiǎn)單,過程卻曲折艱辛。</p><p>  通過這次課程設(shè)計(jì),我進(jìn)一步加深了對(duì)單片機(jī)了解。并進(jìn)一步熟練了對(duì)Keil和Proteus軟件的操作。在編寫程序的過程中,遇到了很多問題,使我發(fā)現(xiàn)自己以前學(xué)習(xí)上存在的不足,對(duì)以前所學(xué)過的知識(shí)理解得不夠深刻,掌握得不夠牢固

101、,對(duì)單片機(jī)匯編語言掌握得不夠好。通過與同學(xué)探討,終于把問題都解決了,并加深了對(duì)計(jì)算器工作的原理的了解。同時(shí)也掌握了做課程設(shè)計(jì)的一般流程,為以后的設(shè)計(jì)積累了一定的經(jīng)驗(yàn)。做課程設(shè)計(jì)時(shí),先查閱相關(guān)知識(shí),把原理吃透,確定一個(gè)大的設(shè)計(jì)方向,在按照這個(gè)方向分模塊的把要實(shí)現(xiàn)的功能用流程圖的形式展示。學(xué)會(huì)了怎么樣去制定計(jì)劃,怎么樣去實(shí)現(xiàn)這個(gè)計(jì)劃,并掌握了在執(zhí)行過程中怎么樣去克服心理上的不良情緒??傊ㄟ^這次的設(shè)計(jì),進(jìn)一步了解了單片微型計(jì)算機(jī)及應(yīng)用原理

102、,收獲很大,對(duì)軟件編程、排錯(cuò)調(diào)試、查閱資料等方面得到較全面的鍛煉和提高。</p><p>  同時(shí)為了完成此次的課程設(shè)計(jì),在圖書館和網(wǎng)絡(luò)上找到了許多相關(guān)的資料,大大擴(kuò)充自己的知識(shí)面,使許多以前想解決卻無法解決的困難迎刃而解。將書本上的理論知識(shí)和實(shí)際有機(jī)地結(jié)合起來,從理論中得出結(jié)論。鍛煉了實(shí)際分析問題和解決問題的能力,提高了適應(yīng)實(shí)際的能力,為今后的學(xué)習(xí)和實(shí)踐打下了良好的基礎(chǔ)。此次課設(shè)還鞏固和綜合運(yùn)用所學(xué)過的原理知識(shí)

103、,從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 康華光.電子技術(shù)基礎(chǔ)(第5版). 高等教育出版社出版,2006</p><p>  [2] 徐維祥.單片微型機(jī)原理及應(yīng)用 大連理工大學(xué)出版社,2006.12</p><p>  [3] 胡漢才.單片

104、機(jī)原理與接口技術(shù)[M].北京: 清華大學(xué)大學(xué)出版社,2004.1-505.</p><p>  [4] 李朝青.單片機(jī)原理及接口技術(shù)(簡(jiǎn)明修訂版).杭州:北京航空航天大學(xué)出版社,1998</p><p>  [5] 李廣弟.單片機(jī)基礎(chǔ)[M].北京:北京航空航天大學(xué)出版社,1994</p><p>  [6] 曾屹.單片機(jī)原理與應(yīng)用.中南大學(xué)出版社,2009<

105、/p><p>  [7] 蔣力培.單片微機(jī)系統(tǒng)實(shí)用教程(第1版).機(jī)械工業(yè)出版社</p><p>  [8] 姜志海、劉連鑫.單片微型計(jì)算機(jī)原理及應(yīng)用.電子工業(yè)出版社,2011 </p><p>  附錄 系統(tǒng)硬件電路圖</p><p><b>  總電路原理圖</b></p>

溫馨提示

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