課程設(shè)計(jì)--多功能電子數(shù)字鐘_第1頁(yè)
已閱讀1頁(yè),還剩31頁(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ì)算機(jī)課程設(shè)計(jì)報(bào)告</p><p><b>  多功能電子數(shù)字鐘</b></p><p><b>  目錄</b></p><p>  一:概述………………………………………………………3二:設(shè)計(jì)基本原理簡(jiǎn)介………………………………………4</p><p>  三:設(shè)計(jì)

2、要求及說(shuō)明…………………………………………5</p><p>  四:整體設(shè)計(jì)方案……………………………………………6</p><p><b>  系統(tǒng)硬件電路設(shè)計(jì) </b></p><p><b>  系統(tǒng)軟件總流程設(shè)計(jì)</b></p><p><b>  模塊劃分及分析 </b&

3、gt;</p><p>  五:?jiǎn)文K流程設(shè)計(jì)…………………………………………10</p><p>  各模塊設(shè)計(jì)概述、流程圖 </p><p>  模塊源程序集合及注釋 </p><p>  六:?jiǎn)文K軟件測(cè)試…………………………………………27七:系統(tǒng)檢測(cè)調(diào)試……………………………………………28</p><p>

4、<b>  硬件電路調(diào)試</b></p><p><b>  軟件部分燒寫(xiě)調(diào)試</b></p><p>  八:心得體會(huì)…………………………………………………30</p><p><b>  一、概述</b></p><p>  課程設(shè)計(jì)題目:電子數(shù)字鐘</p>

5、<p><b>  應(yīng)用知識(shí)簡(jiǎn)介:</b></p><p>  ? 51 單片機(jī) </p><p>  單片機(jī)又稱(chēng)單片微控制器,它不是完成某一個(gè)邏輯功能</p><p>  的芯片,而是把一個(gè)計(jì)算機(jī)系統(tǒng)集成到一個(gè)芯片上。作為嵌</p><p>  入式系統(tǒng)控

6、制核心的單片機(jī)具有其體積小、功能全、性價(jià)比</p><p>  高等諸多優(yōu)點(diǎn)。51 系列單片機(jī)是國(guó)內(nèi)目前應(yīng)用最廣泛的單</p><p>  片機(jī)之一,隨著嵌入式系統(tǒng)、片上系統(tǒng)等概念的提出和普遍</p><p>  接受及應(yīng)用,51 系列單片機(jī)的發(fā)展又進(jìn)入了一個(gè)新的階段。</p><p>  在今后很長(zhǎng)一段時(shí)間內(nèi)51 系列單片機(jī)仍將占據(jù)嵌入式系

7、統(tǒng)</p><p><b>  產(chǎn)品的中低端市場(chǎng)。</b></p><p><b>  ? 匯編語(yǔ)言</b></p><p>  匯編語(yǔ)言是一種面向機(jī)器的計(jì)算機(jī)低級(jí)編程語(yǔ)言,通常</p><p>  是為特定的計(jì)算機(jī)或系列計(jì)算機(jī)專(zhuān)門(mén)設(shè)計(jì)的。匯編語(yǔ)言保持</p><p>  了

8、機(jī)器語(yǔ)言的優(yōu)點(diǎn),具有直接和簡(jiǎn)捷的特點(diǎn),其代碼具有效</p><p>  率高實(shí)時(shí)性強(qiáng)等優(yōu)點(diǎn)。但是對(duì)于復(fù)雜的運(yùn)算或大型程序,用</p><p>  匯編語(yǔ)言編寫(xiě)將非常耗時(shí)。匯編語(yǔ)言可以與高級(jí)語(yǔ)言配合使</p><p><b>  用,應(yīng)用十分廣泛。</b></p><p><b>  ? ISP</b>

9、;</p><p>  ISP(In-System Programming)在系統(tǒng)可編程,</p><p>  是當(dāng)今流行的單片機(jī)編程模式,指電路板上的空白元器</p><p>  件可以編程寫(xiě)入最終用戶代碼,而不需要從電路板上取</p><p>  下元器件。已經(jīng)編程的器件也可以用ISP 方式擦除或再</p><p>

10、;  編程。本次課程設(shè)計(jì)便使用ISP 方式,直接將編寫(xiě)好的</p><p>  程序下載到連接好的單片機(jī)中進(jìn)行調(diào)試。</p><p>  選題目的及設(shè)計(jì)思想簡(jiǎn)介:</p><p>  課程設(shè)計(jì)是一次難得的對(duì)所學(xué)的知識(shí)進(jìn)行實(shí)踐的機(jī)會(huì),我希望通過(guò)課程設(shè)計(jì)獨(dú)立設(shè)計(jì)一個(gè)簡(jiǎn)</p><p>  單的系統(tǒng)從而達(dá)到強(qiáng)化課本知識(shí)并靈活運(yùn)用的目的。電子數(shù)字鐘是

11、日常生活鐘隨處可見(jiàn)的簡(jiǎn)單系</p><p>  統(tǒng)。對(duì)電子數(shù)字鐘的設(shè)計(jì)比較容易聯(lián)系實(shí)際并進(jìn)行拓展, 在設(shè)計(jì)中我將力求盡可能跳出課本的樣</p><p>  板,從現(xiàn)實(shí)生活中尋找設(shè)計(jì)原型和設(shè)計(jì)思路,爭(zhēng)取有所突破。</p><p>  如圖所示便是我本次課程設(shè)計(jì)流程圖,設(shè)計(jì)的整個(gè)過(guò)程運(yùn)用自頂向下分析、自底向上實(shí)現(xiàn)的</p><p>  辦法進(jìn)行設(shè)

12、計(jì),借鑒在軟件工程中學(xué)習(xí)到的軟件設(shè)計(jì)流程和規(guī)范來(lái)完成系統(tǒng)設(shè)計(jì)并在設(shè)計(jì)過(guò)程中</p><p>  體會(huì)軟件設(shè)計(jì)的流程。</p><p>  二、設(shè)計(jì)基本原理簡(jiǎn)介</p><p>  數(shù)字鐘的設(shè)計(jì)首先要保證其走時(shí)盡可能準(zhǔn)確,其次再根據(jù)人們?nèi)粘5氖褂?lt;/p><p>  習(xí)慣來(lái)設(shè)定其附加功能。</p><p>  在設(shè)計(jì)中利

13、用單片機(jī)定時(shí)計(jì)數(shù)器來(lái)完成走時(shí)并用兩組輸出口控制數(shù)碼管來(lái)</p><p>  顯示;通過(guò)編程向某一輸出口輸出方波實(shí)現(xiàn)報(bào)時(shí)及鬧鈴;利用輸入端口外接各</p><p>  種開(kāi)關(guān)來(lái)完成對(duì)走時(shí)及顯示的控制(如預(yù)置時(shí)間等)。</p><p>  在設(shè)計(jì)中需要用到許多技巧。以下為我在學(xué)習(xí)單片機(jī)課程中總結(jié)的一些設(shè)</p><p><b>  計(jì)思

