基于單片機(jī)的新穎電子時(shí)鐘系統(tǒng)課程設(shè)計(jì)_第1頁
基于單片機(jī)的新穎電子時(shí)鐘系統(tǒng)課程設(shè)計(jì)_第2頁
基于單片機(jī)的新穎電子時(shí)鐘系統(tǒng)課程設(shè)計(jì)_第3頁
基于單片機(jī)的新穎電子時(shí)鐘系統(tǒng)課程設(shè)計(jì)_第4頁
基于單片機(jī)的新穎電子時(shí)鐘系統(tǒng)課程設(shè)計(jì)_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 數(shù)理與信息工程學(xué)院單片機(jī)原理及應(yīng)用期末課程設(shè)計(jì) 題 目: 基于單片機(jī)的新穎電子時(shí)鐘系統(tǒng) 專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù) 班 級(jí): 計(jì)算機(jī) 姓 名: 學(xué) 號(hào): 指導(dǎo)老師: 成 績: ( 2009.6 )目 錄 第1節(jié) 引 言31.1本設(shè)計(jì)任務(wù)和主要內(nèi)容31.2 系統(tǒng)主要功能3第2節(jié) 系統(tǒng)的硬件構(gòu)成及功能42.1 電子鐘的原理框圖42.2 at89c2051單片機(jī)及其引腳說明52.3 時(shí)分顯示部件6第3節(jié) 系統(tǒng)的軟件設(shè)計(jì)831 系統(tǒng)主程序設(shè)計(jì)83.2中斷程序設(shè)計(jì)93.3 程序設(shè)計(jì)10第4節(jié) 系統(tǒng)的調(diào)試25結(jié) 束 語26參考文獻(xiàn)27基于單片機(jī)的新穎電子時(shí)鐘系統(tǒng)數(shù)理與信息工程學(xué)院 09計(jì)算機(jī)專升本 胡瓊

2、瓊指導(dǎo)教師:余水寶 第1節(jié) 引 言 時(shí)鐘是人們?nèi)粘I钪斜夭豢缮俚纳钣闷?,無論在何地都需要精確地了解當(dāng)前的具體時(shí)間?,F(xiàn)在市場(chǎng)上的時(shí)鐘類型多種多樣,可是它們都存在一個(gè)相當(dāng)大的缺陷,那就是無論是機(jī)械鐘還是石英鐘在晚上都無法實(shí)現(xiàn)在無照明的情況下可見的狀態(tài)。使用的人要想知道當(dāng)前的時(shí)間,就必須先開燈,因此使用起來比較麻煩。此外,無論是機(jī)械鐘、石英鐘還是電子鐘,都存在著共同的問題:時(shí)間誤差。目前單片機(jī)在各行各業(yè)領(lǐng)域的使用非常廣泛,因?yàn)樗捏w積小、質(zhì)量輕、價(jià)格便宜、為學(xué)習(xí)、應(yīng)用和開發(fā)提供了便利條件。運(yùn)用基于單片機(jī)的形式來設(shè)計(jì)電子時(shí)鐘會(huì)更加的方便有效。針對(duì)以上的分析,我們?cè)O(shè)計(jì)了一款采用led顯示器件顯示的電

3、子時(shí)鐘,有效克服了時(shí)鐘存在的誤差問題,并且能在夜間不必其它照明就能看到時(shí)間,且以60只發(fā)光管實(shí)現(xiàn)秒顯示,接近于傳統(tǒng)的秒針來顯示秒的形式,使用者容易接受,而且美觀大方。另加七只裝飾用的led燈,使整個(gè)時(shí)鐘顯的相當(dāng)美觀新穎,故還可作為室內(nèi)裝飾用。這款電子時(shí)鐘具有相當(dāng)大的市場(chǎng)發(fā)展前景。1.1本設(shè)計(jì)任務(wù)和主要內(nèi)容本論文主要是針對(duì)單片機(jī)控制的電子時(shí)鐘系統(tǒng),分別對(duì)時(shí)鐘的時(shí)間顯示、鬧鐘報(bào)鳴等功能以及系統(tǒng)設(shè)備的軟、硬件各個(gè)部分進(jìn)行了研究。主要設(shè)計(jì)要求如下: 用4只led數(shù)碼管輸出顯示時(shí)和分。 可通過按鍵設(shè)置鬧鐘功能,且停鬧無須手工操作。 可通過按鍵設(shè)置分校時(shí)。 月計(jì)時(shí)誤差小于45秒。 模擬“秒針”行走的“嘀噠

