課程設(shè)計(jì)--十進(jìn)制加減法計(jì)算器單片機(jī)設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩14頁(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>  十進(jìn)制加減法計(jì)算器單片機(jī)設(shè)計(jì)</p><p><b>  一、設(shè)計(jì)目的</b></p><p>  通過(guò)課程設(shè)計(jì)使學(xué)生更進(jìn)一步掌握單片機(jī)原理與應(yīng)用課程的有關(guān)知識(shí),提高用匯編語(yǔ)言編程的能力,并將所學(xué)的內(nèi)容加以綜合。通過(guò)查閱資料,了解所學(xué)知識(shí)的應(yīng)用情況。</p><p><b>  二、課程設(shè)計(jì)要求</b>

2、;</p><p>  設(shè)計(jì)十進(jìn)制加減法計(jì)算器。要求能(不同時(shí))顯示3位輸入和4位輸出。</p><p><b>  要求程序?qū)崿F(xiàn)功能</b></p><p>  (1)十進(jìn)制加減法計(jì)算:輸入范圍為(1~999),該程序輸入兩個(gè)定點(diǎn)數(shù),每個(gè)3位,輸出4位;A為加,B為減,C為等于,輸出為四位計(jì)算結(jié)果。數(shù)據(jù)輸入采用規(guī)范化輸入,即必須輸入3個(gè)數(shù)才算

3、完成一個(gè)運(yùn)算數(shù)的輸入,兩個(gè)運(yùn)算數(shù)之間輸入運(yùn)算符A或者B,輸入完成按C顯示計(jì)算結(jié)果。</p><p> ?。?)計(jì)算器復(fù)位功能:DEL均為清零重啟,任何時(shí)候按下DEL中一個(gè)將重新開(kāi)始。</p><p><b>  三、硬件設(shè)計(jì)</b></p><p>  現(xiàn)實(shí)生活中人們熟知的計(jì)算器,其功能主要如下:(1)鍵盤輸入;(2)數(shù)值顯示;(3)加、減運(yùn)算

4、(此次只要求加減);(4)對(duì)錯(cuò)誤的控制及提示。</p><p>  此次計(jì)算器設(shè)計(jì)的最終結(jié)果是使其工作流程為:開(kāi)機(jī)不顯示,等待鍵入數(shù)值,鍵入三個(gè)數(shù)字,通過(guò)LCD顯示出來(lái),當(dāng)鍵入+、-運(yùn)算符,計(jì)算器在內(nèi)部執(zhí)行數(shù)值轉(zhuǎn)換和存儲(chǔ),并等待再次鍵入數(shù)值,當(dāng)再鍵入三個(gè)數(shù)字將顯示鍵入的數(shù)值,按等號(hào)就會(huì)在LCD上輸出運(yùn)算結(jié)果。同時(shí)考慮到操作中可能出現(xiàn)的錯(cuò)誤時(shí),計(jì)算器會(huì)進(jìn)行自動(dòng)控制。</p><p>  根據(jù)

5、設(shè)計(jì)要求,選用8098 單片機(jī)為主控機(jī)。通過(guò)擴(kuò)展必要的外圍接口電路,實(shí)現(xiàn)對(duì)計(jì)算器的設(shè)計(jì)。此次設(shè)計(jì)的系統(tǒng)模塊圖如下,</p><p><b>  具體設(shè)計(jì)考慮如下:</b></p><p>  1、單片機(jī)工作時(shí)電源引腳外接電源,工作電壓為5V,同時(shí)本次設(shè)計(jì)通過(guò)內(nèi)部振蕩器和時(shí)鐘發(fā)生器產(chǎn)生時(shí)鐘信號(hào)。</p><p>  2、8098單片機(jī)可尋址的存儲(chǔ)

