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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  單片機十進制加法計算器設計</p><p><b>  摘要</b></p><p>  本設計是基于51系列的單片機進行的十進制計算器系統(tǒng)設計,可以完成計算器的鍵盤輸入,進行加、減、乘、除3位無符號數字的簡單四則運算,并在LED上相應的顯示結果。</p><p>  設計過程在硬件與軟件方面進行同步設計。硬件方面從功能考

2、慮,首先選擇內部存儲資源豐富的AT89C51單片機,輸入采用4×4矩陣鍵盤。顯示采用3位7段共陰極LED動態(tài)顯示。軟件方面從分析計算器功能、流程圖設計,再到程序的編寫進行系統(tǒng)設計。編程語言方面從程序總體設計以及高效性和功能性對C語言和匯編語言進行比較分析,針對計算器四則運算算法特別是乘法和除法運算的實現,最終選用全球編譯效率最高的KEIL公司的μVision3軟件,采用匯編語言進行編程,并用proteus仿真。</p&g

3、t;<p><b>  引言</b></p><p>  十進制加法計算器的原理與設計是單片機課程設計課題中的一個。在完成理論學習和必要的實驗后,我們掌握了單片機的基本原理以及編程和各種基本功能的應用,但對單片機的硬件實際應用設計和單片機完整的用戶程序設計還不清楚,實際動手能力不夠,因此對該課程進行一次課程設計是有必要的。</p><p>  單片機課程

4、設計既要讓學生鞏固課本學到的理論,還要讓學生學習單片機硬件電路設計和用戶程序設計,使所學的知識更深一層的理解,十進制加法計算器原理與硬軟件的課程設計主要是通過學生獨立設計方案并自己動手用計算機電路設計軟件,編寫和調試,最后仿真用戶程序,來加深對單片機的認識,充分發(fā)揮學生的個人創(chuàng)新能力,并提高學生對單片機的興趣,同時學習查閱資料、參考資料的方法。</p><p>  關鍵詞:單片機、計算器、AT89C51芯片、匯編

5、語言、數碼管、加減乘除 </p><p><b>  目錄</b></p><p>  摘 要 ..........................................01</p><p>  引 言 ..........................................01</p><p

6、>  一、 設計任務和要求.............................</p><p>  1、1 設計要求 </p><p><b>  1、2 性能指標</b></p><p>  1、3 設計方案的確定 </p><p>  二、 單片機簡要原理....................

7、.........</p><p>  2、1 AT89C51的介紹</p><p>  2、2 單片機最小系統(tǒng)</p><p>  2、3 七段共陽極數碼管</p><p>  三、 硬件設計...................................</p><p>  3、1 鍵盤電路的設計

8、</p><p>  3、2 顯示電路的設計</p><p>  四、 軟件設計...................................</p><p><b>  4、1 系統(tǒng)設計</b></p><p>  4、2 顯示電路的設計</p><p>  五、 調試與仿真.

9、................................</p><p>  5、1 Keil C51單片機軟件開發(fā)系統(tǒng)</p><p>  5、2 proteus的操作</p><p>  心得體會....................................</p><p>  參考文獻...............

10、..........................</p><p>  附錄1 系統(tǒng)硬件電路圖............................</p><p>  附錄2 程序清單..................................</p><p><b>  設計任務和要求</b></p><

11、p><b>  1.1 設計要求 </b></p><p>  本次課程設計,我選擇的課題是單片機十進制加法計算器軟硬件設計 ,設計任務為: </p><p>  設計一鍵盤顯示裝置,鍵盤上除需定義10個十進制數字鍵外還要相應的功能鍵,其它鍵不定義無響應。利用此系統(tǒng)可分別可輸入十進制被加數與加數,實現兩數相加并將結果以十進制形式顯示出來。(擴展:多位10進制數相

12、加)</p><p><b>  1.2 性能指標 </b></p><p>  本課程設計的十進制加法計算器的計算范圍為0~255,計算結果全為整數,計算結果溢出結果不顯示。</p><p>  1、加法:三位加法,計算結果超過255溢出不顯示</p><p>  2、減法:三位減法,計算結果若小于零溢出不顯示<

