硬件課程設(shè)計 LCD版電子計算器_第1頁
硬件課程設(shè)計 LCD版電子計算器_第2頁
硬件課程設(shè)計 LCD版電子計算器_第3頁
硬件課程設(shè)計 LCD版電子計算器_第4頁
硬件課程設(shè)計 LCD版電子計算器_第5頁
已閱讀5頁,還剩27頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 計算機科學(xué)與技術(shù)學(xué)院 硬件課程設(shè)計 電子計算器 姓 名: 學(xué) 號: 班 級: 選擇課題: LCD 電子計算器 指導(dǎo)教師: 二一五年一月十四日摘 要電子計算器的設(shè)計主要分為鍵盤掃描與讀取編碼、LCD顯示和四則運算的編寫。這次設(shè)計中我們采用可編程接口芯片8255鏈接4*4鍵盤和LCD顯示,從鍵盤掃描讀入數(shù)字,在顯示屏上面顯示出來,并通過cpu運算出結(jié)果顯示在屏幕上。由于對匯編語言也不甚了解,只是進行一些簡單的自然數(shù)的四則運算。由于本次實驗中,實驗箱是TPC-ZK綜合微機開放式實驗系統(tǒng),微機接口實驗儀采用模塊化、積木式的結(jié)構(gòu),各實塊互不影響。但可通過連線將各實驗?zāi)K有機組合起來,進行微機外圍接口實

2、驗。這個實驗選擇的是4*4鍵盤連接上8255A然后控制LCD顯示。關(guān)鍵詞:8255A ;LCD顯示屏 ;鍵盤 ;匯編語言 ;四則運算 目 錄1 設(shè)計任務(wù)與要求2 1.1選題2 1.2需求分析2 1.3設(shè)計任務(wù)22硬件方案2 2.1微處理器8086芯片2 2.2 可編程并行接口8255A芯片3 2.3 4*4矩陣鍵盤 5 2.4 LCD顯示屏 6 2.5 電路及其功能模塊圖 73軟件方案 8 3.1流程圖 8 4 問題與解決方案105 成果展示 116 心得體會 137參考文獻148.附錄(代碼)141 設(shè)計任務(wù)與設(shè)計要求1.1選題我選的題目是電子計算器,電子計算器的設(shè)計主要分為鍵盤編碼、七段數(shù)

3、碼管顯示、和四則運算法則這三部分。設(shè)計時用可編程接口芯片8255A鏈接4*4鍵盤和LCD顯示器,8255掃描鍵盤并通過LCD顯示相應(yīng)的數(shù)字,這其中需要一定的匯編程序作為核心支撐,才能正確的使各種功能運行正常。1.2需求分析通過對選題的深入了解,電子計算器基本功能可以概括為:1. 可以進行簡單的加、減、乘、除四則運算;2. 為了顯示的人性化,按下每個數(shù)字都要進行反饋顯示;3. 計算器能判斷個別簡單的錯誤,如除數(shù)為零,顯示報錯;4. 計算器要有清零功能,可以在按鍵失誤后重新按鍵。在顯示屏上可以及時反饋按下數(shù)字,這需要掃描程序模塊一直運行著,并能夠及時調(diào)用顯示程序模塊,當有運算符號按下時還要及時給之

4、前按下的數(shù)字進行組裝成一個數(shù)值,組裝鍵值模塊也是程序的重要所在。等等這些都是在主程序下合理安排、運用流暢的,才能帶來較完美的計算器體驗。1.3設(shè)計任務(wù)本次實驗我分為電路設(shè)計和編碼設(shè)計這兩個任務(wù)模塊來設(shè)計的。電路設(shè)計主要研究鍵盤按鍵位置設(shè)計和各個芯片器件之間的連線。編碼設(shè)計主要分為鍵盤掃描讀取編碼、LCD顯示編碼和四則運算編碼。2 硬件方案2.1微處理器8086芯片當引腳接高電平時,CPU工作于最小模式。此時,引腳信號2431的含義及其功能如下: (1)IO/M:存儲器、I/O端口選擇控制信號。信號指明當前CPU是選擇訪問存儲器還是訪問I/O端口。為高電平時訪問存儲器,表示當前要進行CPU與存儲

