基于51單片機匯編語言的數字鐘課程設計報告(含有鬧鐘萬年歷)_第1頁
基于51單片機匯編語言的數字鐘課程設計報告(含有鬧鐘萬年歷)_第2頁
基于51單片機匯編語言的數字鐘課程設計報告(含有鬧鐘萬年歷)_第3頁
基于51單片機匯編語言的數字鐘課程設計報告(含有鬧鐘萬年歷)_第4頁
基于51單片機匯編語言的數字鐘課程設計報告(含有鬧鐘萬年歷)_第5頁
已閱讀5頁,還剩25頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、單片微型計算機課程設計報告多功能電子數字鐘姓 名學 號班 級指導教師許偉敏060301021124電氣二班林衛2009-06-25目錄一:概述1二:設計基本原理簡介2三:設計要求及說明3四:整體設計方案4系統硬件電路設計4系統軟件總流程設計模塊劃分及分析56五:單模塊流程設計8各模塊設計概述、流程圖模塊源程序集合及注釋813六:單模塊軟件測試23七:系統檢測調試24硬件電路調試軟件部分燒寫調試八:系統優化及拓展26九:心得體會28單片微型計算機課程設計一、概述基于匯編語言的電子數字鐘概述課程設計題目:電子數字鐘應用知識簡介:l 51 單片機單片機又稱單片微控制器,它不是完成某一個邏輯功能的芯片

2、,而是把一個計算機系統集成到一個芯片上。作為嵌入式系統控制核心的單片機具有其體積小、功能全、性價比高等諸多優點。51 系列單片機是國內目前應用最廣泛的單片機之一,隨著嵌入式系統、片上系統等概念的提出和普遍接受及應用,51 系列單片機的發展又進入了一個新的階段。在今后很長一段時間內 51 系列單片機仍將占據嵌入式系統產品的中低端市場。l 匯編語言匯編語言是一種面向機器的計算機低級編程語言,通常是為特定的計算機或系列計算機專門設計的。匯編語言保持了機器語言的優點,具有直接和簡捷的特點,其代碼具有效率高實時性強等優點。但是對于復雜的運算或大型程序,用匯編語言編寫將非常耗時。匯編語言可以與高級語言配合

3、使用,應用十分廣泛。l ISPISP( In-System Programming)在系統可編程,是當今流行的單片機編程模式,指電路板上的空白元器件可以編程寫入最終用戶代碼,而不需要從電路板上取下元器件。已經編程的器件也可以用 ISP 方式擦除或再編程。本次課程設計便使用 ISP 方式,直接將編寫好的程序下載到連接好的單片機中進行調試。選題系統功能分析硬件電路設計整體流程設計及模塊劃分模塊流程設計模塊編碼測試系統合成調試編譯下載調試(含硬件電路調試及軟件燒寫調試)驗收完成總結報告課程設計流程圖選題目的及設計思想簡介:課程設計是一次難得的對所學的知識進行實踐的機會,我希望通過課程設計獨立設計一個

4、簡單的系統從而達到強化課本知識并靈活運用的目的。電子數字鐘是日常生活鐘隨處可見的簡單系統。對電子數字鐘的設計比較容易聯系實際并進行拓展, 在設計中我將力求盡可能跳出課本的樣板,從現實生活中尋找設計原型和設計思路,爭取有所突破。如圖所示便是我本次課程設計流程圖,設計的整個過程運用自頂向下分析、自底向上實現的辦法進行設計,借鑒在軟件工程中學習到的軟件設計流程和規范來完成系統設計并在設計過程中體會軟件設計的流程。06 電氣工程及其自動化 2 班許偉敏06030010211241單片微型計算機課程設計基于匯編語言的電子數字鐘設計基本原理簡介二、設計基本原理簡介數字鐘的設計首先要保證其走時盡可能準確,其

5、次再根據人們日常的使用習慣來設定其附加功能。在設計中利用單片機定時計數器來完成走時并用兩組輸出口控制數碼管來顯示;通過編程向某一輸出口輸出方波實現報時及鬧鈴;利用輸入端口外接各種開關來完成對走時及顯示的控制(如預置時間等)。在設計中需要用到許多技巧。以下為我在學習單片機課程中總結的一些設計思想或方法:l 占空比概念在設計中的運用如圖所示的一串方波序列,導通時間同周期的比值即占空比。在用單片機控制對多個數碼管的掃描顯示中,數碼管接收到的電壓可以看成是一串方波序列,占空比控制了數碼管的亮度。實際上對顯示延時時間的調節就是調節數碼管電壓的占空比,當占空比大于一定數值的時候數碼管可以顯示,實驗證明占空