13、/p><p>  3、乘法:三位數乘法</p><p><b>  4、除法:整數除法</b></p><p><b>  5、有清零功能</b></p><p>  1.3 設計方案的確定 </p><p>  按照1.1的設計要求,本課題需要使用數碼管顯示和擴展4*4鍵盤,由

14、于AT89C51芯片的I口不夠多,而且為了硬件電路設計的簡單化,故選擇串行動態(tài)顯示和用P1口擴展4*4鍵盤,擴展的4*4鍵盤定義十個數字鍵,六個功能鍵,使用串行動態(tài)顯示顯示運算結果。 </p><p>  主程序進行初始化,采用行列掃描進行查表得出鍵值,每次按鍵后調用顯示子程序。 </p><p>  二、 單片機簡要原理</p><p>  在該課程設計中,主要用

15、到一個AT89C51芯片和串接的共陰數碼管。作為該設計的主要部分,下面將對它們的原理及功能做詳細介紹和說明。</p><p>  2.1 AT89C51的介紹:</p><p>  圖一 AT89C51外形結構和引腳分布圖</p><p>  芯片AT89C51的外形結構和引腳圖如圖一所示。AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器(FPEROM—

16、Falsh Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業(yè)標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。</p><p>

17、  2.2 單片機最小系統(tǒng)</p><p>  單片機最小系統(tǒng)就是支持主芯片正常工作的最小部分,包括主控芯片、復位電路和晶振電路。</p><p><b> ?。ㄒ唬?復位電路</b></p><p><b>  圖二 復位電路</b></p><p>  本設計采用上電與手動復位電路,電阻分別

18、選取100和10K,電容選取10uF,系統(tǒng)一上電,芯片就復位,或者中途按按鍵也可以進行復位。</p><p><b>  晶振電路</b></p><p>  圖三 晶振電路</p><p>  晶振電路是單片機的心臟,它用于產生單片機工作所需要的時鐘信號。單片機的晶振選取11.0592MHz,晶振旁電容選取30pF。</p>

19、<p>  2.3 七段共陽極數碼管</p><p>  圖四 七段共陽數碼管</p><p>  圖為七段共陽數碼管的引腳圖,從左到右數碼管的段碼分別為a,b,c,d,e,f,g和小數點dp,低電平時點亮,最右邊為位選端。</p><p><b>  三、 硬件設計</b></p><p>  簡

20、易數字計算器系統(tǒng)硬件設計主要包括:鍵盤電路,顯示電路以及其他輔助電路。下面分別進行設計。 </p><p>  3.1 鍵盤電路的設計 </p><p>  鍵盤可分為兩類:編碼鍵盤和非編碼鍵盤。編碼鍵盤是較多按鍵(20個以上)和專用驅動芯片的組合,當按下某個按鍵時,它能夠處理按鍵抖動、連擊等問題,直接輸出按鍵的編碼,無需系統(tǒng)軟件干預。通用計算機使用的標準鍵盤就是編碼鍵盤。當系統(tǒng)功能比較復

21、雜,按鍵數量很多時,采用編碼鍵盤可以簡化軟件設計。但大多數智能儀器和電子產品的按鍵數目都不太多(20個以內),為了降低成本和簡化電路通常采用非編碼鍵盤。非編碼鍵盤的接口電路有設計者根據需要自行決定,按鍵信息通過接口軟件來獲取。本課題需要的是16個按鍵,故選擇用非編碼鍵盤。</p><p>  計算器輸入數字和其他功能按鍵要用到很多按鍵,如果采用獨立按鍵的方式,在這種情況下,編程會很簡單,但是會占用大量的I/O 口

22、資源,因此在很多情況下都不采用這種方式,而是采用矩陣鍵盤的方案。矩陣鍵盤采用四條I/O 線作為行線,四條I/O 線作為列線組成鍵盤,在行線和列線的每個交叉點上設置一個按鍵。這樣鍵盤上按鍵的個數就為4×4個。這種行列式鍵盤結構能有效地提高單片機系統(tǒng)中I/O 口的利用率。</p><p>  矩陣鍵盤的工作原理:計算器的鍵盤布局如圖五所示:一般有16個鍵組成,在單片機中正好可以用一個P口實現16個按鍵功能,

23、這種形式在單片機系統(tǒng)中也最常用。</p><p>  具體電路連接如圖五所示: </p><p>  圖五 4*4鍵盤接口電路</p><p>  3.2 顯示電路的設計 </p><p>  當系統(tǒng)需要顯示少量數據時,采用LED數碼管進行顯示是一種經濟實用的方法。數碼管顯示有靜態(tài)顯示和動態(tài)顯示兩種方法。為了減少端口的使用,故選擇動態(tài)顯示

24、。 電路如下圖六所示:</p><p>  圖六 三位數碼管的顯示電路</p><p><b>  四、 軟件設計</b></p><p>  在十進制加法計算器的軟件規(guī)劃要求下,簡易計算器的程序主要包括以下功能模塊:(1)    主模塊,為系統(tǒng)的初始化。(2)   顯示與讀鍵模

25、塊,分為判鍵程序段、運算操作子程序、顯示子程序等部分;</p><p><b>  系統(tǒng)設計</b></p><p>  (一) 系統(tǒng)模塊圖</p><p><b>  圖六 系統(tǒng)模塊圖</b></p><p>  此系統(tǒng)包括輸入、運算和顯示模塊,由單片機控制。其中通過輸入鍵盤模塊將數字0~9和

26、運算符號“+”、“-”、“*”、“/”輸入單片機進行運算;運算模塊分別根據輸入的運算符進行加減乘除運算;顯示模塊將運算后的數值通過動態(tài)掃描使之在數碼管上輸出。</p><p><b>  系統(tǒng)總流程圖</b></p><p>  主程序主要是用來進行初始化的,調用其他子程序,清空各個標志位,清空緩存區(qū),讀取鍵碼,判斷功能,在LED上作出回應,主程序流程圖如圖六所示。&

27、lt;/p><p> ?。?)數字送顯示緩沖程序設計</p><p>  簡易計算器所顯示的數值最大位三位。要顯示數值,先判斷數值大小和位數,如果是超過三位或大于255,將不顯示數字??芍匦螺斎霐底?,再次計算。</p><p>  (2)運算程序的設計</p><p>  首先初始化參數,送LED三位顯示“0”,其它位不顯示。然后掃描鍵盤看是否有