6、器空間為64K空間,其內(nèi)部?jī)H帶有只能用作寄存器的256個(gè)字節(jié)容量的RAM,所以在此設(shè)計(jì)過(guò)程中,需要外接存儲(chǔ)器芯片,我們選用容量足夠大的62128存儲(chǔ)器芯片。</p><p>  本次設(shè)計(jì)的接口電路采用8255可編程并行I/O芯片,8255A具有通常意義的接口所需要的基本功能,有著很強(qiáng)的適應(yīng)性,此次設(shè)計(jì)中它起的作用是將顯示器和鍵盤與單片機(jī)連接,通過(guò)向其控制寄存器送入控制字,以規(guī)定8255的工作方式和實(shí)現(xiàn)確定的功能,

7、如本次設(shè)計(jì)的電路圖,8255的A口、C口均工作于輸出方式,而B口工作于輸入方式。</p><p>  存儲(chǔ)器芯片和8255芯片各都需要通過(guò)一個(gè)鎖存器74LS373芯片和單片機(jī)連接,鎖存器的作用是鎖存單片機(jī)P3口送出的低8位地址碼。</p><p>  5、由于要設(shè)計(jì)的是簡(jiǎn)單的計(jì)算器,可以進(jìn)行加減運(yùn)算,對(duì)數(shù)字的大小范圍要求不高,故我們采用可以進(jìn)行三位數(shù)字的運(yùn)算,選用4片七段共陰極LED顯示數(shù)

8、據(jù)和結(jié)果。</p><p>  6、鍵盤共設(shè)置16個(gè)鍵,為4×4分布,其中數(shù)字鍵從第四排左起0~9共十個(gè),接著是加號(hào)鍵、減號(hào)鍵、等號(hào)鍵和三個(gè)清除鍵,所對(duì)應(yīng)的鍵值分別是A(+)、B(—)、C(=)、和D、E、F(清除鍵)。</p><p>  鍵盤控制程序需完成的任務(wù)有:監(jiān)測(cè)是否有鍵按下,有鍵按下時(shí),若無(wú)硬件去抖動(dòng)電路時(shí),應(yīng)用軟件延時(shí)方法消除按鍵抖動(dòng)影響;當(dāng)有多個(gè)鍵同時(shí)按下時(shí),只處

9、理一個(gè)按鍵,不管一次按鍵持續(xù)多長(zhǎng)時(shí)間,僅執(zhí)行一次按鍵功能程序。</p><p>  本次設(shè)計(jì)讀取鍵值采用按鍵掃描程序的方法,思路是對(duì)鍵盤上的某一行送低電平,其他行為高電平,然后讀取列值。若列值中有一位是低,則表明該行與低電平對(duì)應(yīng)列的鍵被按下;否則,掃描下一行。本程序中,如果檢測(cè)到某鍵按下了,就不再檢測(cè)其它的按鍵,這完全能滿足絕大多數(shù)需要,又能節(jié)省大量的CPU時(shí)間。</p><p>  本次

10、的電路設(shè)計(jì)在附圖上。 </p><p><b>  軟件設(shè)計(jì)</b></p><p>  匯編語(yǔ)言 本次設(shè)計(jì)是由硬件電路和軟件編程相結(jié)合,雖然我們以前學(xué)過(guò)C語(yǔ)言,而且覺(jué)得這次設(shè)計(jì)用C語(yǔ)言會(huì)更加方便,靈活,但是匯編語(yǔ)言特別適合于實(shí)時(shí)控制系統(tǒng)這樣的應(yīng)用場(chǎng)合,作為學(xué)電氣工程及其自動(dòng)化專業(yè)的學(xué)生,我們學(xué)習(xí)單片機(jī)的主要目的是將單片機(jī)用于檢測(cè)和控制領(lǐng)域,所以,選擇用匯

11、編語(yǔ)言進(jìn)行本次設(shè)計(jì)將有助于提高我們的專業(yè)知識(shí)。</p><p>  軟件設(shè)計(jì)思路主要從以下幾個(gè)方面考慮:</p><p>  在主程序中先設(shè)置8255的工作方式,初始化對(duì)需要存數(shù)值和標(biāo)志位的存儲(chǔ)單元清零,并且位選不選中任何數(shù)碼管,段選為#00H,即使4個(gè)數(shù)碼管初始狀態(tài)無(wú)顯示。</p><p>  進(jìn)入鍵盤掃描程序,先對(duì)最低行送低電平,其他行為高電平,然后讀取列值。若