4、”聲。 增加停(掉)電保護(hù)功能。 提高計(jì)時(shí)精度,使年計(jì)時(shí)誤差小于30秒。 增加日自動(dòng)校準(zhǔn)功能,使得該電子鐘“永無誤差”。 可通過按鍵設(shè)置一天兩鬧(比如早晨、中午各一次)。1.2 系統(tǒng)主要功能電子鐘的外觀是周邊60只發(fā)光管順時(shí)旋轉(zhuǎn)來顯示秒,中間四只led數(shù)碼管用于顯示時(shí)間,中下方的七只led燈順時(shí)旋轉(zhuǎn),供裝飾用。 其主要功能有:整點(diǎn)報(bào)時(shí);四只led數(shù)碼管顯示當(dāng)前時(shí)分。當(dāng)發(fā)生停電事件時(shí),由后備電池供電,系統(tǒng)進(jìn)入低功耗狀態(tài),所有顯示部件停止顯示,這樣即延長了電池的壽命,同時(shí)又保證了cpu繼續(xù)計(jì)數(shù),不至于因停電而時(shí)鐘停止運(yùn)行。當(dāng)恢復(fù)供電后,系統(tǒng)自動(dòng)恢復(fù)工作狀態(tài),不影響計(jì)時(shí)。鬧鐘功能,設(shè)定好所需的時(shí)間,

5、時(shí)間到時(shí)時(shí)鐘發(fā)出蜂鳴聲。校時(shí),調(diào)整時(shí)間差。溫度顯示功能,檢測(cè)空氣中的溫度并顯示在四只led數(shù)碼管上。時(shí)間顯示和溫度顯示交替進(jìn)行。第2節(jié) 系統(tǒng)的硬件構(gòu)成及功能2.1 電子鐘的原理框圖它由以下幾個(gè)部件組成:單片機(jī)89c2051、電源、時(shí)分顯示部件、60秒旋轉(zhuǎn)譯碼驅(qū)動(dòng)電路。時(shí)分顯示采用動(dòng)態(tài)掃描,以降低對(duì)單片機(jī)端口數(shù)的要求,同時(shí)也降低系統(tǒng)的功耗。時(shí)分顯示模塊、60秒旋轉(zhuǎn)譯碼驅(qū)動(dòng)電路以及顯示驅(qū)動(dòng)都通過89c2051的i/o口控制。電源部分:電源部分有二部分組成。一部分是由220v的市電通過變壓、整流穩(wěn)壓來得到+5v電壓,維持系統(tǒng)的正常工作;另一部分是由3v的電池供電,以保證停電時(shí)正常走時(shí)。正常情況下電池

6、是不提供電能的,以保證電池的壽命。圖2-1 電子鐘系統(tǒng)原理框圖2.2 at89c2051單片機(jī)及其引腳說明at89c2051單片機(jī)是51系列單片機(jī)的一個(gè)成員,是8051單片機(jī)的簡化版。內(nèi)部自帶2k字節(jié)可編程flash存儲(chǔ)器的低電壓、高性能coms八位微處理器,與intel mcs-51系列單片機(jī)的指令和輸出管腳相兼容。at89c2051構(gòu)成的單片機(jī)系統(tǒng)是具有結(jié)構(gòu)最簡單、造價(jià)最低廉、效率最高的微控制系統(tǒng),省去了外部的ram、rom和接口器件,減少了硬件開銷,節(jié)省了成本,提高了系統(tǒng)的性價(jià)比。at89c2051是一個(gè)有20個(gè)引腳的芯片,引腳配置如圖2-2所示。與8051相比,at89c2051減少了

7、兩個(gè)對(duì)外端口(即p0、p2口),使它最大可能地減少了對(duì)外引腳下,因而芯片尺寸有所減小。at89c2051芯片的幾個(gè)主要引腳功能為: 圖2-2 at89c2051引腳配置 圖2-3 cd4017引腳圖rst 復(fù)位輸入。當(dāng)rst變?yōu)楦唠娖讲⒈3?個(gè)機(jī)器周期時(shí),所有i/o引腳復(fù)位至“1”。xtal1 反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。xtal2 來自反向振蕩放大器的輸出。p1口 8位雙向i/o口。引腳p1.2p1.7提供內(nèi)部上拉,當(dāng)作為輸入并被外部下拉為低電平時(shí),它們將輸出電流,這是因內(nèi)部上拉的緣故。p1.0和p1.1需要外部上拉,可用作片內(nèi)精確模擬比較器的正向輸入(ain0)和反向輸入