5、器之間的數(shù)據(jù)傳送。為低電平時,訪問I/O端口,表示當前要進行CPU與I/O端口之間的數(shù)據(jù)傳送。 (2)WR:寫信號,輸出,低電平有效。信號有效時,表明CPU正在執(zhí)行寫總線周期,同時由信號決定是對存儲器還是對I/O端口執(zhí)行寫操作。(3)INTA:可屏蔽中斷響應(yīng)信號,輸出,低電平有效。 CPU通過信號對外設(shè)提出的可屏蔽中斷請求做出響應(yīng)。為低電平時,表示CPU已經(jīng)響應(yīng)外設(shè)的中斷請求,即將執(zhí)行中斷服務(wù)程序。 (4)ALE:地址鎖存允許信號,輸出,高電平有效。 CPU利用ALE信號可以把AD15 AD0地址/數(shù)據(jù)、A19/S6A16/S3地址/狀態(tài)線上的地址信息鎖存在地址鎖存器中。 (5)DT:數(shù)據(jù)發(fā)送

6、/接收信號,輸出,三態(tài)。DT/信號用來控制數(shù)據(jù)傳送的方向。DT/為高電平時,CPU發(fā)送數(shù)據(jù)到存儲器或I/O端口;DT/為低電平時,CPU接收來自存儲器或I/O端口的數(shù)據(jù)。 (6)DEN:數(shù)據(jù)允許控制信號,輸出,三態(tài),低電平有效。信號用作總線收發(fā)器的選通控制信號。當為低電平時,表明CPU進行數(shù)據(jù)的讀/寫操作。 (7)HOLD:總線保持請求信號,輸入,高電平有效。在DMA數(shù)據(jù)傳送方式中,由總線控制器8237A發(fā)出一個高電平有效的總線請求信號,通過HOLD引腳輸入到CPU,請求CPU讓出總線控制權(quán)。 (8)HLDA:總線保持響應(yīng)信號,輸出,高電平有效。HLDA是與HOLD配合使用的聯(lián)絡(luò)信號。在HLD

7、A有效期間,HLDA引腳輸出一個高電平有效的響應(yīng)信號,同時總線將處于浮空狀態(tài),CPU讓出對總線的控制權(quán),將其交付給申請使用總線的8237A控制器使用,總線使用完后,會使HOLD信號變?yōu)榈碗娖?,CPU又重新獲得對總線的控制權(quán)。2.2 可編程并行接口8255A芯片8255A可為8086微處理器與外部設(shè)備之間提供并行輸入/輸出的通道。通過編程可以設(shè)置芯片的工作方式,因此,用8255A連接外部設(shè)備時,通常不用再附加外部電路。并行接口是在多根數(shù)據(jù)線上,以數(shù)據(jù)字節(jié)/字與I/O設(shè)備交換信息。 在輸入過程中,輸入設(shè)備把數(shù)據(jù)送給接口,并且使狀態(tài)線“輸入準備好”有效。接口把數(shù)據(jù)存放在“輸入緩沖寄存器”中,同時使“

8、輸入回答”線有效,作為對外設(shè)的響應(yīng)。外設(shè)在收到這個回答信號后,就撤消數(shù)據(jù)和“輸入準備好”信號。數(shù)據(jù)到達接口中后,接口會在“狀態(tài)寄存器”中設(shè)置輸入準備好標志,或者向CPU發(fā)一個中斷請求。CPU可用查詢方式或中斷方式從接口中讀取數(shù)據(jù)。接口中的數(shù)據(jù)被讀取后,接口會自動清除狀態(tài)寄存器中的標志,且撤消對CPU的中斷請求。 在輸出過程中,每當輸出寄存器可以接收數(shù)據(jù),接口就會將狀態(tài)寄存器中“輸出準備好”狀態(tài)置1或向CPU發(fā)一個中斷請求,CPU可用查詢或中斷方式向接口輸出數(shù)據(jù)。當CPU輸出的數(shù)據(jù)到達接口后,接口會清除“輸出準備好”狀態(tài),把數(shù)據(jù)送往外設(shè),并向外設(shè)發(fā)一個“數(shù)據(jù)輸出準備好”信號。外設(shè)受到驅(qū)動后,便接