12、列值中有一位是低,則表明該行與低電平對(duì)應(yīng)列的鍵被按下;否則,掃描上一行。當(dāng)掃描到有鍵按下,可以通過(guò)行首鍵值和列編號(hào)值之和來(lái)讀取此按鍵的鍵值,不管有沒(méi)有按鍵,掃描一次返回主程序,進(jìn)入鍵值處理程序中。</p><p>  若沒(méi)有按鍵,則進(jìn)入鍵值處理程序中,相當(dāng)于執(zhí)行了一條空指令,同樣進(jìn)入顯示程序中由于沒(méi)有按鍵也相當(dāng)于執(zhí)行了一條空指令,所以在沒(méi)有按鍵的情況下,主程序的循環(huán)相當(dāng)于掃描程序的不停循環(huán),一直等到有按鍵出現(xiàn)。&

13、lt;/p><p>  若在掃描程序中查到按鍵,則可以讀出鍵值,在鍵值處理程序中,首先通過(guò)FL檢查這一次的按鍵是第幾次按鍵,已檢查此次按鍵操作有沒(méi)有存在錯(cuò)誤。若有錯(cuò)誤,則直接返回主程序重新開(kāi)始。</p><p>  對(duì)于操作中可能出現(xiàn)的錯(cuò)誤,我們只考慮兩種情況。其一,鍵入初始的三個(gè)數(shù)字后,接下來(lái)沒(méi)有鍵入加減符號(hào)而是繼續(xù)鍵入數(shù)字或者等于號(hào);其二,當(dāng)把兩個(gè)運(yùn)算數(shù),即六個(gè)數(shù)字輸入后,接下來(lái)沒(méi)有按等號(hào)

14、鍵而是按了數(shù)字鍵或者加減鍵。除這兩種錯(cuò)誤操作,其他的錯(cuò)誤可以明顯排除,比如沒(méi)有按完三個(gè)數(shù)字就按加減號(hào)這種情況,操作者可以觀察數(shù)碼管的狀態(tài)決定是否是繼續(xù)按數(shù)字鍵,當(dāng)數(shù)碼管顯示三個(gè)數(shù)字后說(shuō)明已經(jīng)輸入一個(gè)完整數(shù),否則還要繼續(xù)按數(shù)字鍵</p><p> ?。?)若沒(méi)有錯(cuò)誤,則通過(guò)鍵值大小來(lái)判斷按鍵類型,從而進(jìn)行分類操作:</p><p>  當(dāng)判斷是加減符號(hào)鍵時(shí),需要進(jìn)行兩次標(biāo)志,一是送#02H給

15、3500H存儲(chǔ)單元,相當(dāng)于給3500H第1位標(biāo)志為1,再是在3502H單元中標(biāo)志加減號(hào),向其送#01H代表加號(hào),送#00H代表是減號(hào)。</p><p>  當(dāng)判斷是清除鍵時(shí),則清空先前所有操作,重新開(kāi)始主主程序。</p><p>  當(dāng)判斷是數(shù)字鍵(除其他幾種鍵值,剩下的就是數(shù)字鍵的情況)時(shí),首先將數(shù)字值存入3400H[FL]中,然后FL自加一,其中FL是輸入鍵值為數(shù)字鍵的次數(shù),當(dāng)FL達(dá)到

16、6時(shí),即說(shuō)明完成兩個(gè)運(yùn)算數(shù)的輸入,此時(shí)重新賦FL#00H,判斷是數(shù)字鍵時(shí),也需要進(jìn)行標(biāo)志,即送#02H給3500H存儲(chǔ)單元,相當(dāng)于給3500H單元的第0位標(biāo)志為1.</p><p>  當(dāng)判斷是等號(hào)鍵時(shí),也需要進(jìn)行標(biāo)志,即送#04H給3500H存儲(chǔ)單元,相當(dāng)于給3500H單元中的第3位標(biāo)志為1.然后用TRANSB2D程序?qū)斎氲膬蓚€(gè)運(yùn)算數(shù)分別進(jìn)行十進(jìn)制轉(zhuǎn)換,根據(jù)3502H單元中的加減號(hào)標(biāo)志來(lái)確定前一次的符號(hào)鍵是加