28、鍵輸入,若有,讀取鍵碼。判斷鍵碼是數字鍵、清零鍵還是功能鍵,是數值鍵則送LED顯示并保存數值,是清零鍵則做清零處理,是功能鍵則又判斷是“=”還是運算鍵,若是“=”則計算最后結果并送LED顯示,若是運算鍵則保存相對運算程序的首地址。</p><p>  圖七 主程序流程圖</p><p>  4.2 顯示與按鍵設計</p><p><b>  LED顯

29、示程序設計</b></p><p>  LED顯示器由七段發(fā)光二極管組成,排列成8字形狀,因此也稱為七段LED顯示器。為了顯示數字或符號,要為LED顯示器提供代碼,即字形代碼。七段發(fā)光二極管,再加上一個小數點位,共計8段,因此提供的字形代碼的長度正好是一個字節(jié)。簡易計算器用到的數字0~9的共陽極字形代碼如下表:</p><p>  表一 共陽極數碼管段碼對照表</p

30、><p><b>  讀鍵子程序設計</b></p><p>  為了實現鍵盤的數據輸入功能和命令處理功能,每個鍵都有其處理子程序,為此每個鍵都對應一個碼——鍵碼。為了得到被按鍵的鍵碼,現使用行掃描法識別按鍵。其程序框圖如圖八:</p><p>  讀鍵程序使用的是反轉法讀鍵,不管鍵盤矩陣的規(guī)模大小,均進行兩次讀鍵。第一次所有列線均輸出低電平,從所