9、收數(shù)據(jù),并向接口電路發(fā)一個“輸出回答”信號,接口收到該回答信號后,又將狀態(tài)寄存器中“輸出準備好”置位,以便CPU輸出下一個數(shù)據(jù)。(1) 8255A的一些引腳RESET:復(fù)位輸入線,當該輸入端外于高電平時,所有內(nèi)部寄存器(包括控制寄存器)均被清除,所有I/O 口均被置成輸入方式。PA0PA7:端口A 輸入輸出線,一個8 位的數(shù)據(jù)輸出鎖存器/緩沖器, 一個 8 位的數(shù)據(jù)輸入鎖存器。PB0PB7:端口B 輸入輸出線,一個8 位的I/O 鎖存器, 一個 8 位的輸入輸出緩沖器。PC0PC7:端口C 輸入輸出線,一個8 位的數(shù)據(jù)輸出鎖存器/緩沖器, 一個 8 位的數(shù)據(jù)輸入緩沖器。端口C 可以通過工作方式

10、設(shè)定而分成2 個4 位的端口, 每個 4 位的端口包含一個4 位的鎖存器,分別與端口A 和端口B 配合使用,可作為控制信號輸出或狀態(tài)信號輸入端口。CS:片選信號線,當這個輸入引腳為低電平時,表示芯片被選中,允許8255 與CPU 進行通訊。 圖2-1 8255A管腳圖RD:讀信號線,當這個輸入引腳為低電平時,允許8255 通過數(shù)據(jù)總線向CPU 發(fā)送數(shù)據(jù)或狀態(tài)信息,即CPU 從8255 讀取信息或數(shù)據(jù)。WR:寫入信號,當這個輸入引腳為低電平時,允許CPU 將數(shù)據(jù)或控制字寫8255。D0D7:三態(tài)雙向數(shù)據(jù)總線,8255 與CPU 數(shù)據(jù)傳送的通道,當CPU 執(zhí)行輸入輸出指令時,通過它實現(xiàn)8 位數(shù)據(jù)的

11、讀/寫操作,控制字和狀態(tài)信息也通過數(shù)據(jù)總線傳送。(2) 8255A的讀寫控制:8255A的讀/寫控制邏輯電路接受CPU 發(fā)來的控制口號RD、WR、RESET 和地址信號A1A0。然后根據(jù)命令端口,控制信號的要求,將端口的數(shù)據(jù)讀出選信CPU 或者將CPU送來的數(shù)據(jù)寫入端口,各端口的工作狀態(tài)。通過用輸出指令對8255A 的控制字寄存器編程,寫入設(shè)定工作方式的控制字,可以讓3個數(shù)據(jù)口以不同的方式工作,端口A 可工作于3 種方式的任一種,端口B 只能工作于方式0 和方式1,端口C 除了用于輸入輸出端口外,還能配合A 口和B 口工作,為這兩個端口的輸入輸出操作提供聯(lián)系信號。圖2-2 8255A控制字本次

12、設(shè)計實驗采用的控制字是10001000,A口輸出、B口輸出、C口高輸出低輸入。2.3 4*4矩陣鍵盤鍵盤是信息輸入元件,由一個個按鈕組成,如果是獨立按鈕的話必須要需要一個I/O口對它進行檢測。因為4×4矩陣鍵盤有8個管腳,為了掃描鍵盤判斷鍵值的方便將八個管腳中的列接PA和行接PC。因為進行鍵盤掃描一般要求有一部分的I/O口的工作方式是輸入,另一部分I/O是輸出,具體到4×4鍵盤則要求4個I/O口輸入,另外4個輸出,這一點PC口剛好符合,低四位接行作為鍵盤I/O輸入,PA低四位接列作為鍵盤I/O輸出。鍵盤有16個按鍵,我們設(shè)計為09為數(shù)字鍵,ABCD分別為+、-、*、/,E為