17、還是減,再進(jìn)行分類操作:</p><p>  是加號(hào)就將兩個(gè)和數(shù)相加,然后用DIVIDE程序?qū)Y(jié)果數(shù)字進(jìn)行分離,分離有可能得到四位或少于四位,少于四位的情況下前面缺的位補(bǔ)零,然后將各位分別存儲(chǔ)在以3600H單元開(kāi)始的連續(xù)存儲(chǔ)單元中。</p><p>  如果是減號(hào),需要考慮差為負(fù)值的情況,所以在減法運(yùn)算之前,需要對(duì)兩個(gè)運(yùn)算數(shù)進(jìn)行大小比較,如果前者大于后者,兩者直接相減,所得的正數(shù)差值如

18、前面的和數(shù)一樣先分離然后存儲(chǔ)在以3600H單元開(kāi)始的連續(xù)存儲(chǔ)單元中。如果后者大于前者,則用后者減去前者,所得的值進(jìn)行數(shù)字分離,然后在最高位補(bǔ)負(fù)號(hào)(因?yàn)閿?shù)碼管顯示負(fù)號(hào)為#40H,在顯示段碼表中的第十位添加#40H,則此處說(shuō)在最高位補(bǔ)負(fù)號(hào)即送#0AH給最高位),存儲(chǔ)地址還是以3600H單元開(kāi)始的連續(xù)存儲(chǔ)單元中。</p><p>  (5)鍵值處理程序主要完成各種鍵值的標(biāo)志和確定應(yīng)送往數(shù)碼管顯示的段碼,然后進(jìn)入顯示程序

19、,顯示程序主要根據(jù)3500H單元中的各位狀態(tài)(0或1)來(lái)確定應(yīng)該顯示的鍵值類別,主要由以下幾種情況:</p><p>  如果3500H中的第0位為1,則需要顯示輸入的數(shù)字,因?yàn)樵陲@示之前FL已自動(dòng)加1,所以根據(jù)BL(FL-1+3400)來(lái)選擇段選,而且若是前三個(gè)數(shù),則根據(jù) AL(FL-1)值的來(lái)選擇位選,若是后三個(gè)數(shù),則根據(jù)FL-4的大小來(lái)選擇位選。</p><p>  如果3500H中

20、的第1位為1,則由于是加減法需要清掉數(shù)碼管顯示的前一個(gè)數(shù),從而為顯示后一個(gè)輸入的數(shù)做準(zhǔn)備。</p><p>  如果3500H中的第2位為1 ,則需要顯示按等號(hào)后的運(yùn)算結(jié)果,這個(gè)結(jié)果為在四個(gè)連續(xù)存儲(chǔ)單元的四個(gè)數(shù)字, 包含一個(gè)負(fù)號(hào),所以通過(guò)循環(huán)的方法將這幾個(gè)數(shù)字依次顯示,間隔時(shí)間很短,所以感覺(jué)是同時(shí)顯示。</p><p><b>  五、流程圖</b></p>

21、;<p><b>  六、編寫的程序</b></p><p>  P8255A EQU 7FFCH ;8255 PA口地址</p><p>  P8255B EQU 7FFDH ;8255 PB口地址</p><p>  P82

22、55C EQU 7FFEH ;8255 PC口地址</p><p>  C8255 EQU 7FFFH ;8255命令口地址 </p><p>  AX EQU 20H ;公用中轉(zhuǎn)寄存器

23、 </p><p>  AL EQU 20H</p><p>  AH EQU 21H</p><p>  BX EQU 22H</p><p>  BL EQU 22H</p><p>  BH EQU 23H</p><p>  CX EQU 24H</p>&

