2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩51頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  目 錄</p><p>  一、設(shè)計任務(wù)與目標(biāo)- 3 -</p><p>  1.1設(shè)計課題- 3 -</p><p>  1.2設(shè)計目的- 3 -</p><p>  1.3設(shè)計任務(wù)- 3 -</p><p>  1.4設(shè)計功能- 3 -</p><

2、p>  二、總體設(shè)計規(guī)劃與方案論證- 5 -</p><p>  2.1設(shè)計規(guī)劃- 5 -</p><p>  2.2設(shè)計方案論證- 5 -</p><p>  2.2.1 流星燈中斷選擇- 5 -</p><p>  2.2.2按鍵掃描方法- 6 -</p><p>  2.2.3數(shù)碼管的顯示方式-

3、 6 -</p><p>  三、 總體軟件設(shè)計說明及總流程圖- 7 -</p><p>  3.1軟件設(shè)計說明- 7 -</p><p>  3.2總流程圖- 8 -</p><p>  四、 系統(tǒng)資源分配及數(shù)據(jù)定義說明- 9 -</p><p>  4.1系統(tǒng)資源分配- 9 -</p>&l

4、t;p>  4.1.1AT89S52資源分配- 9 -</p><p>  4.1.28255(U3)資源分配- 9 -</p><p>  4.1.28255(U5)資源分配- 9 -</p><p>  4.2數(shù)據(jù)定義說明- 10 -</p><p>  4.2.1數(shù)據(jù)定義說明- 10 -</p><p

5、>  4.2.2數(shù)據(jù)初值說明- 10 -</p><p>  五、 局部程序設(shè)計說明- 11 -</p><p>  5.1總初始化- 11 -</p><p>  5.2,主流程- 11 -</p><p>  5.2.1拆字子程序- 11 -</p><p>  5.2.2開關(guān)量消抖動子程序- 1

6、2 -</p><p>  5.2.3按鍵功能定義子程序- 13 -</p><p>  5.2.4鍵盤掃描子程序- 13 -</p><p>  5.2.5顯示更新子程序- 14 -</p><p>  5.2.6整點報時子程序- 14 -</p><p>  5.2.7鍵盤校時子程序- 15 -</

7、p><p>  5.2.8流星燈調(diào)速子程序- 15 -</p><p>  5.2.9按鍵音效子程序- 16 -</p><p>  5.3中斷服務(wù)子程序- 16 -</p><p>  5.3.1流星燈子程序- 16 -</p><p>  5.3.2實時時鐘程序- 17 -</p><p&

8、gt;  六、系統(tǒng)功能與用戶操作使用說明- 19 -</p><p>  6.1系統(tǒng)功能介紹- 19 -</p><p>  6.2操作說明- 19 -</p><p>  七、課程設(shè)計總結(jié)- 20 -</p><p>  八、 附錄- 23 -</p><p><b>  一、設(shè)計任務(wù)與目標(biāo)<

9、;/b></p><p><b>  1.1設(shè)計課題</b></p><p>  設(shè)計課題:智能流星燈管的控制程序設(shè)計</p><p><b>  1.2設(shè)計目的</b></p><p>  通過小型微機應(yīng)用產(chǎn)品的設(shè)計與調(diào)試過程,運用《微機原理及接口技術(shù)》課程所學(xué)的基本知識,在設(shè)計中加以應(yīng)用,

10、進而得到理解、鞏固和提高,學(xué)習(xí)掌握分析與解決實際問題的方法與手段,提高設(shè)計、編程與調(diào)試的實際動手能力,作為工程技術(shù)工作的一次基本訓(xùn)練。</p><p><b>  1.3設(shè)計任務(wù)</b></p><p>  LED流星燈管是一種室外景觀裝飾燈,適用于懸掛在樹枝上、屋檐下,其閃爍的效果就像夜空中一道道流星一樣在空中劃過。這種新型的工程亮化產(chǎn)品,猶如流星般變化,光亮自然順

11、滑,可根據(jù)環(huán)境任意串接,可根據(jù)要求設(shè)定控制效果。廣泛應(yīng)用于酒吧、迪吧廳、賓館大廳、園林廣場、步行街、庭院、歌舞廳、公園、道路、樓梯、花園、用于建筑、商場、發(fā)廊等裝飾。近來也用于演播廳裝飾,數(shù)百個流星燈同步協(xié)調(diào)的變幻效果緊密配合現(xiàn)場音樂及節(jié)目環(huán)節(jié),美輪美奐。本設(shè)計以單片機為核心,實現(xiàn)LED流星燈常規(guī)控制功能,可通過鍵盤選擇不同流速的流星燈,有良好的操作界面和顯示界面。對產(chǎn)品的單片機控制程序進行初步的設(shè)計,編寫程序并在單片機實驗板上模擬調(diào)試

12、實現(xiàn)。</p><p><b>  1.4設(shè)計功能</b></p><p>  1、開機進行適當(dāng)?shù)挠嘘P(guān)接口部件及數(shù)碼顯示器、指示燈、訊響器等自檢。</p><p>  2、八位LED 七段數(shù)碼管作為時鐘顯示及其他界面信息顯示。</p><p>  3、4×4鍵盤設(shè)置“0”~“9”數(shù)字鍵以及產(chǎn)品設(shè)計所定義的功能鍵

13、,按下鍵盤時應(yīng)回饋短促的按鍵音以提供良好的操作手感。</p><p>  4、裝置基本顯示模式為按照24小時制動態(tài)顯示時、分、秒實時鐘信息。</p><p>  5、可操作“調(diào)校時鐘”鍵進入調(diào)時界面,通過鍵盤定義的兩對“+”、“-”復(fù)合功能鍵采用翻滾數(shù)字方式修改實時鐘的時、分參數(shù),按下“+”、“-”鍵翻滾一個值,保持按著0.5秒后以每秒5個值的速率翻滾,按“確定”鍵保存新的時刻且秒清零,按

14、“取消”鍵不保存退出。</p><p>  6、本裝置驅(qū)動的16只LED構(gòu)成流星燈串,采取PWM方式調(diào)節(jié)每只LED的亮度,PWM控制分辨率不小于1/20,PWM控制頻率不低于100Hz。</p><p>  7、LED流星燈的基本控制功能為模仿夜空中流星的視覺效果按一定的速度重復(fù)在16只LED組成的流星燈管流動。</p><p>  8、可通過外接的按鈕開關(guān)“+”、

15、“-”隨時調(diào)節(jié)流星燈的流動速度。</p><p>  9、可通過鍵盤:“換檔”功能鍵及隨后的數(shù)字鍵操作直接切換為指定的流動速度檔。</p><p>  10、非基本顯示模式下無操作時間超過30秒鐘后自動恢復(fù)為基本的顯示時鐘狀態(tài)。</p><p>  11、可由用戶選擇切換為12小時制顯示實時鐘,通過“A”、“P”指示上下午。</p><p>