13、=號,F(xiàn)為清零鍵CL。識別鍵盤上哪個鍵被壓下的過程的掃描步驟:1.檢測是否所有鍵都都松開了,若沒有則反復(fù)檢測。2.但所有鍵都松開了,再檢測是否有鍵壓下,若無鍵按下則反復(fù)檢測。3.如有鍵壓下,要消除鍵抖動,確認有鍵壓下。4.對壓下的鍵位置進行判斷,先判斷是第幾行有鍵按下,再判斷第幾列有鍵按下,鍵值=行號*4+列號。至此確定了哪個鍵按下,再接著進行后面的操作。0123456789+-*/=CL 圖2-3 4*4矩陣鍵盤 表2-1 鍵盤設(shè)計2.4 LCD顯示屏LCD12864液晶模塊 12864LCD顯示塊是所說的點陣液晶顯示模塊,就是由128*64個液晶顯示點組成的一個128列*64行的

14、陣列,所以也就叫成了12864。每個顯示點都對應(yīng)著有一位二進制數(shù),0表示滅,1表示亮。存儲這些點陣信息的RAM被稱為顯示數(shù)據(jù)存儲器。如果要顯示某個圖形或漢字就是將相應(yīng)的點陣信息寫入到對應(yīng)的存儲單元中。圖形或漢字的點陣信息是由自己設(shè)計,這時候問題的關(guān)鍵是顯示點在液晶屏上的位置與其在存儲器中的地址之間的關(guān)系。 帶中文字庫的TS128X64(圖2-6)是一種具有4位/8位并行、2線或3線串行多種接口方式,引腳功能見圖表2-2,顯示分辨率為128×64, 內(nèi)置8192個16*16點漢字,和128個16*8點ASCII字符集.利用該模塊靈活的接口方式和簡單、方便的操作指令,

15、可構(gòu)成全中文人機交互圖形界面??梢燥@示8×4行16×16點陣的漢字、也可完成圖形顯示、低電壓低功耗是其又一顯著特點。由該模塊構(gòu)成的液晶顯示方案與同類型的圖形點陣液晶顯示模塊相比,不論硬件電路結(jié)構(gòu)或顯示程序都要簡潔得多,且該模塊的價格也略低于相同點陣的圖形液晶模塊。  圖2-6 TS12864液晶實物圖  2.5 電路及其主要功能 電路連接實物圖圖2-6 電路實物圖 功能模塊圖圖2-8 功能模塊圖本計算器開始時先進行鍵盤掃描,如果有鍵按下則調(diào)用三個子程序,分別是鍵盤輸入子程序,判斷數(shù)字子程序,判斷符號子程序。判斷數(shù)字子程序的功能是,判斷

16、數(shù)字。如果輸入的數(shù)字不符合規(guī)范則報錯顯示E。鍵盤輸入的功能是,把輸入的數(shù)字按位分解,然后輸出。判斷符號子程序的功能是判斷是否是符號。如果是運算符號則把之前輸入的數(shù)存起來,如果是清零鍵則清零。如果是等于則計算結(jié)果。然后返回進行屏幕顯示。3 軟件方案3.1 流程圖鍵盤掃描流程圖運行程序初始化延時12ms鍵位掃描保存鍵值有鍵按下按鍵釋放結(jié)束有鍵按下YYYNNN圖3-9 掃描流程圖 掃描子程序,先判斷有沒有鍵按下,有鍵按下則延時12ms,防止抖動。之后再檢測是否有鍵按下。如果這次還有鍵按下則可以排除抖動的嫌疑。然后進行鍵位掃描,通過對每一行分別輸出低電平,然后分別檢測列的電平值來判斷是哪一行哪一列。之