14、想或方法:</b></p><p>  ??占空比概念在設(shè)計(jì)中的運(yùn)用 </p><p>  如圖所示的一串方波序列,導(dǎo)通時(shí)間同周期的比值</p><p>  即占空比。在用單片機(jī)控制對(duì)多個(gè)數(shù)碼管的掃描顯示</p><p>  中,數(shù)碼管接收到的電壓可以看成是一串方波序列,占</p><p>

15、  空比控制了數(shù)碼管的亮度。實(shí)際上對(duì)顯示延時(shí)時(shí)間的調(diào)</p><p>  節(jié)就是調(diào)節(jié)數(shù)碼管電壓的占空比,當(dāng)占空比大于一定數(shù)</p><p>  值的時(shí)候數(shù)碼管可以顯示,實(shí)驗(yàn)證明占空比在0.1時(shí)仍可以使數(shù)碼管清晰顯示。利用這個(gè)概念可以</p><p>  比較直觀地理解顯示延時(shí)的調(diào)節(jié)。</p><p>  ??CPU的分時(shí)復(fù)用</p>

16、;<p>  單片機(jī)只有一個(gè)CPU,因此在一個(gè)時(shí)間內(nèi)只能執(zhí)行一條語(yǔ)句,要使單片機(jī)同時(shí)控制多個(gè)外部元</p><p>  件(比如揚(yáng)聲器和數(shù)碼管)就必須對(duì)單片機(jī)的CPU進(jìn)行分時(shí)復(fù)用,讓單片機(jī)在一小段時(shí)間內(nèi)連續(xù)交</p><p>  替執(zhí)行控制多個(gè)器件的語(yǔ)句,從表面上看,單片機(jī)便用一個(gè)CPU控制了多個(gè)元件。本次課程設(shè)計(jì)中</p><p>  對(duì)整點(diǎn)報(bào)時(shí)和鬧

17、鈴功能的實(shí)現(xiàn)便用到了這個(gè)概念。</p><p>  ??單片機(jī)位尋址區(qū)的使用</p><p>  單片機(jī)內(nèi)部數(shù)據(jù)存儲(chǔ)器由20H到2FH共有16個(gè)字節(jié)的位尋址區(qū)可以被作為程序執(zhí)行過(guò)程中的狀</p><p>  態(tài)參數(shù),許多程序模塊至于兩個(gè)狀態(tài)(比如閃爍與正常顯示,報(bào)時(shí)與不報(bào)時(shí)等)用位尋址區(qū)中的</p><p>  某一位來(lái)記錄程序執(zhí)行狀態(tài),在需

18、要對(duì)狀態(tài)進(jìn)行判斷的時(shí)候十分方便并且節(jié)約空間,一個(gè)字節(jié)便</p><p>  可以判斷八個(gè)狀態(tài),而非位尋址區(qū)的地址記錄程序狀態(tài)時(shí)可能需要先進(jìn)行變換,增加了執(zhí)行成本</p><p><b>  且容易出錯(cuò)。</b></p><p>  ??檢測(cè)開(kāi)關(guān)時(shí)需要注意的問(wèn)題</p><p>  對(duì)于用各種開(kāi)關(guān)控制程序執(zhí)行狀態(tài)的程序設(shè)計(jì)

19、中,需要注意實(shí)時(shí)地進(jìn)行開(kāi)關(guān)的檢測(cè),以確保</p><p>  一旦有開(kāi)關(guān)動(dòng)作,程序狀態(tài)立即隨之改變。此外,在用多個(gè)開(kāi)關(guān)控制不同執(zhí)行狀態(tài)時(shí),應(yīng)注意設(shè)</p><p>  置開(kāi)關(guān)檢測(cè)的優(yōu)先級(jí)以防止多個(gè)開(kāi)關(guān)同時(shí)按下時(shí)出現(xiàn)錯(cuò)誤。</p><p>  ??系統(tǒng)資源分配與使用</p><p>  單片機(jī)有許多資源是有限的不能濫用,比如定時(shí)計(jì)數(shù)器T,外部中

20、斷等,在設(shè)計(jì)一個(gè)多模塊程</p><p>  序時(shí),要注意先做一個(gè)整體規(guī)劃,把稀缺資源用在最需要用的地方。此外在有多個(gè)模塊時(shí),要注</p><p>  意模塊間的數(shù)據(jù)傳遞,比如累加器A和進(jìn)位標(biāo)志C,在使用時(shí)要注意不能讓前一個(gè)模塊的數(shù)據(jù)對(duì)下一</p><p>  個(gè)模塊產(chǎn)生不希望有的影響。在模塊間的數(shù)據(jù)傳遞比較多時(shí)最好用固定的內(nèi)部數(shù)據(jù)存儲(chǔ)器,以避</p>

21、<p><b>  免沖突發(fā)生錯(cuò)誤。</b></p><p><b>  三、設(shè)計(jì)要求及說(shuō)明</b></p><p><b>  ㈠設(shè)計(jì)要求:</b></p><p>  基于單片機(jī)電路,借鑒生活中常見(jiàn)的電子鐘的功能,結(jié)合課本的要求使用匯編語(yǔ)</p><p>  言

22、設(shè)計(jì)一個(gè)簡(jiǎn)單的電子鐘系統(tǒng)。要求使用簡(jiǎn)便,功能實(shí)用,錯(cuò)誤少,有一定創(chuàng)新性。</p><p>  ㈡電子數(shù)字鐘實(shí)現(xiàn)的主要功能:</p><p> ?、?實(shí)現(xiàn)正常走時(shí)(秒→分→時(shí)→日→月→年進(jìn)位)</p><p>  ② 能夠預(yù)置時(shí)間和日期</p><p> ?、?能夠自動(dòng)區(qū)分平閏年和大小月</p><p> ?、?具有鬧鈴

23、及設(shè)定鬧鈴時(shí)間功能</p><p> ?、?具有整點(diǎn)報(bào)時(shí)功能</p><p>  ⑥ 具有生日提醒功能,能夠預(yù)置生日時(shí)間</p><p> ?、?在任何一種預(yù)置狀態(tài)下,預(yù)置項(xiàng)目會(huì)閃爍顯示</p><p><b>  ㈢其它設(shè)計(jì)說(shuō)明</b></p><p> ?、?優(yōu)先級(jí):預(yù)置>鬧鈴>報(bào)

24、時(shí)>生日提醒>正常顯示,即預(yù)置狀態(tài)下鬧鈴、報(bào)時(shí)功</p><p>  能及生日提醒功能都無(wú)效</p><p>  ② 生日時(shí)間到五個(gè)數(shù)碼管顯示“HAPPY”</p><p> ?、?生日顯示狀態(tài)下,按下中斷INT0恢復(fù)正常顯示且此后只有在下更改生日日期</p><p>  或第二年生日顯示才有效。</p><p

25、> ?、?正常顯示狀態(tài)下按下中斷INT0進(jìn)入預(yù)置狀態(tài),再按一次恢復(fù)。</p><p>  ⑤ 用數(shù)碼管(K0,K1)控制顯示狀態(tài):00:時(shí)間,01:鬧鈴時(shí)間,10:日期,11:</p><p>  生日時(shí)間且顯示樣板如下圖所示:</p><p> ?、?預(yù)置由撥碼開(kāi)關(guān)K2/K3/K4分別控制數(shù)碼管12/34/56顯示值,預(yù)置優(yōu)先級(jí):</p>&l