8、(ain1),p1口輸出緩沖器能接收20ma電流,并能直接驅(qū)動(dòng)led顯示器;p1口引腳寫入“1” 后,可用作輸入。在閃速編程與編程校驗(yàn)期間,p1口也可接收編碼數(shù)據(jù)。p3口 引腳p3.0p3.5與p3.7為7個(gè)帶內(nèi)部上拉的雙向i/0引腳。p3.6在內(nèi)部已與片內(nèi)比較器輸出相連,不能作為通用i/o引腳訪問。p3口的輸出緩沖器能接收20ma的灌電流;p3口寫入“1”后,內(nèi)部上拉,可用輸入。p3口也可用作特殊功能口,其功能見表1。p3口同時(shí)也可為閃速存儲(chǔ)器編程和編程校驗(yàn)接收控制信號(hào)。表1 p3口特殊功能p3口引腳特殊功能p3.0rxd(串行輸入口)p3.1txd(串行輸出口)p3.2(外部中斷0)p3.

9、3(外部中斷1)p3.4t0(定時(shí)器0外部輸入)p3.5t1(定時(shí)器1外部輸入)2.3 時(shí)分顯示部件由于系統(tǒng)要顯示的內(nèi)容較簡單,顯示量不多,所以選用數(shù)碼管既方便又經(jīng)濟(jì)。led有共陰極和共陽極兩種。如圖2-6所示。二極管的陰極連接在一起,通常此公共陰極接地,而共陽極則將發(fā)光二極管的陽極連接在一起,接入+5v的電壓。一位顯示器由8個(gè)發(fā)光二極管組成,其中7個(gè)發(fā)光二極管構(gòu)成字型“8”的各個(gè)筆劃(段)ag,另一個(gè)小數(shù)點(diǎn)為dp發(fā)光二極管。當(dāng)在某段發(fā)光二極管施加一定的正向電壓時(shí),該段筆劃即亮;不加電壓則暗。為了保護(hù)各段led不被損壞,需外加限流電阻。圖2-6 led數(shù)碼管結(jié)構(gòu)原理圖眾所周知,led顯示數(shù)碼管

10、通常由硬件7段譯碼集成電路,完成從數(shù)字到顯示碼的譯碼驅(qū)動(dòng)。本系統(tǒng)采用軟件譯碼,以減小體積,降低成本和功耗,軟件譯碼的另一優(yōu)勢(shì)還在于比硬件譯碼有更大的靈活性。所謂軟件譯碼,即由單片機(jī)軟件完成從數(shù)字到顯示碼的轉(zhuǎn)換。從led數(shù)碼管結(jié)構(gòu)原理可知,為了顯示字符,要為led顯示數(shù)碼管提供顯示段碼,組成一個(gè)“8”字形字符的7段,再加上1個(gè)小數(shù)點(diǎn)位,共計(jì)8段,因此提供給led數(shù)碼管的顯示段碼為1個(gè)字節(jié)。各段碼位與顯示段的對(duì)應(yīng)關(guān)系如表2。表2 各段碼位的對(duì)應(yīng)關(guān)系段碼位d7d6d5d4d3d2d1d0顯示段dpgfedcba當(dāng)用數(shù)據(jù)口連接led數(shù)碼管adp引腳時(shí),不同的連接方法,各段碼位與顯示段有不同的對(duì)應(yīng)關(guān)系。

11、通常數(shù)據(jù)口的d0位與a段連接,d1位與b段連接,d7位與dp段連接,依次連接,如表2所示,表3為用于led數(shù)碼管顯示的十六進(jìn)制數(shù)和空白字符與p的顯示段碼。表3 led顯示段碼字型共陽極段碼共陰極段碼字型共陽極段碼共陰極段碼0c0h3fh990h6fh1f9h06ha88h77h2a4h5bhb83h7ch3boh4fhcc6h39h499h66hda1h5eh592h6dhe86h79h682h7dhf84h71h7f8h07h空白ffh00h880h7fhp8ch73h根據(jù)at89c2051單片機(jī)灌電流能力強(qiáng),拉電流能力弱的特點(diǎn),我們選用共陽數(shù)碼管。將at89c2051的p1.0p1.7分別