24、lt;p>  CL EQU 24H</p><p>  CH EQU 25H</p><p>  DL EQU 26H</p><p>  EL EQU 28H</p><p>  FL EQU 30H ;對(duì)鍵入數(shù)字鍵次數(shù)的標(biāo)志

25、 </p><p>  KX EQU 32H</p><p>  MX EQU 34H</p><p>  NX EQU 36H</p><p>  PX EQU 38H</p><p>  X1 EQU 40H ;對(duì)輸入數(shù)字分離的各位<

26、;/p><p>  X2 EQU 42H</p><p>  X3 EQU 44H</p><p>  X4 EQU 46H</p><p>  X5 EQU 48H ;對(duì)結(jié)果數(shù)字分離的各位</p><p>  X6 EQU 50H</p><

27、;p>  X7 EQU 52H</p><p>  X8 EQU 54H</p><p> ??;----------------------------主程序-------------------------</p><p><b>  ORG 2080H</b></p><p><b>  START:

28、</b></p><p>  LD SP,#00A0H</p><p>  LDB AL,#82H</p><p>  STB AL,C8255 ;PB口輸入,PA,PC口輸出 </p><p><b>  RDKB:</b></p><p>  L

29、CALL SYS_INIT ;系統(tǒng)初始化</p><p><b>  RECYLE:</b></p><p>  LCALL RD_KB</p><p>  LCALL DO_KB</p><p>  LCALL DISPLAY</p><p>  LJMP RECYLE

30、 ;持續(xù)掃描</p><p> ??;---------------------------系統(tǒng)初始化-----------------------</p><p><b>  SYS_INIT:</b></p><p>  LD MX,#3400H ;輸入值的存儲(chǔ)位置</p&g

31、t;<p>  LD NX,#3500H</p><p>  LD KX,#3502H</p><p><b>  CLR [MX]</b></p><p><b>  CLR [NX]</b></p><p><b>  CLR [KX]</b>&

32、lt;/p><p>  ST #00H,P8255A</p><p>  ST #0FH,P8255C</p><p>  LDB FL,#00H ;鍵入數(shù)字值的次數(shù)的初始值 </p><p><b>  RET</b></p><p>  ;-----------

33、--------------------鍵盤掃描程序------------------------</p><p><b>  RD_KB:</b></p><p>  SCALL KEYCAN ;調(diào)用查詢是否有鍵閉合的子程序 </p><p>  JE RD_KB ;無(wú)

34、鍵閉合,重新查詢</p><p>  SCALL TIME ;有列線為低,延時(shí)12ms,去抖</p><p>  SCALL KEYCAN ;再次確認(rèn)</p><p>  JE RD_KB ;無(wú)鍵閉合,重查</p><p>  LDB

35、CL,#01H ;從行線0開(kāi)始掃描</p><p>  LDB DL,#00H ;置行線0首鍵之值</p><p>  LDB DH,#00H ;列線編號(hào)值</p><p><b>  RDLOOP:</b></p><p&

36、gt;  STB CL,P8255B ;置行線為低電平</p><p>  LDB CH,P8255C ;讀入列線狀態(tài)</p><p><b>  DCV:</b></p><p>  SHLB CH,#01H ;將列線逐位移入C檢查</p>

37、<p>  JNC KEYVAL ;若C=0,則查到閉合鍵</p><p>  INCB DH </p><p>  CMPB DH,#04H ;是否查完最后一列</p><p><b>  JNE DCV</b><

38、/p><p>  ADDB DL,#04H ;置下一行線首鍵之值</p><p>  SHLB CL,#01H</p><p>  CMPB CL,#10H</p><p><b>  JE RETURN</b></p><p><b>  SJMP LOOP

39、</b></p><p><b>  KEYVAL:</b></p><p>  ADDB DL,DH ;行首鍵值+列首鍵值=鍵值</p><p>  RDLOOP1: SCALL TIME ;調(diào)延時(shí)子程序,去抖</p><p>  SCAL