26、t;p>  LED34>LED12>LED56(相應(yīng)數(shù)碼管顯示的項(xiàng)目,顯示狀態(tài)下才能預(yù)置)</p><p> ?、?整點(diǎn)報(bào)時(shí)聲音為59分51、53、55、57秒的后半秒報(bào)四聲低音, 59秒的后半秒</p><p><b>  報(bào)一聲高音</b></p><p> ?、?鬧鈴每次響一分鐘</p><p>

27、 ?、?不論是預(yù)置狀態(tài)還是正常走時(shí)狀態(tài)均能夠自動(dòng)區(qū)分平閏年和大小月</p><p>  ⑩ 鬧鈴使能由撥碼開(kāi)關(guān)K5控制并實(shí)時(shí)顯示</p><p><b>  四、整體設(shè)計(jì)方案</b></p><p><b> ?、逵布娐吩O(shè)計(jì)</b></p><p>  系統(tǒng)硬件電路根據(jù)系統(tǒng)功能可知,需要六個(gè)數(shù)碼管

28、,一個(gè)外部中斷</p><p>  INT0,一個(gè)揚(yáng)聲器,由此結(jié)合單片機(jī)課程學(xué)習(xí)中對(duì)實(shí)驗(yàn)面板的了解,做</p><p><b>  出如下電路:</b></p><p>  如圖,晶振頻率12MHz,撥碼開(kāi)關(guān)數(shù)值由P0口讀入;P2口的輸出作為</p><p>  控制數(shù)碼管的段控信號(hào),經(jīng)74LS573即8位數(shù)據(jù)鎖存器接到

29、數(shù)碼管中。數(shù)</p><p>  碼管采用共陰接法(圖中未標(biāo)示);P1.0-P1.5作為數(shù)碼管的位控信號(hào)輸</p><p>  出端;開(kāi)關(guān)W2經(jīng)一個(gè)基本RS鎖存器接入INT0,每按一次開(kāi)關(guān)INTO取反一</p><p>  次,按兩次輸入一個(gè)下降沿;揚(yáng)聲器由P1.6口控制。</p><p> ?、嫦到y(tǒng)軟件總流程設(shè)計(jì)</p>&l

30、t;p>  根據(jù)系統(tǒng)要求,設(shè)計(jì)出系統(tǒng)軟件總流程圖如下以T0作為正常走時(shí)的</p><p>  計(jì)時(shí)器,T1作為預(yù)置狀態(tài)下預(yù)置項(xiàng)目值自動(dòng)跳升的控制計(jì)時(shí)器,INT0</p><p>  作為設(shè)定預(yù)置及清楚生日信號(hào)的控制按鈕</p><p>  設(shè)計(jì)使每一輪顯示(即六個(gè)數(shù)碼管都顯示一次)便檢測(cè)一次開(kāi)關(guān)使上圖的“檢測(cè)開(kāi)關(guān)值→判斷并顯示→檢測(cè)開(kāi)關(guān)值” 的循環(huán)時(shí)間大約為&

31、lt;/p><p>  10ms,即每隔10ms檢測(cè)一次開(kāi)關(guān)值,每個(gè)數(shù)碼管接收到的電壓信號(hào)占空</p><p>  比大約為1/7,確保數(shù)碼管正常顯示。三個(gè)中斷源中斷程序執(zhí)行時(shí)間每</p><p>  次均為幾十毫秒,基本不影響主程序的顯示及鬧鈴輸出。中斷優(yōu)先級(jí)</p><p>  T0>INT0>T1,首先確保走時(shí)盡可能的準(zhǔn)確,其次

32、由于T1的開(kāi)啟和關(guān)閉是</p><p>  由INT0進(jìn)行控制的,故INT0優(yōu)先級(jí)較高。此外有優(yōu)先級(jí)“預(yù)置顯示>鬧</p><p>  鈴>整點(diǎn)報(bào)時(shí)>生日顯示”,由于預(yù)置顯示是人為控制的故優(yōu)先級(jí)最高,</p><p>  考慮到日常生活中假如鬧鈴或整點(diǎn)報(bào)時(shí)被生日顯示覆蓋可能使影響到</p><p>  人們的日常生活故設(shè)定生

33、日優(yōu)先級(jí)最低,且鬧鈴最多影響生日信號(hào)一分</p><p>  鐘。鬧鈴和整點(diǎn)報(bào)時(shí)不影響正常的時(shí)間等的顯示。</p><p><b> ?、缒K劃分及分析</b></p><p>  根據(jù)系統(tǒng)功能將模塊劃分如下</p><p>  ? ONE:初始化程序模塊</p><p>  進(jìn)行資源分配(EQU

34、,BIT偽指令),設(shè)定初值,各中斷初始化</p><p>  ? TWO:開(kāi)關(guān)檢測(cè)模塊</p><p>  檢測(cè)開(kāi)關(guān)號(hào),將要顯示值送入顯示緩存</p><p>  ? THREE:顯示主程序</p><p>  顯示顯示緩存中值,并進(jìn)行生日,鬧鈴,報(bào)時(shí)判斷</p><p>  ? SEVEN:顯示生日祝福HAPPY程序

35、</p><p>  經(jīng)顯示主程序判斷生日時(shí)間到要執(zhí)行的顯示HAPPY程序(其實(shí)可以認(rèn)為是顯示主程序的一部分)</p><p>  ? EIGHT:鬧鈴及整點(diǎn)報(bào)時(shí)判斷程序</p><p>  判斷是否鬧鈴或報(bào)時(shí),如果是則CPLP1.6且忽略生日信號(hào),反之則繼續(xù)執(zhí)行后續(xù)語(yǔ)句上圖的“檢測(cè)開(kāi)關(guān)值→判斷并顯示→檢測(cè)開(kāi)關(guān)值” 的循環(huán)時(shí)間大約為</p><p

36、>  10ms,即每隔10ms檢測(cè)一次開(kāi)關(guān)值,每個(gè)數(shù)碼管接收到的電壓信號(hào)占空</p><p>  比大約為1/7,確保數(shù)碼管正常顯示。三個(gè)中斷源中斷程序執(zhí)行時(shí)間每</p><p>  次均為幾十毫秒,基本不影響主程序的顯示及鬧鈴輸出。中斷優(yōu)先級(jí)</p><p>  T0>INT0>T1,首先確保走時(shí)盡可能的準(zhǔn)確,其次由于T1的開(kāi)啟和關(guān)閉是</

37、p><p>  由INT0進(jìn)行控制的,故INT0優(yōu)先級(jí)較高。此外有優(yōu)先級(jí)“預(yù)置顯示>鬧</p><p>  鈴>整點(diǎn)報(bào)時(shí)>生日顯示”,由于預(yù)置顯示是人為控制的故優(yōu)先級(jí)最高,</p><p>  考慮到日常生活中假如鬧鈴或整點(diǎn)報(bào)時(shí)被生日顯示覆蓋可能使影響到</p><p>  人們的日常生活故設(shè)定生日優(yōu)先級(jí)最低,且鬧鈴最多影響生日

