計(jì)算器模擬系統(tǒng)設(shè)計(jì)-畢業(yè)設(shè)計(jì)_第1頁
計(jì)算器模擬系統(tǒng)設(shè)計(jì)-畢業(yè)設(shè)計(jì)_第2頁
計(jì)算器模擬系統(tǒng)設(shè)計(jì)-畢業(yè)設(shè)計(jì)_第3頁
計(jì)算器模擬系統(tǒng)設(shè)計(jì)-畢業(yè)設(shè)計(jì)_第4頁
計(jì)算器模擬系統(tǒng)設(shè)計(jì)-畢業(yè)設(shè)計(jì)_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、計(jì)算器模擬系統(tǒng)設(shè)計(jì) 學(xué)生:XXX 指導(dǎo)教師:XXX內(nèi)容摘要:本設(shè)計(jì)是基于51系列的單片機(jī)進(jìn)行的簡易計(jì)算器系統(tǒng)設(shè)計(jì),可以完成計(jì)算器的鍵盤輸入,進(jìn)行加、減、乘、除3位無符號數(shù)字的簡單四則運(yùn)算,并在LED上相應(yīng)的顯示結(jié)果。設(shè)計(jì)過程在硬件與軟件方面進(jìn)行同步設(shè)計(jì)。硬件選擇AT89C51單片機(jī)和74lS164,輸入用4×4矩陣鍵盤。顯示用5位7段共陰極LED靜態(tài)顯示。軟件從分析計(jì)算器功能、流程圖設(shè)計(jì),再到程序的編寫進(jìn)行系統(tǒng)設(shè)計(jì)。選用編譯效率最高的Keil軟件用匯編語言進(jìn)行編程,并用proteus仿真。關(guān)鍵詞:LED 計(jì)算器 AT89C51芯片 74LS164 Calculator simulat

2、ion system designAbstract:The design is a simple calculator based on 51 series microcontroller system design, to complete the calculator keyboard input, add, subtract, multiply, and in addition to three unsigned numeric simple four operations, and the corresponding result will be displayed on the LE

3、D.The design process of hardware and software aspects of the synchronous design. Hardware choose AT89C51 microcontroller and 74ls164-enter the 4 × 4 matrix keyboard. Static display with five 7-segment common cathode LED display. Software calculator function from the analysis, flow charts, desig

4、n, and then program the preparation of system design. Selected to compile the most efficient Keil software in assembly language programming, and with proteus simulation.Keywords: LED calculator AT89C51 chip 74LS164目 錄前言11 設(shè)計(jì)任務(wù)和要求11.1 設(shè)計(jì)要求11.2 設(shè)計(jì)方案的確定22 單片機(jī)簡要原理22.1 AT89c51介紹22.2 芯片74LS164介紹53 硬件設(shè)計(jì)63.

5、1 鍵盤電路的設(shè)計(jì)63.2 顯示電路的設(shè)計(jì)73.3 其他電路設(shè)計(jì)73.3.1 復(fù)位、時(shí)鐘電路設(shè)計(jì)73.3.2 多位數(shù)碼管電路顯示的驅(qū)動電路84 軟件設(shè)計(jì)94.1主程序的設(shè)計(jì)94.2 顯示、讀鍵模塊的設(shè)計(jì)104.3 其他內(nèi)容說明114.3.1 定時(shí)查鍵的程序設(shè)計(jì)114.3.2 軟件的可靠性設(shè)計(jì)124.4 源程序代碼(見附錄)125 調(diào)試與仿真125.1 Keil C51單片機(jī)軟件開發(fā)系統(tǒng)125.2 proteus的操作125.2.1 硬件電路圖的接法操作125.2.2 單片機(jī)系統(tǒng)PROTEUS設(shè)計(jì)與仿真過程136 結(jié)束語13附錄:計(jì)算器程序代碼15參考文獻(xiàn):2324計(jì)算器模擬系統(tǒng)設(shè)計(jì)前言近年來,

6、單片機(jī)以其體積小、價(jià)格廉、面向控制等獨(dú)特優(yōu)點(diǎn),在各種工業(yè)控制、儀器儀表、設(shè)備、產(chǎn)品的自動化、智能化方面獲得了廣泛的應(yīng)用。與此同時(shí),單片機(jī)應(yīng)用系統(tǒng)的可靠性成為人們越來越關(guān)注的重要課題。影響可靠性的因素是多方面的,如構(gòu)成系統(tǒng)的元器件本身的可靠性、系統(tǒng)本身各部分之間的相互耦合因素等。其中系統(tǒng)的抗干擾性能是系統(tǒng)可靠性的重要指標(biāo)。本設(shè)計(jì)采用AT89C51 芯片,實(shí)現(xiàn)了利用單片機(jī)進(jìn)行了一個(gè)簡單計(jì)算器設(shè)計(jì)。允許對輸入數(shù)據(jù)進(jìn)行加減乘除運(yùn)算及LED 顯示。如果設(shè)計(jì)對象是更為復(fù)雜的計(jì)算器系統(tǒng),其實(shí)際原理與方法與本設(shè)計(jì)基本相同。另外,實(shí)例所設(shè)計(jì)的計(jì)算器是用LED 數(shù)碼管顯示的,當(dāng)然也可以用其他的器件顯示,如LED