40、L KEYCAN</p><p><b>  JNE LOOP1</b></p><p>  RETURN:RET</p><p>  KEYCAN: ;查是否有鍵閉合子程序</p><p>  LD AX,#7FFDH ;送輸

41、出端口地址</p><p>  LDB BL,#0FH ;使全部行線為低電平</p><p>  STB BL,[AX]</p><p>  LD AX,#7FFEH ;送輸出端口地址</p><p>  LDB BH,[AX] ;

42、輸入全部列線狀態(tài)</p><p>  ANDB BH,#F0H ;屏蔽BH低四位</p><p>  CMPB BH,#0FH ;判斷列線中是否有低電平</p><p><b>  RET </b></p><p>  LDB EH,#0CH

43、 ;延時(shí)12ms子程序</p><p>  LDB EL,#EBH</p><p>  TIME: DECB EL</p><p>  TL1: JNE TL1</p><p>  DJNZ EH,TIME</p><p><b>  RET</b></p

44、><p>  EXIT: RET</p><p> ??;-----------------------------鍵值處理--------------------------</p><p><b>  DO_KB:</b></p><p><b>  LDB AL,DL</b></p>

45、<p>  ERROR: ;首先判斷鍵入的值是否有錯(cuò)</p><p>  CMPB FL,#02H ;輸完第三個(gè)數(shù)字后,判斷這次輸?shù)氖欠袷羌訙p號(hào)</p><p><b>  JE JUDGE1</b></p><p>  CMPB FL,#

46、05H ;輸完第6個(gè)數(shù)字后,判斷這次輸?shù)氖欠袷堑忍?hào)</p><p><b>  JE JUDGE2</b></p><p>  JUDGE1: </p><p>  CMPB AL,#0AH ;若AL值是A或B,說(shuō)明操作正確</p&

47、gt;<p>  JE EXT_JUDGE1 </p><p>  CMPB AL,#0BH</p><p>  JE EXT_JUDGE1</p><p><b>  ERROR1:</b></p><p>  LD BX,#RECYLE ;否

48、則錯(cuò)誤,需要重新開(kāi)始程序</p><p>  ST BX,[SP]</p><p><b>  RET</b></p><p>  EXT_JUDGE1:RET</p><p>  JUDGE2: </p><p>  CMPB AL,#

49、0CH ;若AL值不是C,說(shuō)明操作錯(cuò)誤 </p><p>  JNE ERROR2</p><p><b>  ERROR2:</b></p><p>  LD BX,#RECYLE ;操作錯(cuò)誤需要重新開(kāi)始程序&l

50、t;/p><p>  ST BX,[SP]</p><p><b>  RET</b></p><p>  EXT_JUDGE2:RET</p><p>  DO_SYMBOL: ;對(duì)鍵值為加減號(hào)的處理</p><p>  CMPB AL,#0A

51、H ;判斷是否是加號(hào)鍵</p><p><b>  JE DO_JIA</b></p><p>  CMPB AL,#0BH ;判斷是否是減號(hào)鍵</p><p>  JE DO_JIAN</p><p>  LDB BL,#02H

52、 ;對(duì)鍵值為加減號(hào)的標(biāo)志 </p><p>  STB BL,3500H[0] </p><p>  DISPLAY </p><p>  DO_JIA:STB #01H,3502H[0] ;對(duì)加號(hào)的標(biāo)志</p><p><b>  RET<

53、;/b></p><p>  DO_JIAN:STB #00H,3502H[0] ;對(duì)減號(hào)的標(biāo)志</p><p><b>  RET</b></p><p>  DO_DEL: ;對(duì)各清除鍵的處理</p><p>  CMPB DL,

54、#0DH </p><p>  JE RETURN2</p><p>  CMPB DL,#0EH</p><p>  JE RETURN2</p><p>  CMPB DL,#0FH</p><p><b>  JE DO_KB2</b></p><