17、后在冊檢測是否有鍵按下,如果沒有則表明按鍵已經(jīng)松開,這之后保存鍵值 計算器運算流程圖掃描計算鍵值判斷?運算=?+?-?/?清零乘法運算加法運算加法運算除法運算存儲顯示*?圖3-10 運算流程圖通過符號判斷子程序來檢測是否是符號,根據(jù)相應(yīng)的符號來進行對應(yīng)的運算4 問題與解決方案1.此次課程設(shè)計開始時用的時LED,因為很簡單,做成功后移植到了LCD上2.掃描鍵盤時數(shù)字應(yīng)及時響應(yīng)顯示出來,所以程序代碼中設(shè)置了棧,每個掃描到的鍵值都入棧,顯示的時候都要掃描數(shù)字的位數(shù)再顯示出來。3.程序編碼中期LCD顯示總是閃屏的,研究了好久才知道原來是延時問題。4.清零的時候總是顯示四個零,不知道是哪個地方出錯了,幾

18、個人看了好久,程序代碼長了進行調(diào)整改進就越來越困難。最終發(fā)現(xiàn)是代碼跳轉(zhuǎn)回來的時候給總程序進行初始化,讓其四位都置零。5.設(shè)置報錯子程序的時候,一旦程序報錯就卡住了,必須重啟才能繼續(xù)運算。對匯編語言研究了好久才發(fā)現(xiàn)原來是代碼缺少按鍵返回觸發(fā),報完錯程序就進入了死循環(huán),所以在報錯子程序中加入了鍵盤掃描,一旦有鍵按下就能調(diào)用程序返回到之前的鍵盤掃描中。這樣很巧妙地解決了這一問題。5 成果展示 寫1234 圖5-12 顯示55*55的結(jié)果圖5-23 除數(shù)為零是的報錯處理6、心得體會 在研究明白本次課題后,我們依據(jù)之前微機原理課程中學(xué)過的知識,再次通過書籍上對知識點的鞏固,深入了解芯片8255及LCD的

19、工作原理及運行流程圖,對編寫程序的基本思路有了基本的掌握。通過翻閱書籍,我們也發(fā)現(xiàn),自己對各種器件芯片的了解還不是很深入,對書上的細節(jié)還沒有看透。 確定好編程基本思路之后,我們開始編寫程序,這是本次硬件課程設(shè)計實驗中最難的環(huán)節(jié)了,編程體現(xiàn)我們的薄弱環(huán)節(jié),對匯編語言的掌握模棱兩可,對各器件的連接之間還是很模糊,把我們對平時學(xué)習知識不扎實的缺點完全暴露了出來,對我們也是一次打擊 經(jīng)過老師的幫組和我們的努力,最終我們完成了實驗要求,成功的運行了實驗,并且完成了老師的附加要求。通過本次實驗,我進一步學(xué)習了8255,以及LCD的工作原理,并且深入的熟練了匯編語言,對各種命令進行了掌握,這也讓我們認識到,

20、作為一名計算機專業(yè)的學(xué)生,將來想要在本專業(yè)有所成就,就一定要學(xué)好基礎(chǔ)的計算機知識,并且熟練的運用到現(xiàn)實生活中的實踐環(huán)節(jié),實踐是檢驗真理的唯一標準,同時也是最能考察出我們身上的不足的路徑。在以后的學(xué)習中,我們一定會借鑒現(xiàn)在的不足,為我們將來走向工作崗位打下基礎(chǔ)。參考文獻1周荷琴、吳秀清 微型計算機原理與接口技術(shù)第四版 M北京:中國科學(xué)技術(shù)大學(xué)出版社,2008 2朱金鈞、麻新旗 微型計算機原理及應(yīng)用技術(shù)M. 北京: 機械工業(yè)出版社, 2003 3 周明德. 微型計算機系統(tǒng)原理及應(yīng)用M. 北京: 清華大學(xué)出版社, 20014 硬件課程設(shè)計(電子計算器)報告 91f51d950e2524de5187e

21、00.html5 微機原理課程設(shè)計(用8255A實現(xiàn)4位十進制計算器)附錄:3.2 程序源代碼port_a equ 288Hport_b equ 289Hport_c equ 28aHport_ctl equ 28bHio_address equ 289Hdata segmentx db 0,0,0,0; 存放數(shù)據(jù)的每一位x1 dw ?; 存放第一個數(shù)據(jù)值x2 dw ?; 存放第二個數(shù)據(jù)值y dw ?; 存放結(jié)果s db ?; 存放運算符號e db ?; 按下等號鍵標記cc db ?; 存放運算數(shù)據(jù)位數(shù)h db 0; 存放行號l db 0; 存放列號discode DW 0A3B0H,0A3B

