單片機(jī)課程動(dòng)靜態(tài)顯示設(shè)計(jì)方案_第1頁(yè)
單片機(jī)課程動(dòng)靜態(tài)顯示設(shè)計(jì)方案_第2頁(yè)
單片機(jī)課程動(dòng)靜態(tài)顯示設(shè)計(jì)方案_第3頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、單片機(jī)課程動(dòng)靜態(tài)顯 示設(shè)計(jì)方案 一、設(shè)計(jì)任務(wù)與要求1.1 設(shè)計(jì)背景隨著科學(xué)技術(shù)的發(fā)展和電子技術(shù)產(chǎn)業(yè)結(jié)構(gòu)調(diào)整,單片機(jī)開始迅速發(fā)展,由 于家用電器逐漸普及, 市場(chǎng)對(duì)于智能時(shí)鐘控制系統(tǒng)的需求也越來越大。 單片機(jī)以 其芯片集成度高、處理功能強(qiáng)、可靠性高等優(yōu)點(diǎn),成功應(yīng)用于工業(yè)自動(dòng)化、智能 儀器儀表、家電產(chǎn)品等領(lǐng)域。近些年,人們對(duì)數(shù)字鐘的要求也越來越高,傳統(tǒng)的時(shí)鐘已不能滿足人們的 需求。多功能數(shù)字鐘不管在性能還是在樣式上都發(fā)生了質(zhì)的變化,有電子鬧鐘、 數(shù)字鬧鐘等等。 單片機(jī)在多功能數(shù)字鐘中的應(yīng)用已是非常普遍的, 人們對(duì)數(shù)字鐘 的功能及工作順序都非常熟悉。 但是卻很少知道它的內(nèi)部結(jié)構(gòu)以及工作原理。 由 單片

2、機(jī)作為數(shù)字鐘的核心控制器,可以通過它的時(shí)鐘信號(hào)進(jìn)行計(jì)時(shí)實(shí)現(xiàn)計(jì)時(shí)功 能,將其時(shí)間數(shù)據(jù)經(jīng)單片機(jī)輸出, 利用顯示器顯示出來。 通過鍵盤可以進(jìn)行定時(shí)、 校時(shí)功能。輸出設(shè)備顯示器可以用液晶顯示技術(shù)和數(shù)碼管顯示技術(shù)。單片機(jī)系統(tǒng)作為一種典型的嵌入式系統(tǒng), 其系統(tǒng)設(shè)計(jì)包括硬件設(shè)計(jì)和軟件編 程設(shè)計(jì)兩個(gè)方面,其調(diào)試過程一般分為軟件調(diào)試、硬件測(cè)試、系統(tǒng)調(diào)試。1.2 課程設(shè)計(jì)目的通過單片機(jī)原理與應(yīng)用課程設(shè)計(jì), 使學(xué)生掌握單片機(jī)及其擴(kuò)展系統(tǒng)設(shè)計(jì) 的方法和設(shè)計(jì)原則及相應(yīng)的硬件調(diào)試的方法。 進(jìn)一步加深單片機(jī)及其擴(kuò)展系統(tǒng)設(shè)計(jì)和應(yīng)用的理解1.3設(shè)計(jì)要求1、主電路系統(tǒng)由秒信號(hào)發(fā)生器、“時(shí)、分、秒”計(jì)數(shù)器、譯碼器及顯示器、校時(shí)電路

3、、整點(diǎn)報(bào)時(shí)電路組成2、秒信號(hào)產(chǎn)生器是整個(gè)系統(tǒng)的時(shí)基信號(hào),它直接決定計(jì)時(shí)系統(tǒng)的精度,一般用石英晶體振蕩器加分頻器來實(shí)現(xiàn)。將標(biāo)準(zhǔn)秒信號(hào)送入“秒計(jì)數(shù)器”,“秒計(jì)數(shù)器”采用60進(jìn)制計(jì)數(shù)器,每累計(jì)60秒發(fā)出一個(gè)“分脈沖”信號(hào), 該信號(hào)將作為“分計(jì)數(shù)器”的時(shí)鐘脈沖?!胺钟?jì)數(shù)器”也采用60進(jìn)制計(jì)數(shù)器,每累計(jì)60分鐘,發(fā)出一個(gè)“時(shí)脈沖”信號(hào), 該信號(hào)將被送 到“時(shí)計(jì)數(shù)器”?!皶r(shí)計(jì)數(shù)器”采用 24進(jìn)制計(jì)時(shí)器,可實(shí)現(xiàn)對(duì)一天 24小時(shí)的累計(jì)3、 譯碼顯示電路將“時(shí)”、“分”、“秒”計(jì)數(shù)器的輸出狀態(tài)菁七段顯示譯碼器譯碼,通過六位LED七段顯示器顯示出來4、校時(shí)電路時(shí)用來對(duì)“時(shí)”、“分”、“秒”顯示數(shù)字進(jìn)行校對(duì)調(diào)整的、

4、總體方案設(shè)計(jì)2.1電路的總體原理框圖根據(jù)以上的電子時(shí)鐘的設(shè)計(jì)要求可以分為以下的幾個(gè)硬件電路模塊:?jiǎn)纹瑱C(jī)模塊、數(shù)碼顯示模塊與按鍵模塊,模塊之間的關(guān)系圖如下面得方框電路圖1 所示單片機(jī)丨 A數(shù)碼管顯示時(shí)間調(diào)整器圖1硬件電路方框圖2.2實(shí)現(xiàn)時(shí)鐘計(jì)時(shí)的基本方法利用STC系列單片機(jī)的可編程定時(shí)/計(jì)數(shù)器、中斷系統(tǒng)來實(shí)現(xiàn)時(shí)鐘計(jì)數(shù)。(1) 計(jì)數(shù)初值計(jì)算:把定時(shí)器設(shè)為工作方式1,定時(shí)時(shí)間為50ms則計(jì)數(shù)溢出20次即得時(shí)鐘計(jì)時(shí)最小單位秒,而100次計(jì)數(shù)可用軟件方法實(shí)現(xiàn)。假設(shè)使用T/CO,方式1,50ms定時(shí),fosc=12MHz。則初值 X 滿足(216-X )X 1/12MHzX 12 卩 s =50000 卩