55、p>  RETURN2:RET</p><p>  DO_KB2:LD BX,#START ;重新開(kāi)始程序</p><p>  ST BX,[SP]</p><p>  DO_EQUAL: ;對(duì)鍵值為等號(hào)的處理</p><p>  CMPB AL,#

56、0CH</p><p><b>  JE DO_KB3</b></p><p><b>  DO_KB3:</b></p><p>  LDB BL,#04H ;對(duì)等號(hào)的標(biāo)志</p><p>  STB BL,3500H[0]</p><p&g

57、t;  DO_ELEMENT1: ;對(duì)輸入的第一個(gè)數(shù)轉(zhuǎn)十進(jìn)制</p><p>  LD X4,#00H</p><p>  LD X3,3400H[0]</p><p>  LD X2,3400H[1]</p><p>  LD X1,3400H[2]</p><p>

58、;<b>  TRANSB2D</b></p><p><b>  LD AX,CX</b></p><p>  DO_ELEMENT2: ;對(duì)輸入的第二個(gè)數(shù)轉(zhuǎn)十進(jìn)制 </p><p>  LD X4,#00H</p><p>  LD X3,34

59、00H[3]</p><p>  LD X2,3400H[4]</p><p>  LD X1,3400H[5]</p><p><b>  TRANSB2D</b></p><p><b>  LD BX,CX</b></p><p>  JBS KX,1,DO_PLUS&

60、lt;/p><p>  JBC KX,1,DO_MINUS</p><p><b>  DO_PLUS:</b></p><p>  ADDC DX,AX,BX ;加法子程序</p><p>  DIVIDE DX ;求出和數(shù)的各位</p>

61、<p>  STB X5,3600[4] ;將各位分別存儲(chǔ)</p><p>  STB X6,3600[3]</p><p>  STB X7,3600[2]</p><p>  STB X8,3600[1]</p><p><b>  RET</b></p><

62、p>  DO_MINUS: CMP AX,BX ;減法子程序,判斷兩個(gè)輸入數(shù)的大小</p><p>  JLT DO_MINUS1 ;若第一個(gè)數(shù)小于第二個(gè)數(shù)</p><p>  SUBC DX,AX,BX</p><p><b>  DIVIDE DX</b></

63、p><p>  STB X5,3600H[0]</p><p>  STB X6,3600H[1]</p><p>  STB X7,3600H[2]</p><p>  STB X8,3600H[3]</p><p><b>  RET</b></p><p>  DO_MI

64、NUS1:SUBC DX,BX,AX ;將后一個(gè)數(shù)減前一個(gè)數(shù)</p><p>  DIVIDE DX ;求出差數(shù)的各位</p><p>  STB #0AH,3600H[0] ;差實(shí)際是負(fù)數(shù),補(bǔ)一個(gè)負(fù)號(hào)</p><p>  STB X6,3600H[1]

65、 ;保存各位</p><p>  STB X7,3600H[2]</p><p>  STB X8,3600H[3]</p><p><b>  RET</b></p><p>  DO_DATA: ;對(duì)鍵值為數(shù)字的處理</p><p>

66、  LDB BL,#01H</p><p>  STB BL,3500H[0] ;對(duì)鍵值為數(shù)字的標(biāo)志</p><p>  STB AL,3400H[FL] ;依順序存儲(chǔ)鍵值</p><p>  INCB FL ;FL自動(dòng)加一</p><p

67、>  CMPB FL,#06H ;判斷輸入鍵值為數(shù)字的次數(shù)是否到6次</p><p>  JE INIT_FL </p><p><b>  DISPLAY</b></p><p>  INIT_FL:LDB FL,#00H

68、 ;若到六次,F(xiàn)L重新從0計(jì)數(shù)</p><p><b>  RET</b></p><p>  ;-------------------------------------------------進(jìn)制轉(zhuǎn)換-------------------------------------------</p><p>  TRANSB2D:

69、 ;各位數(shù)字的十進(jìn)制轉(zhuǎn)換</p><p>  LDBZE AX,X4</p><p>  MUL AX,#1000</p><p><b>  ADD CX,AX</b></p><p>  LDBZE AX,X3</p><p>  MUL AX,#100