12、與共陽數(shù)碼管的ag及dp相連,高電平的位對(duì)應(yīng)的led數(shù)碼管的段暗,低電平的位對(duì)應(yīng)的led數(shù)碼管的段亮,這樣,當(dāng)p0口輸出不同的段碼,就可以控制數(shù)碼管顯示不同的字符。例如:當(dāng)p0口輸出的段碼為1100 0000,數(shù)碼管顯示的字符為0。數(shù)碼管顯示器有二種工作方式,即靜態(tài)顯示方式和動(dòng)態(tài)掃描顯示方式。為節(jié)省端口及降低功耗,本系統(tǒng)采用動(dòng)態(tài)掃描顯示方式。動(dòng)態(tài)掃描顯示方式需解決多位led數(shù)碼管的“段控”和“位控”問題,本電路的“段控”(即要顯示的段碼的控制)通過p0口實(shí)現(xiàn);而每一位的公共端,即led數(shù)碼管的“位控”,則由p3口控制。這種連接方式由于多位字段線連在一起,因此,要想顯示不同的內(nèi)容,必然要采取輪流

13、顯示的方式,即在某一瞬間,只讓其中的某一位的字位線處于選通狀態(tài),其它各位的字位線處于斷開狀態(tài),同時(shí)字段線上輸出這一位相應(yīng)要顯示字符的字段碼。在這一瞬時(shí),只有這一位在顯示,其他幾位則暗。在本系統(tǒng)中,字位線的選通與否是通過pnp三極管的導(dǎo)通與截止來控制,即三極管處于“開關(guān)”狀態(tài)。系統(tǒng)的時(shí)分顯示部件由4只7段共陽led數(shù)碼管構(gòu)成,前兩只用于時(shí)的顯示,后兩只用于分的顯示。值得一提的是,在設(shè)計(jì)中需要實(shí)現(xiàn)時(shí)與分之間的兩個(gè)閃爍點(diǎn),為此,將第三只led數(shù)碼管倒置擺放,這樣就形成了兩個(gè)很自然的閃爍點(diǎn)。與此同時(shí),為了能使兩點(diǎn)顯示能夠形象的表示時(shí)鐘“秒”的變化,設(shè)計(jì)時(shí),將兩個(gè)點(diǎn)由p1.7單獨(dú)控制,每隔一秒使p1.7

14、發(fā)送一個(gè)正脈沖,從而實(shí)現(xiàn)了兩個(gè)點(diǎn)的閃爍顯示,閃爍周期為一秒。第3節(jié) 系統(tǒng)的軟件設(shè)計(jì)31 系統(tǒng)主程序設(shè)計(jì) 主程序的功能是完成系統(tǒng)的初始化,在顯示時(shí)間之前,對(duì)系統(tǒng)是否停電狀態(tài)進(jìn)行檢測(cè);若停電,將系統(tǒng)進(jìn)入低功耗狀態(tài),用電池電壓維持單片機(jī)計(jì)時(shí)工作,但此時(shí)不顯示時(shí)間,用節(jié)省用電;若不停電,則將時(shí)分發(fā)送顯示。程序流程如圖3-1所示。圖3-1 系統(tǒng)主程序流程圖3.2中斷程序設(shè)計(jì)中斷程序(如圖3-2所示)完成時(shí)間計(jì)數(shù),時(shí)間調(diào)整,誤差消除等功能。中斷采用at89c2051內(nèi)部t0中斷實(shí)現(xiàn),定時(shí)時(shí)間為125ms,當(dāng)時(shí)間到達(dá)125ms8,即1分鐘時(shí),分計(jì)數(shù)緩沖器minbuffer增加1,到達(dá)1小時(shí),則時(shí)計(jì)數(shù)緩沖器h

15、ourbuffer增加1,并將分、時(shí)的個(gè)位、十位放入顯示緩沖器。當(dāng)分計(jì)數(shù)緩沖器和時(shí)計(jì)數(shù)緩沖器分別到達(dá)60min、24h時(shí),則對(duì)它們清零,以便從新計(jì)數(shù)。在中斷設(shè)計(jì)中,還通過軟件實(shí)現(xiàn)了累計(jì)誤差消除功能,使整個(gè)系統(tǒng)時(shí)間的精確度得到保證。圖3-2 定時(shí)中斷程序3.3 程序設(shè)計(jì)dp bit 24h.3 ;定義半秒閃爍位單元 second equ 31h ; 定義計(jì)數(shù)單元 mbuf equ 32h ; 定義分計(jì)數(shù)單元 hbuf equ 33h ; 定義時(shí)計(jì)數(shù)單元 mbuf0 equ 34h ; 定義分個(gè)位計(jì)數(shù)存儲(chǔ)單元 mbuf1 equ 35h ; 定義分十位計(jì)數(shù)存儲(chǔ)單元 hbuf0 equ 36h ;