16、  12、可選控逆向流動方式。</p><p>  13、有多種流星光效,可通過鍵盤操作選擇。</p><p>  14、可程控,預(yù)先存入順序控制流程表,自動控制流星燈依序演繹,順控表每工步包含光效、方向、速度、時長等要素。</p><p>  二、總體設(shè)計規(guī)劃與方案論證</p><p><b>  2.1設(shè)計規(guī)劃</b>

17、;</p><p>  根據(jù)任務(wù)書的要求,要實現(xiàn)的基本功能有具有可鍵盤校時的實時時鐘和可選擇多種流速的流星燈,計劃的進程安排如下:</p><p><b>  2.2設(shè)計方案論證</b></p><p>  2.2.1 流星燈中斷選擇</p><p>  方案一:獨立中斷,流星燈的程序獨立于實時時鐘的程序。該方案的有點是

18、可以靈活的調(diào)整PWM的周期,可使流星燈工作在最佳的頻率中使流星燈的效果更佳。但同時也存在一些不足,即PWM的周期不是很穩(wěn)定,受到實時時鐘中斷的影響,導(dǎo)致PWM周期有時將會被拉長,使得顯示的效果下降,其次主流程的執(zhí)行時間也會被拉長,導(dǎo)致各個延時的時間不是預(yù)定的時間,同理實時時鐘的程序也會受到流星燈中斷的影響,導(dǎo)致走時不準(zhǔn)確。</p><p>  方案二:流星燈的中斷服務(wù)子程序與實時時鐘中斷服務(wù)子程序放在同一個中斷中

19、。該方案的優(yōu)點是PWM的周期不受到影響,同時實時時鐘的走時精確,缺點是PWM的周期受到實時時鐘的限制,不能靈活調(diào)整。</p><p>  方案選擇:方案二中PWM的周期雖不能靈活調(diào)整,但是工作在該頻率的流星燈顯示的效果良好,再者實時時鐘能夠精確走時,且PWM周期穩(wěn)定,相比之下,選擇方案二。</p><p>  2.2.2按鍵掃描方法</p><p>  方案一:掃

20、描法。采用掃描法可以解決端口的限制問題,但是其編程比較復(fù)雜,要逐個掃描按鍵,因此程序執(zhí)行的時間比較長且繁瑣。</p><p>  方案二:線反轉(zhuǎn)法。線反轉(zhuǎn)法具有簡練的特點,無論被按鍵是處于第一列或者最后一列,均只需經(jīng)過兩步便能獲得被按鍵的行列值,但是采用反轉(zhuǎn)法有個限制,就是行線設(shè)置為輸出,列線要設(shè)置為輸入,列線設(shè)置為輸出時,行線要設(shè)置為輸入,因此同個端口不能高低位分開設(shè)置輸入輸出狀態(tài)的話,就得使用兩個端口。<

21、;/p><p>  方案選擇:由于8255的C口的高低四位的輸入輸出狀態(tài)可以分開設(shè)置,因此消除了反轉(zhuǎn)法中端口的限制,且反轉(zhuǎn)法的編程簡單,因此采用線反轉(zhuǎn)法來掃描按鍵是否按下。</p><p>  2.2.3數(shù)碼管的顯示方式</p><p>  方案一:靜態(tài)顯示方式。將各位共陰極(或共陽極)連接在一起并接地(或者接+5V),每位的段碼有8位的端口來驅(qū)動,這中顯示方法就是靜態(tài)

22、顯示。采用靜態(tài)顯示方式接口編程比較容易,而且數(shù)碼管的亮度都比較高,但是占用的端口比較多,單片機的端口顯然不夠。</p><p>  方案二:動態(tài)顯示方式。將多個數(shù)碼管的段碼線的相應(yīng)段并聯(lián)在一起由一個8為的I/O口控制,而其共陰極或者共陽極分別由相應(yīng)的I/O口控制,這種方式就是動態(tài)顯示方式。動態(tài)顯示方式占用的I/O口比較少,但是編程比較繁瑣,且亮度稍暗,占用單片機時間多,但是這種方案節(jié)省了很多端口,也是電路變得簡單

23、,因此選擇方案二。</p><p>  總體軟件設(shè)計說明及總流程圖</p><p><b>  3.1軟件設(shè)計說明</b></p><p>  根據(jù)任務(wù)書的要求,可知此次設(shè)計需要實現(xiàn)的基本功能有實時時鐘、鍵盤校時、流星燈,流星燈調(diào)速等,以及良好的操作界面、良好的操作手感和顯示界面。</p><p>  因此整個程序必須包

24、括實時時鐘子模塊,流星燈子模塊,驅(qū)動數(shù)碼管顯示的顯示更新子模塊,判斷鍵盤是否有輸入及消抖動的鍵盤掃描子模塊,判斷外接按鍵是否有輸入及消抖動的PB消抖子模塊,將壓縮的BCD碼進行解壓的拆字子模塊,使用戶具有良好的操作手感的按鍵音效子模塊,設(shè)定按鍵對應(yīng)功能的按鍵功能設(shè)定子模塊,具有鍵盤選流速、外接按鍵調(diào)速的流星燈流速調(diào)整子模塊和具有快調(diào)與慢調(diào)的鍵盤校時子模塊。有了這些基本的子模塊再進行添加擴展模塊,如小時制切換子模塊,整點報時子模塊,逆向流

25、星燈子模塊等等。通過各個模塊之間的相互配合,使得上述的功能能夠?qū)崿F(xiàn)。</p><p>  由于硬件的限制,我們要設(shè)定不同的進程來實現(xiàn)相應(yīng)的功能,因次需要用到進程碼。所謂的進程碼是指在通過對進程單元存入不同的數(shù)據(jù),在以后的編程中,則只需判斷進程單元中的數(shù)據(jù),就可根據(jù)不同的數(shù)據(jù)做不同的處理,即引領(lǐng)程序的進程,實現(xiàn)各個模塊的配合。在此次的程序設(shè)計中,我用了20H單元來存儲進程碼。在常規(guī)進程中20H單元存儲的數(shù)據(jù)是00H

26、,當(dāng)按下調(diào)時鍵時,將20H單元的數(shù)據(jù)改為10H,進入調(diào)時進程中,在常規(guī)進程中,如果按下的是調(diào)速鍵,則將20H單元的數(shù)據(jù)改為20H,進入調(diào)速進程。當(dāng)在非常規(guī)進程,就使能確定鍵、取消鍵,用于進程的切換。</p><p>  常規(guī)進程下主要是實時時鐘的顯示,程序主要執(zhí)行的是拆字程序中的常規(guī)拆字程序段,以及整點報時、顯示更新和按鍵功能設(shè)置模塊。在進入調(diào)時進程時,將小時單元和分鐘單元的數(shù)據(jù)存入暫存單元,在調(diào)整時,主要改變暫

27、存單元里的數(shù)據(jù),當(dāng)調(diào)整完后,按下確定鍵就將進程改為常規(guī)進程,同時將暫存單元的數(shù)據(jù)存入原來的時、分單元。主要執(zhí)行的是拆字程序中的校時拆字程序段、鍵盤掃描子程序,鍵盤校時子程序、按鍵功能設(shè)置子程序、顯示更新子程序。當(dāng)進入調(diào)速進程中,主要修改的是流速即改變步進值,通過不同的鍵號,選擇不同的步進值,并加以顯示,以提供良好的顯示界面和操作界面。</p><p>  綜上所述,此次程序的設(shè)計是由進程碼來引領(lǐng)程序的進程,在各個