70、</p><p><b>  ADD CX,AX</b></p><p>  LDBZE AX X2</p><p>  MUL AX,#10</p><p><b>  ADD CX AX</b></p><p>  LDBZE AX,X1</p><p

71、><b>  MUL AX,#1</b></p><p><b>  ADD CX,AX</b></p><p><b>  RET</b></p><p>  DIVIDE: ;對(duì)結(jié)果數(shù)字的分離</p><p&g

72、t;  DIV DX,#03E8H</p><p><b>  LDB X5,DL</b></p><p><b>  LDB AL,DL</b></p><p>  LDB AH,#00H</p><p>  DIV AX,#64H</p><p><b>  L

73、DB X6,AL</b></p><p><b>  LDB BL,AH</b></p><p>  LDB BH,#00H</p><p>  DIV BX,#0AH</p><p><b>  LDB X7,BL</b></p><p><b>  

74、LDB X8,BH</b></p><p><b>  RET</b></p><p> ?。?----------------------------------------------------顯示程序----------------------------------------------</p><p><b>

75、;  DISPLAY:</b></p><p>  JBS NL,0,DIS_DATA ;判斷是否是數(shù)字按鍵</p><p>  JBS NL,1,DIS_SYMNOL ;判斷是是否是加減符號(hào)按鍵</p><p>  JBS NL,2,DIS_EQUAL ;判斷

76、是否是等號(hào)按鍵</p><p><b>  DIS_DATA:</b></p><p>  CMPB #02H,FL ;對(duì)前三位數(shù)字的輸出顯示</p><p>  SUBB AL,FL,#01H</p><p>  ADDB BL,AL,#3400H</p>&l

77、t;p>  LDB BH,[BL]</p><p>  STB AL,P8255C</p><p>  STB,BH,P8255A</p><p>  SCALL DELAY</p><p>  STB,#00H,P8255A</p><p>  DIA_DATA1:

78、 ;對(duì)后三位數(shù)字的輸出顯示</p><p>  SUBB AL,FL,#02H</p><p>  ADDB BL,AL,#3400H</p><p>  LDB BH,[BL]</p><p>  STB AL,P8255C</p><p>  STB,BH,P8255A</p><

79、;p>  SCALL DELAY</p><p>  STB,#00H,P8255A</p><p><b>  RET</b></p><p><b>  EX1:RET</b></p><p>  DIS_SYMBOL: ;對(duì)前加減符號(hào)按鍵的

80、輸出不顯示,數(shù)碼管全滅</p><p>  STB #0FH,P8255C</p><p>  STB,#00H,P8255A</p><p>  SCALL DELAY</p><p><b>  RET</b></p><p>  DIS_EQUAL:

81、 ;對(duì)等號(hào)的輸出顯示</p><p>  DIS_SYMBOL</p><p><b>  DELAY</b></p><p>  STB #00H,P8255C</p><p>  LDB EL,#04H</p><p>  DIS_EQUAL1:</p><

82、;p>  STB 3600H[EL],P8255C</p><p>  SCALL DELAY</p><p>  DJNZ EL,DIS_EQUAL</p><p>  STB,#00H,P8255A</p><p>  EXDIS:RET</p><p>  DELAY:LDB AL,#30H

83、 ;延時(shí)不到0.5ms</p><p><b>  DELOOP:</b></p><p><b>  NOP</b></p><p><b>  NOP</b></p><p>  DJNZ AL,LOOP</p><

84、p><b>  RET</b></p><p> ??;------------------------------------------------顯示段碼-----------------------------------------------------</p><p><b>  ORG 4000H</b></p>

85、<p>  DSEG:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,40H ;0~9為順序阿拉伯?dāng)?shù)字,最后一個(gè)是負(fù)號(hào)</p><p><b>  END</b></p><p><b>  七、參考文獻(xiàn)</b></p><p>  1、《單片機(jī)原理與應(yīng)用》大連理工大學(xué)出

溫馨提示

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