16、定義時(shí)個(gè)位計(jì)數(shù)存儲(chǔ)單元 hbuf1 equ 37h ; 定義時(shí)十位計(jì)數(shù)存儲(chǔ)單元 dmbf0 equ 40h ; 定義分個(gè)位顯示緩沖單元 dmbf1 equ 41h ; 定義分十位顯示緩沖單元 dhbf0 equ 42h ; 定義時(shí)個(gè)位顯示緩沖單元 dhbf1 equ 43h ; 定義時(shí)十位顯示緩沖單元 ambf10 equ 44h ; 定義定鬧 1 分個(gè)位緩沖單元 ambf11 equ 45h ; 定義定鬧 1 分十位緩沖單元 ahbf10 equ 46h ; 定義定鬧 1 時(shí)個(gè)位緩沖單元 ahbf11 equ 47h ; 定義定鬧 1 時(shí)十位緩沖單元 ambf1 equ 48h ; 定義定鬧

17、1分計(jì)數(shù)單元 ahbf1 equ 49h ; 定義定鬧1時(shí)計(jì)數(shù)單元 ambf20 equ 4ah ; 定義定鬧 2 分個(gè)位緩沖單元 ambf21 equ 4bh ; 定義定鬧 2 分十位緩沖單元 ahbf20 equ 4ch ; 定義定鬧 2 時(shí)個(gè)位緩沖單元 ahbf21 equ 4dh ; 定義定鬧 2 時(shí)十位緩沖單元 ambf2 equ 4eh ; 定義定鬧2分計(jì)數(shù)單元 ahbf2 equ 4fh ; 定義定鬧2時(shí)計(jì)數(shù)單元 org 0000h ljmp main org 000bh mov tl0, #0dch ; 125 毫秒定時(shí)器初值低 8 位 mov th0, #0bh ; 125毫

18、秒定時(shí)器初值高 8 位 ljmp inttomain: mov sp, #6fh mov r2, #08h ; 定時(shí)器1 秒中斷次數(shù) mov r4, #08h ; 快校時(shí)定時(shí)計(jì)數(shù),8x125ms 后快校時(shí) mov second, #3ch ; 秒計(jì)數(shù)單元 mov mbuf0, #0 ; 分個(gè)位計(jì)數(shù)存儲(chǔ)單元 0 初值 mov mbuf1, #0 ; 分十位計(jì)數(shù)存儲(chǔ)單元 1 初值 mov hbuf0, #0 ; 時(shí)個(gè)位計(jì)數(shù)存儲(chǔ)單元 0 初值 mov hbuf1, #2 ; 時(shí)十位計(jì)數(shù)存儲(chǔ)單元 1 初值 mov mbuf, #00h ; 分計(jì)數(shù)存儲(chǔ)單元 初值 mov hbuf, #20h ; 時(shí)計(jì)數(shù)

19、存儲(chǔ)單元 初值 mov ambf10, #1 ; 定鬧1 分個(gè)位計(jì)數(shù)存儲(chǔ)單元 0 初值 mov ambf11, #5 ; 定鬧1 分十位計(jì)數(shù)存儲(chǔ)單元 1 初值 mov ahbf10, #0 ; 定鬧1 時(shí)個(gè)位計(jì)數(shù)存儲(chǔ)單元 0 初值 mov ahbf11, #2 ; 定鬧1 時(shí)十位計(jì)數(shù)存儲(chǔ)單元 1 初值 mov ambf1, #51h ; 定鬧 1 分計(jì)數(shù)存儲(chǔ)單元 初值 mov ahbf1, #20h ; 定鬧 1 時(shí)計(jì)數(shù)存儲(chǔ)單元 初值 mov ambf20, #3 ; 定鬧2 分個(gè)位計(jì)數(shù)存儲(chǔ)單元 0 初值 mov ambf21, #5 ; 定鬧2 分十位計(jì)數(shù)存儲(chǔ)單元 1 初值 mov ahbf