5、 sX=15531宀 3CB0H(2) 采用中斷方式進(jìn)行溢出次數(shù)累計(jì),計(jì)滿20次為秒計(jì)時(shí)(1秒);(3) 從秒到分和從分到時(shí)的計(jì)時(shí)是通過累加和數(shù)值比較實(shí)現(xiàn)。2.3電子鐘的時(shí)間顯示RAM中設(shè)置顯示緩沖區(qū)共 8電子鐘的時(shí)鐘時(shí)間在六位數(shù)碼管上進(jìn)行顯示,因此,在內(nèi)部LED8LED7LED6LED52LED137H36H35H34H31H30H個(gè)單元。時(shí)十位 時(shí)個(gè)位 分隔LED4LED3 LED33H32H分十位 分個(gè)位 分隔 秒十位 秒個(gè)位2.4 電子鐘的時(shí)間調(diào)整電子鐘設(shè)置 3 個(gè)按鍵通過程序控制來完成電子鐘的時(shí)間調(diào)整。A鍵按一次調(diào)整時(shí),按第二次調(diào)整分鐘,第三次推出時(shí)間調(diào)整;B 鍵對(duì)小時(shí)或分鐘進(jìn)行加一

6、;C鍵對(duì)小時(shí)或分鐘進(jìn)行減一;2.5 總體方案介紹2.5.1 計(jì)時(shí)方案利用STC89C52單片機(jī)內(nèi)部的定時(shí)/計(jì)數(shù)器進(jìn)行中斷時(shí),配合軟件延時(shí)實(shí)現(xiàn)時(shí)、分、秒的 計(jì)時(shí)。該方案節(jié)省硬件成本,且能使讀者在定時(shí) /計(jì)數(shù)器的使用、中斷及程序設(shè)計(jì)方面得到 鍛煉與提高, 對(duì)單片機(jī)的指令系統(tǒng)能有更深入的了解, 從而對(duì)學(xué)好單片機(jī)技術(shù)這門課程起到 一定的作用。2.5.2 控制方案STC89C52的P0 口和P1 口外接由八個(gè) LED數(shù)碼管(LED8LED1)構(gòu)成的顯示器, 用P0 口 作LED的段碼輸出口, P1 口作八個(gè)LED數(shù)碼管的位控輸出線, P3 口外接四個(gè)按鍵 A B、C 構(gòu)成鍵盤電路。STC89C52 是一