6、比在0.1時仍可以使數碼管清晰顯示。利用這個概念可以比較直觀地理解顯示延時的調節。l CPU的分時復用單片機只有一個CPU,因此在一個時間內只能執行一條語句,要使單片機同時控制多個外部元件(比如揚聲器和數碼管)就必須對單片機的CPU進行分時復用,讓單片機在一小段時間內連續交替執行控制多個器件的語句,從表面上看,單片機便用一個CPU控制了多個元件。本次課程設計中對整點報時和鬧鈴功能的實現便用到了這個概念。l 單片機位尋址區的使用單片機內部數據存儲器由20H到2FH共有16個字節的位尋址區可以被作為程序執行過程中的狀態參數,許多程序模塊至于兩個狀態(比如閃爍與正常顯示,報時與不報時等)用位尋址區中

7、的某一位來記錄程序執行狀態,在需要對狀態進行判斷的時候十分方便并且節約空間,一個字節便可以判斷八個狀態,而非位尋址區的地址記錄程序狀態時可能需要先進行變換,增加了執行成本且容易出錯。l 檢測開關時需要注意的問題對于用各種開關控制程序執行狀態的程序設計中,需要注意實時地進行開關的檢測,以確保一旦有開關動作,程序狀態立即隨之改變。此外,在用多個開關控制不同執行狀態時,應注意設置開關檢測的優先級以防止多個開關同時按下時出現錯誤。l 系統資源分配與使用單片機有許多資源是有限的不能濫用,比如定時計數器T,外部中斷等,在設計一個多模塊程序時,要注意先做一個整體規劃,把稀缺資源用在最需要用的地方。此外在有多

8、個模塊時,要注意模塊間的數據傳遞,比如累加器A和進位標志C,在使用時要注意不能讓前一個模塊的數據對下一個模塊產生不希望有的影響。在模塊間的數據傳遞比較多時最好用固定的內部數據存儲器,以避免沖突發生錯誤。06 電氣工程及其自動化 2 班許偉敏06030010211242單片微型計算機課程設計基于匯編語言的電子數字鐘設計要求及說明三、設計要求及說明設計要求:基于單片機電路,借鑒生活中常見的電子鐘的功能,結合課本的要求使用匯編語言設計一個簡單的電子鐘系統。要求使用簡便,功能實用,錯誤少,有一定創新性。電子數字鐘實現的主要功能: 實現正常走時(秒分時日月年進位) 能夠預置時間和日期 能夠自動區分平閏年

9、和大小月 具有鬧鈴及設定鬧鈴時間功能 具有整點報時功能 具有生日提醒功能,能夠預置生日時間 在任何一種預置狀態下,預置項目會閃爍顯示其它設計說明 優先級:預置>鬧鈴>報時>生日提醒>正常顯示,即預置狀態下鬧鈴、報時功能及生日提醒功能都無效 生日時間到五個數碼管顯示“HAPPY” 生日顯示狀態下,按下中斷INT0恢復正常顯示且此后只有在下更改生日日期或第二年生日顯示才有效。 正常顯示狀態下按下中斷INT0進入預置狀態,再按一次恢復。 用數碼管(K0,K1)控制顯示狀態:00:時間,01:鬧鈴時間,10:日期,11:生日時間且顯示樣板如下圖所示:時間:12 點39 分45

10、秒日期:08 年2 月29 日鬧鈴:于早晨6 點10 分響,最后一位為一表示使能有效生日:6 月1 日生日,最后兩位bd 為birthday 的縮寫 預置由撥碼開關K2/K3/K4分別控制數碼管12/34/56顯示值,預置優先級:LED34>LED12>LED56(相應數碼管顯示的項目,顯示狀態下才能預置) 整點報時聲音為59分51、53、55、57秒的后半秒報四聲低音, 59秒的后半秒報一聲高音 鬧鈴每次響一分鐘 不論是預置狀態還是正常走時狀態均能夠自動區分平閏年和大小月 鬧鈴使能由撥碼開關K5控制并實時顯示06 電氣工程及其自動化 2 班許偉敏06030010211243單片微