31、有讀入鍵盤信息(行信息);第二次所有行線均輸出低電平,從所有行線讀入鍵盤信息(列信息)。將兩次讀鍵信息進行組合就可以得到按鍵的特征編碼,然后通過查表得到按鍵的順序編碼。將各特征編碼按希望的順序排成一張表,然后用當前讀得的特征碼來查表。當表中有該特征碼時,它的位置就是對應的順序編碼;當表中沒有該特征碼時,說明這是一個沒有定義的鍵碼,與沒有按鍵(0FFH)同等看待。 </p><p>  圖八 計算鍵值子程序流程

32、圖</p><p><b>  五、 調試與仿真</b></p><p>  下面用KEIL uVision3與 proteus仿真軟件介紹十進制加法計算器的仿真與調試。</p><p>  5.1Keil C51單片機軟件開發(fā)系統(tǒng)</p><p> ?。ㄒ唬?系統(tǒng)的整體結構</p><p>

33、  C51工具包的整體結構中,其中uVision是C51 for Windows的集成開發(fā)環(huán)境(IDE),可以完成編輯、編譯、連接、調試、仿真等整個開發(fā)流程。開發(fā)人員可用IDE本身或其它編輯器編輯C或匯編源文件。然后分別由C51編譯器編譯生成目標文件(.OBJ)。目標文件可由LIB51創(chuàng)建生成庫文件,也可以與庫文件一起經L51連接定位生成絕對目標文件(.ABS)。ABS文件由OH51轉換成標準的Hex文件,以供調試器dScope51或t

34、Scope51使用進行源代碼級調試,也可由仿真器使用直接對目標板進行調試,也可以直接寫入程序存貯器如EPROM中。</p><p> ?。ǘ?采用KEIL 開發(fā)的89c51單片機應用程序步驟:</p><p>  1. 在uVision 集成開發(fā)環(huán)境中創(chuàng)建新項目(Project),擴展文件名為.UV2,并為該項目選定合適的單片機CPU器件(本設計采用ATMEL 公司下的AT89C51)&

35、lt;/p><p>  2. 用uVision 的文本編輯器編寫源文件,可以是匯編文件(.ASM),也可以使C語言文件(擴展名.C),并將該文件添加到項目中去。一個項目文件可以包含多個文件,除了源程序文件外,還可以是庫文件、頭文件或文本說明文件。</p><p>  3. 通過uVision 3 的相關選擇項,配置編譯環(huán)境、連接定位器以及Debug調試器的功能。</p><

36、p>  4. 對項目中的源文件進行編譯連接,生成絕對目標代碼和可選的HEX文件,如果出現編譯連接錯誤則返回到第2步,修改源文件中的錯誤后重構整個項目。</p><p>  5. 對沒有語法錯誤的程序進行仿真調試,調試成功后將HEX文件寫入到單片機應用系統(tǒng)的ROM中。</p><p>  5.2 proteus的操作</p><p> ?。ㄒ唬┯布娐穲D的接法

37、操作 </p><p>  1.放置選擇(刪除)元器件</p><p><b>  2.移動元器件</b></p><p><b>  3.縮放視圖</b></p><p><b>  4.連接導線</b></p><p><b>  5.仿真

38、,調試</b></p><p> ?。ǘ?單片機系統(tǒng)PROTEUS設計與仿真過程</p><p>  Proteus強大的單片機系統(tǒng)設計與仿真功能,使它可成為單片機系統(tǒng)應用開發(fā)和改進手段之一。全部過程都是在計算機上通過Proteus來完成的。其過程一般也可分為三步:</p><p>  1.在ISIS平臺上進行單片機系統(tǒng)電路設計、選擇元器件、接插件、連

39、接電路和電氣檢測等,簡稱Proteus電路設計。</p><p>  2.在Keil平臺上進行單片機系統(tǒng)程序設計、編輯、匯編編譯、代碼級調試,最后生成目標代碼文件(*.hex)。簡稱Proteus源程序設計和生成目標代碼文件。</p><p>  3.在ISIS平臺上將目標代碼文件加載到單片機系統(tǒng)中,并實現單片機系統(tǒng)的實時交互、協(xié)同仿真。它在相當程度上反映了實際單片機系統(tǒng)的運行情況。簡稱P