7、種低功耗,高性能的 CMOS 8位微型計(jì)算機(jī)。它帶有 8K Flash 可編程和 擦除的只讀存儲(chǔ)器(EPROM,該器件采用 ATMEL的高密度非易失性存儲(chǔ)器技術(shù)制造,與工 業(yè)上標(biāo)準(zhǔn)的80C51和80C52的指令系統(tǒng)及引腳兼容,片內(nèi) Flash集成在一個(gè)芯片上,可用 與解決復(fù)雜的問題,且成本較低。簡(jiǎn)易電子鐘的功能不復(fù)雜,采用其現(xiàn)有的I/O 便可完成,所以本設(shè)計(jì)中采用此的設(shè)計(jì)方案。三、數(shù)字鐘的硬件設(shè)計(jì)3.1最小系統(tǒng)芯片分析STC89C52單片機(jī)引腳圖如下:U119PI* T91 了 s-:XTAI1 r YTfllCPUMDIl?J2D2 叩鄧閃 IPCLSCH曲皿M、RSTpsEir-ME -&

8、quot;STP21WP2.WP23W11P2iJAt2P2J6W14F2JM15_ n.-i nPUTRXD F3.VTKD PIJANTH P3J1NT1P3£H1_ Di i.ni Jr F J r 1 it .pi £P1 Ar P I .7938 Cly.宛 JD2/35 C3/35 Dt/3i 反.33 呢衣 07/31 PS 丿22 剛U /_P.242525 _2?.35IdI12!14rs16fi圖3-1 STC89C52弓I腳圖MCS-51單片機(jī)是標(biāo)準(zhǔn)的40引腳雙列直插式集成電路芯片,其各引腳功能如下:VCC +5V 電源。VSS接地。RST復(fù)位信號(hào)。當(dāng)

9、輸入的復(fù)位信號(hào)延續(xù)兩個(gè)機(jī)器周期以上的高電平時(shí)即為有效,用完成單片機(jī)的復(fù)位初始化操作。XTAL1和XTAL2外接晶體引線端。當(dāng)使用芯片內(nèi)部時(shí)鐘時(shí),此二引線端用于外接石英 晶體和微調(diào)電容;當(dāng)使用外部時(shí)鐘時(shí),用于接外部時(shí)鐘脈沖信號(hào)。P0 口 : P0 口為一個(gè)8位漏極開路雙向I/O 口,當(dāng)作輸出口使用時(shí),必須接上拉電阻才能有高電平輸出;當(dāng)作輸入口使用時(shí),必須先向電路中的鎖存器寫入“1”,使FET截止,以避免鎖存器為“ 0”狀態(tài)時(shí)對(duì)引腳讀入的干擾。P1 口: P1 口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O 口,它不再需要多路轉(zhuǎn)接電路 MUX因此它作為輸出口使用時(shí),無(wú)需再外接上拉電阻,當(dāng)作為輸入口使用時(shí)

10、,同樣也需先向其鎖存器寫“ 1”,使輸出驅(qū)動(dòng)電路的 FET截止。P2 口: P2 口電路比P1 口電路多了一個(gè)多路轉(zhuǎn)接電路MUX這又正好與 P0 口一樣。P2口可以作為通用的I/O 口使用,這時(shí)多路轉(zhuǎn)接電路開關(guān)倒向鎖豐存器Q端。P3 口: P3 口特點(diǎn)在于,為適應(yīng)引腳信號(hào)第二功能的需要,增加了第二功能控制邏輯。 當(dāng)作為I/O 口使用時(shí),第二功能信號(hào)引線應(yīng)保持高電平,與非門開通,以維持從鎖存器到輸出端數(shù)據(jù)輸出通路的暢通。當(dāng)輸出第二功能信號(hào)時(shí),該位應(yīng)應(yīng)置“1”,使與非門對(duì)第二功能信號(hào)的輸出是暢通的,從而實(shí)現(xiàn)第二功能信號(hào)的輸出,具體第二功能如表3-1所示。P3引腳兼用功能P3.0串行通訊輸入(RXD

11、P3.1串行通訊輸出(TXDP3.2外部中斷0 ( INTO)P3.3外部中斷1( INT1)P3.4定時(shí)器0輸入(TO)P3.5定時(shí)器1輸入(T1)P3.6外部數(shù)據(jù)存儲(chǔ)器寫選通WRP3.7外部數(shù)據(jù)存儲(chǔ)器寫選通 RD表3-1P3端口引腳兼用功能表晶振電路右圖所示為時(shí)鐘電路原理圖,在AT89S51芯片內(nèi)部有一個(gè)高增益反相放大器,其輸入端為芯片引腳XTAL1,輸出端為引腳 XTAL2而在芯片內(nèi)部,XTAL1和XTAL2之間跨接晶體振 蕩器和微調(diào)電容,從而構(gòu)成一個(gè)穩(wěn)定的自激振蕩器。時(shí)鐘電路產(chǎn)生的振蕩脈沖經(jīng)過觸發(fā)器進(jìn)行二分頻之后,才成為單片機(jī)的時(shí)鐘脈沖信號(hào)。圖3-2晶振電路3.2數(shù)碼顯示模塊設(shè)計(jì)顯示器

12、普遍地用于直觀地顯示數(shù)字系統(tǒng)的運(yùn)行狀態(tài)和工作數(shù)據(jù),按照材料及產(chǎn)品工藝,單片機(jī)應(yīng)用系統(tǒng)中常用的顯示器有:發(fā)光二極管LED顯示器、液晶LCD顯示器、CRT顯示器等。LED顯示器是現(xiàn)在最常用的顯示器之一,如下圖所示。3-4 LED顯示器的符號(hào)圖發(fā)光二極管(LED由特殊的半導(dǎo)體材料砷化鎵、磷砷化鎵等制成,可以單 獨(dú)使用,也可以組裝成分段式或點(diǎn)陣式 LED顯示器件(半導(dǎo)體顯示器)。分段式 顯示器(LED數(shù)碼管)由7條線段圍成8字型,每一段包含一個(gè)發(fā)光二極管。外 加正向電壓時(shí)二極管導(dǎo)通,發(fā)出清晰的光。只要按規(guī)律控制各發(fā)光段亮、滅,就 可以顯示各種字形或符號(hào)。LED數(shù)碼管有共陽(yáng)、共陰之分。圖是共陽(yáng)式、共陰式

13、 LED數(shù)碼管的原理圖和符號(hào)。dh圖3-5共陽(yáng)式、共陰式LED數(shù)碼管的原理圖和數(shù)碼管的符號(hào)圖系統(tǒng)采用動(dòng)態(tài)顯示方式, 用P0 口來控制LED數(shù)碼管的段控線,而用P2 口來控制其位控線。動(dòng)態(tài)顯示通常都是采用動(dòng)態(tài)掃描的方法進(jìn)行顯示,即循環(huán)點(diǎn)亮每一個(gè)數(shù)碼管,這樣雖然時(shí)間足夠短,就可以給人以同時(shí)顯示的感覺。四、系統(tǒng)軟件設(shè)計(jì)4.1軟件設(shè)計(jì)分析在編程上,首先進(jìn)行了初始化, 定義程序的的入口地址以及中斷的入口地址,在主程序開始定義了一組固定單元用來儲(chǔ)存計(jì)數(shù)的時(shí).分.秒,在顯示初值之后,進(jìn)入主循環(huán)。在主程序中,對(duì)不同的按鍵進(jìn)行掃描,實(shí)現(xiàn)秒表,時(shí)間調(diào)整,復(fù)位清零等功能。旨虧士 n 144.2源程序清單DISBEG

14、EQU30HCALBEQUP1.7TIMCONEQU2FHORG 0000HLJMPMAINORG0003H;程序開始;關(guān)外中斷0RETIORG LJMP ORG RETI ORG LJMPORG000BHINTT00013H001BHINTT10023H; 定時(shí)器 T0 中斷程序入口 ; 跳至 INTTO 執(zhí)行; 關(guān)中斷 1; 定時(shí)器 T1 中斷程序入口 ; 跳至 INTT1 執(zhí)行; 關(guān)串行中斷RETITAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,88H,0BFH; 共陽(yáng)段碼表"0""1&qu

15、ot;"2" "3""4""5""6""7" "8""9""不亮 ""A""-"I_TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0C6H,0BFH,88H; 顯示數(shù)"012 34 5 6 7 89 不亮 C - A " 內(nèi)存數(shù)"012 34 5 6 7 890AH 0BH 0C

16、H 0DH "STAB表,啟動(dòng)時(shí)顯示 2013年06月07日、A01-01-15 (學(xué)號(hào))用STAB:DB 0AH,0AH,0AH,0AH,0AH,0AH,05H,01H,0CH,01H,00H,0CH,01H,00H,0DH,0AH,0AHDB 07H,00H,0CH,06H,00H,0CH,03H,01H,00H,02H,0AH,0AH,0AH,0AH,0AH,0AHDLY1M: MOV R6,#14H;1 毫秒延時(shí)DL_LOOP:MOVR7,#19HDL_LOOP1: DJNZR7,DL_LOOP1DJNZ R6,DL_LOOPRETDLY20M: CLRCALB;20 毫秒延

17、時(shí)LCALLD_II_PLAYLCALLD_II_PLAYLCALLD_II_PLAYSETBCALBRETDL_LOOPS:LCALLDL05SLCALLDL05SRETDL05S:MOVR3,#20H;8 毫秒*32=0.196 秒DL05S1:LCALLD_II_PLAYDJNZR3,DL05S1RET; 程序開始J J; 整點(diǎn)報(bào)時(shí)用CTIME:MOV A,#10HMOVB,79HMUL ABADD A,78HMOV TIMCON,ACLOOP:LCALL DLY20MLCALL DL_LOOPSLCALL DL_LOOPSLCALLDJNZDL_LOOPSTIMCON,CLOOPCLR

18、08HAJMPMLOOP1; 主程序開始MAIN:LCALL ST; 上電顯示年月日及班級(jí)學(xué)號(hào)MOVR0,#00H;清00H-7FH內(nèi)存單兀MOVR7,#80HJMLOOP:MOVR0,#00H ;INCR0JDJNZR7,MLOOPJMOV20H,#00H;清20H (標(biāo)志用)MOV7AH,#0AHJ放入 " 熄滅符 " 數(shù)據(jù)MOVTMOD,#11HJ設(shè)TO、T1為16位定時(shí)器MOVTL0,#0B0H;50MS定時(shí)初值(TO計(jì)時(shí)用)MOVTH0,#3CH;50MS定時(shí)初值MOVTL1,#0B0H;50MS定時(shí)初值(T1閃爍定時(shí)用)MOVTH1,#3CH;50MS定時(shí)初值S

19、ETBEA ;總中斷開放SETBET0 ;允許 TO 中斷SETBTR0 ;開啟 TO 定時(shí)器MOVR4,#14H ;1秒定時(shí)用計(jì)數(shù)值(50MS< 20)MOVDISBEG,#70H; 顯示單兀為 7O-75H; 以下主程序循環(huán)MLOOP1:LCALLD_II_PLAY; 調(diào)用顯示子程序JNBP1.0,T_SETSC;P1.0 口為 0 時(shí)轉(zhuǎn)時(shí)間調(diào)整程序JNBP1.1,DLY5; 秒表功能, P1.1 按鍵調(diào)時(shí)時(shí)作減 1 加能JNBP1.2,FUNBTJ秒表 STOP,PUSE,CLRJNBP1.3,TSETJB08H, CTIMEAJMPMLOOP1 ;P1.0口為 1 時(shí)跳回 MLO

20、OP1FUNBT:LJMPDLY6TSET:LCALLDLY20MJBP1.3,MLOOP1JTS_LOOP:JNBP1.3,TS_LOOP ; 等待鍵釋放JB05H,CLRBELLMOVDISBEG,#50HMOV50H,#0CH II IIJMOV51H,#0AH;" 黑"jMINCHG: SETBEALCALLD_II_PLAYJNBP1.2,DLY1J分加 1JNBP1.0,DLY3J分減 1JNBP1.3,DLY; 進(jìn)入時(shí)調(diào)整AJMP MINCHGCLRBELL: CLR05HCLRCALBDLY:LCALLDLY20M; 消抖JBP1.3, MINCHGLJMP

21、DLY8; 進(jìn)入時(shí)調(diào)整T_SETSC: LJMPR_SETTIM; 轉(zhuǎn)到時(shí)間調(diào)整程序DLY1:LCALLDLY20M; 消抖JBP1.2, MINCHGDLY2:LCALLD_II_PLAY; 等鍵 釋放JNBP1.2, DLY2CLREAMOVR0,#53HJLCALLADD_1MOVA,R3; 分?jǐn)?shù)據(jù)放入ACLRC; 清進(jìn)位標(biāo)志CJNEA,#60H,ADD_M ;ADD_M:JCMINCHG; 小于 60 分時(shí)返回ACALLCLR_H; 大于或等于60 分時(shí)分計(jì)時(shí)單元清AJMPMINCHGDLY3 :LCALLDLY20M; 消抖JBP1.0, MINCHGDLY4:LCALLD_II_P

22、LAY ;等鍵 釋放JNBP1.0, DLY4CLREAMOVR0,#53HJLCALLSUB_MLJMPMINCHGMLOOP1AJMPR_SETTIM0; 以下秒表功能 / 時(shí)鐘轉(zhuǎn)換程序; 按下 P1.1 可進(jìn)行功能轉(zhuǎn)換DLY5: LCALL DLY20MJBP1.1,T_MLOOP1JNB CPL JNB MOV MOV MOV MOVP1.1,$03H03H,DIS_SETDISBEG,#60H ; 顯示秒表數(shù)據(jù)單元60H,#00H61H,#00H62H,#00HMOVMOVMOV63H,#00H64H,#00H65H,#00HMOVTL1,#0F0H ;10MS 定時(shí)初值()MOVS

23、ETBSETBT_MLOOP1:DIS_SET:CLRCLRT_MLOOP11:TH1,#0D8HTR1ET1LJMPMOVET1TR1LJMP;10MS定時(shí)初值MLOOP1DISBEG,#70HMLOOP1; 顯示時(shí)鐘數(shù)據(jù)單元; 以下秒表暫停 清零功能程序; 按下 P1.2 暫?;蚯?0, 按下 P1.1 退出秒表回到時(shí)鐘計(jì)時(shí)DLY6:LCALLDLY20MJBP1.2,T_MLOOP11T_EST11:JNBP1.2,T_EST11CLRET1CLRTR1T_EST22:JNBP1.1,DLY5JBP1.2,T_EST21LCALLDLY20MJBP1.2,T_EST22T_EST55:J

24、NBP1.2,T_EST51MOV60H,#00HMOV61H,#00HMOV62H,#00HMOV63H,#00HMOV64H,#00HMOV65H,#00HT_EST33:JNBP1.1,DLY5JBP1.2,T_EST31LCALLDLY20MJBP1.2,T_EST33T_EST44:JNBP1.2,T_EST41SETBET1SETBTR1AJMPMLOOP1; 以下鍵等待釋放時(shí)顯示不會(huì)熄滅用T_EST411:LCALLD_II_PLAYAJMPT_EST11T_EST21:LCALLD_II_PLAYAJMPT_EST22T_EST31:LCALLD_II_PLAYAJMPT_ES

25、T33T_EST41:LCALLD_II_PLAYAJMPT_EST44T_EST51:LCALLD_II_PLAYAJMP ; 1 秒計(jì)T_EST55時(shí)程序;T0 中斷服務(wù)程序INTT0:PUSHACC; 累加器入棧保護(hù)PUSHPSW; 狀態(tài)字入棧保護(hù)CLRET0;關(guān)TO中斷允許CLRTR0; 關(guān)閉定時(shí)器 T0MOVA,#0B7H; 中斷響應(yīng)時(shí)間同步修正ADDA,TL0; 低 8 位初值修正MOVTL0,A; 重裝初值(低 8 位修正值)MOVA,#3CH; 高 8 位初值修正ADDCA,TH0MOVTH0,A; 重裝初值(高 8 位修正值)SETBTR0; 開啟定時(shí)器 TODJNZR4,

26、I_INT0;2O 次中斷未到中斷退出A_DDS:MOVR4,#14H;2O次中斷到( 1 秒)重賦初值CPL07HMOVR0,#71H; 指向秒計(jì)時(shí)單元( 71H-72H)ACALLADD_1; 調(diào)用加 1 程序(加 1 秒操作)MOVA,R3;秒數(shù)據(jù)放入A ( R3為2位十進(jìn)制數(shù)組合)CLRC; 清進(jìn)位標(biāo)志CJNEA,#60H,A_DDMA_DDM:JCI_INT0 ; 小于 60 秒時(shí)中斷退出ACALLCLR_H; 大于或等于 6O 秒時(shí)對(duì)秒計(jì)時(shí)單元清 OMOVR0,#77H; 指向分計(jì)時(shí)單元( 76H-77H)ACALLADD_1; 分計(jì)時(shí)單元加 1 分鐘MOVA,R3; 分?jǐn)?shù)據(jù)放入

27、ACLRC; 清進(jìn)位標(biāo)志CJNEA,#60H,A_DDH ;A_DDH:JCI_INT0;小于 6O 分時(shí)中斷退出ACALLCLR_H; 大于或等于 6O 分時(shí)分計(jì)時(shí)單元清 OLCALLDLY20M; 正點(diǎn)報(bào)時(shí)SETB08HMOVR0,#79H; 指向小時(shí)計(jì)時(shí)單元( 78H-79H)ACALLADD_1; 小時(shí)計(jì)時(shí)單元加 1 小時(shí)MOVA,R3; 時(shí)數(shù)據(jù)放入 ACLRC; 清進(jìn)位標(biāo)志CJNEA,#24H,RSTARTJRSTART:JCI_INT0 ; 小于 24 小時(shí)中斷退出ACALLCLR_HJ大于或等于 24 小時(shí)小時(shí)計(jì)時(shí)單元清 OI_INT0:MOV72H,76H; 中斷退出時(shí)將分、時(shí)

28、計(jì)時(shí)單元數(shù)據(jù)移MOV73H,77H; 入對(duì)應(yīng)顯示單元MOV74H,78H ;MOV75H,79HJLCALLBELLPOPPSW; 恢復(fù)狀態(tài)字(出棧)POPACC; 恢復(fù)累加器SETBET0; 開放 T0 中斷RETI ; 中斷返回; 閃動(dòng)調(diào)時(shí)程序 秒表功能程序;T1 中斷服務(wù)程序,用作時(shí)間調(diào)整時(shí)調(diào)整單元閃爍指示或秒表計(jì)時(shí)INTT1:PUSHACC; 中斷現(xiàn)場(chǎng)保護(hù)PUSHPSWJB03H, R_ADDS;=1 時(shí)秒表MOVTL1, #0B0H; 裝定時(shí)器 T1 定時(shí)初值MOVTH1, #3CHDJNZR2,I_INT1;0.3秒未到退出中斷(50MS中斷6次)MOVR2,#06H; 重裝 0.

29、3 秒定時(shí)用初值CPL02H;0.3 秒定時(shí)到對(duì)閃爍標(biāo)志取反JB02H,FLASH0;02H 位為 1 時(shí)顯示單元 "熄滅"MOV72H,76H;02H 位為 0 時(shí)正常顯示MOV73H,77HMOV74H,78HMOV75H,79HI_INT1:POPPSW; 恢復(fù)現(xiàn)場(chǎng)POPACCRETI; 中斷退出FLASH0:JB01H,FLASH1 ;01H 位為 1 時(shí),轉(zhuǎn)小時(shí)熄滅控制MOV72H,7AH;01H 位為 0 時(shí), "熄滅符 "數(shù)據(jù)放入分MOV73H,7AH;顯示單元(72H-73H),將不顯示分?jǐn)?shù)據(jù)MOV74H,78HMOV75H,79HAJM

30、PI_INT1; 轉(zhuǎn)中斷退出FLASH1:MOV72H,76H;01H 位為 1 時(shí), "熄滅符 "數(shù)據(jù)放入小時(shí)MOV73H,77H;顯示單元(74H-75H),小時(shí)將不顯示MOV74H,7AHMOV75H,7AHAJMPI_INT1; 轉(zhuǎn)中斷退出R_ADDS: CLRTR1MOVA,#0F7H; 中斷響應(yīng)時(shí)間同步修正 , 重裝初值( 10ms)ADDA,TL1;低 8位初值修正MOVTL1,A; 重裝初值(低 8 位修正值)MOVA,#0D8H;高 8位初值修正ADDCA,TH1MOVTH1,A; 重裝初值(高 8 位修正值)SETBTR1; 開啟定時(shí)器 T0MOVR0,

31、#61H; 指向秒計(jì)時(shí)單元( 71H-72H)ACALLADD_1; 調(diào)用加 1 程序(加 1 秒操作)CLRCMOVA,R3JZR_ADDM;加 1 后為 00,C=0AJMPI_INT01;加 1 后不為 00 , C=1R_ADDM: ACALLCLR_H ;大于或等于 60 秒時(shí)對(duì)秒計(jì)時(shí)單元清 0MOVR0,#63H; 指向分計(jì)時(shí)單元( 76H-77H)ACALLADD_1; 分計(jì)時(shí)單元加 1 分鐘MOVA,R3; 分?jǐn)?shù)據(jù)放入 ACLRC; 清進(jìn)位標(biāo)志CJNEA,#60H,R_ADDHR_ADDH:JCI_INT01 ; 小于 60 分時(shí)中斷退出LCALLCLR_H; 大于或等于 60

32、 分時(shí)分計(jì)時(shí)單元清 0MOVR0,#65H; 指向小時(shí)計(jì)時(shí)單元( 78H-79H)ACALLADD_1; 小時(shí)計(jì)時(shí)單元加 1 小時(shí)I_INT01:POPPSW ; 恢復(fù)狀態(tài)字(出棧)POPACC; 恢復(fù)累加器RETI; 中斷返回; 加 1子程序ADD_1:MOVA,R0 ; 取當(dāng)前計(jì)時(shí)單元數(shù)據(jù)到 ADECR0; 指向前一地址SWAPA;A 中數(shù)據(jù)高四位與低四位交換ORLA,R0; 前一地址中數(shù)據(jù)放入 A 中低四位ADDA,#01H;A 加 1 操作DAA; 十進(jìn)制調(diào)整MOVR3,A; 移入 R3 寄存器ANLA,#0FH; 高四位變 0MOVR0,A; 放回前一地址單元MOVA,R3; 取回

33、R3 中暫存數(shù)據(jù)INCR0; 指向當(dāng)前地址單元SWAPA;A 中數(shù)據(jù)高四位與低四位交換ANLA,#0FH; 高四位變 0MOVR0,A; 數(shù)據(jù)放入當(dāng)削地址單元中RET; 子程序返回; 分減 1 子 程 序J JSUB_M:MOVA,R0 ; 取當(dāng)前計(jì)時(shí)單元數(shù)據(jù)到 ADECR0; 指向前一地址SWAPA;A 中數(shù)據(jù)高四位與低四位交換ORLA,R0; 前一地址中數(shù)據(jù)放入 A 中低四位JZSUB_M1DECA;A 減 1 操作SUB_M11: MOV3,A; 移入 R3 寄存器ANLA,#0FH; 高四位變 0CLRC; 清進(jìn)位標(biāo)志SUBBA,#0AHSUB_M111:JCSUB_M110MOVR0

34、,#09H;大于等于OAH,為9SUB_M10:MOV A,R3; 取回 R3 中暫存數(shù)據(jù)INCR0; 指向當(dāng)前地址單元SWAPA;A 中數(shù)據(jù)高四位與低四位交換ANLA,#0FH; 高四位變 0MOV R0,A; 數(shù)據(jù)放入當(dāng)削地址單元中RET; 子程序返回JSUB_M1:MOVA,#59HAJMPSUB_M11SUB_M110:MOVA,R3; 移入 R3 寄存器ANLA,#0FH; 高四位變 0MOVR0,AAJMPSUB_M10; 時(shí)減 1 子程序SUB_H:MOV A,R0; 取當(dāng)前計(jì)時(shí)單元數(shù)據(jù)到 ADEC R0; 指向前一地址SWAPA;A 中數(shù)據(jù)高四位與低四位交換ORLA,R0; 前

35、一地址中數(shù)據(jù)放入 A 中低四位JZSUB_H1;00減1為23(小時(shí))DEC A;A 減 1 操作SUB_H11:MOVR3,A; 移入 R3 寄存器ANLA,#0FH; 高四位變 0CLRC; 清進(jìn)位標(biāo)志SUBBA,#0AH; 時(shí)個(gè)位大于 9 為 9SUB_H111:JCSUB_H110MOVR0,#09H;大于等于OAH,為9SUB_H10:MOV A,R3; 取回 R3 中暫存數(shù)據(jù)INCR0; 指向當(dāng)前地址單元SWAPA;A 中數(shù)據(jù)高四位與低四位交換ANLA,#0FH; 高四位變 0MOV R0,A; 時(shí)十位數(shù)數(shù)據(jù)放入RET; 子程序返回SUB_H1:MOVA,#23HAJMPSUB_H

36、11SUB_H110:MOVA,R3;時(shí)個(gè)位小于0A不處理ANLA,#0FH; 高四位變 0MOVR0,A; 個(gè)位移入AJMPSUB_H10; 清零程序; 對(duì)計(jì)時(shí)單元復(fù)零用CLR_H:CLRA ; 清累加器MOVR0,A; 清當(dāng)前地址單元DECR0; 指向前一地址MOVR0,A; 前一地址單元清 0RET; 子程序返回; 時(shí)鐘時(shí)間調(diào)整程序; 當(dāng)調(diào)時(shí)按鍵按下時(shí)進(jìn)入此程序R_SETTIM:CLRET0; 關(guān)定時(shí)器 T0 中斷CLRTR0; 關(guān)閉定時(shí)器 T0LCALLDL_LOOPS; 調(diào)用 1 秒延時(shí)程序LCALLDLY20M; 消抖JBP1.0,SLEEP; 鍵按下時(shí)間小于 1 秒,關(guān)閉顯示(省

37、電)MOVR2,#06H; 進(jìn)入調(diào)時(shí)狀態(tài),賦閃爍定時(shí)初值MOV70H,#00H; 調(diào)時(shí)時(shí)秒單元為 00 秒MOV71H,#00HSETBET1; 允許 T1 中斷SETBTR1; 開啟定時(shí)器 T1SET_2:JNBP1.0,SET_1;P1.0 口為 0(鍵未釋放),等待SETB00H; 鍵釋放,分調(diào)整閃爍標(biāo)志置 1SET_4:JBP1.0,SET_3;等待鍵按下LCALLDL05S; 有鍵按下,延時(shí) 0.5 秒LCALLDLY20M; 消抖JNBP1.0,R_SETHH ; 按下時(shí)間大于 0.5 秒轉(zhuǎn)調(diào)小時(shí)狀態(tài)MOVR0,#77H; 按下時(shí)間小于 0.5 秒加 1 分鐘操作LCALLADD_

38、1; 調(diào)用加 1 子程序MOVA,R3; 取調(diào)整單元數(shù)據(jù)CLRC; 清進(jìn)位標(biāo)志CJNEA,#60H,SET_LOOP; 調(diào)整單元數(shù)據(jù)與 60 比較SET_LOOP:JCSET 4;調(diào)整單元數(shù)據(jù)小于 60轉(zhuǎn)SET 4循環(huán)LCALLCLR_H;調(diào)整單兀數(shù)據(jù)大于或等于60時(shí)清0CLRC; 清進(jìn)位標(biāo)志AJMPSET_4;跳轉(zhuǎn)到SET_4循環(huán)SLEEP:SETBET0;省電(LED不顯示)狀態(tài)。開 T0中斷SETBTR0; 開啟 T0 定時(shí)器(開時(shí)鐘)SET_LOOP1:JBP1.0,SET_LOOP1;無(wú)按鍵按下,等待。LCALLDLY20M; 消抖JBP1.0,SET_LOOP1 ;是干擾返回 SE

39、T_LOOP 等待SET_LOOP2:JNBP1.0,SET_LOOP2 ; 等待鍵釋放LJMPMLOOP1;返回主程序(LED數(shù)據(jù)顯示亮)R_SETHH:CLR00H; 分閃爍標(biāo)志清除(進(jìn)入調(diào)小時(shí)狀態(tài))SETB01H; 小時(shí)調(diào)整標(biāo)志置 1SET_LOOP3:JNBP1.0,SET_5; 等待鍵釋放SET_6:JBP1.0,SET_7;等待按鍵按下LCALLDL05S; 有鍵按下延時(shí) 0.5 秒LCALLDLY20M; 消抖JNBP1.0,STOP; 按下時(shí)間大于 0.5 秒退出時(shí)間調(diào)整MOVR0,#79H; 按下時(shí)間小于 0.5 秒加 1 小時(shí)操作LCALLADD_1; 調(diào)加 1 子程序MO

40、VA,R3CLRCCJNEA,#24H,C_YHH ; 計(jì)時(shí)單元數(shù)據(jù)與 24 比較C_YHH:JCSET_6;小于24轉(zhuǎn)SET_6循環(huán)LCALLCLR_H; 大于或等于 24 時(shí)清 0 操作AJMPSET_6;跳轉(zhuǎn)到SET_6循環(huán)STOP:JNBP1.0,STOP1; 調(diào)時(shí)退出程序。等待鍵釋放LCALLDLY20M; 消抖JNBP1.0,STOP;是抖動(dòng),返回STOP再等待CLR01H; 清調(diào)小時(shí)標(biāo)志CLR00H; 清調(diào)分標(biāo)志CLR02H; 清閃爍標(biāo)志CLRTR1; 關(guān)閉定時(shí)器 T1CLRET1; 關(guān)定時(shí)器 T1 中斷SETBTR0; 開啟定時(shí)器 T0SETBET0; 開定時(shí)器 T0 中斷(計(jì)

41、時(shí)開始)LJMPMLOOP1; 跳回主程序SET_1:LCALLD_II_PLAY;鍵釋放等待時(shí)調(diào)用顯示程序(調(diào)分)AJMPSET_2; 防止鍵按下時(shí)無(wú)時(shí)鐘顯示SET_3:LCALLD_II_PLAY;等待調(diào)分按鍵時(shí)時(shí)鐘顯示用JNBP1.1, DLY7;減 1分操作AJMPSET_4; 調(diào)分等待SET_5:LCALLD_II_PLAY;鍵釋放等待時(shí)調(diào)用顯示程序(調(diào)小時(shí))AJMPSET_LOOP3; 防止鍵按下時(shí)無(wú)時(shí)鐘顯示SET_7:LCALLD_II_PLAY;等待調(diào)小時(shí)按鍵時(shí)時(shí)鐘顯示用JNBP1.1, DLY7B; 小時(shí)減 1 操作AJMPSET_6;調(diào)時(shí)等待STOP1:LCALLD_II_