38、信號(hào)一分</p><p>  鐘。鬧鈴和整點(diǎn)報(bào)時(shí)不影響正常的時(shí)間等的顯示。</p><p><b> ?、缒K劃分及分析</b></p><p>  根據(jù)系統(tǒng)功能將模塊劃分如下</p><p>  ? ONE:初始化程序模塊</p><p>  進(jìn)行資源分配(EQU,BIT偽指令),設(shè)定初值,各中

39、斷初始化</p><p>  ? TWO:開(kāi)關(guān)檢測(cè)模塊</p><p>  檢測(cè)開(kāi)關(guān)號(hào),將要顯示值送入顯示緩存</p><p>  ? THREE:顯示主程序</p><p>  顯示顯示緩存中值,并進(jìn)行生日,鬧鈴,報(bào)時(shí)判斷</p><p>  ? SEVEN:顯示生日祝福HAPPY程序</p><

40、p>  經(jīng)顯示主程序判斷生日時(shí)間到要執(zhí)行的顯示HAPPY程序(其實(shí)可以認(rèn)為是顯示主程序的一部分)</p><p>  ? EIGHT:鬧鈴及整點(diǎn)報(bào)時(shí)判斷程序</p><p>  判斷是否鬧鈴或報(bào)時(shí),如果是則CPLP1.6且忽略生日信號(hào),反之則繼續(xù)執(zhí)行后續(xù)語(yǔ)句</p><p><b>  五、單模塊流程設(shè)計(jì)</b></p>&

41、lt;p>  在完成了系統(tǒng)總流程設(shè)計(jì)后,便進(jìn)入到了系統(tǒng)設(shè)計(jì)中工作量最大的單</p><p>  模塊流程設(shè)計(jì)。由于系統(tǒng)模塊劃分雖然是系統(tǒng)設(shè)計(jì)的基礎(chǔ),但比較簡(jiǎn)單而</p><p>  且模塊劃分有多種方法,因此單模塊的設(shè)計(jì)可以認(rèn)為是本程序中最關(guān)鍵的</p><p>  部分。單模塊設(shè)計(jì)的好壞與否決定了系統(tǒng)功能能否被穩(wěn)定地實(shí)現(xiàn)以及下一</p><

42、;p>  階段調(diào)試程序的難度。</p><p>  鑒于單模塊設(shè)計(jì)的重要性,我在設(shè)計(jì)中并不急于對(duì)模塊進(jìn)行編碼,而</p><p>  是反復(fù)論證模塊的可行性和流程圖,為下一階段的工作做好準(zhǔn)備,同時(shí)也</p><p>  能夠盡早發(fā)現(xiàn)系統(tǒng)模塊劃分的錯(cuò)誤,加以解決。</p><p> ?、甯髂K設(shè)計(jì)概述及模塊流程圖</p>&

43、lt;p>  ①初始化模塊(ONE)</p><p>  初始化模塊包含了各中斷的跳轉(zhuǎn)語(yǔ)句、存儲(chǔ)資源的分配、各存儲(chǔ)器和寄存器的賦值以及中</p><p>  斷及計(jì)時(shí)器的狀態(tài)設(shè)置。</p><p>  源程序中共使用了17字節(jié)的內(nèi)部數(shù)據(jù)存儲(chǔ)地址,其中包含3字節(jié)位尋址地址以便于進(jìn)行位</p><p><b>  判斷。</

44、b></p><p>  三字節(jié)的位尋址地址分配如下:</p><p>  22H—秒的存儲(chǔ)地址,方便對(duì)整點(diǎn)報(bào)時(shí)條件進(jìn)行判斷</p><p>  23H—月的存儲(chǔ)地址,方便對(duì)大小月平閏年進(jìn)行判斷</p><p>  另外一個(gè)位尋址字節(jié)00H地址拆開(kāi)用做程序狀態(tài)標(biāo)志位</p><p>  00H(bit,BS)—生

45、日標(biāo)志位,到生日那天為 1 使程序轉(zhuǎn)入生日顯示段</p><p>  01H(bit,SS)—預(yù)置標(biāo)志,以INT0控制其值,控制預(yù)置閃爍的實(shí)現(xiàn)</p><p>  02H(bit,GS)—閃爍標(biāo)志,在預(yù)置標(biāo)志有效時(shí)控制閃爍項(xiàng)目的亮和滅兩狀態(tài)</p><p>  03H(bit,F(xiàn)C)—頻率控制,在整點(diǎn)報(bào)時(shí)時(shí)控制產(chǎn)生低音還是高音</p><p&

46、gt;  04H(bit,NB)—忽略生日標(biāo)志,控制預(yù)置及報(bào)時(shí)的優(yōu)先級(jí)高于生日顯示</p><p>  05H(bit)—控制生日信號(hào)的有效與否,其使用目的參見(jiàn)調(diào)試過(guò)程</p><p>  源程序中使用了兩個(gè)寄存器R1、R0,R1用于控制閃爍的間隔時(shí)間, R0用</p><p><b>  于顯示延時(shí)。</b></p><p

47、>  在初始化模塊中設(shè)定了中斷的優(yōu)先級(jí)、定時(shí)計(jì)數(shù)器的工作模式、并打開(kāi)</p><p>  了定時(shí)計(jì)數(shù)器TO開(kāi)始計(jì)時(shí)</p><p>  其他資源分配項(xiàng)目參見(jiàn)源程序集合及注釋。初始化模塊指令很大一部分</p><p>  都是偽指令,方便了后面程序的編寫(xiě)</p><p> ?、陂_(kāi)關(guān)檢測(cè)模塊(TWO)</p><p>

48、;<b>  開(kāi)關(guān)檢測(cè)模</b></p><p><b>  塊主要執(zhí)行兩個(gè)</b></p><p><b>  任務(wù):</b></p><p><b> ?、弊x取鬧鈴</b></p><p><b>  使能控制撥碼開(kāi)</b><

49、;/p><p><b>  關(guān)K5的值并賦予</b></p><p><b>  鬧鈴使能相應(yīng)值;</b></p><p><b>  ⒉讀取顯示</b></p><p>  選擇開(kāi)關(guān)(K0,K1)</p><p><b>  的值并將要顯示<

50、;/b></p><p><b>  的項(xiàng)目值送入顯</b></p><p><b>  示緩存LED12、</b></p><p>  LED34、LED56.當(dāng)</p><p>  K5為1時(shí)將A1H送</p><p><b>  入RE,反之送入<

51、/b></p><p>  A0H,其中A為“—”的字型碼查表偏移量。當(dāng)顯示生日日期時(shí),將生日Birthday的縮寫(xiě)“bd”的</p><p>  字型碼送入顯示緩存LED56。</p><p>  開(kāi)關(guān)檢測(cè)模塊的執(zhí)行時(shí)間大約在40uS左右。</p><p> ?、埏@示主程序(THREE)</p><p>  顯

52、示主程序是程序中最復(fù)雜的模塊,實(shí)現(xiàn)的功能也最多,占用了程序運(yùn)行過(guò)程當(dāng)中90%以</p><p>  上的執(zhí)行時(shí)間。流程圖中由判斷SS(預(yù)置信號(hào))開(kāi)始分成兩個(gè)分支,當(dāng)SS=1,即預(yù)置狀態(tài)下程序</p><p><b>  進(jìn)入預(yù)置閃爍部分。</b></p><p>  預(yù)置閃爍的優(yōu)先級(jí)是:LED34>LED12>LED56即同預(yù)置優(yōu)先