40、roteus仿真。</p><p> ?。ㄈ?Proteus中課程設計的仿真結果</p><p>  在Proteus中將硬件電路全部接好以后,將Keil中生成的.hex文件導入到單片機中,點擊開始仿真按鈕,電路開始仿真。可以觀察到:數碼管顯示“000”;分別依次按下按鍵“5”、“+”、“6”和“=”,可以看到數碼管顯示“11”;也可以分別調試其它功能鍵,結果發(fā)現調試結果與預期的理論值相

41、吻合,即本次課設已成功。</p><p>  總的仿真原理電路圖見附錄1圖九。</p><p><b>  心得體會</b></p><p>  為期一周的單片機課程設計終于結束了,通過緊張的工作,完成了我們的設計任務-十進制加法計算器。總的來說,這次課程設計是比較成功的。當然,這其中也經歷了許多坎坷,但是在我的堅持不懈下,在老師的細心指導下,

42、在同學們的熱情幫助下,最終克服了種種困難,取得了成功。</p><p>  剛開始接到這個計算器的課程設計任務時,因為以前做過類似的題目,于是在腦海中初步構建了編寫程序的一些控制程序。但是由于缺乏編寫大量程序的經驗,不能如行云流水般的將全部的各部分代碼寫出,于是去網上查找相關資料,了解計算器的輸入控制原理、運算處理以及顯示的原理。了解之后自己嘗試編寫程序,在此過程中,其中鍵盤掃描和動態(tài)掃描顯示掃描程序困擾了我很久

43、,經過三四天的辛苦工作,終于初步把所需要的程序編好了,于是就用Keil uversion3進行仿真,在仿真期間也發(fā)現了許多錯誤,基本上都是平日容易犯的錯誤,比如忘記了子程序標號、死循環(huán)程序、標點符號的漏寫等。經過反復的編譯差錯,仿真編譯通過后,于是開始在Proteus中連硬件電路,全部接完電路之后將Keil生成的.Hex文件導入進行仿真,發(fā)現軟件與硬件不能夠對應協(xié)調工作,于是分別對軟件和硬件進行檢查,經過反復的仿真調試,并且在同學的幫助

44、和自己對每個子程序進行仿真觀察下,終于在課設快結束時成功的調試出結果了。這就是我這一周課設的經過,看似簡單,過程卻曲折艱辛。</p><p>  通過這次課程設計,我進一步加深了對電子自動控制的了解。并進一步熟練了對Keil和Proteus軟件的操作。在編寫程序的過程中,遇到了很多問題,使我發(fā)現自己以前學習上存在的不足,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固,對單片機匯編語言掌握得不夠好。通過與同學探討

45、和請教老師,終于把問題都解決了,并加深了對計算器工作的原理的了解。同時也掌握了做課程設計的一般流程,為以后的設計積累了一定的經驗。做課程設計時,先查閱相關知識,把原理吃透,確定一個大的設計方向,在按照這個方向分模塊的把要實現的功能用流程圖的形式展示。學會了怎么樣去制定計劃,怎么樣去實現這個計劃,并掌握了在執(zhí)行過程中怎么樣去克服心理上的不良情緒??傊?,通過這次的設計,進一步了解了單片微型計算機及應用原理,收獲很大,對軟件編程、排錯調試、查

46、閱資料等方面得到較全面的鍛煉和提高。</p><p>  同時通過本次課程設計的學習,掌握了一種系統(tǒng)的研究方法,可以進行一些簡單的編程,我還深深的體會到設計課的重要性和目的性所在。為了完成項目,在網絡上找到了許多相關的資料,大大擴充自己的知識面,使許多以前想解決卻無法解決的困難迎刃而解。將書本上的理論知識和實際有機地結合起來,從理論中得出結論。鍛煉了實際分析問題和解決問題的能力,提高了適應實際的能力,為今后的學習