28、進程中做相應(yīng)的功能處理子程序,在進程中同時又建立不同的標(biāo)志位來引領(lǐng)不同的程序段實現(xiàn)不同的功能的切換。</p><p><b>  3.2總流程圖</b></p><p><b>  中斷:</b></p><p>  四、系統(tǒng)資源分配及數(shù)據(jù)定義說明</p><p><b>  4.1系統(tǒng)資

29、源分配</b></p><p>  4.1.1AT89S52資源分配</p><p>  4.1.28255(U3)資源分配</p><p>  4.1.28255(U5)資源分配</p><p><b>  4.2數(shù)據(jù)定義說明</b></p><p>  4.2.1數(shù)據(jù)定義說明<

30、;/p><p><b>  見附錄一</b></p><p>  4.2.2數(shù)據(jù)初值說明</p><p>  MOV SP,#6FH ;設(shè)定棧底指針,使堆棧數(shù)據(jù)從70H單元開存儲,默認是07H,有可能數(shù)據(jù)會產(chǎn)生沖突,因此將指針指向6FH。</p><p>  MOV 38H,#36;38H單元為實時鐘256uS計數(shù)

31、單元,256*36=9216,剛好是10mS</p><p>  MOV 39H,#00H;39H單元為10mS計數(shù)單元,計滿100為1S,一開始清零</p><p>  MOV3EH,#00H;調(diào)時進程下,分鐘暫存單元,開始時清零</p><p>  MOV3FH,#00H;調(diào)時進程下,時鐘暫存單元,開始時清零</p><p>

32、  MOV TMOD,#22H;選擇中斷的控制方式,初始化T1為定時方式2。</p><p>  MOV TL1,#00H;置T1計數(shù)初值。使定時器計滿256次溢出,產(chǎn)生中斷信號</p><p>  MOV TH1,#00H </p><p>  MOV 20H,#00H;主進程單元,默認初始進程為常規(guī)進程(00H)</p><

33、p>  MOV 21H,#0FFH;鈴聲邏輯緩沖單元初值全"1",使蜂鳴器不響,21H.7整點報時,21H.5按鍵音效</p><p>  MOV 22H,#00H;整點報時進程碼存儲單元,常規(guī)狀態(tài)(00H),判斷是否為整點</p><p>  MOV23H,#00H;23H.0,小時制標(biāo)志位,23H.1整點標(biāo)志位,23H.2上下午標(biāo)志位,23H.3

34、上下午標(biāo)志位暫存位</p><p>  MOV 24H,#00H;24H.0,時加長按標(biāo)志位,24H.1時減長按標(biāo)志位,24H.2分加長按標(biāo)志位,24H.3分減長按標(biāo)志位</p><p>  MOV25H,#0FFH;P1輸出緩沖單元,使LED燈全滅</p><p>  MOV26H,#0FFH;8255(U5)A口輸出緩沖單元,使LED燈全滅</

35、p><p>  MOV27H,#0FFH;光效存儲單元</p><p>  MOV28H,#0FFH;光效存儲單元</p><p>  MOV 40H,#30;A/D數(shù)據(jù)0.3秒更新一次</p><p>  MOV 41H,#30;整點報時第一聲0.3秒</p><p>  MOV42H,#50

36、;長按判定單元,超0.5S為長按</p><p>  MOV43H,#20;實現(xiàn)快加功能,以0.2S加1的速率加</p><p>  MOV44H,#03;音效設(shè)置單元,存儲蜂鳴器響的時間</p><p>  MOV45H,#100;無操作延時單元,與46H共同構(gòu)成30S的延時</p><p>  MOV46H,#10;

37、無操作延時單元,與45H共同構(gòu)成30S的延時</p><p>  MOV48H,#00H;流星燈時間片i,每中斷一次加1</p><p>  MOV49H,#00H;PWM周期計數(shù)單元j,每一周期加1</p><p>  MOV4AH,#07H;流速值J,決定流星燈的流動速率</p><p>  MOV4BH,#00H;步值存

38、儲單元k,根據(jù)不同的步,進行不同的對位送操作</p><p>  MOV52H,#07H;流星燈檔位存儲單元,默認是7檔</p><p>  MOV 64H,#10H;新鍵碼存儲單元;無按鍵按下時鍵號為10H</p><p>  MOV 65H,#10H;前鍵碼存儲單元;無按鍵按下時鍵號為10H</p><p><b>

39、;  局部程序設(shè)計說明</b></p><p><b>  5.1總初始化</b></p><p>  總初始化程序主要是在程序開始進入主流程時,對程序中有用到的數(shù)據(jù)單元賦予初值、開啟需要的中斷、設(shè)置中斷服務(wù)子程序的入口、實現(xiàn)設(shè)備自檢等,該程序段只有在程序開始時執(zhí)行一遍,此后不再執(zhí)行該該程序段。</p><p>  此次設(shè)計的總初始

40、化程序先設(shè)置了定時中斷1的程序入口,驅(qū)動數(shù)碼管從右往左逐個全亮顯示、點亮所有的LED和使蜂鳴器響1秒以實現(xiàn)設(shè)備的自檢,最后將接下來程序中有用到的數(shù)據(jù)單元賦予相應(yīng)的初值。</p><p><b>  5.2,主流程</b></p><p>  5.2.1拆字子程序</p><p>  在程序中,所有送數(shù)碼管顯示的單元存儲的數(shù)據(jù)都是壓縮的BCD碼,