53、級(jí)相同(參見(jiàn)調(diào)試部分的詳細(xì)說(shuō)</p><p>  明)閃爍首先判斷是否對(duì)LED34進(jìn)行判斷閃爍,如果是則另外兩個(gè)顯示值直接顯示,否則判斷</p><p>  是否對(duì)LED12進(jìn)行閃爍,如果是則直接顯示LED56的值,只有當(dāng)前兩個(gè)顯示值都不閃爍的時(shí)候,</p><p>  才判斷是否對(duì)LED56進(jìn)行閃爍,這樣就確保了每次只有一個(gè)顯示值閃爍。預(yù)置通過(guò)GS標(biāo)志位判<

54、/p><p>  斷預(yù)置的亮/滅,由R1控制每50輪顯示對(duì)GS取反一次。</p><p>  當(dāng)SS=0時(shí)進(jìn)入判斷鬧鈴/報(bào)時(shí)及正常顯示模塊,模塊EIGHT(參見(jiàn)其說(shuō)明)對(duì)鬧鈴及報(bào)時(shí)條件</p><p>  進(jìn)行判斷,符合條件則對(duì)P1.6取反一次并使NB(忽略生日)有效,此時(shí)不進(jìn)行對(duì)BS(生日標(biāo)志)</p><p>  的判斷,即使響鈴優(yōu)先級(jí)高于生

55、日顯示(其實(shí)也可以對(duì)程序進(jìn)行修改使響鈴和生日顯示不發(fā)生</p><p>  沖突,修改方法參見(jiàn)程序優(yōu)化)。當(dāng)不響鈴并且生日標(biāo)志BS有效時(shí)顯示HAPPY</p><p>  ④顯示HAPPY子程序(SEVEN)</p><p>  本程序?qū)嶋H上是顯示主程序的分支,在模塊的劃分過(guò)程中為了簡(jiǎn)化顯示主程序的編寫(xiě)而將</p><p>  其單列開(kāi)來(lái)。本

56、程序由生日標(biāo)志BS控制,當(dāng)?shù)竭_(dá)生日時(shí)間時(shí),T0中斷程序會(huì)將BS置1使之有效</p><p>  在顯示主程序中通過(guò)判斷BS的置來(lái)控制是否執(zhí)行本模塊。</p><p>  說(shuō)明:* 只有當(dāng)在預(yù)置日期時(shí),才需要對(duì)LED56進(jìn)行預(yù)置閃爍判斷。并且當(dāng)LED34(即月份的顯示緩存)</p><p>  已經(jīng)判斷需要閃爍后,LED56便不需要閃爍而直接顯示(閃爍優(yōu)先級(jí)LED56

57、最低,每次只對(duì)一個(gè)項(xiàng)</p><p>  目進(jìn)行預(yù)置,只有一個(gè)項(xiàng)目需要閃爍)。這個(gè)設(shè)置使同時(shí)撥下兩個(gè)以上預(yù)置開(kāi)關(guān)時(shí)不會(huì)出錯(cuò),參</p><p><b>  見(jiàn)調(diào)試部分說(shuō)明</b></p><p>  ** 鬧鈴及報(bào)時(shí)判斷程序EIGHT執(zhí)行過(guò)程參見(jiàn)其說(shuō)明</p><p> ?、蒴[鈴及整點(diǎn)報(bào)時(shí)判斷程序(EIGHT)</

58、p><p>  在顯示主程序中每隔一段時(shí)間調(diào)用一次本程序來(lái)實(shí)現(xiàn)鬧鈴及報(bào)時(shí)功能。符合鬧鈴條件時(shí),每調(diào)</p><p>  用一次本程序?qū)1.6取反一次,調(diào)節(jié)調(diào)用的時(shí)間間隔便可以調(diào)節(jié)報(bào)時(shí)的輸出頻率。在主程序中</p><p>  設(shè)置每完成對(duì)一個(gè)數(shù)碼管的顯示變調(diào)用一次本程序,顯示一個(gè)數(shù)碼管的時(shí)間大約為1ms,因此</p><p>  響鈴頻率高音約

59、為500Hz,低音約為250Hz。程序判斷鬧鈴使能RE后分成兩個(gè)分支,當(dāng)RE=A1時(shí)判</p><p>  斷鬧鈴條件是否滿足,滿足則對(duì)P1.6取反一次,否則跳轉(zhuǎn)判斷整點(diǎn)報(bào)時(shí)條件是否滿足。當(dāng)RE=0</p><p>  時(shí),直接怕暖整點(diǎn)報(bào)時(shí)條件是否滿足。判斷整點(diǎn)報(bào)時(shí)條件時(shí)當(dāng)當(dāng)前時(shí)間滿足:</p><p> ?。∕IN=59)∩(SECOND=59) ∩(COUNT&

60、gt;10)</p><p><b>  時(shí)報(bào)高音;當(dāng)滿足:</b></p><p>  (MIN=59)∩(SECOND=51/53/55/57) ∩(COUNT>10)</p><p>  時(shí)報(bào)低音。利用位尋址區(qū)來(lái)存儲(chǔ)SECOND的方法,只要(SECOND>50)∩(SECOND.0=1)時(shí)便滿足報(bào)</p><

61、;p>  低音的秒條件。利用TO中斷次數(shù)存儲(chǔ)器COUNT的大小可以判斷是否到了后半秒(T0每50ms中斷</p><p>  一次,中斷20次到達(dá)一秒)。通過(guò)增加一個(gè)標(biāo)志位FC來(lái)時(shí)下對(duì)高低音的區(qū)分,高音不受FC的影</p><p>  響,低音只有當(dāng)FC=0的時(shí)候才對(duì)P1.6取反一次。并且每調(diào)用一次本程序便對(duì)FC取反一次,便達(dá)</p><p>  到每調(diào)用兩次

62、取反一次P1.6的效果。本程序的執(zhí)行時(shí)間小于40us,因此多次調(diào)用不過(guò)分影響執(zhí)</p><p><b>  行時(shí)間</b></p><p> ?、拗袛啵═O)計(jì)時(shí)程序(NINE)</p><p>  中斷計(jì)時(shí)程序的流程比較簡(jiǎn)單。程序除實(shí)現(xiàn)正常走時(shí)外還需要判斷是否到達(dá)生日時(shí)間置生日標(biāo)志位有效。程序的輸出均為BCD碼,方便了顯示程序?qū)Ω叩臀坏姆蛛x并

63、查表顯示。程</p><p>  序比較復(fù)雜的地方在于對(duì)平閏年及大小月的判斷。把月MONTH存儲(chǔ)在位尋址區(qū),當(dāng)</p><p>  MONTH=02H時(shí)判斷是否是平閏年,先將年由BCD碼轉(zhuǎn)化為二進(jìn)制碼,此時(shí)當(dāng)年的后兩位為</p><p>  全零的時(shí)候?yàn)殚c年(由于只顯示年的個(gè)位和十位,由2000年開(kāi)始,00年、04年…為閏年,</p><p>

64、;  其共同特點(diǎn)就是二進(jìn)制后兩位為零),否則為平年。當(dāng)MONTH≠2時(shí)判斷是否為</p><p>  大小月,MOUTH<7時(shí)單月(即MONTH.0=1的月)為大月,否則為小月;當(dāng)MONTH>7</p><p><b>  時(shí)雙月為大月。</b></p><p> ?、咧袛啵═1)預(yù)置程序(TEN)</p><p