22、1H,0A3B2H,0A3B3H,0A3B4H,0A3B5H,0A3B6H,0A3B7H DW 0A3B8H,0A3B9H,0A3C1H,0A3C2H,0A3C3H,0A3C4H,0A3C5H,0A3C6H, 0A3ADH HZ_ADR DB ? ;存放顯示行起始端口地址data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov al,81h ;A口輸入 B口輸出 C口輸出 10010000B即mov dx,port_ctlout dx,almov di,offset x+3; di指向X3kkk:call

23、 key; 掃描按鍵jmp kkk;key proc ;按鍵掃描子程序,程序返回后,在變量H和L中存放當前按鍵的行列號check:call disp; ;等待按鍵,按下的同時進行顯示mov al,10h; ;PA0-PA3對應(yīng)行號,輸出低電平mov dx,port_aout dx,almov dx,port_cin al,dx ;讀列值,即PC0-PC3的值and al,0fhcmp al,0fh; jz check ;ZF=1,即運算結(jié)果為0,相等,都為高電平則無鍵按下,等待mov cx,50loop $; ;消除鍵抖動in al,dx; ;重復(fù)讀列值and al,0fhcmp al,0fh

24、jz check; ;若無鍵按下則一直等待mov h,0; ;有鍵按下,先把行列號清0mov l,0mov bl,01hmov bh,0feh; ;掃描鍵值,從第一行開始檢測,PA0輸出低電平next:mov al,bhmov dx,port_aout dx,alnextl:mov dx,port_cin al,dx; 讀列值,判斷第幾列有鍵按下test al,bl; 判斷是否是第1列jz waito ;是則跳轉(zhuǎn)rol bl,1 ;左移一位cmp bl,10h; 當前行狀態(tài)下沒有任何列有鍵按下,則轉(zhuǎn)為對下一行的測試jz nexthinc l; ;每判斷一列,列號加1jmp nextl; 再對下

25、一列進行判斷 nexth:mov l,0mov bl,01hrol bh,1;cmp bh,0efhjz exitinc hjmp nextwaito:mov dx,port_c ;若有鍵按下,則等該鍵松開后再計算鍵值in al,dx;and al,0fhcmp al,0fhjnz waitocall keyvalue; 調(diào)計算鍵值子程序exit:retkey endp;keyvalue proc ;計算鍵值子程序,通過行列號計算鍵值(鍵值=行號*4+列號) mov dl,h ;鍵值存放在DL寄存器中mov dh,lxor ax,axmov al,4mul dlmov dl,aladd dl,

26、dhcmp dl,9jng num_call ;小于等于,則轉(zhuǎn)移即按下的是數(shù)字鍵cmp dl,14jl cont_call; ;大于9小于14,即加減乘除的時候 ,運算鍵cmp dl,14 ;等于15,即等于鍵jz outp_call;cmp dl,15jz clr_call; ;按下清零鍵num_call:call number;調(diào)用數(shù)字鍵處理子程序jmp exit1cont_call:mov s,dl; 存放運算鍵的鍵值mov e,0call count; 調(diào)用運算鍵處理子程序,計算jmp exit1outp_call:call outp; 調(diào)用等號鍵處理子程序jmp exit1clr_c

27、all:call clear; 調(diào)用清除鍵處理子程序exit1:retkeyvalue endp;clear proc ;一下為清除鍵處理子程序,按下清除鍵后,X變量全部清0mov x3,0mov x2,0mov x1,0mov x0,0call bitp call disp call dely ;分析數(shù)據(jù)位數(shù)retclear endp;outp proc ;等號鍵處理子程序,該子程序負責將第二個運算數(shù)據(jù)的數(shù)值計算出來存入X2變量push ax ;并根據(jù)運算符號,調(diào)用相應(yīng)的運算子程序push dxpush bxinc ecall count ;調(diào)用運算鍵處理子程序,計算第二個運算數(shù)據(jù)cmp s