11、型計算機課程設計基于匯編語言的電子數字鐘整體設計方案四、整體設計方案硬件電路設計系統硬件電路根據系統功能可知,需要六個數碼管,一個外部中斷INT0,一個揚聲器,由此結合單片機課程學習中對實驗面板的了解,做出如下電路:如圖,晶振頻率12MHz,撥碼開關數值由P0口讀入;P2口的輸出作為控制數碼管的段控信號,經74LS573即8位數據鎖存器接到數碼管中。數出端;開關W2經一個基本RS鎖存器接入INT0,每按一次開關INTO取反一次,按兩次輸入一個下降沿;揚聲器由P1.6口控制。06 電氣工程及其自動化 2 班許偉敏06030010211244單片微型計算機課程設計基于匯編語言的電子數字鐘整體設計方

12、案系統軟件總流程設計根據系統要求,設計出系統軟件總流程圖如下以T0作為正常走時的計時器,T1作為預置狀態下預置項目值自動跳升的控制計時器,INT0作為設定預置及清楚生日信號的控制按鈕初始化開關檢測并將要顯示的項目送入顯示緩存預置項目閃爍顯示Y預置有效?其余項目正常顯示N鬧鈴/報時?Y鬧鈴 /報時NY生日信號?N顯示生日祝福 HAPPY正常顯示T0 中斷走時(進位秒分時日月年)T1 預置時間/日期/鬧鈴時間/生日日期軟 件 系 統 總 流 程 圖INT0 中斷設定(預置信號設置/清除;生日標志清除)設計使每一輪顯示(即六個數碼管都顯示一次)便檢測一次開關使06 電氣工程及其自動化 2 班許偉敏0

13、6030010211245單片微型計算機課程設計基于匯編語言的電子數字鐘整體設計方案上圖的“檢測開關值判斷并顯示檢測開關值” 的循環時間大約為10ms,即每隔10ms檢測一次開關值,每個數碼管接收到的電壓信號占空比大約為1/7,確保數碼管正常顯示。三個中斷源中斷程序執行時間每次均為幾十毫秒,基本不影響主程序的顯示及鬧鈴輸出。中斷優先級T0>INT0>T1,首先確保走時盡可能的準確,其次由于T1的開啟和關閉是由INT0進行控制的,故INT0優先級較高。此外有優先級“預置顯示>鬧鈴>整點報時>生日顯示”,由于預置顯示是人為控制的故優先級最高,考慮到日常生活中假如鬧鈴或

14、整點報時被生日顯示覆蓋可能使影響到人們的日常生活故設定生日優先級最低,且鬧鈴最多影響生日信號一分鐘。鬧鈴和整點報時不影響正常的時間等的顯示。模塊劃分及分析根據系統功能將模塊劃分如下l ONE:初始化程序模塊進行資源分配(EQU,BIT偽指令),設定初值,各中斷初始化l TWO:開關檢測模塊檢測開關號,將要顯示值送入顯示緩存l THREE:顯示主程序顯示顯示緩存中值,并進行生日,鬧鈴,報時判斷l SEVEN:顯示生日祝福HAPPY程序經顯示主程序判斷生日時間到要執行的顯示HAPPY程序(其實可以認為是顯示主程序的一部分)l EIGHT:鬧鈴及整點報時判斷程序判斷是否鬧鈴或報時,如果是則CPLP1

15、.6且忽略生日信號,反之則繼續執行后續語句06 電氣工程及其自動化 2 班許偉敏06030010211246單片微型計算機課程設計基于匯編語言的電子數字鐘整體設計方案l NINE:中斷(TO)計時程序包含了秒分時日月年進位以及判斷大小月及平閏年以及生日標志設定l TEN:中斷預置程序控制預置項目的自動加計數的延時時間, 并能判斷大小月及平閏年l ELEVEN:中斷(INT0)控制程序控制預置的開/關及生日信號的清楚l TEWLVE:延時程序用于閃爍時的數碼管亮度控制模塊劃分中遇到的問題及解決:模塊劃分的過程中遇到的問題不多,只做了一個比較大的修改。剛開始設置模塊的時候并沒有設定顯示緩存LED1