42、PLAY;退出時(shí)鐘調(diào)整時(shí)鍵釋放等待AJMPSTOP; 防止鍵按下時(shí)無(wú)時(shí)鐘顯示;DLY7,分減1 程序 ?DLY7:LCALLDLY20M;消抖JBP1.1,SET_41; 干擾,返回調(diào)分等待DLY7_M:JNBP1.1,DLY7_M; 等待鍵放開MOVR0,#77HLCALLSUB_M; 分減 1 程序LJMPSET_4; 返回調(diào)分等待JSET_41:LJMPSET_4;DLY7B, 時(shí)減1 程序JDLY7B:LCALLDLY20M; 消抖JBP1.1,SET_61; 干擾,返回調(diào)時(shí)等待DLY7_H:JNBP1.1,DLY7_H; 等待鍵放開MOVR0,#79HLCALLSUB_H; 時(shí)減 1

43、 程序LJMPSET_6; 返回調(diào)時(shí)等待SET_61:LJMPSET_6; 顯示程序J J; 顯示數(shù)據(jù)在70H-75H單兀內(nèi),用六位LED共陽(yáng)數(shù)碼管顯示,P0 口輸出段碼數(shù)據(jù); 掃描控制,每個(gè) LED數(shù)碼管亮1MS時(shí)間再逐位循環(huán)。D_II_PLAY:MOVR1,DISBEG; 指向顯示數(shù)據(jù)首址MOV R5,#0FEH; 掃描控制字初值PLAY:MOVA,R5; 掃描字放入 AMOVP2,A;從P2 口輸出MOVA,R1; 取顯示數(shù)據(jù)到 AMOVDPTR,#TAB; 取段碼表地址MOVCA,A+DPTR; 查顯示數(shù)據(jù)對(duì)應(yīng)段碼MOVP0,A; 段碼放入 P1 口MOVA,R5JBACC.2,D_L