20、20, #0 ; 定鬧2 時(shí)個(gè)位計(jì)數(shù)存儲(chǔ)單元 0 初值 mov ahbf21, #2 ; 定鬧2 時(shí)十位計(jì)數(shù)存儲(chǔ)單元 1 初值 mov ambf2, #53h ; 定鬧2 分計(jì)數(shù)存儲(chǔ)單元 初值 mov ahbf2, #20h ; 定鬧 2 時(shí)計(jì)數(shù)存儲(chǔ)單元 初值 mov ie, #10000010b ; 允許定時(shí)器0 中斷 mov tmod, #00100001b ; t0 方式1 mov tl0, r5 ; 125 毫秒定時(shí)器初值低 8 位 mov th0, #0bh ; 125 毫秒定時(shí)器初值高 8 位 mov ip, #00000010b ; 定時(shí)器0 高優(yōu)先級(jí) setb tr0 ; 啟動(dòng)

21、 t0 計(jì)時(shí) loop: mov r4, #08 ; 喂狗 mov a, hbuf ; 取時(shí)整點(diǎn) subb a, #7 jc loop1 ; 判斷是否早 7時(shí)前 mov a, hbuf ; 早7 時(shí)前-晚22 時(shí)后為夜間 subb a, #22h jnc loop1 ; 判斷是否晚 22 時(shí)后 acall disp ajmp alarm1 loop1: acall ndisp ; 是夜間,調(diào)用夜間顯示子程序 alarm1: mov a, ahbf1 ; 判定鬧 1 cjne a, hbuf, alarm2 ; 判定鬧1的小時(shí)是否與系統(tǒng)時(shí)間相等? mov a, ambf1 cjne a, mbu

22、f, alarm2 ; 判定鬧1的分是否與系統(tǒng)時(shí)間相等? mov c, dp mov p3.3, c ; 蜂鳴器響半秒,停半秒 mov a, second ; 定鬧1 分鐘 jnz loop alarm2: mov a, ahbf2 cjne a, hbuf, loop2 ; 判定鬧2的時(shí)是否與系統(tǒng)時(shí)間相等? mov a, ambf2 cjne a, mbuf, loop2 ; 判定鬧2的分是否與系統(tǒng)時(shí)間相等? mov c, dp mov c, dp mov p3.3, c ; 蜂鳴器響半秒,停半秒 mov a, second ; 定鬧1 分鐘 jnz loop loop2: jb p3.2,

23、 loop7 ; 判斷校時(shí)鍵是否按下? loop3: acall disp ; 用于長時(shí)間按鍵時(shí)的顯示 mov a, r4 ; 有校時(shí)鍵按下 cjne a, #00h, loop6 ; 校時(shí)鍵按下有 1 秒嗎? loop4: acall add1 ; 校時(shí)鍵按下有 1 秒,則快調(diào) mov r1, #40 loop5: acall disp djnz r1, loop5 jnb p3.2, loop4 ; 校時(shí)鍵未放開,繼續(xù)快調(diào) ajmp loop7 ; loop6: jnb p3.2, loop3 ; 校時(shí)鍵按下不到 1秒,返回再判 acall add1 ; 單次慢調(diào) mov tl0, r5

24、; 校時(shí)結(jié)束,秒初值置 0 mov th0, #0bh mov second, #00 loop7: jb p3.3, loop alam11: acall adsp1 ; 用于設(shè)置定鬧 1 時(shí),長時(shí)間按鍵的顯示 mov a, r4 ; 有定鬧1 鍵按下 cjne a, #00h, alam16 ; 定鬧1鍵按下有 1秒嗎? alam12: acall aad1 ; 定鬧1鍵按下有 1秒,則快調(diào) mov r1, #50 alam13: acall adsp1 djnz r1, alam13 jnb p3.3, alam12 mov r1, #10 ; 定鬧1 快調(diào)結(jié)束,閃爍顯示定鬧時(shí)間 8 秒

25、 alam14: mov r3, #40 alam15: acall adsp1 djnz r3, alam15 acall d400ms djnz r1, alam14 ajmp again alam16: nop jnb p3.3, alam11 ; 定鬧1鍵按下不到 1 秒,返回再判 alam17: acall aad1 ; 定鬧1單次慢調(diào) mov r1, #10 ; 定鬧1慢調(diào)結(jié)束,閃爍顯示定鬧時(shí)間 12 秒 alam18: mov r3, #40 alam19: acall adsp1 djnz r3, alam19 acall d400ms djnz r1, alam18 agai