65、>  T1通過(guò)中斷INT0控制開(kāi)啟或關(guān)閉,每次定時(shí)50毫秒,存儲(chǔ)地址COUNTS計(jì)</p><p>  數(shù)15次執(zhí)行一次中斷程序。由開(kāi)關(guān)(K0,K1)控制預(yù)置項(xiàng)目,通過(guò)開(kāi)關(guān)K2/K3/K4</p><p>  來(lái)分別控制LED12/LED34/LED56的預(yù)置,當(dāng)兩個(gè)開(kāi)關(guān)都是有效時(shí),具有優(yōu)先級(jí)</p><p>  的區(qū)分,確保無(wú)論按幾個(gè)開(kāi)關(guān)都最多</p&

66、gt;<p>  只有一個(gè)項(xiàng)目被預(yù)置。判斷預(yù)置的優(yōu)</p><p><b>  先級(jí)順序是:</b></p><p>  LED34>LED12>LED56</p><p><b>  這樣安排</b></p><p><b>  的原因是由于</b>

67、</p><p><b>  根據(jù)生活經(jīng)驗(yàn)</b></p><p><b>  LED34所對(duì)應(yīng)的</b></p><p><b>  4個(gè)項(xiàng)目(小時(shí)、</b></p><p><b>  鬧鈴分、月、生</b></p><p>&

68、lt;b>  日日)被預(yù)置的</b></p><p><b>  可能性最大。</b></p><p><b>  在預(yù)置日</b></p><p><b>  期和生日是要</b></p><p><b>  注意對(duì)大小月</b><

69、;/p><p>  及平閏年進(jìn)行判斷(判斷方法與中斷計(jì)時(shí)程序中說(shuō)明的方法類(lèi)似,但不需要</p><p>  考慮進(jìn)位)且月和日在溢出后應(yīng)置一而不是歸零。</p><p> ?、嘀袛啵↖NT0)設(shè)定程序(ELEVEN)</p><p>  中斷INT0設(shè)置是否進(jìn)行預(yù)置以及對(duì)生日標(biāo)志的清除。且有如下設(shè)置順序:</p><p>

70、  清除預(yù)置信號(hào)并關(guān)T1>清除生日標(biāo)志>設(shè)定預(yù)置信號(hào)并開(kāi)T1。每按一次中斷都</p><p><b>  只執(zhí)行其中一個(gè)項(xiàng)目</b></p><p> ?、嵫訒r(shí)程序(TWELVE)</p><p>  延時(shí)時(shí)間約2ms即顯示兩個(gè)數(shù)碼管的時(shí)間,用于預(yù)置閃爍調(diào)節(jié)數(shù)碼關(guān)的電</p><p>  壓占空比一致而不出現(xiàn)

71、數(shù)碼管隨著閃爍亮度改變的現(xiàn)象。</p><p>  ㈡模塊源程序集合及注釋</p><p>  ;*************************************************************ONE初始化</p><p><b>  ORG 0</b></p><p><b>  S

72、JMP ONE</b></p><p><b>  ORG 0003H</b></p><p>  LJMP ELEVEN</p><p><b>  ORG 000BH</b></p><p><b>  LJMP NINE</b></p><

73、p><b>  ORG 001BH</b></p><p><b>  LJMP TEN</b></p><p>  ONE:LED12 EQU 30H ;數(shù)碼管12顯示緩存</p><p>  LED34 EQU 31H ;數(shù)碼管34顯示緩存</p><p>  LED56 EQU 32H

74、;數(shù)碼管56顯示緩存</p><p>  COUNT EQU 33H ;定時(shí)器T0(用來(lái)走時(shí))計(jì)數(shù)值存儲(chǔ)器(計(jì)數(shù)中斷20次到1秒)</p><p>  COUNTS EQU 34H ;定時(shí)器T1(用來(lái)預(yù)置)計(jì)數(shù)值存儲(chǔ)器(計(jì)數(shù)中斷15次到預(yù)置值加一)</p><p>  HOUR EQU 40H ;以下為時(shí)間,日期,鬧鈴時(shí)間,生日的存儲(chǔ)地址</p>&l

75、t;p>  MIN EQU 41H</p><p>  SECOND EQU 22H</p><p>  YEAR EQU 50H</p><p>  MONTH EQU 23H</p><p>  DAY EQU 52H</p><p>  RH EQU 60H ;鬧鈴小時(shí)</p><p&g

76、t;  RM EQU 61H ;鬧鈴分</p><p>  RE EQU 62H ;鬧鈴使能</p><p>  BM EQU 71H ;生日-月份</p><p>  BD EQU 72H ;生日-天</p><p>  MOV LED12,#0</p><p>  MOV LED34,#0</p>&

77、lt;p>  MOV LED56,#0</p><p>  MOV COUNT,#0</p><p>  MOV COUNTS,#0</p><p>  MOV HOUR,#0</p><p>  MOV MIN,#0</p><p>  MOV SECOND,#0</p><p>  M

78、OV YEAR,#0</p><p>  MOV MONTH,#1</p><p>  MOV DAY,#1</p><p><b>  MOV RH,#0</b></p><p><b>  MOV RM,#0</b></p><p><b>  MOV RE,#

79、0</b></p><p><b>  MOV BM,#6</b></p><p><b>  MOV BD,#1</b></p><p>  BS BIT 00H ;birthday symbol生日標(biāo)志(到生日那天就為1)</p><p>  SS BIT 01H ;set symb

80、ol預(yù)置信號(hào)(按下中斷預(yù)置為1,便開(kāi)始閃爍和預(yù)置)</p><p>  GS BIT 02H ;glisten symbol閃爍標(biāo)志</p><p>  FC BIT 03H ;frequency control頻率控制</p><p>  NB BIT 04H ;neglect bitrhday symbol 忽略生日標(biāo)志</p><p>

81、<b>  CLR BS</b></p><p><b>  CLR SS</b></p><p><b>  CLR GS</b></p><p><b>  CLR FC</b></p><p><b>  CLR NB</b>&

82、lt;/p><p>  SETB 05H ;生日顯示有效標(biāo)志位</p><p>  MOV IP,#02H;中斷優(yōu)先級(jí):T0>INT0>T1</p><p>  MOV TMOD,#11H</p><p>  MOV IE,#8BH</p><p>  SETB IT0MOV TH0,#3CH ;50ms<

83、;/p><p>  MOV TL0,#0B0H</p><p><b>  SETB TR0</b></p><p>  MOV R1,#50 ;顯示延時(shí)用</p><p>  MOV R0,#0 ;顯示延時(shí)用</p><p>  ;**********************************

84、**************************** TWO檢測(cè)開(kāi)關(guān)號(hào)</p><p>  TWO:MOV P0,#0FFH</p><p>  JB P0.5,TWO1</p><p>  MOV RE,#0A0H ;0A0表示鬧鈴無(wú)效,送0A0是為了方便將使能查表顯示,表中第A項(xiàng)為"-"</p><p><b