44、OOP ; 小數(shù)點(diǎn)處理CLRP0.7;D_LOOP:JBACC.4,D_LOOP1; 小數(shù)點(diǎn)處理CLRP0.7;D_LOOP1:LCALLDLY1M; 顯示 1MSINCR1; 指向下一地址MOVA,R5; 掃描控制字放入 AJNBACC.5,CLOSE;ACC.5=0 時(shí)一次顯示結(jié)束RLA;A 中數(shù)據(jù)循環(huán)左移MOVR5,A; 放回 R5 內(nèi)MOVP0,#0FFHAJMPPLAY;跳回PLAY循環(huán)CLOSE:MOVP2,#0FFH; 一次顯示結(jié)束, P2 口復(fù)位MOVP0,#0FFH;P0 口復(fù)位RET; 子程序返回; SD_II_PLAY ,上電顯示子程序; 不帶小數(shù)點(diǎn)顯示,有 "

45、A""-"顯示功能SD_II_PLAY: MOVR1,DISBEGMOVR5,#0FEH; 掃描控制字初值I_PLAY:MOVA,R5; 掃描字放入 AMOVP2,A;從P2 口輸出MOVA,R1; 取顯示數(shù)據(jù)到 AMOVDPTR,#I_TAB; 取段碼表地址MOVCA,A+DPTR; 查顯示數(shù)據(jù)對(duì)應(yīng)段碼MOVP0,A; 段碼放入 P1 口P2 口作MOVA,R5LCALLDLY1M; 顯示 1MSINCR1; 指向下一地址MOVA,R5; 掃描控制字放入 AJNBACC.5,FLSH;ACC.5=0 時(shí)一次顯示結(jié)束RLA;A 中數(shù)據(jù)循環(huán)左移MOVR5,A; 放回