16、2、LED34、LED56而是將主顯示模塊THREE分成四個部分分別實現對時間、日期、鬧鈴、生日的顯示(編號FOUR、FIVE,SIX便是刪去的另外三個部分的程序名)并通過檢測開關決定跳轉到哪一個部分去執行,但經過分析發現這樣做極大地浪費了存儲空間而設置顯示緩存后,只需要在檢測開關后將相應要顯示的數據送入顯示緩存并在主程序中對顯示緩存進行顯示即可,這樣做大大地縮減了程序存儲空間而程序可讀性也增強了。在程序編碼完成后發現,沒有必要將SEVEN顯示HAPPY程序同THREE顯示主程序單列開來,TWELVE延時程序也并不是必要的,并且模塊的劃分還有些值得商榷的地方,本報告中的程序還可以通過模塊劃分的

17、優化修改得更加精簡一些。06 電氣工程及其自動化 2 班許偉敏06030010211247單片微型計算機課程設計基于匯編語言的電子數字鐘單模塊流程設計五、單模塊流程設計在完成了系統總流程設計后,便進入到了系統設計中工作量最大的單模塊流程設計。由于系統模塊劃分雖然是系統設計的基礎,但比較簡單而且模塊劃分有多種方法,因此單模塊的設計可以認為是本程序中最關鍵的部分。單模塊設計的好壞與否決定了系統功能能否被穩定地實現以及下一階段調試程序的難度。鑒于單模塊設計的重要性,我在設計中并不急于對模塊進行編碼,而是反復論證模塊的可行性和流程圖,為下一階段的工作做好準備,同時也能夠盡早發現系統模塊劃分的錯誤,加以

18、解決。各模塊設計概述及模塊流程圖初始化模塊(ONE)初始化模塊包含了各中斷的跳轉語句、存儲資源的分配、各存儲器和寄存器的賦值以及中斷及計時器的狀態設置。源程序中共使用了17字節的內部數據存儲地址,其中包含3字節位尋址地址以便于進行位判斷。三字節的位尋址地址分配如下:開始跳轉指令資源分配(偽指令 EQU 及 BIT)時間、日期、鬧鈴時間、生日日期存儲地址賦初值;各狀態標志位賦初值設置中斷優先級、各中斷工作方式初始化模塊流程圖22H秒的存儲地址,方便對整點報時條件進行判斷23H月的存儲地址,方便對大小月平閏年進行判斷另外一個位尋址字節00H地址拆開用做程序狀態標志位00H(bit,BS)生日標志位

19、,到生日那天為 1 使程序轉入生日顯示段01H(bit,SS)預置標志,以INT0控制其值,控制預置閃爍的實現02H(bit,GS)閃爍標志,在預置標志有效時控制閃爍項目的亮和滅兩狀態03H(bit,FC)頻率控制,在整點報時時控制產生低音還是高音04H(bit,NB)忽略生日標志,控制預置及報時的優先級高于生日顯示05H(bit)控制生日信號的有效與否,其使用目的參見調試過程源程序中使用了兩個寄存器R1、R0,R1用于控制閃爍的間隔時間, R0用于顯示延時。在初始化模塊中設定了中斷的優先級、定時計數器的工作模式、并打開了定時計數器TO開始計時其他資源分配項目參見源程序集合及注釋。初始化模塊指

20、令很大一部分都是偽指令,方便了后面程序的編寫。06 電氣工程及其自動化 2 班許偉敏06030010211248單片微型計算機課程設計基于匯編語言的電子數字鐘單模塊流程設計開關檢測模塊(TWO)開關檢測模塊主要執行兩個任務:讀取鬧鈴使能控制撥碼開關K5的值并賦予鬧鈴使能相應值;讀取顯示選擇開關(K0,K1)的值并將要顯示的項目值送入顯示緩存LED12、K5為1時將A1H送開關檢測模塊流程圖入RE,反之送入A0H,其中A為“”的字型碼查表偏移量。當顯示生日日期時,將生日Birthday的縮寫“bd”的字型碼送入顯示緩存LED56。開關檢測模塊的執行時間大約在40uS左右。顯示主程序(THREE)