41、在送到數(shù)碼管顯示緩沖單元時需要對壓縮的BCD碼進行解壓,因此在顯示更新之前就得將送顯單元進行拆字。所謂的拆字是將送顯單元里的數(shù)據(jù)的高四位和低四位進行分離,并存入不同的地址單元或者存入相應(yīng)的顯示緩沖單元的低四位。常用的拆字方法是將先把送顯單元的數(shù)據(jù)與立即數(shù)(#0FH)相與,屏蔽高四位,將屏蔽后得到的數(shù)據(jù)存入相應(yīng)的顯示緩沖單元,接著是將送顯單元的數(shù)據(jù)與立即數(shù)(#0F0H)相與,屏蔽低四位,所得的數(shù)據(jù)高四位與低四位相對換,再存到相應(yīng)的顯示緩沖

42、單元。</p><p>  此次設(shè)計的拆字子模塊又分為24小時制拆字、12小時制拆字、校時拆字、流星燈調(diào)速拆字。程序先判斷當(dāng)前進程是否為常規(guī)(00H)進程,是常規(guī)進程,繼續(xù)判斷小時格式轉(zhuǎn)換標(biāo)志位23H.0,為0,執(zhí)行24小時制拆字程序段,為1,則執(zhí)行12小時制拆字程序段;如果不是常規(guī)進程,則跳轉(zhuǎn)判斷是不是校時(10H)進程,如果是該進程則執(zhí)行校時拆字程序段,其中還要判斷是不是小時格式轉(zhuǎn)換標(biāo)志位23H.0,為0不顯

43、示上下午標(biāo)志A、P,為1,則顯示;若當(dāng)前進程不是校時進程,則跳轉(zhuǎn)判斷是不是調(diào)速(20H)進程,是就進行調(diào)速拆字程序段,不是則返回主流程。</p><p>  在常規(guī)進程下,24小時制拆字是將小時單元3CH、分鐘單元3BH和秒鐘單元3AH進行拆字,其中3CH低位送到36H,高位送到37H,3BH低位送到33H,高位送到34H,3AH低位送到30H,高位送到31H,32H和35H單元顯示橫桿,以隔離小時、分鐘、秒鐘,

44、達到良好的顯示效果;12小時制拆字同樣是將小時單元3DH、分鐘單元3BH和秒鐘單元3AH進行拆字,但是送到的緩沖單元不一樣,其中3CH低位送到36H,高位送到37H,3BH低位送到34H,高位送到35H,3AH低位送到32H,高位送到33H;30H單元用來顯示上下午的標(biāo)志A、P,31H單元顯示空格。在校時模式下,校時拆字是將小時暫存單元3FH、4FH、分鐘暫存單元3EH進行拆字,若是24小時制,則將3FH單元進行拆字低位送到36H,高位

45、送到37H單元,若是12小時制,則將4FH單元進行拆字低位送到36H,高位送到37H單元,在根據(jù)上下午標(biāo)志位暫存單元23H.3,判斷顯示A還是P。兩種模式都將3EH低位送到33H,高位送到34H單元,35H送橫桿的代碼,其余單元賦予空額的代碼。在調(diào)速模式下,將擋位單元52H進行拆字,將52H單元的低位</p><p>  5.2.2開關(guān)量消抖動子程序</p><p>  正常的時候我們按下

46、或者釋放按鍵時只希望電平變化一次,但是機械按鍵在按下或者釋放的瞬間都會出現(xiàn)抖動,會出現(xiàn)高低電平的不斷變換的情況,單片機在掃描端口電平時,會認為按鍵是按下了幾次,會是程序的邏輯不能按我們原先設(shè)定的邏輯進行。因此我們要將開關(guān)量的輸入進行消抖動,通常采用的消抖動的方法有硬件消抖和軟件消抖。硬件消抖是利用電子元器件構(gòu)成RS觸發(fā)器進行消抖動,軟件消抖常用的是滾動濾波法。滾動濾波法是將采集到的開關(guān)量存于一個數(shù)據(jù)單元中,下次采集時將前一次采集的數(shù)據(jù)存

47、于新的數(shù)據(jù)單元,此次掃描的存于原先的數(shù)據(jù)單元,這樣滾存n個單元,然后比較這n個滾存單元的數(shù)據(jù)是否一致,一致的話將該數(shù)據(jù)存于另一單元,我們稱之為開關(guān)量新態(tài)存儲單元,在滾存之前我們將開關(guān)量新態(tài)存儲單元的數(shù)據(jù)存入另一個單元,我們稱之為開光量的前態(tài)存儲單元。當(dāng)前態(tài)存儲單元和新態(tài)存儲單元的數(shù)據(jù)不同時,才認為按鍵有按下或者按鍵有釋放。由于按鍵抖動的時間大概是1~20ms左右,所以采集數(shù)據(jù)的周期至少要ms。</p><p> 

48、 消抖模塊中,將29H,2AH,2BH,2CH,2DH設(shè)置為滾存單元,2EH單元設(shè)置為新態(tài),將2FH設(shè)置為前態(tài),將每次的采集到的數(shù)值賦給29H,進行滾存,當(dāng)判斷5個單元的數(shù)據(jù)一致使,將該數(shù)據(jù)賦予新態(tài)單元2EH。在每次開始掃描前都要講數(shù)據(jù)在5個單元中滾存一次,并將新態(tài)的數(shù)據(jù)賦予前態(tài)單元2FH。</p><p>  5.2.3按鍵功能定義子程序</p><p>  按鍵功能定義模塊,是將功能選

49、擇性按鍵集中在一起而生成的一個新的模塊。在該模塊中主要判斷在常規(guī)進程下,調(diào)時鍵、調(diào)速鍵,小時制切換鍵是否有按下,在非常規(guī)進程下,判斷確定鍵,取消鍵,是否按下,是否無按鍵操作。</p><p>  在常規(guī)進程下,當(dāng)調(diào)時鍵按下時,將24小時制的小時單元3CH更12小時制的小時單元3DH分別送到對應(yīng)的暫存單元3FH、4FH,將分鐘單元3BH送到分鐘的暫存單元3EH,將上下午標(biāo)志位23H.2暫存到23H.3,將進程有常規(guī)

50、進程(00H)改為調(diào)時進程(10H)。當(dāng)按下的是調(diào)速鍵,則將進程改為調(diào)速進程(30H),當(dāng)按下的是小時制切換鍵時,則將小時制標(biāo)志位求反,不改變進程。</p><p>  當(dāng)在非常規(guī)進程下,判斷取消鍵是否有壓下,如果有壓下,則將當(dāng)前進程改為常規(guī)進程,暫存單元的數(shù)據(jù)不送到相應(yīng)的單元。若取消鍵沒有壓下,就判斷確定鍵是否壓下,有壓下,就將暫存單元的數(shù)據(jù)送到相應(yīng)的單元,即將3EH的數(shù)據(jù)送到3BH,將3FH單元的數(shù)據(jù)送到3C

51、H,將4FH的數(shù)據(jù)送到3DH,將上下午標(biāo)志暫存位23H.3送到23H.2。同時將秒鐘單元3AH,百分秒單元39H,以及計數(shù)單元38H單元清零。若都沒有按鍵按下,則轉(zhuǎn)到無按鍵操作的程序段,經(jīng)過三十秒的延時,若這30秒中沒有任何操作,就將進程改為常規(guī)進程。</p><p>  5.2.4鍵盤掃描子程序</p><p>  判斷片外的按鍵是否有按下,需要不斷掃描端口電平的變化,并判斷是哪個按鍵壓

52、下,因此需要編寫一段程序來掃描端口的電平。此次程序編程采用的是反轉(zhuǎn)法來掃描端口電平。方轉(zhuǎn)法就是先讓行線編程為輸入線,將列線編程為輸出線,并使輸出線輸出為全低電平,則行線中電平由高變低所在列為按鍵所在行;再把行線編程為輸出線,列線編程為輸出線,并使輸出線輸出全為低電平,則列線中電平由高變低所在列為按鍵所在列。為了消除鍵盤的抖動,同樣也設(shè)置了3個滾存單元63H,62H,61H,新鍵號存儲單元64H,前鍵號存儲單元65H,鍵值存儲單元60H單

53、元。</p><p>  程序開始先將新鍵號64H的數(shù)據(jù)賦予前鍵號單元65H,接著將3個滾存單元的數(shù)據(jù)滾動存儲(即62H的數(shù)據(jù)賦予63H,61H的數(shù)據(jù)賦予62H,),接著采用反轉(zhuǎn)法掃描按鍵的位置,將鍵值存儲在60H單元中(其中各個鍵所對應(yīng)的鍵值為K0:0EEH,K1:0EDH,K2:0EBH,K3:0E7H,K4: 0DEH,K5:0DDH,K6:0DBH,K7:0D7H,K8:0BEH,K9:0BDH,KA:0

54、BBH,KB:0B7H,KC:7EH,KD:7DH,KE:7BH,KF:77H,)</p><p>  接著根據(jù)每次所得到的鍵值與鍵值表相比較,如果相等則將該鍵值在鍵值表中的順序號(鍵號)給61H,如果不等則接著往下查找,直至相等后者61H單元的數(shù)據(jù)位10H,就停止查表。通過改變各鍵值在表中的順序,就可以改變各個按鍵所對應(yīng)的鍵號。以下就是此次程序所用的鍵值表:</p><p>  DB 7

55、DH,0EEH,0EDH,0EBH</p><p>  DB 0DEH,0DDH,0DBH,0BEH</p><p>  DB 0BDH,0BBH,7BH,7EH</p><p>  DB 0E7H,0D7H,0B7H,77H</p><p>  最后將比較各個滾存單元的數(shù)據(jù)是否一致,若一致則將61H中的鍵號賦予64H單元。</p

56、><p>  5.2.5顯示更新子程序</p><p>  顯示更新子程序主要的功能是根據(jù)顯示緩沖顯示單元存儲的段碼的序號,根據(jù)查找段碼表得到相應(yīng)的段碼,送到段碼驅(qū)動端口(0FEFCH),再輸出對應(yīng)位的位碼,驅(qū)動數(shù)碼管做出相應(yīng)的顯示。</p><p>  此程序段主要采用的是間接尋址的方式,將顯示緩沖單元的首地址30H賦予R0,將位碼01H賦予R3,采用@A+PC的變址

57、方式進行查找段碼表。每驅(qū)動一位數(shù)碼管顯示都需要調(diào)用1mS左右的延時,使得8個數(shù)碼管能夠穩(wěn)定的顯示。以下是該程序段所用的段碼表(0有效):DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H;字段碼表。"0"~"6" </p><p>  DB 0F8H,80H,90H,88H,83H,0C6H,0A1H;"7"~"9&q

58、uot;,"A"~"D" </p><p>  DB 86H,8EH,0BFH,00H,0FFH,8CH,9CH;"E","F","-",全亮,空格,P F</p><p>  5.2.6整點報時子程序</p><p>  整點報時子程序采用小進程碼來設(shè)置報時

59、的音效,小進程單元為22H單元,默認是00H進程,其中01H,03H,05H進程是蜂鳴器響,但是響的時間不一樣,02H,04H進程是蜂鳴器關(guān)閉的進程,關(guān)閉的時間也是不一樣的。通過判斷小時標(biāo)志位23H.1是否為1,如果不是就返回發(fā)主流程,如果是就將該標(biāo)志位清零,并將22H單元中的數(shù)據(jù)由00H改為 01H,將整點報時蜂鳴器邏輯存儲位21H.7清零。下次判斷是不是01H進程,是,就開始減41H單元,并判斷該單元的數(shù)據(jù)是否為0,若不是,則跳轉(zhuǎn)返

60、回到主流程,若是,就將進程改為下一進程02H,并關(guān)閉蜂鳴器21H.7置1,對41H重新賦值,若不是01H進程,就跳轉(zhuǎn)判斷是不是02H進程。以此類推,直到最后進程05H結(jié)束,重新回到00H進程。這樣實現(xiàn)了滴三聲的整點報時音效。</p><p>  5.2.7鍵盤校時子程序</p><p>  鍵盤校時子程序首先判斷的是不是處于校時的進程,若不是則返回到主流程,不執(zhí)行以下的程序段。若是,就可以

61、通過按鍵進行校時。該子模塊可分為6個功能塊,分別是時加模塊、時減模塊、分加模塊、分減模塊、長按模塊,按鍵釋放模塊。其中時加、時減、分減、分減每個模塊中又包含了快調(diào)與慢調(diào)的功能,長按模塊主要是判斷各個按鍵是否長按,若是長按,就建立各個按鍵的長按標(biāo)志位分別是24H.0、24H.1、24H.2、24H.3對應(yīng)時加鍵、時減鍵、分加鍵、分減鍵。然后再4個校時模塊中進行判斷,實現(xiàn)快調(diào)與慢調(diào)的功能,以下以時加模塊為例。首先判斷時加長安標(biāo)志位24H.0

62、是否為1,不是就判斷時加鍵是否有壓下,小時有就加1,沒有就跳轉(zhuǎn)判斷下一模塊,若為1,則調(diào)過判斷按鍵檢測部分,直接對小時以0.2S加1的速率進行快調(diào)。在調(diào)整的時候同時調(diào)整12小時制的小時暫存單元4FH和上下午標(biāo)志位的暫存位23H.3,使其與24小時制的小時暫存單元3CH保持同步,在時減的模塊中藥這樣。其余模塊跟時加模塊類似。最后都要經(jīng)過判斷按鍵釋放這一模塊,如果按鍵釋放則將各長按標(biāo)志位清零,并對0.5S延時單元42H和0.2S延時單元43

63、H賦初值。</p><p>  5.2.8流星燈調(diào)速子程序</p><p>  在調(diào)速進程下,執(zhí)行流星燈調(diào)速子模塊。流星燈調(diào)速子程序模塊主要分為外接按鍵PB調(diào)速模塊和鍵盤選檔模塊。</p><p>  其中PB調(diào)速模塊分為PB6跟PB7調(diào)速模塊,PB6速度變慢,PB7速度變快,以下以PB6調(diào)速為例。PB6調(diào)速是通過判斷2EH.6和2FH.6來判斷按鍵PB6是否壓下,

64、若2FH.6為1,2EH.6為0就說明按鍵有壓下,就對流速存儲單元4AH加1,并通過換算將4AH單元的數(shù)據(jù)處于哪一檔位賦予檔位存儲單元52H,接著判斷上限,跟17H相比較,相等就將4AH的數(shù)據(jù)改為16H,防止其超過限制。PB7調(diào)速同理。</p><p>  鍵盤調(diào)速是在調(diào)速進程下才能執(zhí)行的,采用的是轉(zhuǎn)移表的方式進行選檔。程序首先判斷按鍵是否有按下,若有按鍵按下,則進一步判斷按下的按鍵是否處于0`9的范圍內(nèi),如果不

65、是就返回主流程,如果是將該鍵號乘以轉(zhuǎn)移表中每一程序段所占的字節(jié)數(shù),積放在累加器A中,在將轉(zhuǎn)移表的表頭地址賦予DPTR,再由JMP @A+DPTR跳轉(zhuǎn)到相應(yīng)的程序段,處理完后跳轉(zhuǎn)回到主流程。在使用轉(zhuǎn)移表時需要滿足的條件是轉(zhuǎn)移表中的每一程序段必須占相同的字節(jié)數(shù),否則不能使用轉(zhuǎn)移表,且每一程序段執(zhí)行結(jié)束必須跳出轉(zhuǎn)移表。程序詳見附錄二。</p><p>  5.2.9按鍵音效子程序</p><p>

66、;  按鍵音效子程序模塊主要是由一個控制按鍵音時長的單元44H跟按鍵音效位21H.5,外加蜂鳴器邏輯處理模塊構(gòu)成。程序中主要通過65H單元跟64H,單元中的數(shù)據(jù)來判斷鍵盤是否有按下。如果65H單元存的數(shù)據(jù)是10H,且64H單元存的數(shù)據(jù)不等于10H則說明有按鍵按下,就將音效標(biāo)志位21H.5清零,且將被按鍵的鍵號加上立即數(shù)10賦予44H單元,以實現(xiàn)不同的按鍵音效不一樣。接著判斷外接按鍵是否有按下,主要是有2EH單元跟2FH單元存的數(shù)據(jù)來判斷

67、,當(dāng)2FH單元存的數(shù)據(jù)是0FFH,而2EH單元存的數(shù)據(jù)不是0FFH說明有按鍵壓下,則將音效標(biāo)志位21H.5清零,且將立即數(shù)5賦予44H。最后判斷電平開關(guān)SW是否有操作,通過判斷50H跟51H單元存的數(shù)據(jù)來判斷其是否有操作,如果50H單元的數(shù)據(jù)跟51H單元的數(shù)據(jù)不一致,則電平開關(guān)有操作,因此將立即數(shù)10賦予44H單元,同時清零音效標(biāo)志位21H.5。程序末端是蜂鳴器邏輯處理單元,將整點報時音效單元跟按鍵音效單元相與,最后輸送到P3.2,控制

68、蜂鳴器的開通與關(guān)閉。并且將44H單元減同0相比較,為0時將44H單元賦初值和按鍵音效單元置1.</p><p>  5.3中斷服務(wù)子程序</p><p>  5.3.1流星燈子程序</p><p>  流星燈管要達到很好的顯示效果必須使得每盞LED燈工作在相同周期的PWM中,再根據(jù)需要顯示的效果進行調(diào)整PWM的占空比。根據(jù)課程設(shè)計任務(wù)書的要求,流星燈管的分辨率不低于

69、,因此此次設(shè)計,將PWM的周期分割成20個時間片,每個時間的時間由中斷時間來確定,由于受到實時時鐘的限制,因此每個時間片的時間為256Tm,PWM的周期為5120Tm。組成流星燈管的是16盞LED燈,因此需要32個流動步,為了使流星燈具有良好的流動速度,我們需要設(shè)定一個步進值n。這樣流星燈的周期為163840nTm。因此可通過改變n值,來改變流星燈的流動速度。</p><p>  因此,將48H單元用來記錄時間片

70、數(shù),用49H單元來記錄PWM周期數(shù),用4AH單元來存儲流速值,用4BH單元來存儲步值。27H,28H單元來存儲光效,25H,26H來存儲LED燈的顯示緩沖單元。</p><p>  當(dāng)中斷服務(wù)子程序開始執(zhí)行時,就將需要保護的單元數(shù)據(jù)壓棧到以70H單元為首的壓棧區(qū)中進行保護。然后就將顯示緩沖單元25H,26H單元的數(shù)據(jù)分別送到p1口和U5的A口(0FDFCH)點亮相應(yīng)的LED燈。然后判斷48H單元的數(shù)據(jù)是否等于立即

71、數(shù)20,不等就跳到查表程序段,相等就將周期數(shù)49H單元加1,并將48H單元清零,接著判斷49H的數(shù)據(jù)是否大于等于4AH單元的數(shù)據(jù),不是就跳轉(zhuǎn)到查表程序段,是的話將49H單元清零,接著判斷流速單元4AH的數(shù)據(jù)是否等于立即數(shù)16H,若相等就跳到查表程序段,不等就對步數(shù)單元4BH加1,并判斷4BH單元的數(shù)據(jù)是否等于立即數(shù)32,不等就跳轉(zhuǎn)到查表程序段,相等就將步數(shù)清零,接著執(zhí)行查表程序段。查表采用的是@A+DPTR變址尋址的查表方式,將表頭地址

72、賦予DPTR,在將時間片數(shù)乘以2賦予累加器A,同時賦予B中,查表得的數(shù)據(jù)賦予27H單元,在將B的數(shù)據(jù)加1重新賦予累加器A,再由指令“MOV A,@A+DPTR”查表 ,將查得的數(shù)據(jù)賦予28H單元。查完表后,將時間片單元加1。最后是根據(jù)現(xiàn)有的步值,通過轉(zhuǎn)移表跳轉(zhuǎn)到相應(yīng)的的對位送程序段。所謂的對位送是根據(jù)不同的步值,按一定的規(guī)</p><p>  TGX1:DB 0FH,00H,3FH,00H,7FH,

73、00H,0FFH,00H</p><p>  DB 0FFH,00H,0FFH,00H,0FFH,01H,0FFH,01H</p><p>  DB 0FFH,01H,0FFH,03H,0FFH,03H,0FFH,03H</p><p>  DB 0FFH,07H,0FFH,07H,0FFH,07H,0FFH,07H</p>

74、<p>  DB 0FFH,0FH,0FFH,8FH,0FFH,08H,0FFH,07H</p><p>  5.3.2實時時鐘程序</p><p>  由于晶振的頻率是11.0592MHz,且一個機器周期包括了十二個時鐘周期,因此11059200/12=921600次/秒,振蕩9216次就為10MS。又因256*36=9216,所以將T1中斷定時256,另取一單元

75、用來計數(shù)36次中斷。這樣構(gòu)成的實時時鐘的誤差只來源于晶振,走時可以很精確。</p><p>  實時時鐘程序段中,將38H單元用來計數(shù)中斷的次數(shù),沒36次清零一次,并將百分秒單元39H單元加1,當(dāng)39H單元計滿100時就將39H單元清零,并將秒鐘單元3AH加1,當(dāng)秒鐘單元滿60時將秒鐘單元清零,并將分鐘單元3BH加1,當(dāng)分鐘單元滿60時將小時單元3CH,3DH加1。并判斷如果3DH單元的數(shù)據(jù)等于13時,將上下午標(biāo)

76、志位求反一次,并將3DH單元賦值1,若3CH單元的數(shù)據(jù)滿24時將該單元清零。</p><p>  六、系統(tǒng)功能與用戶操作使用說明</p><p><b>  6.1系統(tǒng)功能介紹</b></p><p>  此次設(shè)計的產(chǎn)品是具有校時功能、流星燈調(diào)速功能、時間格式轉(zhuǎn)換功能,以及良好的數(shù)碼管顯示界面,操作手感的智能流星燈管。其中實時時鐘的走時除了石英

77、晶振帶來的誤差外,沒有其余的誤差,走時相當(dāng)精準(zhǔn)。流星燈的控制程序采用中斷來實現(xiàn),由穩(wěn)定的PWM來控制燈的亮度,不受到其它程序段的影響,因此整體效果穩(wěn)定,流暢,光效一致。其中校時功能采用的是新式的翻滾式界面且具有快調(diào)和慢調(diào)的功能,流星燈流速共有20檔,有鍵盤可以快速選擇10種檔位(0檔是停止,1檔最慢,9檔最快),由外接按鍵PB可實現(xiàn)細調(diào)。按按鍵時用戶可通過良好的按鍵音判斷按鍵是否壓下,進入校時跟調(diào)速模式時都有良好的數(shù)碼顯示界面。<

78、/p><p><b>  6.2操作說明</b></p><p>  系統(tǒng)操作界面如右圖所示,常規(guī)狀態(tài)下顯示時鐘跟流星燈。當(dāng)用戶按下“校時鍵”時 ,系統(tǒng)進入校時功能,數(shù)碼顯示界面將顯示小時跟分鐘。當(dāng)進入該模式時,就可以按“時+鍵”、“時-鍵”、“分+鍵”“、分-鍵”來調(diào)整時間,長按這些鍵可以進入快調(diào)模式,按下“確定鍵”將完成時間的修改,按下“取消鍵”則退出校時模式,時間不

79、做修改。在常規(guī)模式下按下“小時制切換鍵”時可以實現(xiàn)24小時制和12小時制之間的切換。</p><p>  當(dāng)按下“調(diào)速鍵”時,數(shù)碼管顯示界面將顯示當(dāng)前流星燈正處于哪一檔的流速,此時進入了調(diào)速的模式,按下按鍵0~9選擇對應(yīng)的流星燈流速檔位,其中0檔是停止,1檔是最慢的流速,9檔是最快的流速。在任意模式下只要按下外接按鍵“速度+”、“速度-”則可以改變流星燈的流動速度,當(dāng)流星燈的流動速度到達最高速時按下“速度+”流星

80、燈的流動速度將不會增加,當(dāng)流星燈處于停止?fàn)顟B(tài)時,此時按下“速度-”流星燈仍處于停止?fàn)顟B(tài)不會改變。外接按鍵選擇流星燈的流動速度共有20個檔位??蓾M足用戶選擇最好的流動速度。</p><p><b>  七、課程設(shè)計總結(jié)</b></p><p>  兩個禮拜的課程設(shè)計結(jié)束了。通過兩周的努力,最終完成了具有實時時鐘、鍵盤校時、時間格式切換、流星燈,流星燈調(diào)速,整點報時等功能

81、和良好的顯示界面、操作界面和操作手感的智能流星燈管的控制程序。其中采用翻滾式鍵盤校時,長按校時鍵可實現(xiàn)快加、快減的功能,具有兩種方式的流星燈調(diào),一是通過鍵盤直接選擇所要的檔位,共10檔,另一種是同過外接的按鍵實現(xiàn)調(diào)速,共20檔。</p><p>  這次的課程設(shè)計我們組成員間的相互討論學(xué)習(xí),我弄清楚了原本有點模糊的知識點,如在按鍵掃描,原本看程序只是理解下,并沒有很清楚地去了解它的機理,只能在原本的程序上進行修改

82、,若讓自己獨自編寫程序,卻是不知所措,從何寫起。但是現(xiàn)在我徹底消化了反轉(zhuǎn)法的機理,知道了鍵值是怎樣得來的,以及如何改變按鍵的鍵號。</p><p>  在本次課程設(shè)計中,我主要負責(zé)的是硬件電路的熟悉,鍵盤掃描模塊和拆字模塊。剛開始進入編程的時候我們對很多知識很模糊,也沒有根據(jù)電路來編程,對于51單片機端口對8255的控制原理不清晰編程時存在很多困惑,后來通過咨詢老師,老師詳細的講解除了困惑,也加深了對那一塊電路的

83、了解,老師指點下通過百度了解發(fā)光二極管的電流允許范圍,了解增加電阻的值得計算。而鍵盤掃描模塊和拆字模塊的編程中麻煩眾多,所以基本上選用了別人的的程序,導(dǎo)致答辯時眾多問題沒能很好的回答上。拆字部分知道實現(xiàn)過程不懂這過程叫做BCD碼的解碼,對于實現(xiàn)過程使用到的輸入輸出地址單元,也比較陌生。</p><p>  通過這次的課程設(shè)計,我弄懂了很多以前比較模糊的知識,同時發(fā)現(xiàn)了很多自己所沒學(xué)好的知識,我們通過小組討論解決一

84、部分難題,在答辯課上老師提問過程中的講解中解決一些疑惑,整理實驗報告過程中通過相互討論,網(wǎng)上查找解決老師留下的問題也有了很大的收獲。</p><p><b>  附錄</b></p><p>  8.1附錄一數(shù)據(jù)定義說明</p><p><b>  8.2附錄二程序</b></p><p>  

85、ORG 0000H;復(fù)位入口</p><p>  LJMP MAIN</p><p>  ORG 001BH;定時器1中斷服務(wù)子程序入口(進行實時鐘計時、流星燈)</p><p>  LJMP IT1P</p><p>  /*---------------------------------------------

86、---------------------------------</p><p><b>  總初始化程序</b></p><p>  ---------------------------------------------------------------------------------*/</p><p>  ORG 0030

87、H</p><p>  MAIN:MOV SP,#6FH ;總初始化。設(shè)定棧底指針</p><p>  LCALL D65MS ;稍加延時(65mS),以待各芯片均退出復(fù)位狀態(tài)</p><p>  MOV4CH,#08</p><p>  MOV DPTR,#0FEFFH ;對8255A(U3)接口芯片初始化</p

88、><p>  MOV A,#89H ;設(shè)定A輸出(驅(qū)動字段)、B口輸出(驅(qū)動字位),C口輸入</p><p>  MOVX @DPTR,A ;寫入方式控制字</p><p>  MOV DPTR,#0FEFCH ;DPTR指向U3-A口</p><p>  MOV A,#00H ;置八段均亮的字段碼(段驅(qū)動全為'

89、1'無效)</p><p>  MOVX @DPTR,A ;開顯示</p><p>  MOVA,#01H;輸出位碼</p><p>  MOVDPTR,#0FEFDH</p><p>  ZJ1:MOVX@DPTR,A</p><p>  LCALLD65MS</p>&l

90、t;p>  RLA;左移位碼,使數(shù)碼管逐個全亮</p><p>  DJNZ4CH,ZJ1</p><p>  MOV DPTR,#0FEFCH ;DPTR指向U3-A口</p><p>  MOV A,#0FFH ;置八段均不亮的字段碼</p><p>  MOVX @DPTR,A ;關(guān)顯示(段驅(qū)動全為'

91、;1'無效)</p><p>  MOV DPTR,#0FDFDH ;輸入PB0-PB7按鈕開關(guān)電平初始化2EH、2FH單元</p><p>  MOVX A,@DPTR</p><p>  MOV 2EH,A</p><p>  MOV 2FH,2EH</p><p>  MOVDPTR,#0FD

92、FEH;輸入SW0-SW7電平開關(guān)電平初始化50H、51H單元</p><p>  MOVXA,@DPTR</p><p><b>  MOV50H,A</b></p><p>  MOV51H,50H</p><p>  MOV DPTR,#0FDFFH ;對8255A(U5)接口芯片初始化</p&g

93、t;<p>  MOV A,#8BH ;設(shè)定A口輸出(驅(qū)L8-15),B口輸入(按鈕PB0-7),C口輸入(開關(guān)SW0-7)</p><p>  MOVX @DPTR,A ;寫入方式控制字</p><p>  MOV DPTR,#0FDFCH ;DPTR指向U5-A口</p><p>  MOV A,#00H ;置八位輸出,&#

94、39;1'無效(8255A初始化后輸出寄存器全'0')</p><p>  MOVX @DPTR,A ;令L8-15初始全亮</p><p>  CLR P3.2 ;蜂鳴器響</p><p>  LCALL D1S ;延時1S</p><p>  SETB P3.2 ;關(guān)蜂鳴器<

95、/p><p>  MOV P1,#00H ;P1口輸出全'0',所驅(qū)動的L0-L7指示燈全亮</p><p>  LCALL D1S ;延時1S</p><p>  MOV P1,#0FFH;熄L0-L7指示燈</p><p>  MOV 30H,#10H;30H-37H為顯示緩沖單元,初始值令顯示‘- 89

96、51 -’</p><p>  MOV 31H,#12H</p><p>  MOV 32H,#01H</p><p>  MOV 33H,#05H</p><p>  MOV 34H,#09H</p><p>  MOV 35H,#08H</p><p>  MOV 36H,#12

97、H</p><p>  MOV 37H,#10H</p><p>  MOV 38H,#36;38H單元為實時鐘256uS計數(shù)單元,清0</p><p>  MOV 39H,#00H;39H單元為10mS計數(shù)單元,清0</p><p>  MOV 3AH,#55H;秒單元初值</p><p>  MOV

98、 3BH,#59H;分單元初值</p><p>  MOV 3CH,#08H;時單元初值,時鐘初值08:59:55</p><p>  MOV3DH,#08H;12小時制,小時單元</p><p>  MOV3EH,#00H;調(diào)時進程下,分鐘暫存單元</p><p>  MOV3FH,#00H;調(diào)時進程下,時鐘暫存單元&

99、lt;/p><p>  SETB EA;開中斷總允許</p><p>  MOV TMOD,#22H;初始化T1為定時方式2。</p><p>  MOV TL1,#00H;置T1計數(shù)初值。</p><p>  MOV TH1,#00H </p><p>  SETB ET1 ;開T1中斷允許&

100、lt;/p><p>  SETB TR1;啟動T1定時工作 </p><p>  MOV 20H,#00H;主進程單元</p><p>  MOV 21H,#0FFH;鈴聲邏輯緩沖單元初值全"1"</p><p>  MOV 22H,#00H;整點報時進程碼存儲單元</p>&l

101、t;p>  MOV23H,#00H;(23H.0,小時制切換)</p><p>  MOV 24H,#00H;調(diào)時長按標(biāo)志位</p><p>  MOV25H,#0FFH;P1輸出緩沖單元</p><p>  MOV26H,#0FFH;8255(U5)A口輸出緩沖單元</p><p>  MOV27H,#0FFH;光

102、效存儲單元</p><p>  MOV28H,#0FFH;光效存儲單元</p><p>  MOV 40H,#30;A/D數(shù)據(jù)0.3秒更新一次</p><p>  MOV 41H,#30;整點報時第一聲0.3秒</p><p>  MOV42H,#50;長按判定單元,超0.5S為長按</p><p&

103、gt;  MOV43H,#20;實現(xiàn)快加功能,以0.2S加1的速率加</p><p>  MOV44H,#03;音效設(shè)置單元,存儲蜂鳴器響的時間</p><p>  MOV45H,#100;無操作延時單元,與46H共同構(gòu)成30S的延時</p><p>  MOV46H,#10;無操作延時單元,與45H共同構(gòu)成30S的延時</p>

104、<p>  MOV47H,#200;顯示溫度的間隔</p><p>  MOV48H,#00H;流星燈時間片i,沒中斷一次加1</p><p>  MOV49H,#00H;PWM周期計數(shù)單元j,沒一周期加1</p><p>  MOV4AH,#07H;步進值J,決定流星燈的流動速率</p><p>  MOV4BH

105、,#00H;步值存儲單元k,根據(jù)不同的步,進行不同的對位送操作</p><p>  MOV52H,#07H;流星燈調(diào)速緩存單元</p><p>  MOV 64H,#10H;新鍵碼存儲單元</p><p>  MOV 65H,#10H;前鍵碼存儲單元</p><p>  /*--------------------------

106、----------------------------------------------------</p><p><b>  主流程程序</b></p><p>  ---------------------------------------------------------------------------------*/</p><

107、;p>  LOOP:LCALL XDPB;按鈕開關(guān)消抖子模塊程序</p><p>  LCALL KEY ;調(diào)用鍵盤掃描子模塊程序 </p><p>  LCALL GNSZ;調(diào)用按鍵功能設(shè)置子模塊程序</p><p>  LCALL CZ ;調(diào)用顯示內(nèi)容送顯緩子程序</p><p>

108、;  LCALL DISP ;調(diào)用顯示更新子程序 </p><p>  LCALL ED;整點報時控制子模塊程序</p><p>  LCALL KS;鍵盤調(diào)時子模塊程序</p><p>  LCALL MLTS;流星燈調(diào)速子模塊程序</p><p>  LCALL YX;調(diào)用音效子程序模塊</

109、p><p>  SJMP LOOP ;反復(fù)循環(huán)主流程</p><p>  /*------------------------------------------------------------------------------------</p><p>  按鍵功能設(shè)置(GNSZ)子程序(定義確定鍵、取消鍵、校時鍵、流行燈調(diào)速鍵、無按鍵操作

110、退出)</p><p>  -----------------------------------------------------------------------------------------*/</p><p>  GNSZ:MOVA,20H</p><p>  CJNEA,#00H,QXJ;判斷是不是00進程,否跳轉(zhuǎn)到判斷取消鍵(0B鍵)

111、</p><p>  GNXZ1: MOVA,65H;是00進程下,判斷調(diào)速鍵(0D鍵)是否壓下</p><p>  CJNEA,#10H,GNXZ2;沒有壓下,轉(zhuǎn)到判斷調(diào)時鍵(0C鍵)是否壓下子程序</p><p><b>  MOVA,64H</b></p><p>  CJNEA,#0DH,GNXZ2

112、;沒有壓下,轉(zhuǎn)到判斷調(diào)時鍵(0C鍵)是否壓下子程序</p><p>  MOV20H,#20H;有壓下,將進程改為調(diào)速(20H)進程</p><p>  LJMPGNSZR;返回到主流程</p><p>  GNXZ2: MOVA,65H;定義調(diào)時鍵</p><p>  CJNEA,#10H,GNXZ3;判斷調(diào)時鍵是否壓

溫馨提示

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

評論

0/150

提交評論