7、顯示屏,這樣就可以顯示出更多的字符,在此基礎(chǔ)上,還可以編寫更加完善的程序來實(shí)現(xiàn)更多的計(jì)算功能。設(shè)計(jì)的關(guān)鍵所在,必須非常熟悉單片機(jī)的原理與結(jié)構(gòu),同時(shí)還要對整個(gè)設(shè)計(jì)流程有很好的把握,將單片機(jī)和其他模塊完整的銜接。簡易計(jì)算器的原理與設(shè)計(jì)是單片機(jī)課程設(shè)計(jì)課題中的一個(gè)。在完成理論學(xué)習(xí)和必要的實(shí)驗(yàn)后,我們掌握了單片機(jī)的基本原理以及編程和各種基本功能的應(yīng)用,但對單片機(jī)的硬件實(shí)際應(yīng)用和單片機(jī)完整程序設(shè)計(jì)還不清楚,實(shí)際動手能力不夠,因此對該課程進(jìn)行一次課程設(shè)計(jì)是有必要的。單片機(jī)課程設(shè)計(jì)既鞏固了課本學(xué)到的理論,還學(xué)到了單片機(jī)硬件電路和程序設(shè)計(jì),簡易計(jì)算器課程設(shè)計(jì)通過自己動手用計(jì)算機(jī)電路設(shè)計(jì)軟件,編寫和調(diào)試,最后仿

8、真,來加深對單片機(jī)的認(rèn)識,充分發(fā)揮我們的個(gè)人創(chuàng)新和動手能力,并提高我們對單片機(jī)的興趣,時(shí)學(xué)習(xí)查閱資料、參考資料的方1 設(shè)計(jì)任務(wù)和要求1.1 設(shè)計(jì)要求 本次課程設(shè)計(jì),我選擇的課題是單片機(jī)數(shù)字計(jì)算器硬軟件設(shè)計(jì),設(shè)計(jì)任務(wù)為: 擴(kuò)展4*4鍵盤,其中10個(gè)數(shù)字,5個(gè)功能鍵,1個(gè)清零;使用五位數(shù)碼管接口電路;完成十進(jìn)制的四則運(yùn)算(加、減、乘、除); 實(shí)現(xiàn)低于三位小于255數(shù)字的連續(xù)運(yùn)算;使用keil軟件編寫程序; 最后用ptoteus仿真;1.2 設(shè)計(jì)方案的確定 按照設(shè)計(jì)要求,本課題需要使用數(shù)碼管顯示和擴(kuò)展4*4鍵盤,由于實(shí)驗(yàn)箱的硬件電路已經(jīng)固定,故選擇串行靜態(tài)顯示和用P1口擴(kuò)展4*4鍵盤,擴(kuò)展的4*4鍵

9、盤定義十個(gè)數(shù)字鍵,六個(gè)功能鍵,使用串行靜態(tài)顯示顯示運(yùn)算結(jié)果。主程序進(jìn)行初始化,采用定時(shí)器0進(jìn)行查鍵,每次按鍵后調(diào)用顯示子程序。 2 單片機(jī)簡要原理2.1 AT89c51介紹 圖2.1-1 AT89C51管腳圖芯片AT89C51的外形結(jié)構(gòu)和引腳圖如21所示。AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機(jī)。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃

10、爍存儲器組合在單個(gè)芯片中,ATMEL的AT89C51是一種高效微控制器,為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉的方案。主要特性:8051 CPU與MCS-51 兼容4K字節(jié)可編程FLASH存儲器(壽命:1000寫/擦循環(huán))全靜態(tài)工作:0Hz-24KHz三級程序存儲器保密鎖定128*8位內(nèi)部RAM32條可編程I/O線兩個(gè)16位定時(shí)器/計(jì)數(shù)器5個(gè)中斷源可編程串行通道低功耗的閑置和掉電模式片內(nèi)振蕩器和時(shí)鐘電路管腳說明VCC:供電電壓(圖中未畫出)GND:接地。 P0口:P0口為一個(gè)8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時(shí),被定義為高阻輸入。P0能夠用于外部

11、程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時(shí),P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須被拉高。P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接收。P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門電流,當(dāng)P2口被寫“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被