21、顯示主程序是程序中最復雜的模塊,實現的功能也最多,占用了程序運行過程當中90%以上的執行時間。流程圖中由判斷SS(預置信號)開始分成兩個分支,當SS=1,即預置狀態下程序進入預置閃爍部分。預置閃爍的優先級是:LED34>LED12>LED56即同預置優先級相同(參見調試部分的詳細說明)閃爍首先判斷是否對LED34進行判斷閃爍,如果是則另外兩個顯示值直接顯示,否則判斷是否對LED12進行閃爍,如果是則直接顯示LED56的值,只有當前兩個顯示值都不閃爍的時候,才判斷是否對LED56進行閃爍,這樣就確保了每次只有一個顯示值閃爍。預置通過GS標志位判斷預置的亮/滅,由R1控制每50輪顯示對

22、GS取反一次。當SS=0時進入判斷鬧鈴/報時及正常顯示模塊,模塊EIGHT(參見其說明)對鬧鈴及報時條件進行判斷,符合條件則對P1.6取反一次并使NB(忽略生日)有效,此時不進行對BS(生日標志)的判斷,即使響鈴優先級高于生日顯示(其實也可以對程序進行修改使響鈴和生日顯示不發生沖突,修改方法參見程序優化)。當不響鈴并且生日標志BS有效時顯示HAPPY顯示HAPPY子程序(SEVEN)本程序實際上是顯示主程序的分支,在模塊的劃分過程中為了簡化顯示主程序的編寫而將06 電氣工程及其自動化 2 班許偉敏06030010211249單片微型計算機課程設計基于匯編語言的電子數字鐘單模塊流程設計其單列開來

23、。本程序由生日標志BS控制,當到達生日時間時,T0中斷程序會將BS置1使之有效在顯示主程序中通過判斷BS的置來控制是否執行本模塊。顯示主程序及顯示”HAPPY”模塊流程圖說明:* 只有當在預置日期時,才需要對LED56進行預置閃爍判斷。并且當LED34(即月份的顯示緩存)已經判斷需要閃爍后,LED56便不需要閃爍而直接顯示(閃爍優先級LED56最低,每次只對一個項目進行預置,只有一個項目需要閃爍)。這個設置使同時撥下兩個以上預置開關時不會出錯,參見調試部分說明* 鬧鈴及報時判斷程序EIGHT執行過程參見其說明06 電氣工程及其自動化 2 班許偉敏060300102112410單片微型計算機課程

24、設計基于匯編語言的電子數字鐘單模塊流程設計鬧鈴及整點報時判斷程序(EIGHT)在顯示主程序中每隔一段時間調用一次本程序來實現鬧鈴及報時功能。符合鬧鈴條件時,每調用一次本程序對P1.6取反一次,調節調用的時間間隔便可以調節報時的輸出頻率。在主程序中設置每完成對一個數碼管的顯示變調用一次本程序,顯示一個數碼管的時間大約為1ms,因此響鈴頻率高音約為500Hz,低音約為250Hz。程序判斷鬧鈴使能RE后分成兩個分支,當RE=A1時判斷鬧鈴條件是否滿足,滿足則對P1.6取反一次,否則跳轉判斷整點報時條件是否滿足。當RE=0時,直接怕暖整點報時條件是否滿足。判斷整點報時條件時當當前時間滿足:(MIN=5

25、9)(SECOND=59) (COUNT>10)時報高音;當滿足:(MIN=59)(SECOND=51/53/55/57) (COUNT>10)時報低音。利用位尋址區來存儲SECOND的方法,只要(SECOND>50)(SECOND.0=1)時便滿足報低音的秒條件。利用TO中斷次數存儲器COUNT的大小可以判斷是否到了后半秒(T0每50ms中斷一次,中斷20次到達一秒)。通過增加一個標志位FC來時下對高低音的區分,高音不受FC的影響,低音只有當FC=0的時候才對P1.6取反一次。并且每調用一次本程序便對FC取反一次,便達到每調用兩次取反一次P1.6的效果。本程序的執行時間小于

26、40us,因此多次調用不過分影響執行時間鬧鈴及整點報時判斷程序流程圖中斷(TO)計時程序(NINE)中斷計時程序的流程比較簡單。程序除實現正常走時外還需要判斷是否到達生日時間置生06 電氣工程及其自動化 2 班許偉敏060300102112411單片微型計算機課程設計基于匯編語言的電子數字鐘單模塊流程設計LJMP NINE定時器 T0 賦初值,重開定時COUNT 加一日標志位有效。程序的輸出均為BCD碼,方便了顯示程序對高低位的分離并查表顯示。程序比較復雜的地方在于對平閏年及大小月的判斷。把月MONTH存儲在位尋址區,當MONTH=02H時判斷是否是平閏年,先將年由BCD碼轉化為二進制碼,此時