85、>  SJMP TWO2</b></p><p>  TWO1:MOV RE,#0A1H</p><p>  TWO2:JB P0.0,TWO4</p><p>  JB P0.1,TWO3</p><p>  MOV LED12,HOUR</p><p>  MOV LED34,MIN</p&

86、gt;<p>  MOV LED56,SECOND</p><p>  SJMP THREE</p><p>  TWO3:MOV LED12,YEAR</p><p>  MOV LED34,MONTH</p><p>  MOV LED56,DAY</p><p>  SJMP THREE</p

87、><p>  TWO4:JB P0.1,TWO5</p><p>  MOV LED12,RH</p><p>  MOV LED34,RM</p><p>  MOV LED56,RE</p><p>  SJMP THREE</p><p>  TWO5:MOV LED12,BM</p&g

88、t;<p>  MOV LED34,BD</p><p>  MOV LED56,#0BCH</p><p>  SJMP THREE</p><p>  ;************************************** THREE顯示主程序(同時(shí)包含了鬧鈴,預(yù)置閃爍,鬧鈴功能)</p><p>  THREE:M

89、OV P1,#0</p><p>  MOV P0,#0FFH</p><p>  MOV DPTR,#TAB3</p><p>  JNB SS,THREEB ;判斷預(yù)置信號(hào)是否有效,預(yù)置有效則轉(zhuǎn)入判斷閃爍顯示模塊,否則轉(zhuǎn)入正常顯示模</p><p><b>  塊</b></p><p>  

90、SJMP THREEA</p><p>  THREEB:LJMP THREE11 ;THREE11是正常顯示并判斷整點(diǎn)報(bào)時(shí)及鬧鈴模塊</p><p>  THREEA:JNB P0.3,THREE1 ;開(kāi)始是判斷閃爍顯示,這句判斷是否預(yù)置分/月/生日的日/鬧鈴分</p><p>  JNB GS,THREE1 ;是否閃爍?</p><p>

91、  LCALL TWELVE ;閃爍則調(diào)用延時(shí)不顯示LED34</p><p>  SJMP THREE4</p><p>  THREE1:MOV A,LED34</p><p>  ANL A,#0FH</p><p>  MOVC A,@A+DPTR</p><p><b>  MOV P2,A<

92、/b></p><p>  THREE2:SETB P1.3</p><p><b>  NOP</b></p><p>  DJNZ R0,THREE2</p><p><b>  CLR P1.3</b></p><p>  MOV A,LED34</p>

93、;<p><b>  SWAP A</b></p><p>  ANL A,#0FH</p><p>  MOVC A,@A+DPTR</p><p><b>  MOV P2,A</b></p><p>  THREE3:SETB P1.2</p><p> 

94、 NOPDJNZ R0,THREE3</p><p><b>  CLR P1.2</b></p><p>  JNB P0.2,THREE4 ;判斷是否預(yù)置小時(shí)/年/生日月/鬧鈴的小時(shí)</p><p>  JNB GS,THREE4 ;是否顯示小時(shí)/年/生日月/鬧鈴的小時(shí)</p><p>  LCALL TWELVE&

95、lt;/p><p>  SJMP THREE7</p><p>  THREE4:MOV A,LED12</p><p>  ANL A,#0FH</p><p>  MOVC A,@A+DPTR</p><p><b>  MOV P2,A</b></p><p>  THR

96、EE5:SETB P1.1</p><p><b>  NOP</b></p><p>  DJNZ R0,THREE5</p><p><b>  CLR P1.1</b></p><p>  MOV A,LED12</p><p><b>  SWAP A<

97、;/b></p><p>  ANL A,#0FH</p><p>  MOVC A,@A+DPTR</p><p><b>  MOV P2,A</b></p><p>  THREE6:SETB P1.0</p><p><b>  NOP</b></p>

98、;<p>  DJNZ R0,THREE6</p><p><b>  CLR P1.0</b></p><p>  JB P0.0,THREE7 ;數(shù)碼管56只有在顯示日期的天時(shí)才有預(yù)置閃爍功能,其余三項(xiàng)都不需要判斷閃爍</p><p>  JNB P0.1,THREE7</p><p>  JB P0.

99、3,THREE7</p><p>  JNB P0.4,THREE7</p><p>  JNB GS,THREE7</p><p>  LCALL TWELVE</p><p>  SJMP THREE10</p><p>  THREE7:MOV A,LED56</p><p>  ANL

100、A,#0FH</p><p>  MOVC A,@A+DPTR</p><p><b>  MOV P2,A</b></p><p>  THREE8:SETB P1.5</p><p><b>  NOP</b></p><p>  DJNZ R0,THREE8</p

101、><p><b>  CLR P1.5</b></p><p>  MOV A,LED56</p><p><b>  SWAP A</b></p><p>  ANL A,#0FH</p><p>  MOVC A,@A+DPTR</p><p><

102、;b>  MOV P2,A</b></p><p>  THREE9:SETB P1.4</p><p><b>  NOP</b></p><p>  DJNZ R0,THREE9</p><p><b>  CLR P1.4</b></p><p>  

103、THREE10:DJNZ R1,TWOA</p><p><b>  SJMP TWOB</b></p><p>  TWOA:LJMP TWO</p><p>  TWOB:MOV R1,#50 ;判斷閃爍一次是否完成</p><p>  CPL GS ;取反閃爍標(biāo)志,用于控制閃爍的亮和滅</p><

104、;p>  LJMP TWO ;一輪顯示完后再判斷開(kāi)關(guān)號(hào)</p><p>  ;**************************正常顯示</p><p>  THREE11:LCALL EIGHT ;判斷是否取反P1.6即輸出鬧鈴或整點(diǎn)報(bào)時(shí),以下每次顯示都要調(diào)用一次</p><p>  JB NB,THREE12 ;如果是在整點(diǎn)報(bào)時(shí)狀態(tài)就不顯示生日提醒,報(bào)時(shí)

105、過(guò)后顯示提醒</p><p>  JNB BS,THREE12</p><p>  SJMP SEVEN ;跳到生日提醒程序</p><p>  THREE12:CLR NB ;開(kāi)始正常顯示時(shí)間及判斷鬧鈴輸出MOV A,LED34</p><p>  ANL A,#0FH</p><p>  MOVC A,@A+DPT

106、R</p><p><b>  MOV P2,A</b></p><p>  THREE13:SETB P1.3</p><p><b>  NOP</b></p><p>  DJNZ R0,THREE13</p><p><b>  CLR P1.3</b

107、></p><p>  MOV A,LED34</p><p><b>  SWAP A</b></p><p>  ANL A,#0FH</p><p>  MOVC A,@A+DPTR</p><p><b>  MOV P2,A</b></p>&l

108、t;p>  THREE14:SETB P1.2</p><p><b>  NOP</b></p><p>  DJNZ R0,THREE14</p><p><b>  CLR P1.2</b></p><p>  LCALL EIGHT</p><p>  MOV

109、A,LED12</p><p>  ANL A,#0FH</p><p>  MOVC A,@A+DPTR</p><p><b>  MOV P2,A</b></p><p>  THREE15:SETB P1.1</p><p><b>  NOP</b></p&g

