版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)課程設(shè)計(jì)報(bào)告---設(shè)計(jì)十進(jìn)制加減乘法計(jì)算器
- 單片機(jī)課程設(shè)計(jì)十進(jìn)制加法計(jì)算器設(shè)計(jì)
- 計(jì)算機(jī)單片機(jī)設(shè)計(jì)課程設(shè)計(jì)--簡(jiǎn)易計(jì)算器
- 課程設(shè)計(jì)-單片機(jī)計(jì)算器
- 單片機(jī)計(jì)算器課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--計(jì)算器
- 單片機(jī)課程設(shè)計(jì)-計(jì)算器
- 單片機(jī)課程設(shè)計(jì)——計(jì)算器設(shè)計(jì)
- 微機(jī)原理課程設(shè)計(jì)(用8255a實(shí)現(xiàn)4位十進(jìn)制計(jì)算器)
- 單片機(jī)系統(tǒng)設(shè)計(jì)課程設(shè)計(jì)--計(jì)算器
- 51單片機(jī)計(jì)算器設(shè)計(jì)課程設(shè)計(jì)
- 課程設(shè)計(jì)---單片機(jī)簡(jiǎn)易計(jì)算器設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--簡(jiǎn)易計(jì)算器
- 單片機(jī)課程設(shè)計(jì)簡(jiǎn)易計(jì)算器
- 單片機(jī)課程設(shè)計(jì)---計(jì)算器實(shí)驗(yàn)
- 單片機(jī)課程設(shè)計(jì)-簡(jiǎn)易計(jì)算器
- 單片機(jī)課程設(shè)計(jì)簡(jiǎn)易計(jì)算器
- 單片機(jī)課程設(shè)計(jì)報(bào)告---計(jì)算器
- 單片機(jī)課程設(shè)計(jì)--簡(jiǎn)易計(jì)算器
- 課程設(shè)計(jì)--單片機(jī)設(shè)計(jì)實(shí)驗(yàn)報(bào)告簡(jiǎn)單計(jì)算器的設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論