47、和實踐打下了良好的基礎。此次課設還鞏固和綜合運用所學過的原理知識,從而提高自己的實際動手能力和獨立思考的能力。</p><p><b>  參考文獻</b></p><p>  [1]   周航慈.單片機應用程序設計技術(修訂版).北京航空大學出版社</p><p>  [2] 張志良.單片機原理與控制技術.第2

48、版. 機械工業(yè)出版社</p><p>  [3] 康華光.電子技術基礎(第5版). 高等教育出版社出版,2006</p><p>  [4] 蔣力培.單片微機系統(tǒng)實用教程(第1版).機械工業(yè)出版社</p><p>  [5] 姜志海、劉連鑫.單片微型計算機原理及應用.電子工業(yè)出版社,2011 </p><p>  附錄1 系統(tǒng)硬件電路

49、圖</p><p>  圖九 總電路原理圖</p><p><b>  附錄2 程序清單</b></p><p>  YJ EQU50H ;結果存放</p><p>  YJ1 EQU51H ;中間結果存放</p><p> 

50、 GONG EQU52H ;功能鍵存放</p><p>  ORG 00H</p><p>  START:MOV R3,#0 ;初始化顯示為空</p><p>  MOV GONG,#0</p><p>  MOV 32H,#00H</p>

51、<p>  MOV 33H,#00H</p><p>  MOV 34H,#00H</p><p>  MLOOP:CALL DISP ;調顯示子程序</p><p>  WAIT:CALL TESTKEY ;判斷有無按鍵</p><p>  JZ

52、 WAIT </p><p>  CALL GETKEY ;讀鍵</p><p>  INC R3 ;按鍵個數</p><p>  CJNE A,#0,NEXT1 ;判斷是否數字鍵</p><p>  LJMP

53、 E1 ;轉數字鍵處理</p><p>  NEXT1:CJNE A,#1,NEXT2</p><p>  LJMP E1</p><p>  NEXT2:CJNE A,#2,NEXT3</p><p>  LJMP E1</p><p>  NEXT3:

54、CJNE A,#3,NEXT4</p><p>  LJMP E1</p><p>  NEXT4:CJNE A,#4,NEXT5</p><p>  LJMP E1</p><p>  NEXT5:CJNE A,#5,NEXT6</p><p>  LJMP E1</p

55、><p>  NEXT6:CJNE A,#6,NEXT7</p><p>  LJMP E1</p><p>  NEXT7:CJNE A,#7,NEXT8</p><p>  LJMP E1</p><p>  NEXT8:CJNE A,#8,NEXT9</p><

56、p>  LJMP E1</p><p>  NEXT9:CJNE A,#9,NEXT10</p><p>  LJMP E1</p><p>  NEXT10:CJNE A,#10,NEXT11 ;判斷是否功能鍵</p><p>  LJMP E2 ;轉功能

57、鍵處理</p><p>  NEXT11:CJNE A,#11,NEXT12</p><p>  LJMP E2</p><p>  NEXT12:CJNE A,#12, NEXT13</p><p>  LJMP E2</p><p>  NEXT13:CJNE A,#13,NEX

58、T14</p><p>  LJMP E2</p><p>  NEXT14:CJNE A,#14,NEXT15</p><p>  LJMP E2</p><p>  NEXT15:LJMP E3 ;判斷是否清除鍵</p><p>  E1:CJNE

59、 R3,#1,N1 ;判斷第幾次按鍵</p><p>  LJMP E11 ;為第一個數字</p><p>  N1:CJNE R3,#2,N2</p><p>  LJMP E12 ;為第二個數字</p><p>  N2:CJ

60、NE R3,#3,N3 </p><p>  LJMP E13 ;為第三個數字</p><p>  N3:LJMP E3 ;第四個數字轉溢出</p><p>  E11:MOV R4,A ;輸入值暫存R4</p><p>

61、;  MOV 34H,A ;輸入值送顯示緩存</p><p>  MOV 33H,#00H</p><p>  MOV 32H,#00H</p><p>  LJMP MLOOP ;等待再次輸入</p><p>  E12: MOV R7,A

