版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計(jì)--多功能電子數(shù)字鐘
- 多功能數(shù)字鐘課程設(shè)計(jì)
- 課程設(shè)計(jì)-- 多功能 數(shù)字鐘
- 課程設(shè)計(jì)--多功能數(shù)字鐘設(shè)計(jì)
- eda課程設(shè)計(jì)——多功能數(shù)字鐘
- vhdl課程設(shè)計(jì)---多功能數(shù)字鐘
- 數(shù)字邏輯課程設(shè)計(jì)---多功能數(shù)字鐘
- 多功能數(shù)字鐘課程設(shè)計(jì)報(bào)告
- 多功能數(shù)字鐘電路課程設(shè)計(jì)
- 多功能數(shù)字鐘課程設(shè)計(jì)報(bào)告
- 多功能數(shù)字鐘課程設(shè)計(jì)報(bào)告
- 數(shù)字電子技術(shù)課程設(shè)計(jì)-多功能數(shù)字鐘
- 數(shù)字鐘課程設(shè)計(jì)---多功能數(shù)字鐘的設(shè)計(jì)與制作
- 數(shù)字鐘課程設(shè)計(jì)--多功能數(shù)字鐘的電路設(shè)計(jì)
- 課程設(shè)計(jì)--多功能數(shù)字鐘的設(shè)計(jì)
- 課程設(shè)計(jì)--多功能數(shù)字鐘設(shè)計(jì).doc
- 課程設(shè)計(jì)---多功能數(shù)字鐘的設(shè)計(jì)
- 數(shù)字邏輯課程設(shè)計(jì)---多功能數(shù)字鐘 (2)
- 數(shù)字邏輯課程設(shè)計(jì)報(bào)告--多功能數(shù)字鐘
- 數(shù)字電路課程設(shè)計(jì)(多功能數(shù)字鐘)
評(píng)論
0/150
提交評(píng)論