27、當年的后兩位為全零的時候為閏年(由于只顯示年的個位和十位,由2000年開始,00年、04年為閏年,到 1 秒?YCOUNT 清零SECOND 加一到 1 分鐘?YSECOND 清零MIN 加一到一小時?YMIN 清零HOUR 加一到一天?YHOUR 清零DAY 加一判斷平閏年及大小月*YNNNN其共同特點就是二進制后兩位為零),否則為平年。當MONTH2時判斷是否為大小月,MOUTH<7時單月(即MONTH.0=1的月)為大月,否則為小月;當MONTH>7時雙月為大月。中斷(T1)預置程序(TEN)T1通過中斷INT0控制開啟或關閉,每次定時50毫秒,存儲地址COUNTS計數15次

28、執行一次中斷程序。由開關(K0,K1)控制預置項目,通過開關K2/K3/K4來分別控制LED12/LED34/LED56的預置,當兩個開關都是有效時,具有優先級的區分,確保無論按幾個開關都最多只有一個項目被預置。判斷預置的優先級順序是:LED34>LED12>LED56這樣安排的原因是由于根據生活經驗LED34所對應的4個項目(小時、鬧鈴分、月、生日日)被預置的可能性最大。到一月?N在預置日期和生日是要中斷(T1)預置程序DAY=1MONTH 加一注意對大小月及平閏年進行判斷(判斷方法與中斷計時程序中說明的方法類似,但不需要到一年?YMONTH=1YEAR 加一生日到了?YBS=1

29、中斷返回NN考慮進位)且月和日在溢出后應置一而不是歸零。中斷(INT0)設定程序(ELEVEN)中斷INT0設置是否進行預置以及對生日標志的清除。且有如下設置順序:清除預置信號并關T1>清除生日標志>設定預置信號并開T1。每按一次中斷都只執行其中一個項目延時程序(TWELVE)延時時間約2ms即顯示兩個數碼管的時間,用于預置閃爍調節數碼關的電壓占空比一致而不出現數碼管隨著閃爍亮度改變的現象。中斷(TO)計時程序流程圖06 電氣工程及其自動化 2 班許偉敏060300102112412單片微型計算機課程設計基于匯編語言的電子數字鐘源程序集合及注釋模塊源程序集合及注釋;*ONE初始化O

30、RG 0SJMP ONEORG 0003HLJMP ELEVENORG 000BHLJMP NINEORG 001BHLJMP TENONE:LED12 EQU 30H ;數碼管12顯示緩存LED34 EQU 31H ;數碼管34顯示緩存LED56 EQU 32H ;數碼管56顯示緩存COUNT EQU 33H ;定時器T0(用來走時)計數值存儲器(計數中斷20次到1秒)COUNTS EQU 34H ;定時器T1(用來預置)計數值存儲器(計數中斷15次到預置值加一)HOUR EQU 40H ;以下為時間,日期,鬧鈴時間,生日的存儲地址MIN EQU 41HSECOND EQU 22HYEAR

31、EQU 50HMONTH EQU 23HDAY EQU 52HRH EQU 60H ;鬧鈴小時RM EQU 61H ;鬧鈴分RE EQU 62H ;鬧鈴使能BM EQU 71H ;生日月份BD EQU 72H ;生日天MOV LED12,#0MOV LED34,#0MOV LED56,#0MOV COUNT,#0MOV COUNTS,#0MOV HOUR,#0MOV MIN,#0MOV SECOND,#0MOV YEAR,#0MOV MONTH,#1MOV DAY,#1MOV RH,#0MOV RM,#0MOV RE,#0MOV BM,#6MOV BD,#1BS BIT 00H ;birthd

32、ay symbol生日標志(到生日那天就為1)SS BIT 01H ;set symbol預置信號(按下中斷預置為1,便開始閃爍和預置)GS BIT 02H ;glisten symbol閃爍標志FC BIT 03H ;frequency control頻率控制NB BIT 04H ;neglect bitrhday symbol 忽略生日標志CLR BSCLR SSCLR GSCLR FCCLR NBSETB 05H ;生日顯示有效標志位MOV IP,#02H;中斷優先級:T0>INT0>T1MOV TMOD,#11HMOV IE,#8BHSETB IT006 電氣工程及其自動化