62、 ;個位數暫存R7</p><p>  MOV B,#10</p><p>  MOV A,R4</p><p>  MUL AB ;十位數</p><p><b>  ADDA,R7</b></p><p>  MOV R4,A

63、 ;輸入值存R4</p><p>  MOV 32H,#00H ;輸入值送顯示緩存</p><p>  MOV 33H,34H</p><p>  MOV 34H,R7</p><p>  LJMP MLOOP</p><p>  E13:MOV R7,A</p&

64、gt;<p>  MOV B,#10</p><p>  MOV A,R4</p><p><b>  MUL AB</b></p><p>  JB OV,E3 ;輸入溢出</p><p>  ADD A,R7</p><p>

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

66、MLOOP</p><p>  E3:MOV R3,#0 ;按鍵次數清零</p><p>  MOV R4,#0 ;輸入值清零</p><p>  MOV YJ,#0 ;計算結果清零</p><p>  MOV GONG,#0

67、 ;功能鍵設為零 </p><p>  MOV 32H,#00H;顯示清空</p><p>  MOV 33H,#00H</p><p>  MOV 34H,#00H</p><p>  LJMP MLOOP</p><p>  E2:MOV 34H,#00H</

68、p><p>  MOV 33H,#00H</p><p>  MOV 32H,#00H</p><p>  MOV R0,GONG ;與上次功能鍵交換</p><p>  MOV GONG,A</p><p>  MOV A,R0</p><p>

69、  CJNE A,#10,N21 ;判斷功能鍵</p><p>  LJMP JIA ;"+"</p><p>  N21: CJNE A,#11,N22</p><p>  LJMP JIAN ;"-"</p>

70、<p>  N22: CJNE A,#12,N23</p><p>  LJMP CHENG ;"*"</p><p>  N23:CJNE A,#13,N24</p><p>  LJMP CHU ;"/"</p>

71、<p>  N24:CJNE A,#0,N25</p><p>  LJMP FIRST ;首次按功能鍵</p><p>  N25:LJMP DEN ;"="</p><p>  N4:LJMP E3</p><p>  FIR

72、ST:MOV YJ,R4 ;輸入值送結果</p><p>  MOV R3,#0 ;按鍵次數清零</p><p>  LJMP DISP1 ;結果處理</p><p>  JIA:MOV A,YJ;上次結果送累加器</p><p> 

73、 ADD A,R4;上次結果加輸入值</p><p>  JB CY,N4;溢出</p><p>  MOV YJ,A;存本次結果</p><p>  MOV R3,#0;按鍵次數清零</p><p>  LJMP DISP1</p><p>  JI

74、AN:MOV A,YJ</p><p>  SUBB A,R4;上次結果減輸入值</p><p>  JB CY,N4;負數溢出</p><p>  MOV YJ,A</p><p>  MOV R3,#0</p><p>  LJMP DISP1</p

75、><p>  CHENG:MOV A,YJ</p><p>  MOV B,A</p><p>  MOV A,R4</p><p>  MUL AB;上次結果乘輸入值</p><p>  JB OV,N4;溢出</p><p>  MOV

76、YJ,A</p><p>  LJMP DISP1</p><p>  CHU:MOV A,R4</p><p>  MOV B,A</p><p>  MOV A,YJ</p><p>  DIV AB;上次結果除輸入值</p><p>

77、  MOV YJ,A</p><p>  MOV R3,#0</p><p>  LJMP DISP1</p><p>  DEN:MOV R3,#0</p><p>  LJMP DISP1</p><p>  DISP1:MOVB,#10</p><p>

78、;  MOVA,YJ;結果送累加器</p><p>  DIVAB;結果除10</p><p>  MOVYJ1,A;暫存"商"</p><p>  MOVA,B;取個位數</p><p>  MOV34H,A;個位數送顯示緩存</p><

79、p>  MOVA,YJ1</p><p>  JZDISP11;結果是否為一位數</p><p>  MOVB,#10</p><p>  MOVA,YJ1</p><p><b>  DIVAB</b></p><p>  MOVYJ1,A</p>