28、,10jz add_call; ;加號cmp s,11 jz sub_call ;減號cmp s,12jz mul_call; ;乘號cmp s,13jz divp_call ;除號add_call:call addpjmp store1sub_call:call subpjmp store1mul_call:call mulpjmp store1divp_call:cmp x2,0 ;判斷除數(shù)是否為零,為零跳入報錯子程序jz disp1call divpjmp store1disp1 proc ;報錯顯示子程序push bxpush axmov bh,0call clear2lea si,d

29、iscode ;si指向段碼表頭mov dx,port_aout dx,almov bh,00hmov bl,14call lcd_disppop axpop bxkkk1:mov dx,port_cin al,dx ;報錯后掃描鍵盤等待按鍵跳出and al,0fhcmp al,0fh; jz kkk1jmp kkkretdisp1 endp;store1:call clearmov ax,y ;將各運算子程序返回的運算結(jié)果,按位分解,送入X變量cmp ax,0 ;判斷是否小于0,是跳轉(zhuǎn)jl ccccmp ax,1000jnz ddd1mov x0,1mov x1,0mov x2,0mov x

30、3,0jmp jieshuddd1:cmp ax,1000jl ddd2mov bx,1000mov dx,00hdiv bxmov x0,almov ax,dxmov ah,00hjmp dddccc:mov x0,10hmov ax,yneg ax ;取反ddd2:cmp ax,100jnz dddmov x0,0mov x1,1mov x2,0mov x3,0jmp jieshuddd:cmp ax,100jl gggmov bl,100div blmov x1,almov al,ahmov ah,00hcmp ax,10jnz gggmov x0,0mov x1,0mov x2,1mo

31、v x3,0jmp jieshuggg:cmp ax,10jl jjjmov bl,10div blmov x2,almov al,ahmov ah,00hjjj:mov x3,aljieshu:pop bxpop dxpop axretoutp endp;count proc ;運算鍵處理子程序,該程序?qū)⒌谝粋€運算數(shù)據(jù)的數(shù)值計算出來,并存入X1變量push ax ;或?qū)⒌诙€運算數(shù)據(jù)計算出來存入X2變量push bx ;將預(yù)算符存入S變量push dxmov dx,0call bitp ;測試有多少位cmp cc,4jz c4cmp cc,3jz c3cmp cc,2jz c2jmp c1c

32、4:mov ax,0mov al,x0mov bx,1000mul bxmov dx,axc3:mov al,x1mov bl,100mul bladd dx,axc2:mov al,x2mov bl,10mul bladd dx,axc1:mov al,x3mov ah,0add dx,axcmp e,1 ;判斷是否為等號jnz x1_s ;不是mov x2,dx ;是等于號,則將第二個運算數(shù)據(jù)的值存入X2變量jmp exit3x1_s:mov x1,dx ;按下的是運算符號,則將第一個運算符的值存入X1變量mov x3,0 ;清空X變量mov x2,0mov x1,0mov x0,0exi

33、t3:pop dxpop bxpop axretcount endpnumber proc ;數(shù)字鍵處理子程序cmp e,1 ;將輸入的數(shù)據(jù)按位存放在X變量中,并由CC記錄數(shù)據(jù)的位數(shù)jnz continuemov e,0call clearcontinue:cmp cc,0 ;目前數(shù)據(jù)為0位,沒有數(shù)據(jù)則轉(zhuǎn)到SSSjz ssspush ax ;若已有數(shù)據(jù),程序?qū)左移8位,例如先輸入1,再輸入2,先要將1從各位移到十位,再將2存放到個位push dxmov al,x3 mov ah,x2mov dl,x1mov dh,x0mov x3,00hmov x2,almov x1,ahmov x0,dl