12、外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進(jìn)行讀寫時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號和控制信號。P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。管腳 備選功能P3.0 RXD(串行輸入口)P3.1 TXD(串行輸出口)P

13、3.2 /INT0(外部中斷0)P3.3 /INT1(外部中斷1)P3.4 T0(記時(shí)器0外部輸入)P3.5 T1(記時(shí)器1外部輸入)P3.6 /WR(外部數(shù)據(jù)存儲器寫選通)P3.7 /RD(外部數(shù)據(jù)存儲器讀選通)P3口同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號。RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平時(shí)間。ALE/PROG:當(dāng)訪問外部存儲器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時(shí),ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時(shí)目的。然而要注意

14、的是:每當(dāng)用作外部數(shù)據(jù)存儲器時(shí),將跳過一個(gè)ALE脈沖。如想禁止ALE輸出可在SFR8EH地址上置0。此時(shí), ALE只有在執(zhí)行MOVX,MOVC指令時(shí)才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。/PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個(gè)機(jī)器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時(shí),這兩次有效的/PSEN信號將不出現(xiàn)。/EA/VPP:當(dāng)/EA保持低電平時(shí),則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時(shí),/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時(shí),此間內(nèi)部程序存儲器。在

15、FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。XTAL2:來自反向振蕩器的輸出引腳。2.2 芯片74LS164介紹74LS164是一個(gè)串入并出的8位移位寄存器,他常用于單片機(jī)系統(tǒng)中,下面結(jié)束一下這個(gè)元件的基本知識。74LS164外部結(jié)構(gòu)和引腳如圖22所示: 圖2.2-1 74LS164引腳圖主要特性:串行輸入帶鎖存 時(shí)鐘輸入,串行輸入帶緩沖 異步清除 最高時(shí)鐘頻率可高達(dá)36Mhz 功耗:10mW/bit 74系列工作溫度: 0C to 70C Vcc最高電壓:7V 輸入最高電壓:7V 最大輸出驅(qū)動能力:高電平:0.4mA

16、 ; 低電平:8mA 引腳功能:在單片機(jī)系統(tǒng)中, 如果并行口的IO資源不夠,而串行口又沒有其他的作用, 那么我們可以用74LS164來擴(kuò)展并行IO口,節(jié)約單片機(jī)資源。74LS164是一個(gè)串行輸入并行輸出的移位寄存器。并帶有清除端。其中,Q0Q7 并行輸出端 ; A,B串行輸入端; MR 清除端, 為0時(shí),輸出清零。CP 時(shí)鐘輸入端。3 硬件設(shè)計(jì)3.1 鍵盤電路的設(shè)計(jì) 鍵盤可分為兩類:編碼鍵盤和非編碼鍵盤。編碼鍵盤是較多按鍵(20個(gè)以上)和專用驅(qū)動芯片的組合,當(dāng)按下某個(gè)按鍵時(shí),它能夠處理按鍵抖動、連擊等問題,直接輸出按鍵的編碼,無需系統(tǒng)軟件干預(yù)。通用計(jì)算機(jī)使用的標(biāo)準(zhǔn)鍵盤就是編碼鍵盤。在智能儀器中

17、,使用并行接口芯片8279或串行接口芯片HD7279均可以組成編碼鍵盤,同時(shí)還可以兼顧數(shù)碼管的顯示驅(qū)動,其相關(guān)的接口電路和接口軟件均可在芯片資料中得到。當(dāng)系統(tǒng)功能比較復(fù)雜,按鍵數(shù)量很多時(shí),采用編碼鍵盤可以簡化軟件設(shè)計(jì)。但大多數(shù)智能儀器和電子產(chǎn)品的按鍵數(shù)目都不太多(20個(gè)以內(nèi)),為了降低成本和簡化電路通常采用非編碼鍵盤。非編碼鍵盤的接口電路有設(shè)計(jì)者根據(jù)需要自行決定,按鍵信息通過接口軟件來獲取。 本課題需要的是16個(gè)按鍵,故選擇用非編碼鍵盤,為了減少所占用的端口,由P1口采用4*4矩陣式鍵盤。具體電路連接如圖3.1-1所示。 圖3.1-1 4*4鍵盤輸入3.2 顯示電路的設(shè)計(jì) 當(dāng)系統(tǒng)需要顯示少量數(shù)