80、;<p><b>  MOVA,B</b></p><p>  MOV33H,A;十位送顯示緩存</p><p>  MOVA,YJ1</p><p>  JZDISP11;結果是否為二位數</p><p>  MOV32H,A;百位數送顯示緩存</p>

81、;<p>  DISP11:LJMPMLOOP</p><p>  DISP: MOV R0,#34H</p><p>  DIR1: MOV DPTR,#SEGTAB</p><p><b>  MOV A,@R0</b></p><p>  MOVC A,@A+DPTR</p><

82、;p><b>  MOV P0,A</b></p><p>  CJNE R0,#34H,DIR2</p><p><b>  SETB P2.0</b></p><p><b>  CALL D1MS</b></p><p><b>  CLR P2.0&

83、lt;/b></p><p><b>  DEC R0</b></p><p><b>  SJMP DIR1</b></p><p>  DIR2: CJNE R0,#33H,DIR3</p><p><b>  SETB P2.1</b></p><

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

85、P2.2</p><p><b>  CALL D1MS</b></p><p><b>  CLR P2.2</b></p><p><b>  RET</b></p><p>  D1MS: MOV R7,#02H</p><p>  

86、DMS: MOV R6,#0F0H</p><p>  DJNZ R6,$</p><p>  DJNZ R7,DMS </p><p><b>  RET</b></p><p>  SEGTAB:DB 0C0H, 0F9H, 0A4H, 0B0H</p><

87、p>  DB 99H, 92H, 82H, 0F8H</p><p>  DB 80H, 90H, 88H, 83H </p><p>  DB 0C6H, 0A1H, 86H, 8EH</p><p>  TESTKEY:ACALL DISP</p><p>  MOVP1,#0FH

88、;讀入鍵狀態(tài)</p><p>  MOVA,P1</p><p><b>  CPLA</b></p><p>  ANLA,#0FH;高四位不用</p><p><b>  RET</b></p><p>  KEYTABLE:

89、</p><p>  DB0EEH,0EDH,0DDH,0BDH;鍵碼定義</p><p>  DB0EBH,0DBH,0BBH,0E7H</p><p>  DB0D7H,0B7H,0DEH,0BEH</p><p>  DB07EH,07DH,07BH,077H</p><p>  GET

90、KEY:MOVR6,#10;讀鍵子程序</p><p>  ACALLDELAY</p><p>  MOVP1,#0FH</p><p><b>  MOVA,P1</b></p><p>  CJNEA,0FH,K12</p><p>  LJMPMLOOP<

91、/p><p>  K12: MOVB,A</p><p>  MOVP1,#0EFH</p><p><b>  MOVA,P1</b></p><p>  CJNEA,#0EFH,K13</p><p>  MOVP1,#0DFH</p><p><

92、;b>  MOVA,P1</b></p><p>  CJNEA,#0DFH,K13</p><p>  MOVP1,#0BFH</p><p><b>  MOVA,P1</b></p><p>  CJNEA,#0BFH,K13</p><p>  MOV

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

94、></p><p><b>  MOVB,A</b></p><p>  MOVR1,#16</p><p>  MOVR2,#0</p><p>  MOVDPTR,#KEYTABLE</p><p>  K14:MOVA,R2</p><p>

95、;  MOVCA,@A+DPTR</p><p>  CJNEA,B,K16</p><p>  MOVP1,#0FH</p><p>  K15:MOVA,P1</p><p>  CJNEA,#0FH,K15</p><p>  MOVR6,#10</p><p>  A

96、CALLDELAY</p><p><b>  MOVA,R2</b></p><p><b>  RET</b></p><p>  K16:INCR2</p><p>  DJNZR1,K14</p><p>  AJMPMLOOP</p>

97、<p>  ;10ms延時子程序</p><p>  DELAY:MOVR7,#10</p><p>  TS1: MOV R6,#0FFH</p><p><b>  TS2:NOP</b></p><p><b>  NOP</b></p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論