110、t;<p>  DJNZ R0,THREE15</p><p><b>  CLR P1.1</b></p><p>  MOV A,LED12</p><p><b>  SWAP A</b></p><p>  ANL A,#0FH</p><p>  MO

111、VC A,@A+DPTR</p><p><b>  MOV P2,A</b></p><p>  THREE16:SETB P1.0</p><p><b>  NOP</b></p><p>  DJNZ R0,THREE16</p><p><b>  CLR

112、 P1.0</b></p><p>  LCALL EIGHT</p><p>  MOV A,LED56</p><p>  ANL A,#0FH</p><p>  MOVC A,@A+DPTR</p><p><b>  MOV P2,A</b></p><p

113、>  THREE17:SETB P1.5</p><p><b>  NOP</b></p><p>  DJNZ R0,THREE17</p><p><b>  CLR P1.5</b></p><p>  MOV A,LED56</p><p><b>

114、  SWAP A</b></p><p>  ANL A,#0FH</p><p>  MOVC A,@A+DPTR</p><p><b>  MOV P2,A</b></p><p>  THREE18:SETB P1.4</p><p><b>  NOP</b&

115、gt;</p><p>  DJNZ R0,THREE18</p><p><b>  CLR P1.4</b></p><p>  LJMP TWO ;一輪顯示完后判開(kāi)關(guān)</p><p>  TAB3:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H 7FH,6FH,40H,7CH,5EH</

116、p><p>  ;0.1.2.3.4.5.6.7.8.9.-.b.d,的字形表"bd"在顯示生日時(shí)間時(shí)顯示在LED56</p><p>  ;**************************************************SEVEN生日時(shí)顯示生日祝福語(yǔ)”HAPPY”</p><p>  SEVEN:MOV P1,#01HMOV P

117、2,#76H</p><p>  DJNZ R0,SEVEN</p><p>  SEVEN1:MOV P1,#02H</p><p>  MOV P2,#77H</p><p>  DJNZ R0,SEVEN1</p><p>  SEVEN2:MOV P1,#04H</p><p>  MO

118、V P2,#73H</p><p>  DJNZ R0,SEVEN2</p><p>  SEVEN3:MOV P1,#08H</p><p>  MOV P2,#73H</p><p>  DJNZ R0,SEVEN3</p><p>  SEVEN4:MOV P1,#10H</p><p>

119、  MOV P2,#6EH</p><p>  DJNZ R0,SEVEN4</p><p>  LJMP TWO ;一輪顯示完后判開(kāi)關(guān)</p><p>  ;******************************************************************EIGHT判斷是否鬧鈴子程序</p><p>  E

120、IGHT:MOV A,RE</p><p>  CJNE A,#0A1H,EIGHT1</p><p><b>  MOV A,MIN</b></p><p>  CJNE A,RM,EIGHT1</p><p>  MOV A,HOUR</p><p>  CJNE A,RH,EIGHT1<

121、;/p><p>  SJMP EIGHT4 ;鬧鈴時(shí)間到則CPLP1.6一次并忽略生日標(biāo)志(即NB有效)</p><p>  EIGHT1:MOV A,MIN</p><p>  CJNE A,#59H,EIGHT7</p><p>  MOV A,SECOND</p><p>  CJNE A,#59H,EIGHT5 ;

122、是否等于59分59秒</p><p>  EIGHT2:MOV A,COUNT ;是否到達(dá)后半秒</p><p>  CJNE A,#10,EIGHT3</p><p>  EIGHT3:JC EIGHT7</p><p>  EIGHT4:CPL P1.6</p><p><b>  SETB NB<

123、/b></p><p>  SJMP EIGHT7</p><p>  EIGHT5:MOV A,SECOND</p><p>  CJNE A,#51H,EIGHT6 ;是否大于51秒</p><p>  EIGHT6:JC EIGHT7</p><p>  JNB 10H,EIGHT7 ;判斷是否報(bào)低音<

124、;/p><p>  JB FC,EIGHT7 ; 只有FC有效時(shí)才輸出</p><p>  SJMP EIGHT2</p><p>  EIGHT7:CPL FC ;用來(lái)控制報(bào)低音和高音,滿足報(bào)低音條件時(shí),調(diào)用兩次本程序?qū)1.6取反一</p><p>  次,高音時(shí)調(diào)用一次取反一次</p><p><b>  

125、RET</b></p><p>  ;******** NINE中斷(T0)計(jì)時(shí)程序(包含了秒-分-時(shí)-日-月-年間的進(jìn)位及判斷大小月,平閏年)</p><p>  NINE:MOV TH0,#3CH ;開(kāi)定時(shí)器</p><p>  MOV TL0,#0B0H</p><p><b>  SETB TR0</b&g

126、t;</p><p><b>  INC COUNT</b></p><p>  MOV A,COUNT</p><p>  CJNE A,#20,INEAA</p><p><b>  SJMP AAA</b></p><p>  INEAA:LJMP NINE1</

127、p><p>  AAA:MOV COUNT,#0 ; 計(jì)時(shí)</p><p>  MOV A,SECOND</p><p><b>  ADD A,#01</b></p><p>  DA A ;換成bcd碼以方便顯示</p><p>  MOV SECOND,A</p><p>

128、;  CJNE A,#60H,INEAAMOV SECOND,#0</p><p><b>  MOV A,MIN</b></p><p><b>  ADD A,#01</b></p><p><b>  DA A</b></p><p><b>  MOV MIN

129、,A</b></p><p>  CJNE A,#60H,INEAA</p><p>  MOV MIN,#0</p><p>  MOV A,HOUR</p><p><b>  ADD A,#01</b></p><p><b>  DA A</b></

130、p><p>  MOV HOUR,A</p><p>  CJNE A,#24H,INEAA</p><p>  MOV HOUR,#0</p><p><b>  MOV A,DAY</b></p><p><b>  ADD A,#01</b></p><

131、p><b>  DA A</b></p><p><b>  MOV DAY,A</b></p><p>  ;************************判斷平閏年及大小月</p><p>  MOV A,MONTH</p><p>  CJNE A,#02H,TEN6A</p&g

132、t;<p>  MOV A,YEAR ;把年由BCD碼換成二進(jìn)制碼</p><p>  ANL A,#0F0H</p><p><b>  SWAP A</b></p><p><b>  MOV B,#10</b></p><p><b>  MUL AB</b>

133、;</p><p><b>  MOV 24H,A</b></p><p>  MOV A,YEAR</p><p>  ANL A,#0FH</p><p><b>  ADD A,24H</b></p><p>  JB ACC.0,TEN5A ;二進(jìn)制碼后兩位為00表示

134、為閏年</p><p>  JB ACC.1,TEN5A</p><p>  MOV 24H,#01</p><p><b>  MOV A,DAY</b></p><p>  CJNE A,#30H,NINE1</p><p>  MOV DAY,#1</p><p> 

135、 SJMP NINE0</p><p>  TEN5A:MOV A,DAY</p><p>  CJNE A,#29H,NINE1</p><p>  MOV DAY,#1</p><p>  SJMP NINE0</p><p>  ;**************判斷大小月;大于等于8月時(shí)雙月為大月,小于8月時(shí)單月為

溫馨提示

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