18、據(jù)時(shí),采用LED數(shù)碼管進(jìn)行顯示是一種經(jīng)濟(jì)實(shí)用的方法。數(shù)碼管顯示有靜態(tài)顯示和動態(tài)顯示兩種方法。為了減少端口的使用,故選擇靜態(tài)顯示,并采用共陰極接法電路。LED數(shù)碼管顯示塊是由發(fā)光二極管顯示字段的顯示器件。在單片機(jī)應(yīng)用中通常使用七段LED。這種顯示塊有共陰極和共陽極兩種。3.3 其他電路設(shè)計(jì)3.3.1 復(fù)位、時(shí)鐘電路設(shè)計(jì)當(dāng)使用內(nèi)部振蕩電路時(shí),XTAL1.XTAL2引腳外接石英晶體和微調(diào)電容,如圖所示,圖中C2.C3大小一般為30PF。還加了復(fù)位/備用電源引腳的接線方法,任何單片機(jī)在工作之前都要進(jìn)行復(fù)位,以便CPU以及其他功能部件都處于一個(gè)確定的初始化狀態(tài),并從這個(gè)狀態(tài)開始工作,也就是程序開始執(zhí)行之

19、前,單片機(jī)做好準(zhǔn)備工作。如何進(jìn)行復(fù)位呢?只用在單片機(jī)的RST引腳上保持兩個(gè)。 圖3.3.1-1時(shí)鐘電路 圖3.3.1-2復(fù)位電路機(jī)器周期(24個(gè)時(shí)鐘周期)的高電平即可對單片機(jī)實(shí)現(xiàn)復(fù)位操作。當(dāng)主電源Vcc發(fā)生掉電或者是電壓降低到電平規(guī)定值時(shí),VPD上外接的備用電源自動啟用,為單片機(jī)內(nèi)部RAM提供電源,以保護(hù)片內(nèi)RAM中的信息不丟失,使系統(tǒng)在恢復(fù)上電后能正常運(yùn)行。3.3.2 多位數(shù)碼管電路顯示的驅(qū)動電路單片機(jī)應(yīng)用中只有一位的的數(shù)字顯示是不常見的,即要同時(shí)驅(qū)動多個(gè)數(shù)碼管顯示,就必須要同時(shí)讓多個(gè)數(shù)碼管加上各自不同的選片段,這個(gè)屬于靜態(tài)顯示。所謂靜態(tài)顯示,就是每一個(gè)顯示器,都要占用單獨(dú)的具有封鎖功能的I

20、/O接口用于筆畫字段形代碼,單片機(jī)只要把顯示的字形代碼發(fā)送到接口電路,直到要顯示新的數(shù)據(jù)時(shí),再發(fā)送新的字形碼,因此,使用這種方法單片機(jī)中CPU的開銷小,可以提高單獨(dú)鎖存的I/O接口電路很多,這里以常用的串并轉(zhuǎn)化電路74LS164為例介紹一種常用靜態(tài)顯示電路。74ls16474ls16474ls16474ls16474ls164TXDRXD89C51H.AH.AH.AH.AH.A圖3.3.2-1 五位數(shù)碼管靜態(tài)顯示框圖及接法5片74LS164首尾相串,而時(shí)鐘端接在一起,這樣,當(dāng)輸入8個(gè)脈沖時(shí),從單片機(jī)RXD端輸出的數(shù)據(jù)就進(jìn)入到第一個(gè)74LS164中了,當(dāng)?shù)诙€(gè)8個(gè)脈沖到來時(shí),這個(gè)數(shù)據(jù)就進(jìn)入了第二

21、個(gè)片74LS164,新的數(shù)據(jù)則進(jìn)入了第一個(gè)74LS164。這樣,當(dāng)?shù)谖鍌€(gè)脈沖完成后,首次送出的數(shù)據(jù)被送入到最左面的74LS164中,其他數(shù)據(jù)依次出現(xiàn)在第一、第二、第三、第四片74LS164中。入口:把要顯示的數(shù)分別放在顯示緩沖區(qū)60H-64H共五個(gè)單元中,并且分別對應(yīng)五個(gè)數(shù)碼管LED1-LED4。出口:蔣預(yù)置在顯示緩沖區(qū)中的五個(gè)數(shù)組成相應(yīng)的現(xiàn)實(shí)字形碼,然后輸出到顯示器中顯示。 圖3.3.2-2 計(jì)算器設(shè)計(jì)圖4 軟件設(shè)計(jì)在軟件規(guī)劃要求下,簡易計(jì)算器的程序主要包括以下功能模塊:主模塊,為系統(tǒng)初始化。顯示與讀鍵模塊,分顯示子程序,判鍵程序段、運(yùn)算操作子程序等部分;4.1 主程序的設(shè)計(jì)初始化參數(shù)清零鍵