33、 2 班許偉敏060300102112413單片微型計算機課程設計基于匯編語言的電子數字鐘源程序集合及注釋MOV TH0,#3CH ;50msMOV TL0,#0B0HSETB TR0MOV R1,#50 ;顯示延時用MOV R0,#0 ;顯示延時用;* TWO檢測開關號TWO:MOV P0,#0FFHJB P0.5,TWO1MOV RE,#0A0H ;0A0表示鬧鈴無效,送0A0是為了方便將使能查表顯示,表中第A項為"-"SJMP TWO2TWO1:MOV RE,#0A1HTWO2:JB P0.0,TWO4JB P0.1,TWO3MOV LED12,HOURMOV LED

34、34,MINMOV LED56,SECONDSJMP THREETWO3:MOV LED12,YEARMOV LED34,MONTHMOV LED56,DAYSJMP THREETWO4:JB P0.1,TWO5MOV LED12,RHMOV LED34,RMMOV LED56,RESJMP THREETWO5:MOV LED12,BMMOV LED34,BDMOV LED56,#0BCHSJMP THREE;* THREE顯示主程序(同時包含了鬧鈴,預置閃爍,鬧鈴功能)THREE:MOV P1,#0MOV P0,#0FFHMOV DPTR,#TAB3JNB SS,THREEB ;判斷預置信號

35、是否有效,預置有效則轉入判斷閃爍顯示模塊,否則轉入正常顯示模塊SJMP THREEATHREEB:LJMP THREE11 ;THREE11是正常顯示并判斷整點報時及鬧鈴模塊THREEA:JNB P0.3,THREE1 ;開始是判斷閃爍顯示,這句判斷是否預置分/月/生日的日/鬧鈴分JNB GS,THREE1 ;是否閃爍?LCALL TWELVE ;閃爍則調用延時不顯示LED34SJMP THREE4THREE1:MOV A,LED34ANL A,#0FHMOVC A,A+DPTRMOV P2,ANOPDJNZ R0,THREE2MOV A,LED34SWAP AANL A,#0FHMOVC A

36、,A+DPTRMOV P2,ANOP06 電氣工程及其自動化 2 班許偉敏060300102112414單片微型計算機課程設計基于匯編語言的電子數字鐘源程序集合及注釋DJNZ R0,THREE3JNB P0.2,THREE4 ;判斷是否預置小時/年/生日月/鬧鈴的小時JNB GS,THREE4 ;是否顯示小時/年/生日月/鬧鈴的小時LCALL TWELVESJMP THREE7THREE4:MOV A,LED12ANL A,#0FHMOVC A,A+DPTRMOV P2,ANOPDJNZ R0,THREE5MOV A,LED12SWAP AANL A,#0FHMOVC A,A+DPTRMOV

37、P2,ANOPDJNZ R0,THREE6JB P0.0,THREE7 ;數碼管56只有在顯示日期的天時才有預置閃爍功能,其余三項都不需要判斷閃爍JNB P0.1,THREE7JB P0.3,THREE7JNB P0.4,THREE7JNB GS,THREE7LCALL TWELVESJMP THREE10THREE7:MOV A,LED56ANL A,#0FHMOVC A,A+DPTRMOV P2,ANOPDJNZ R0,THREE8MOV A,LED56SWAP AANL A,#0FHMOVC A,A+DPTRMOV P2,ANOPDJNZ R0,THREE9THREE10:DJNZ R1

38、,TWOASJMP TWOBTWOA:LJMP TWOTWOB:MOV R1,#50 ;判斷閃爍一次是否完成CPL GS ;取反閃爍標志,用于控制閃爍的亮和滅LJMP TWO ;一輪顯示完后再判斷開關號;*正常顯示THREE11:LCALL EIGHT ;判斷是否取反P1.6即輸出鬧鈴或整點報時,以下每次顯示都要調用一次JB NB,THREE12 ;如果是在整點報時狀態就不顯示生日提醒,報時過后顯示提醒JNB BS,THREE12SJMP SEVEN ;跳到生日提醒程序THREE12:CLR NB ;開始正常顯示時間及判斷鬧鈴輸出06 電氣工程及其自動化 2 班許偉敏0603001021124