34、pop dxpop axsss:mov di,dl; 將當前鍵入的數(shù)據(jù)存放到X的最低位inc cc; 數(shù)據(jù)位數(shù)加1cmp cc,4; 判斷數(shù)據(jù)位數(shù)jng exit2 mov cc,0 ;超過4位,重新從最低位開始存 mov x2,0 mov x1,0mov x0,0exit2:call disp; 調(diào)用顯示子程序,顯示輸入的數(shù)據(jù)retnumber endp;addp proc ;加法子程序push ax;mov ax,x1;add ax,x2;mov y,axpop axretaddp endp;subp proc ;減法子程序push axmov ax,x1sub ax,x2mov y,ax

35、pop axretsubp endp;mulp proc ;乘法子程序push axpush dxmov ax,x1mov dx,x2mul dxmov y,axpop dxpop axretmulp endp;divp proc ;除法子程序push axpush bxpush dxmov dx,0mov ax,x1mov bx,x2div bxmov y,axpop dxpop bxpop axretdivp endpdisp proc ;顯示子程序,將X中的數(shù)值按位顯示出來push bxpush axmov al,0ffhmov dx,300Hout dx, alcall lcd_cle

36、armov bh,0lea si,discode ;si指向段碼表頭begin:call bitp ;測試X的位數(shù)cmp cc,4jz qian ;cc等于4跳轉(zhuǎn)cmp cc,3 jz bai ;cc等于3跳轉(zhuǎn)cmp cc,2jz shi ;cc等于2跳轉(zhuǎn)cmp cc,1jz g ;cc等于1跳轉(zhuǎn)jmp none ;否則跳轉(zhuǎn)到?jīng)]有數(shù)字qian:MOV BYTE PTR HZ_ADR, 88H mov bh,00hmov bl,x0 ;x0即千位數(shù)字mov al,si+bx ;默認是DS數(shù)據(jù)段首地址,中括號內(nèi)位段碼表的偏移量,將數(shù)字所對應(yīng)的段碼送到鎖存器call lcd_dispbai:MOV

37、BYTE PTR HZ_ADR, 89H mov bh,00hmov bl,x1 ;x0即千位數(shù)字mov al,si+bx ;默認是DS數(shù)據(jù)段首地址,中括號內(nèi)位段碼表的偏移量,將數(shù)字所對應(yīng)的段碼送到鎖存器call lcd_dispshi:MOV BYTE PTR HZ_ADR, 8aH mov bh,00hmov bl,x2 ;x0即千位數(shù)字mov al,si+bx ;默認是DS數(shù)據(jù)段首地址,中括號內(nèi)位段碼表的偏移量,將數(shù)字所對應(yīng)的段碼送到鎖存器call lcd_dispg:MOV BYTE PTR HZ_ADR, 8bH mov bh,00hmov bl,x3 ;x0即千位數(shù)字mov al,

38、si+bx ;默認是DS數(shù)據(jù)段首地址,中括號內(nèi)位段碼表的偏移量,將數(shù)字所對應(yīng)的段碼送到鎖存器call lcd_dispmov al,00hmov dx,port_cout dx,alout dx,almov dx,port_ain al,dx ;讀列值,即PC0-PC3的值and al,0fhcmp al,0fh; jnz exit4jmp beginnone:MOV BYTE PTR HZ_ADR, 8bH mov bh,00hmov bl,00h ;x0即千位數(shù)字mov al,si+bx ;默認是DS數(shù)據(jù)段首地址,中括號內(nèi)位段碼表的偏移量,將數(shù)字所對應(yīng)的段碼送到鎖存器call clear2

39、call lcd_dispexit4:pop axpop bxretdisp endp;lcd_disp proclea si,discodemov al,HZ_ADRadd bx,bxmov dx,port_bout dx,alcall cmd_setupMOV AX,SI+BXPUSH AXMOV AL,AH ;先送漢字編碼高位MOV DX,port_bOUT DX,ALCALL DATA_SETUP ;輸出漢字編碼高字節(jié)CALL DELAY ;延遲POP AXMOV DX,port_bOUT DX, ALCALL DATA_SETUP ;輸出漢字編碼低字節(jié)CALL DELAYretlcd

溫馨提示

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

評論

0/150

提交評論