46、 R5 內(nèi)AJMPI_PLAY;跳回PLAY循環(huán)FLSH:MOV P2,#0FFH ; 一次顯示結(jié)束, P2MOVP0,#0FFH;P0 口復(fù)位RET; 子程序返回;ST,.ST:MOVR0,#40H ; 將顯示內(nèi)容移入MOVR2,#20HMOVR3,#00HCLRAMOVDPTR,#STABS_LOOP: MOVCA,A+DPTRMOVR0,AMOVA,R3INCAMOVR3,AINCR0DJNZR2,S_LOOP; 移入完畢MOVDISBEG,#40H; 以下程序從左往右移SS_LOOP: MOV R2,#50; 控制移動(dòng)速度口復(fù)位40H-5FH 單元SS_LOOP1: LCALL SD_II_PLAYDJNZINCR2,SS_LOOP1DISBEGMOVCJNEMOVMOVSS_LOOP2:A,DISBEGA,#5AH, SS_LOOPDISBEG,#5AHR3,#1BHMOV R2,#32H; 以下程序從右往左移; 顯示 27 個(gè)單元; 控制移動(dòng)速度SS_LOOP12: LCALL SDIIPLAYDJNZDECR2,SS_LOOP12DISBEGDJNZR3,SS_LOOP2RET ; 以下是時(shí)間設(shè)定程序中的時(shí)調(diào)整程序DLY8:LCALLD_II_PLAY ; 等待鍵釋放JNBP1.3, DLY8MOV 50H,#0AH ; 時(shí)調(diào)整時(shí)顯示為 00:00

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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)論