22、LED顯示輸入數(shù)值讀取鍵值狀態(tài)清零數(shù)值送顯示緩存開始按鍵輸入?分析鍵值數(shù)字鍵等待數(shù)值輸入結(jié)果送顯示緩存保存結(jié)果和功能鍵根據(jù)上次功能鍵和輸入功能鍵否是是數(shù)字鍵是清零鍵是功能鍵 圖4.1-1 主程序流程圖 主程序主要是用來進(jìn)行初始化的,調(diào)用其他子程序,清空各個(gè)標(biāo)志位,清空緩存區(qū),讀取鍵碼,判斷功能,在LED上作出回應(yīng),主程序流程圖如圖41所示。數(shù)字送顯示緩沖程序設(shè)計(jì):簡易計(jì)算器所顯示的數(shù)值最大位三位。要顯示數(shù)值,先判斷數(shù)值大小和位數(shù),如果是超過三位或大于255,將不顯示數(shù)字??芍匦螺斎霐?shù)字,再次計(jì)算。運(yùn)算程序的設(shè)計(jì):首先初始化參數(shù),送LED低位顯示“0”,高位不顯示。然后掃描鍵盤看是否有鍵輸入,若

23、有,讀取鍵碼判斷鍵碼是數(shù)字鍵、清零鍵還是功能鍵,是數(shù)值鍵則送LED顯示并保存數(shù)值,是清零鍵則做清零處理,是功能鍵則又判斷是“=”還是運(yùn)算鍵,若是“=”則計(jì)算最后結(jié)果并送LED顯示,若是運(yùn)算鍵則保存相對運(yùn)算程序的首地址。4.2 顯示、讀鍵模塊的設(shè)計(jì)LED顯示器由七段發(fā)光二極管組成,排列成8字形狀,因此也稱為七段LED顯示器。簡易計(jì)算器用到的數(shù)字09的共陰極字形代碼如下表:表4.2-1 共陰極字形代碼表顯示字gfedcba段碼001111113fh1000011006h210110115bh310011114fh4110011066h511011016dh611111017dh7000011107

24、h811111117fh911011116fh 為了實(shí)現(xiàn)鍵盤的輸入功能,每個(gè)鍵都有其處理子程序,為此每個(gè)鍵都對應(yīng)一個(gè)碼鍵碼。為了得到被按鍵的鍵碼,使用行掃描法識別按鍵。4.3 其他內(nèi)容說明4.3.1 定時(shí)查鍵的程序設(shè)計(jì)進(jìn)入定時(shí)器0的中斷程序后,首先重新付初值,然后調(diào)用讀鍵程序,如果有鍵按下,則判斷按鍵是否與上次按鍵相同,如果相同則判斷按鍵相應(yīng)位是否為一,如果不為一,說明這不是持續(xù)按鍵導(dǎo)致的按鍵相應(yīng),并且進(jìn)行相應(yīng)的程序。如果不是則退出中斷程序。 讀鍵程序使用的是反轉(zhuǎn)法讀鍵,不管鍵盤矩陣的規(guī)模大小,均進(jìn)行兩次讀鍵。第一次所有行線均輸出低電平,從所有讀入鍵盤信息(列信息);第二次所有列線均輸出低電平

25、,從所有行線讀入鍵盤信息(行信息)。將兩次讀鍵信息進(jìn)行組合就可以得到按鍵的特征編碼,然后通過查表得到按鍵的順序編碼。將各特征編碼按希望的順序排成一張表,然后用當(dāng)前讀得的特征碼來查表。當(dāng)表中有該特征碼時(shí),它的位置就是對應(yīng)的順序編碼;當(dāng)表中沒有該特征碼時(shí),說明這是一個(gè)沒有定義的鍵碼,與沒有按鍵(0FFH)同等看待。 數(shù)字鍵按下則將相應(yīng)的數(shù)字送入緩存區(qū),功能鍵按下則執(zhí)行相應(yīng)的程序。 首先對數(shù)字鍵的程序段進(jìn)行相應(yīng)的設(shè)計(jì),如果運(yùn)算鍵(、,*,/)響應(yīng)標(biāo)志不為一,則將輸入的數(shù)字送入第一個(gè)操作數(shù)緩存區(qū),并且清空所有響應(yīng)位。否則送入第二個(gè)操作數(shù)緩存區(qū)。其次對功能鍵的程序段進(jìn)行相應(yīng)的設(shè)計(jì)。如果功能鍵(、,*,/

26、)第一次被按下,則置相應(yīng)的標(biāo)志位為一,并且將運(yùn)算鍵響應(yīng)標(biāo)志位置一,清空第二個(gè)操作數(shù)的緩存區(qū),為輸入操作數(shù)做準(zhǔn)備,如果是第二次按下則先調(diào)用運(yùn)算操作子程序,執(zhí)行上次按下的運(yùn)算鍵的運(yùn)算,置相應(yīng)的標(biāo)志位為一,并且將運(yùn)算鍵響應(yīng)標(biāo)志位置一,清空第二個(gè)操作數(shù)的緩存區(qū),為輸入操作數(shù)做準(zhǔn)備。 如果是C鍵按下,則先判斷運(yùn)算鍵響應(yīng)位是否為一,如果不為一,則清空第一個(gè)操作數(shù),否則清空第二個(gè)操作數(shù)。 如果是=鍵按下,則調(diào)用運(yùn)算操作子程序。 4.3.2 軟件的可靠性設(shè)計(jì) 提高本儀器的可靠性措施主要有:  為防止程序跑飛,軟件中設(shè)置了軟件陷阱  為防止鍵盤抖動造成按鍵錯誤,采取了軟件防 為了保