39、15單片微型計算機課程設計基于匯編語言的電子數字鐘源程序集合及注釋MOV A,LED34ANL A,#0FHMOVC A,A+DPTRMOV P2,ANOPDJNZ R0,THREE13MOV A,LED34SWAP AANL A,#0FHMOVC A,A+DPTRMOV P2,ANOPDJNZ R0,THREE14LCALL EIGHTMOV A,LED12ANL A,#0FHMOVC A,A+DPTRMOV P2,ANOPDJNZ R0,THREE15MOV A,LED12SWAP AANL A,#0FHMOVC A,A+DPTRMOV P2,ANOPDJNZ R0,THREE16LCAL

40、L EIGHTMOV A,LED56ANL A,#0FHMOVC A,A+DPTRMOV P2,ANOPDJNZ R0,THREE17MOV A,LED56SWAP AANL A,#0FHMOVC A,A+DPTRMOV P2,ANOPDJNZ R0,THREE18LJMP TWO ;一輪顯示完后判開關TAB3:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H 7FH,6FH,40H,7CH,5EH;0.1.2.3.4.5.6.7.8.9.-.b.d,的字形表"bd"在顯示生日時間時顯示在LED56;*SEVEN生日時顯示生日祝福語”HAPPY”SEVE

41、N:MOV P1,#01H06 電氣工程及其自動化 2 班許偉敏060300102112416單片微型計算機課程設計MOV P2,#76HDJNZ R0,SEVENSEVEN1:MOV P1,#02HMOV P2,#77HDJNZ R0,SEVEN1SEVEN2:MOV P1,#04HMOV P2,#73HDJNZ R0,SEVEN2SEVEN3:MOV P1,#08HMOV P2,#73HDJNZ R0,SEVEN3SEVEN4:MOV P1,#10HMOV P2,#6EHDJNZ R0,SEVEN4LJMP TWO基于匯編語言的電子數字鐘;一輪顯示完后判開關源程序集合及注釋;*EIGHT判

42、斷是否鬧鈴子程序EIGHT:MOV A,RECJNE A,#0A1H,EIGHT1MOV A,MINCJNE A,RM,EIGHT1MOV A,HOURCJNE A,RH,EIGHT1SJMP EIGHT4 ;鬧鈴時間到則CPLP1.6一次并忽略生日標志(即NB有效)EIGHT1:MOV A,MINCJNE A,#59H,EIGHT7MOV A,SECONDCJNE A,#59H,EIGHT5 ;是否等于59分59秒EIGHT2:MOV A,COUNT ;是否到達后半秒CJNE A,#10,EIGHT3EIGHT3:JC EIGHT7SETB NBSJMP EIGHT7EIGHT5:MOV A

43、,SECONDCJNE A,#51H,EIGHT6 ;是否大于51秒EIGHT6:JC EIGHT7JNB 10H,EIGHT7 ;判斷是否報低音JB FC,EIGHT7 ; 只有FC有效時才輸出SJMP EIGHT2次,高音時調用一次取反一次RET;* NINE中斷(T0)計時程序(包含了秒分時日月年間的進位及判斷大小月,平閏年)NINE:MOV TH0,#3CH ;開定時器MOV TL0,#0B0HSETB TR0INC COUNTMOV A,COUNTCJNE A,#20,INEAASJMP AAAINEAA:LJMP NINE1AAA:MOV COUNT,#0 ; 計時MOV A,SE

44、CONDADD A,#01DA A ;換成bcd碼以方便顯示MOV SECOND,ACJNE A,#60H,INEAA06 電氣工程及其自動化 2 班許偉敏060300102112417單片微型計算機課程設計基于匯編語言的電子數字鐘源程序集合及注釋MOV SECOND,#0MOV A,MINADD A,#01DA AMOV MIN,ACJNE A,#60H,INEAAMOV MIN,#0MOV A,HOURADD A,#01DA AMOV HOUR,ACJNE A,#24H,INEAAMOV HOUR,#0MOV A,DAYADD A,#01DA AMOV DAY,A;*判斷平閏年及大小月MOV A,MONTHCJNE A,#02H,TEN6AMOV A,YEAR ;把年由BCD碼換成二進制碼ANL A,#0F0HSWAP AMOV B,#10MUL ABMOV 24H,AMOV A,YEARANL A,#0FHADD A,24HJB ACC.0,TEN5A ;二進制碼后兩位為00表示為閏年JB ACC.1,TEN5AMOV 24H,#01MOV A,D

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論