|
單片機(jī)課程設(shè)計(jì) 題目: 簡(jiǎn)易計(jì)算器的設(shè)計(jì)
院 系:信息工程學(xué)院 班 級(jí): 自動(dòng)化1班 姓 名:黃浩 學(xué) 號(hào): 2010550123 指導(dǎo)教師:張瑩
目錄
1 設(shè)計(jì)說(shuō)明.... 1 1.1 設(shè)計(jì)內(nèi)容.... 1 1.2 設(shè)計(jì)要求.... 1 1.3設(shè)備及工作環(huán)境.... 1 2 硬件方案.... 1 2.1 設(shè)計(jì)思路.... 1 2.2 原理電路圖.... 2 2.3 主要元件功能說(shuō)明.... 2 2.4 硬件工作原理闡述.... 7 3 軟件方案.... 8 3.1 分析論證.... 8 3.2 程序流程圖.... 9 3.3 程序清單.... 10 4 調(diào)試過(guò)程及結(jié)果分析..... 16 5 設(shè)計(jì)總結(jié)..... 16 參考文獻(xiàn)..... 16
1.設(shè)計(jì)說(shuō)明
1.1設(shè)計(jì)內(nèi)容
本次的設(shè)計(jì)是利用單片機(jī)設(shè)計(jì)簡(jiǎn)單的計(jì)算器,本設(shè)計(jì)利用單片機(jī)的I/O接口設(shè)計(jì)2×4鍵盤,8個(gè)鍵依次對(duì)應(yīng)0~3、“+”、“-”、“=”和清除鍵。通過(guò)檢測(cè)不同數(shù)字鍵、功能鍵的按下,可以進(jìn)行小于255的數(shù)的加減乘除運(yùn)算,并可連續(xù)運(yùn)算。當(dāng)鍵入值大于255時(shí),將自動(dòng)清零,可以重新輸入。對(duì)應(yīng)每一個(gè)數(shù)字鍵按下的同時(shí),LED顯示按下鍵的值,并顯示最后的運(yùn)算結(jié)果。
1.2設(shè)計(jì)要求
要求能實(shí)現(xiàn)小于255的數(shù)的加減運(yùn)算,采用2×4鍵盤,8個(gè)鍵依次對(duì)應(yīng)0~3、“+”、“-”、“=”和清除鍵。根據(jù)輸入鍵的按下實(shí)現(xiàn)不同的功能,最終結(jié)果通過(guò)LED顯示。
1.3設(shè)備及工作環(huán)境
8051單片機(jī)一片、七段四顯示數(shù)碼管一個(gè)、排阻一個(gè)、導(dǎo)線若干、12MHz晶振一個(gè)、30pF電容兩個(gè)
所有設(shè)備均工作在常溫下(0℃~70℃)
2.硬件方案
2.1設(shè)計(jì)思路
本設(shè)計(jì)利用單片機(jī)的I/O接口設(shè)計(jì)2×4鍵盤,兩行四列分別由單片機(jī)的P2.4\P2.5及P2.0-P2.3輸入輸出數(shù)據(jù)。采用P0口和P1.0-P1.3輸出數(shù)據(jù)到數(shù)碼管顯示由鍵盤輸入的數(shù)據(jù)及最終計(jì)算結(jié)果。
2.2原理電路圖
圖2.1 硬件電路圖
2.3主要元件功能說(shuō)明
2.3.1單片機(jī)概述
單片機(jī)微型計(jì)算機(jī)是微型計(jì)算機(jī)的一個(gè)重要分支,也是頗具生命力的機(jī)種。單片機(jī)微型計(jì)算機(jī)簡(jiǎn)稱單片機(jī),特別適用于控制領(lǐng)域,故又稱為微控制器。
通常,單片機(jī)由單塊集成電路芯片構(gòu)成,內(nèi)部包含有計(jì)算機(jī)的基本功能部件:中央處理器、存儲(chǔ)器和I/O接口電路等。因此,單片機(jī)只需要和適當(dāng)?shù)能浖巴獠吭O(shè)備相結(jié)合,便可成為一個(gè)單片機(jī)控制系統(tǒng)。
單片機(jī)經(jīng)過(guò)1、2、3,3代的發(fā)展,目前單片機(jī)正朝著高性能和多品種方向發(fā)展,它們的CPU功能在增強(qiáng),內(nèi)部資源在增多,引腳的多功能化,以及低電壓低功耗。
2.3.2芯片簡(jiǎn)介
MSC-51芯片簡(jiǎn)介:
8051單片機(jī)包含中央處理器、程序存儲(chǔ)器(ROM)、數(shù)據(jù)存儲(chǔ)器(RAM)、定時(shí)/計(jì)數(shù)器、并行接口、串行接口和中斷系統(tǒng)等幾大單元及數(shù)據(jù)總線、地址總線和控制總線等三大總線,現(xiàn)在我們分別加以說(shuō)明:
中央處理器:
中央處理器(CPU)是整個(gè)單片機(jī)的核心部件,是8位數(shù)據(jù)寬度的處理器,能處理8位二進(jìn)制數(shù)據(jù)或代碼,CPU負(fù)責(zé)控制、指揮和調(diào)度整個(gè)單元系統(tǒng)協(xié)調(diào)的工作,完成運(yùn)算和控制輸入輸出功能等操作。
數(shù)據(jù)存儲(chǔ)器(RAM):
8051內(nèi)部有128個(gè)8位用戶數(shù)據(jù)存儲(chǔ)單元和128個(gè)專用寄存器單元,它們是統(tǒng)一編址的,專用寄存器只能用于存放控制指令數(shù)據(jù),用戶只能訪問,而不能用于存放用戶數(shù)據(jù),所以,用戶能使用的RAM只有128個(gè),可存放讀寫的數(shù)據(jù),運(yùn)算的中間結(jié)果或用戶定義的字型表。
定時(shí)/計(jì)數(shù)器(ROM)
8051有兩個(gè)16位的可編程定時(shí)/計(jì)數(shù)器,以實(shí)現(xiàn)定時(shí)或計(jì)數(shù)產(chǎn)生中斷用于控制程序轉(zhuǎn)向。
并行輸入輸出(I/O)口:
8051共有4組8位I/O口(P0、 P1、P2或P3),用于對(duì)外部數(shù)據(jù)的傳輸。
全雙工串行口:
8051內(nèi)置一個(gè)全雙工串行通信口,用于與其它設(shè)備間的串行數(shù)據(jù)傳送,該串行口既可以用作異步通信收發(fā)器,也可以當(dāng)同步移位器使用。
中斷系統(tǒng):
8051具備較完善的中斷功能,有兩個(gè)外中斷、兩個(gè)定時(shí)/計(jì)數(shù)器中斷和一個(gè)串行中斷,可滿足不同的控制要求,并具有2級(jí)的優(yōu)先級(jí)別選擇。
時(shí)鐘電路:
8051內(nèi)置最高頻率達(dá)12MHz的時(shí)鐘電路,用于產(chǎn)生整個(gè)單片機(jī)運(yùn)行的脈沖時(shí)序,但8051單片機(jī)需外置振蕩電容。
圖2.2 單片機(jī)結(jié)構(gòu)圖
MCS-51的引腳說(shuō)明:
MCS-51系列單片機(jī)中的8031、8051及8751均采用40Pin封裝的雙列直接DIP結(jié)構(gòu),下圖是它們的引腳配置,40個(gè)引腳中,正電源和地線兩根,外置石英振蕩器的時(shí)鐘線兩根,4組8位共32個(gè)I/O口,中斷口線與P3口線復(fù)用。現(xiàn)在我們對(duì)這些引腳的功能加以說(shuō)明:如圖2.3
圖2.3單片機(jī)引腳圖
Pin9:RESET/Vpd復(fù)位信號(hào)復(fù)用腳,當(dāng)8051通電,時(shí)鐘電路開始工作,在RESET引腳上出現(xiàn)24個(gè)時(shí)鐘周期以上的高電平,系統(tǒng)即初始復(fù)位。初始化后,程序計(jì)數(shù)器PC指向0000H,P0-P3輸出口全部為高電平,堆棧指針寫入07H,其它專用寄存器被清“0”。RESET由高電平下降為低電平后,系統(tǒng)即從0000H地址開始執(zhí)行程序。然而,初始復(fù)位不改變RAM(包括工作寄存器R0-R7)的狀態(tài),8051的初始態(tài)。
8051的復(fù)位方式可以是自動(dòng)復(fù)位,也可以是手動(dòng)復(fù)位,見圖2.4。此外,RESET/Vpd還是一復(fù)用腳,Vcc掉電其間,此腳可接上備用電源,以保證單片機(jī)內(nèi)部RAM的數(shù)據(jù)不丟失。
圖2.4單片機(jī)復(fù)位電路
Pin30:ALE/當(dāng)訪問外部程序器時(shí),ALE(地址鎖存)的輸出用于鎖存地址的低位字節(jié)。而訪問內(nèi)部程序存儲(chǔ)器時(shí),ALE端將有一個(gè)1/6時(shí)鐘頻率的正脈沖信號(hào),這個(gè)信號(hào)可以用于識(shí)別單片機(jī)是否工作,也可以當(dāng)作一個(gè)時(shí)鐘向外輸出。更有一個(gè)特點(diǎn),當(dāng)訪問外部程序存儲(chǔ)器,ALE會(huì)跳過(guò)一個(gè)脈沖。
如果單片機(jī)是EPROM,在編程其間,將用于輸入編程脈沖。
Pin29:當(dāng)訪問外部程序存儲(chǔ)器時(shí),此腳輸出負(fù)脈沖選通信號(hào),PC的16位地址數(shù)據(jù)將出現(xiàn)在P0和P2口上,外部程序存儲(chǔ)器則把指令數(shù)據(jù)放到P0口上,由CPU讀入并執(zhí)行。
Pin31:EA/Vpp程序存儲(chǔ)器的內(nèi)外部選通線,8051和8751單片機(jī),內(nèi)置有4kB的程序存儲(chǔ)器,當(dāng)EA為高電平并且程序地址小于4kB時(shí),讀取內(nèi)部程序存儲(chǔ)器指令數(shù)據(jù),而超過(guò)4kB地址則讀取外部指令數(shù)據(jù)。如EA為低電平,則不管地址大小,一律讀取外部程序存儲(chǔ)器指令。顯然,對(duì)內(nèi)部無(wú)程序存儲(chǔ)器的8031,EA端必須接地。
在編程時(shí),EA/Vpp腳還需加上21V的編程電壓。
2.3.3相關(guān)知識(shí)
數(shù)碼管顯示
在本任務(wù)中用4位數(shù)碼管顯示當(dāng)前數(shù)值的千,百,十,個(gè),由于數(shù)碼管個(gè)數(shù)多,如采用靜態(tài)顯示方式,則占用單片機(jī)的I/O口線太多,如果用定時(shí)器/計(jì)數(shù)器的串行移位寄存器工作方式及外接串入并出移位寄存器74LS164的方式,則電路復(fù)雜。所以,在數(shù)碼管個(gè)數(shù)較多時(shí),常采用動(dòng)態(tài)顯示方式。
如圖2.1所示為單片機(jī)應(yīng)用系統(tǒng)中的一種數(shù)碼管動(dòng)態(tài)顯示電路圖,4位數(shù)碼管的相同段并聯(lián)在一起,由一個(gè)8位I/O(P1口)輸出字形碼控制顯示某一字形,每個(gè)數(shù)碼管的公共端由另外一個(gè)I/O口(P0口)輸出的字位碼控制,即數(shù)碼管顯示的字形是由單片機(jī)I/O口輸出的字形碼確定,而哪個(gè)數(shù)碼管點(diǎn)亮是由單片機(jī)I/O口輸出的字位碼確定的。4個(gè)數(shù)碼管分時(shí)輪流循環(huán)點(diǎn)亮,在同一時(shí)刻只有1個(gè)數(shù)碼管點(diǎn)亮,但由于數(shù)碼管具有余輝特性及人眼具有視覺暫留特性,所以適當(dāng)?shù)剡x取循環(huán)掃描頻率,看上去所有數(shù)碼管是同時(shí)點(diǎn)亮的,察覺不出閃爍現(xiàn)象。動(dòng)態(tài)顯示方式所接數(shù)碼管不能太多,否則會(huì)因每個(gè)數(shù)碼管所分配的實(shí)際導(dǎo)通時(shí)間太少,使得數(shù)碼管的亮度不足。在本任務(wù)中,為了簡(jiǎn)便,字形碼和字位碼都沒由加驅(qū)動(dòng)電路,在實(shí)際應(yīng)用中應(yīng)加驅(qū)動(dòng)電路。數(shù)碼管有共陰極和共陽(yáng)極兩種,對(duì)于共陽(yáng)數(shù)碼管,字形驅(qū)動(dòng)輸出0有效,字位驅(qū)動(dòng)輸出1有效;而對(duì)于共陰數(shù)碼管則相反,即:字形驅(qū)動(dòng)輸出1有效,字位驅(qū)動(dòng)輸出0有效。
矩陣按鍵
鍵盤是單片機(jī)系統(tǒng)中最常用的人機(jī)對(duì)話輸入設(shè)備,用戶通過(guò)鍵盤向單片機(jī)輸入數(shù)據(jù)或指令。鍵盤控制程序需完成的任務(wù)有:監(jiān)測(cè)是否有鍵按下,有鍵按下時(shí),在無(wú)硬件去抖的動(dòng)電路時(shí),應(yīng)用軟件延時(shí)方法消除按鍵抖動(dòng)影響;當(dāng)有多個(gè)鍵同時(shí)按下時(shí),只處理一個(gè)按鍵,不管一次按鍵持續(xù)多長(zhǎng)時(shí)間,僅執(zhí)行一次按鍵功能程序。
矩陣按鍵掃描程序是一種節(jié)省I/O口的方法,按鍵數(shù)目越多節(jié)省I/O口就越可觀,思路:先判斷某一列(行)是否有按鍵按下,再判斷該行(列)是那一只鍵按下。但是,在程序的寫法上,采用了最簡(jiǎn)單的方法,使得程序效率最高。本程序中,如果檢測(cè)到某鍵按下了,就不再檢測(cè)其它的按鍵,這完全能滿足絕大多數(shù)需要,又能節(jié)省大量的CPU時(shí)間。
本鍵盤掃描程序的優(yōu)點(diǎn)在于:不用專門的按鍵延時(shí)程序,提高了CPU效率,也不用中斷來(lái)掃描鍵盤,節(jié)省了硬件資源。另外,本鍵盤掃描程序,每次掃描占用CPU時(shí)最短,不論有鍵按下或者無(wú)鍵按下都可以在很短的時(shí)間完成一次掃描。
2.4 硬件工作原理闡述
8051單片機(jī)的P2口作鍵盤口,其中P2.4-P2.5為鍵盤掃描輸出線,P2.0-P2.3為鍵盤掃描輸入線。鍵盤由2*4共8個(gè)按鍵組成,4個(gè)數(shù)字鍵(由0-3組成)3個(gè)運(yùn)算符號(hào)(加減等于)組成,1個(gè)清除鍵(作用相當(dāng)于整體復(fù)位)。4個(gè)數(shù)碼管用于顯示當(dāng)前數(shù)值的千,百,十,個(gè),采用動(dòng)態(tài)顯示方式,P1口接4個(gè)數(shù)碼管的七段,P0口分別接4個(gè)數(shù)碼管的公共端,P1口輸出數(shù)碼管的字形碼,P0口輸出數(shù)碼管的字位碼。
3.軟件方案
3.1 分析論證
程序工作過(guò)程如下:
(1)首先賦予顯示緩沖初始值‘00 00’,并把數(shù)據(jù)存儲(chǔ)單元清零。
(2)主程序調(diào)用鍵盤掃描子程序,判斷鍵值,是數(shù)字第一次直接賦予23H單元,如是第二次輸入數(shù)字,則把第一次值乘十后與第二次值相加,結(jié)果存儲(chǔ)到23H單元,并R4計(jì)數(shù)2次,表示已輸入兩位,掃描鍵值時(shí)就不再賦值和顯示。等待運(yùn)算符號(hào)的按下,按下等于號(hào)就直接計(jì)算并顯示,如加減就R5加一并把R4清零,表示可以輸入下一操作數(shù),與第一次相同,并等待等于鍵按下。清零鍵則不管在任何情況下都清零,相當(dāng)于軟復(fù)位。
(3)在掃描完鍵盤后,調(diào)用數(shù)據(jù)顯示轉(zhuǎn)換子程序把值轉(zhuǎn)換為七段碼。
(4)調(diào)用數(shù)碼管動(dòng)態(tài)顯示子程序,顯示數(shù)值,重新循環(huán)
3.2 程序流程圖
3.3 程序清單
3.3.1存儲(chǔ)單元分配
30H單元:數(shù)值個(gè)位顯示單元;31H單元:數(shù)值十位顯示單元;32H單元:數(shù)值百位顯示單元;33H單元:數(shù)值千位顯示單元;23H單元:第一操作數(shù)存儲(chǔ)單元;24H單元:第二操作數(shù)存儲(chǔ)單元;25H單元:鍵值暫存單元;27H單元:清除鍵狀態(tài);34H-37H單元:結(jié)果數(shù)據(jù)轉(zhuǎn)換暫存單元;38H-39H單元:結(jié)果高低8位暫存單元;R5單元:操作數(shù)計(jì)數(shù)單元;R4單元:操作數(shù)數(shù)值位數(shù)計(jì)數(shù)單元;R3單元:運(yùn)算符號(hào)存儲(chǔ)單元。
3.3.2主程序設(shè)計(jì)
主程序進(jìn)行程序中用到的一些存儲(chǔ)單元的初始化,數(shù)值顯示和2*4鍵盤掃描。首先,進(jìn)行存儲(chǔ)單元初始化,給數(shù)碼管顯示單元30H-33H賦予“0000”字形數(shù)據(jù),將數(shù)值計(jì)數(shù)單元,存儲(chǔ)單元,賦予初值零。之后,調(diào)用鍵盤掃描子程序,和數(shù)碼管顯示數(shù)據(jù)轉(zhuǎn)換程序,數(shù)碼管動(dòng)態(tài)顯示子程序。主程序不斷進(jìn)行鍵盤掃描,數(shù)碼管顯示數(shù)據(jù)轉(zhuǎn)換子程序和動(dòng)態(tài)顯示子程序。
3.3.3數(shù)碼管顯示數(shù)據(jù)轉(zhuǎn)換子程序CONV
由于數(shù)值單元存放的是二進(jìn)制數(shù),而用戶熟悉的是十進(jìn)制數(shù),所以應(yīng)將數(shù)值單元中的二進(jìn)制轉(zhuǎn)換為十進(jìn)制數(shù),即BCD碼。要通過(guò)數(shù)碼管顯示出當(dāng)前數(shù)值,還必須將BCD碼進(jìn)一步轉(zhuǎn)換為七段碼,轉(zhuǎn)換的最終結(jié)果數(shù)據(jù)存放于顯示緩沖區(qū)30H-33H單元中,其中30H單元存放數(shù)值的個(gè)位七段碼,31H單元存放數(shù)值的十位七段碼,32H單元存放數(shù)值的百位七段碼,33H單元存放數(shù)值的千位七段碼。
3.3.4數(shù)碼管動(dòng)態(tài)顯示子程序
本任務(wù)由P1口輸出字形碼,P0口輸出字位碼。先將存放于30H單元的數(shù)值個(gè)位七段碼由P1口輸出,同時(shí)P0口輸出使數(shù)值個(gè)位顯示數(shù)碼管點(diǎn)亮的字位碼。由于采用的是共陽(yáng)數(shù)碼管,所以只有該位數(shù)碼管對(duì)應(yīng)的P0.0為1,其他位P0.1-P0.3為0,點(diǎn)亮延時(shí)10MS。然后P1口輸出數(shù)值十位七段碼,P0.1為1,數(shù)值十位數(shù)碼管點(diǎn)亮,延時(shí)10MS。接著P1口輸出數(shù)值百位七段碼,P0.2為1,數(shù)值百位數(shù)碼管點(diǎn)亮,延時(shí)10MS。最后P1口輸出數(shù)值千位七段碼,P0.3為1,數(shù)值千位數(shù)碼管點(diǎn)亮,延時(shí)10MS。
程序源代碼:
DISPBUF EQU 30H ;顯示數(shù)據(jù)存儲(chǔ)位置
ORG 0000H ;主程序的入口地址
START:MOV DISPBUF,#0C0H ;4個(gè)數(shù)碼管顯示"0000"字形數(shù)據(jù)
MOV DISPBUF+1,#0C0H
MOV DISPBUF+2,#0C0H
MOV DISPBUF+3,#0C0H
MOV 37H,#00H ;數(shù)值初始化
MOV 27H,#00H
MOV 26H,#00H
MOV 25H,#00H
MOV 24H,#00H
MOV 23H,#00H
MOV R3,#00H
MOV R5,#00H
MOV R4,#00H
LOOP: LCALLKEY ;調(diào)用鍵盤掃描子程序
MOV R6,27H
CJNE R6,#00H,START ;清除鍵判斷
MOV R6,26H
CJNE R6,#00H,FA ;顯示數(shù)據(jù)轉(zhuǎn)換子程序選擇
LCALL CONV ;調(diào)用數(shù)碼管顯示數(shù)據(jù)轉(zhuǎn)換子程序
FA: LCALL DISPSCAN ;調(diào)用數(shù)碼管動(dòng)態(tài)顯示子程序
SJMP LOOP
KEY: MOVP2,#0FH ;鍵盤掃描子程序 ;低4位送1
MOV A,P2 ;行輸入
ANL A,#0FH
CJNE A,#0FH,K10 ;有按下跳轉(zhuǎn)
RET
K10: JBP2.0,K20 ;第一列
K11: MOVP2,#0EFH ;一行一列
JB P2.0,K12
CJNE R5,#00H,L1
MOV R4,#00H
INC R5
MOV R3,#1H
L1: LJMP CEND
K12: MOVP2,#0DFH
JB P2.0,K13
CJNE R5,#00H,L2
MOV R4,#00H
INC R5
MOV R3,#2H
L2: LJMP CEND
KIL: LJMPKEND
L4: LJMPCEND
K20: JBP2.1,K30 ;第二列
K21: MOVP2,#0EFH
JB P2.1,K22
LJMP DYU
K22: MOV P2,#0DFH
JB P2.1,K23
MOV 25H,#3H
LJMP OPR
CCTV:LJMP KEND
K30: JBP2.2,K40 ;第三列
K31: MOVP2,#0EFH
JB P2.2,K32
MOV 25H,#0H
LJMP OPR
K32: MOV P2,#0DFH
JB P2.2,K33
MOV 25H,#2H
LJMP OPR
K40: JBP2.3,KEND ;第四列
K41: MOVP2,#0EFH
JB P2.3,K42
INC 27H
LJMP KEND
K42: MOV P2,#0DFH
JB P2.3,K43
MOV 25H,#1H
LJMP OPR
OPR: INC R4 ;鍵值存儲(chǔ)
CJNE R5,#00H,CHANG
CJNER4,#2H,KBK
ZHI: MOV A,20H
MOV B,#0AH
MUL AB
MOV20H,25H
ADD A,20H
CJNER5,#00H,CZH
MOV 23H,A
LJMP KEND
CZH: MOV 24H,A
LJMP KEND
KEND:MOV P2,#0FH
MOV A,P2
ANL A,#0FH
CJNEA,#0FH,KEND
RET
CHANG: CJNE R4,#2H,HONG
AJMP ZHI
HONG:JNC CEND
INC R5
MOV 20H,25H
MOV24H,25H
LJMP CEND
KBK: JNC CEND
MOV 20H,25H
MOV 23H,25H
LJMP CEND
DYU: MOV R5,#00H ;結(jié)果計(jì)算
MOV R4,#00H
MOV25H,#00H
CJNER3,#1H,S
MOV A,23H
ADD A,24H
MOV 23H,A
SJMP CEND
S: CJNE R3,#2H,S1
CLR C
MOV A,23H
CJNEA,#00H,JIANFA
MOV23H,#0EH
SJMP CEND
JIANFA:SUBB A,24H
MOV 23H,A
SJMP CEND
S1: CJNE R3,#3H,S2
MOV A,23H
MOV B,24H
MOV A,23H
MUL AB
MOV R6,B
CJNER6,#00H,CHENG
MOV 23H,A
SJMP CEND
S2: CJNE R3,#4,CEND
MOV A,24H
CJNE A,#00H,ZY
MOVA,#00H
SJMP CEND
ZY: MOV A,23H
MOV B,24H
DIV AB
MOV 23H,A
CEND:MOV P2,#0FH
MOV A,P2
ANL A,#0FH
CJNEA,#0FH,CEND
CONV: CJNE R5,#02H,BEI ;數(shù)碼管顯示數(shù)據(jù)轉(zhuǎn)換子程序
MOV A,24H
AJMP JING
BEI: MOV A,23H
JING: MOVB,#64H
DIV AB
MOV DPTR,#TABLE
MOVCA,@A+DPTR
MOVDISPBUF+2,A
MOV A,B
MOVB,#0AH
DIV AB
MOVCA,@A+DPTR
MOVDISPBUF+1,A
MOV A,B
MOVCA,@A+DPTR
MOVDISPBUF,A
RET
DISPSCAN:MOV R0,#DISPBUF ;數(shù)碼管動(dòng)態(tài)顯示子程序
MOV R2,#4H
MOV A,#1H
SC: PUSH ACC
MOV A,@R0
MOV P1,A
POP ACC
MOV P0,A
LCALLDELAY1
RL A
INC R0
DJNZR2,SC
MOVP0,#1H
RET
DEL12: MOV R6,#1EH
DEL2: MOV R7,#64H
DEL1: DJNZ R7,DEL1
DJNZ R6,DEL2
RET
DELAY1:MOV R6,#70 ;延時(shí)程序
D2: MOV R7,#100
DJNZ R7,$
DJNZ R6,D2
RET
TABLE:DB0C0H,0F9H,0A4H,0B0H,99H ;------字符表------
DB92H,82H,0F8H,80H,90H
DB88H,83H,0C6H,0A1H,86H
END
4.調(diào)試過(guò)程及結(jié)果分析
1.首先賦予顯示緩沖初始值‘00 00’,并把數(shù)據(jù)存儲(chǔ)單元清零。
2.主程序調(diào)用鍵盤掃描子程序,判斷鍵值,是數(shù)字第一次直接賦予23H單元,如是第二次輸入數(shù)字,則把第一次值乘十后與第二次值相加,結(jié)果存儲(chǔ)到23H單元,并R4計(jì)數(shù)2次,表示已輸入兩位,掃描鍵值時(shí)就不再賦值和顯示。等待運(yùn)算符號(hào)的按下,按下等于號(hào)就直接計(jì)算并顯示,如加減就R5加一并把R4清零,表示可以輸入下一操作數(shù),與第一次相同,并等待等于鍵按下。清零鍵則不管在任何情況下都清零,相當(dāng)于軟復(fù)位。
3.在掃描完鍵盤后,調(diào)用數(shù)據(jù)顯示轉(zhuǎn)換子程序把值轉(zhuǎn)換為七段碼。
4.調(diào)用數(shù)碼管動(dòng)態(tài)顯示子程序,顯示數(shù)值,重新循環(huán)。
參 考 文 獻(xiàn)
[1] 李華.單片機(jī)原理及應(yīng)用[M].蘭州:蘭州大學(xué)出版社,2001
[2] 卓越科技.MCS-51單片機(jī)原理與應(yīng)用實(shí)例[M].北京:電子工業(yè)出版,2008
|