27、證結(jié)果的正確性,結(jié)果溢出時(shí)顯示錯誤代碼0 4.4 源程序代碼(見附錄)5 調(diào)試與仿真下面用Keil與 porteus仿真軟件介紹數(shù)字計(jì)算器的仿真與調(diào)試。5.1 Keil C51單片機(jī)軟件開發(fā)系統(tǒng)采用KEIL 開發(fā)的89c51單片機(jī)應(yīng)用程序步驟:在keil 集成開發(fā)環(huán)境中創(chuàng)建新項(xiàng)目(Project),擴(kuò)展文件名為.UV2,并為該項(xiàng)目選定合適的單片機(jī)CPU器件(本設(shè)計(jì)采用ATMEL 公司下的AT89C51)用keil的文本編輯器編寫源文件,可以是匯編文件(.ASM),并將該文件添加到項(xiàng)目中去。一個(gè)項(xiàng)目文件可以包含多個(gè)文件,除了源程序文件外,還可以是庫文件、頭文件或文本說明文件。通過keil的相關(guān)選

28、擇項(xiàng),配置編譯環(huán)境、連接定位器以及Debug調(diào)試器的功能。對項(xiàng)目中的源文件進(jìn)行編譯連接,生成絕對目標(biāo)代碼和可選的HEX文件,如果出現(xiàn)編譯連接錯誤則返回到第2步,修改源文件中的錯誤后重構(gòu)整個(gè)項(xiàng)目。對沒有語法錯誤的程序進(jìn)行仿真調(diào)試,調(diào)試成功后將HEX文件寫入到單片機(jī)應(yīng)用系統(tǒng)的ROM中。5.2 proteus的操作5.2.1 硬件電路圖的接法操作 放置選擇(刪除)元器件移動元器件縮放視圖連接導(dǎo)線仿真,調(diào)試5.2.2 單片機(jī)系統(tǒng)PROTEUS設(shè)計(jì)與仿真過程Proteus強(qiáng)大的單片機(jī)系統(tǒng)設(shè)計(jì)與仿真功能,使它可成為單片機(jī)系統(tǒng)應(yīng)用開發(fā)和改進(jìn)手段之一。全部過程都是在計(jì)算機(jī)上通過Proteus來完成的。其過程一

29、般也可分為三步:在ISIS平臺上進(jìn)行單片機(jī)系統(tǒng)電路設(shè)計(jì)、選擇元器件、接插件、連接電路和電氣檢測等。簡稱Proteus電路設(shè)計(jì)。在Keil平臺上進(jìn)行單片機(jī)系統(tǒng)程序設(shè)計(jì)、編輯、匯編編譯、代碼級調(diào)試,最后生成目標(biāo)代碼文件(*.hex)。簡稱Proteus源程序設(shè)計(jì)和生成目標(biāo)代碼文件。在ISIS平臺上將目標(biāo)代碼文件加載到單片機(jī)系統(tǒng)中,并實(shí)現(xiàn)單片機(jī)系統(tǒng)的實(shí)時(shí)交互、協(xié)同仿真。它在相當(dāng)程度上反映了實(shí)際單片機(jī)系統(tǒng)的運(yùn)行情況。簡稱Proteus仿真。6 結(jié)束語基于單片機(jī)的設(shè)計(jì)至今為止已經(jīng)進(jìn)入了令人鼓舞的階段,在進(jìn)行了兩周時(shí)間的摸索與設(shè)計(jì),使我不僅僅對于單片機(jī)軟件與硬件的常用設(shè)計(jì)與功能有所認(rèn)識,還使我對于一項(xiàng)設(shè)計(jì)

30、研究的制作過程所需要的詳細(xì)步驟和具體實(shí)現(xiàn)方法有了進(jìn)一步的掌握。由于我們的初步嘗試,當(dāng)中的缺點(diǎn)是無可非議地存在著。當(dāng)然在這次寶貴的設(shè)計(jì)活動中,經(jīng)驗(yàn)才是對于我們最大的收獲,而且還增強(qiáng)了自身對未知問題以及對知識的深化認(rèn)識的能力,但是,僅僅是完成了作品還是不可以自我滿足的,我們要認(rèn)真的思考設(shè)計(jì)過程中遇到的問題,多查資料,將理論與實(shí)際相結(jié)合思考,并在以后的學(xué)習(xí)中更要加倍注意犯過的錯誤。總之,這次設(shè)計(jì)從軟件編寫調(diào)試到軟硬件聯(lián)機(jī)調(diào)試,發(fā)現(xiàn)了自己的許多不足,在以后的學(xué)習(xí)中,我將一定回注意。課程設(shè)計(jì)是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識,發(fā)現(xiàn)、提出、分析和解決實(shí)際問題,鍛煉實(shí)踐能力的重要環(huán)節(jié),是對學(xué)生實(shí)際工作能力的具體訓(xùn)練