26、n: jb p3.3, retun ; 返回主程序 mov r4, #08 alam21: acall adsp2 ; 用于設(shè)置定鬧 2 時(shí),長時(shí)間按鍵的顯示 mov a, r4 ; 有定鬧2 鍵按下 cjne a, #00h, alam26 ; 定鬧2鍵按下有 1秒嗎? alam22: acall aad2 ; 定鬧2鍵按下有 1秒,則快調(diào) mov r1, #50 alam23: acall adsp2 djnz r1, alam23 jnb p3.3, alam22 mov r1, #10 ; 定鬧2 快調(diào)結(jié)束,閃爍顯示定鬧時(shí)間 9 秒 alam24: mov r3, #40 alam25

27、: djnz r3, alam25 acall d400ms djnz r1, alam24 ajmp loop alam26: jnb p3.3, alam21 ; 定鬧2鍵按下不到 1 秒,返回再判 alam27: acall aad2 ; 定鬧2單次慢調(diào) mov r1, #10 ; 定鬧2 慢調(diào)結(jié)束,顯示定鬧時(shí)間 9 秒 alam28: mov r3, #40 alam29: acall adsp2 djnz r3, alam29 acall d400ms djnz r1, alam28 retun: ajmp loop ; 返回主程序 intto: push acc push psw

28、dec r4 mov a,second cjne a,#28h,int01 mov r5,#0dbh int01: djnz r2, int02 ; 1 秒計(jì)數(shù) mov r2, #08h cpl dp ; 小數(shù)點(diǎn)半秒閃爍 acall beep ; 1 秒到, 發(fā)“笛嗒”聲和 led 旋轉(zhuǎn)脈沖 djnz second, outt0 mov second, #3ch ; 1 分到 acall add1 ; 分十進(jìn)制加 1子程序 int02: mov a, r2 cjne a, #04h, outt0 ; 判斷是否半秒 cpl dp ; 是半秒,秒閃動(dòng)一次 outt0: pop psw pop ac

29、c reti add1: mov a, mbuf ; 分加1 子程序, add a, #01 ; 分十進(jìn)制加 1 da a mov mbuf, a anl a, #0fh mov mbuf0, a mov a, mbuf swap a anl a, #0fh mov mbuf1, a mov a, mbuf cjne a, #60h, addout mov mbuf0, #0 mov mbuf1, #0 mov mbuf, #0 mov a, hbuf add a, #01 ; 時(shí)十進(jìn)制加1 da a mov hbuf, a anl a, #0fh mov hbuf0, a mov a, hb

30、uf swap a anl a, #0fh mov hbuf1, a mov a, hbuf cjne a, #24h, addout mov hbuf0, #0 mov hbuf1, #0 mov hbuf, #0 addout: ret aad1: mov a, ambf1 ; 定鬧 1,分加1 子程序, add a, #01 da a mov ambf1, a anl a, #0fh mov ambf10, a mov a, ambf1 swap a anl a, #0fh mov ambf11, a mov a, ambf1 cjne a, #60h, aad1ot mov ambf1

31、0, #0 mov ambf11, #0 mov ambf1, #0 mov a, ahbf1 add a, #01 da a mov ahbf1, a anl a, #0fh mov ahbf10, a mov a, ahbf1 swap a anl a, #0fh mov ahbf11, a mov a , ahbf1 cjne a, #24h, aad1ot mov ahbf10, #0 mov ahbf11, #0 mov ahbf1, #0 aad1ot: ret aad2: mov a, ambf2 ; 定鬧2 分加 1 子程序, add a, #01 da a mov ambf2

32、, a anl a, #0fh mov ambf20, a mov a, ambf2 swap a anl a, #0fh mov ambf21, a mov a, ambf2 cjne a, 60h, aad2ot mov ambf20, #0 mov ambf21, #0 mov ambf2, #0 mov a, ahbf2 add a, #01 da a mov ahbf2, a anl a, #0fh mov ahbf20, a mov a, ahbf2 swap a anl a, #0fh mov ahbf21, a mov a, ahbf2 cjne a, #24h, aad2ot

33、 mov ahbf20, #0 mov ahbf21, #0 mov ahbf2, #0 aad2ot: ret dspm0: movc a, a+dptr ; 白天分個(gè)位顯示子程序 setb acc.7 mov p1, a clr p3.5 acall dy1ms setb p3.5 acall dy1ms ret dspm1: movc a, a+dptr ; 白天分十位顯示子程序 mov c, dp mov acc.7, c mov p1, a clr p3.4 acall dy1ms setb p3.4 acall dy1ms ret dsph0: movc a, a+dptr ; 白