31、和考察過程。隨著科學(xué)技術(shù)發(fā)展的日新日異,單片機(jī)已經(jīng)成為當(dāng)今計(jì)算機(jī)應(yīng)用中空前活躍的領(lǐng)域,在生活中可以說得是無處不在。因此作為自動化專業(yè)的學(xué)生來說掌握單片機(jī)的開發(fā)技術(shù)是十分重要的。 我的題目是計(jì)算器模擬系統(tǒng)的設(shè)計(jì),對于我們這些工科學(xué)生來說,這是一次考驗(yàn)。怎么才能找到課堂所學(xué)與實(shí)際應(yīng)用的最佳結(jié)合點(diǎn)?怎樣讓自己的業(yè)余更接近專業(yè)?怎樣讓自己的計(jì)劃更具有序性,而不會忙無一用?這都是我們所要考慮和努力的。這次課程設(shè)計(jì)我學(xué)到很多很多的東西,學(xué)會了怎么樣去制定計(jì)劃,怎么樣去實(shí)現(xiàn)這個(gè)計(jì)劃,并掌握了在執(zhí)行過程中怎么樣去克服心理上的不良情緒。不僅鞏固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識,掌握了

32、一種系統(tǒng)的研究方法,可以進(jìn)行一些簡單的編程。通過這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實(shí)踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實(shí)際動手能力和獨(dú)立思考的能力。同時(shí)在設(shè)計(jì)的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固,對單片機(jī)匯編語言掌握得不夠好。這次課程設(shè)計(jì)通過自己的努力,同學(xué)的幫助,網(wǎng)絡(luò)資料的收集,最終順利完成了。最后,對我們的XX老師,表示感謝!謝謝他半年來對我的幫助和指導(dǎo)。同時(shí),對幫助我的所有同學(xué)表示衷心的感謝!附錄:計(jì)算器程序代碼DBUF EQU 30HTEMP EQU

33、 40HYJ EQU50H ;結(jié)果存放YJ1 EQU51H ;中間結(jié)果存放GONG EQU52H ;功能鍵存放DIN BIT0B0H ;P3.0CLK BIT 0B1H ;P3.1ORG 00HSTART:MOV R3,#0 ;初始化顯示為空MOV GONG,#0MOV 30H,#10HMOV 31H,#10HMOV 32H,#00HMOV 33H,#10HMOV 34H,#10HMLOOP:CALL DISP ;PAN調(diào)顯示子程序WAIT:CALL TESTKEY ;判斷有無按鍵JZ WAIT CALL GETKEY ;讀鍵INC R3 ;按鍵個(gè)數(shù)CJNE A,#0,NEXT1 ;判斷是否數(shù)

34、字鍵LJMP E1 ;轉(zhuǎn)數(shù)字鍵處理NEXT1:CJNE A,#1,NEXT2LJMP E1NEXT2:CJNE A,#2,NEXT3LJMP E1NEXT3:CJNE A,#3,NEXT4LJMP E1NEXT4:CJNE A,#4,NEXT5LJMP E1NEXT5:CJNE A,#5,NEXT6LJMP E1NEXT6:CJNE A,#6,NEXT7LJMP E1NEXT7:CJNE A,#7,NEXT8LJMP E1NEXT8:CJNE A,#8,NEXT9LJMP E1NEXT9:CJNE A,#9,NEXT10LJMP E1NEXT10:CJNE A,#10,NEXT11 ;判斷是否

35、功能鍵LJMP E2 ;轉(zhuǎn)功能鍵處理NEXT11:CJNE A,#11,NEXT12LJMP E2NEXT12:CJNE A,#12, NEXT13LJMP E2NEXT13:CJNE A,#13,NEXT14LJMP E2NEXT14:CJNE A,#14,NEXT15LJMP E2NEXT15:LJMP E3 ;判斷是否清除鍵E1:CJNE R3,#1,N1 ;判斷第幾次按鍵LJMP E11 ;為第一個(gè)數(shù)字N1:CJNE R3,#2,N2LJMP E12 ;為第二個(gè)數(shù)字N2:CJNE R3,#3,N3 LJMP E13 ;為第三個(gè)數(shù)字N3:LJMP E3 ;第四個(gè)數(shù)字轉(zhuǎn)溢出E11:MOV

36、R4,A ;輸入值暫存R4MOV 34H,A ;輸入值送顯示緩存MOV 33H,#10HMOV 32H,#10HLJMP MLOOP ;等待再次輸入E12:MOV R7,A ;個(gè)位數(shù)暫存R7MOV B,#10MOV A,R4MUL AB ;十位數(shù)ADDA,R7MOV R4,A ;輸入值存R4MOV 32H,#10H ;輸入值送顯示緩存MOV 33H,34HMOV 34H,R7LJMP MLOOPE13:MOV R7,AMOV B,#10MOV A,R4MUL ABJB OV,E3 ;輸入溢出ADD A,R7JB CY,E3 ;輸入溢出MOV R4,A MOV 32H,33H ;輸入值送顯示緩存

37、MOV 33H,34HMOV 34H,R7LJMP MLOOPE3:MOV R3,#0 ;按鍵次數(shù)清零MOV R4,#0 ;輸入值清零MOV YJ,#0 ;計(jì)算結(jié)果清零MOV GONG,#0 ;功能鍵設(shè)為零MOV 30H,#10H ;顯示清空MOV 31H,#10HMOV 32H,#10HMOV 33H,#10HMOV 34H,#00HLJMP MLOOPE2:MOV 34H,#10HMOV 33H,#10HMOV 32H,#10HMOV R0,GONG ;與上次功能鍵交換MOV GONG,AMOV A,R0CJNE A,#10,N21 ;判斷功能鍵LJMP JIA ;“”N21:CJNE A

38、,#11,N22LJMP JIAN ;“”N22:CJNE A,#12,N23LJMP CHENG ;“*”N23:CJNE A,#13,N24 LJMP CHU ;“/”N24:CJNE A,#0,N25LJMP FIRST ;首次按功能鍵N25:LJMP DEN ;“=”N4:LJMP E3FIRST:MOV YJ,R4 ;輸入值送結(jié)果MOV R3,#0 ;按鍵次數(shù)清零LJMP DISP1 ;結(jié)果處理JIA:MOV A,YJ;上次結(jié)果送累加器ADD A,R4 ;上次結(jié)果加輸入值JB CY,N4 ;溢出MOV YJ,A;存本次結(jié)果MOV R3,#0;按鍵次數(shù)清零LJMP DISP1JIAN:

39、MOV A,YJSUBB A,R4 ;上次結(jié)果減輸入值JB CY,N4 ;負(fù)數(shù)溢出MOV YJ,AMOV R3,#0LJMP DISP1CHENG:MOV A,YJMOV B,AMOV A,R4MUL AB ;上次結(jié)果乘輸入值JB OV,N4 ;溢出MOV YJ,ALJMP DISP1CHU:MOV A,R4MOV B,AMOV A,YJDIV AB ;上次結(jié)果除輸入值MOV YJ,AMOV R3,#0LJMP DISP1DEN:MOV R3,#0LJMP DISP1DISP1:MOVB,#10MOVA,YJ;結(jié)果送累加器DIVAB;結(jié)果除10MOVYJ1,A;暫存“商”MOVA,B;取個(gè)位數(shù)

40、MOV34H,A;個(gè)位數(shù)送顯示緩存MOVA,YJ1JZDISP11;結(jié)果是否為一位數(shù)MOVB,#10MOVA,YJ1DIVABMOVYJ1,AMOVA,BMOV33H,A;十位送顯示緩存MOVA,YJ1JZDISP11;結(jié)果是否為二位數(shù)MOV32H,A;百位數(shù)送顯示緩存DISP11:LJMPMLOOPDISP:MOVR0,#DBUF;顯示子程序MOVR1,#TEMP+4MOVR2,#5DP10:MOVDPTR,#SEGTABMOVA,R0MOVCA,A+DPTRMOVR1,AINCR0DECR1DJNZR2,DP10MOVR0,#TEMPMOVR1,#5DP12:MOVR2,#8MOVA,R0DP13:RLCAMOVDIN,CCLRCLKSETBCLKDJNZR2,DP13INCR0DJNZR1,DP12RETSEGTAB: DB3FH,06H,5BH,4FH,66H,6DH;段碼定義 DB7DH,07H,7FH,6FH,77H,7CHDB39H,5EH,79H,71H,00H,40HTESTKEY:MOVP1,#0FH ;讀入鍵狀態(tài)MOVA,P1CPLAANLA,#0FH ;高四位不用RETKEYTABLE:DB0DEH,0EDH,0DDH,0BDH ;鍵碼定義DB0EBH,0DBH,0BBH,0E7HDB0D7H,0B7H,07EH,07DHDB07BH,077

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論