34、天時(shí)個(gè)位顯示子程序 mov c, dp mov acc.7, c mov p1, a clr p3.1 acall dy1ms setb p3.1 acall dy1ms ret dsph1: movc a, a+dptr ; 白天時(shí)十位顯示子程序 setb acc.7 mov p1, a clr p3.0 acall dy1ms setb p3.0 acall dy1ms ret disp: nop mov dptr , #tab1 ; 顯示子程序,指向個(gè)位順置管段碼表首地址 mov a, mbuf0 ; 取分個(gè)位 acall dspm0 ; 調(diào)用分個(gè)位顯示子程序 mov dptr, #ta

35、b2 mov a, mbuf1 ; 取分十位 acall dspm1 ; 調(diào)用分十位顯示子程序 mov dptr, #tab1 mov a, hbuf0 ; 取時(shí)個(gè)位 acall dsph0 ; 調(diào)用時(shí)個(gè)位顯示子程序 mov dptr, #tab1 mov a, hbuf1 ; 取時(shí)十位 anl a, #0ffh jnz disp1 mov a, #0ah disp1: acall dsph1 ; 調(diào)用時(shí)十位顯示子程序 ret ndpm0: movc a, a+dptr ; 夜間分個(gè)位顯示子程序 setb acc.7 mov p1, a clr p3.5 acall dy1ms setb p3

36、.5 acall dy2ms ret ndpm1: movc a, a+dptr ; 夜間分十位顯示子程序 mov c, dp mov acc.7,c mov p1, a clr p3.4 acall dy1ms setb p3.4 acall dy2ms ret ndph0: movc a, a+dptr ; 夜間時(shí)個(gè)位顯示子程序 mov c, dp mov acc.7,c mov p1, a clr p3.1 acall dy1ms setb p3.1 acall dy2ms ret ndph1: movc a, a+dptr ; 夜間時(shí)十位顯示子程序 setb acc.7 mov p1,

37、 a clr p3.0 acall dy1ms setb p3.0 acall dy2ms ret ndisp: nop mov dptr, # tab1 ; 顯示子程序,指向個(gè)位順置管段碼表首地址 mov a, mbuf0 ; 取分個(gè)位 acall ndpm0 ; 調(diào)用分個(gè)位顯示子程序 mov dptr, #tab2 mov a, mbuf1 ; 取分十位 acall ndpm1 ; 調(diào)用分十位顯示子程序 mov dptr, #tab1 mov a, hbuf0 ; 取時(shí)個(gè)位 acall ndph0 ; 調(diào)用時(shí)個(gè)位顯示子程序 mov dptr , # tab1 mov a, hbuf1 ;

38、取時(shí)十位 anl a, #0ffh jnz ndisp1 mov a, #0ah ndisp1: acall ndph1 ; 調(diào)用時(shí)十位顯示子程序 ret adsp1: nop mov dptr, #tab1 ; 定鬧1 顯示子程序,指向個(gè)位順置管段碼表首地址 mov a, ambf10 ; 取定鬧1 分個(gè)位 acall dspm0 ; 調(diào)用分個(gè)位顯示子程序 mov dptr, #tab2 mov a, ambf11 ; 取定鬧1 分十位 acall dspm1 ; 調(diào)用分十位顯示子程序 mov dptr, #tab1 mov a, ahbf10 ; 取定鬧 1 時(shí)個(gè)位 acall dsph0

39、 ; 調(diào)用時(shí)個(gè)位顯示子程序 mov dptr, #tab1 mov a, ahbf11 ; 取定鬧1 時(shí)十位 anl a, #0ffh jnz adsp11 mov a, #0ah adsp11: acall dsph1 ; 調(diào)用時(shí)十位顯示子程序 ret adsp2: nop mov dptr, #tab1 ; 定鬧2顯示子程序,指向個(gè)位順置管段碼表首地址 mov a, ambf20 ; 取定鬧2 分個(gè)位 acall dspm0 ; 調(diào)用分個(gè)位顯示子程序 mov dptr, #tab2 mov a, ambf21 ; 取定鬧2 分十位 acall dspm1 ; 調(diào)用分十位顯示子程序 mov dptr, #tab1 mov a, ahbf20 ; 取定鬧2 時(shí)個(gè)位 acall dsph0 ; 調(diào)用時(shí)個(gè)位顯示子程序 mov dptr, #tab1 mov a, ahbf21 ; 取定鬧2 時(shí)十位 anl a, #0ffh jnz ads

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論