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

下載本文檔

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

文檔簡介

1、<p><b>  摘 要</b></p><p>  單片計算機即單片微型計算機。由RAM ,ROM,CPU構成,定時,計數(shù)和多種接口于一體的微控制器。它體積小,成本低,功能強,廣泛應用于智能產(chǎn)業(yè)和工業(yè)自動化上。而51系列單片機是各單片機中最為典型和最有代表性的一種。這次課程設計通過對它的學習,應用,從而達到學習、設計、開發(fā)軟、硬的能力。</p><p>

2、;  本設計是通過單片機設計一個多功能電子表,要求不僅具有電子時鐘的功能還具有鬧鈴、設定鬧鈴時間、整點報時、生日提醒功能,而且能夠預置生日時間</p><p>  關鍵字:單片機;多功能電子表;跑表;數(shù)碼管顯示。</p><p><b>  ABSTRACT</b></p><p>  Single chip computer is the s

3、ingle chip computer. By RAM, ROM, CPU constitute, time, count and multiple interface in the integration of micro controller. Its small size, low cost, the function is strong, widely used in intelligent industry and indus

4、trial automation. And 51 series microcontroller is the most typical and various microcontroller most representative one. This curriculum design through to its study, application, thus achieved the study, design, developm

5、ent, soft and hard ability. </p><p>  This is designed by SCM design a multi-functional electronic watch, requirement not only has the function of electronic clock still has alarm, set alarm time, integral p

6、oint to announce, birthday reminds function, and can preset birthday time </p><p>  Key word: SCM, Multi-function digital watches, PaoBiao; Digital pipe display. </p><p><b>  目 錄</b&g

7、t;</p><p><b>  摘 要0</b></p><p>  ABSTRACT0</p><p><b>  目 錄1</b></p><p><b>  引言2</b></p><p>  1、 AT89S52單片機介紹3&l

8、t;/p><p>  2、設計功能及說明6</p><p>  3、整體設計方案8</p><p>  4、單模塊流程設計及程序設計8</p><p>  4.1初始化模塊8</p><p>  4.2 開關檢測模塊9</p><p>  4.3顯示主程序9</p><

9、;p>  4.4鬧鈴及整點報時判斷程序(EIGHT)11</p><p>  4.5中斷(TO)計時程序11</p><p>  4.6中斷(T1)預置程序11</p><p>  4.7中斷(INT0)設定程序12</p><p>  5、單模塊軟件測試12</p><p>  5.1編碼中常用的程序

10、結(jié)構說明12</p><p>  5.2 單模塊軟件測試中的問題及解決14</p><p>  6、軟件部分燒寫調(diào)試14</p><p><b>  5、總結(jié)16</b></p><p><b>  致謝17</b></p><p><b>  參考文獻:

11、18</b></p><p><b>  附錄A19</b></p><p><b>  附錄B:19</b></p><p>  引言 </p><p>  1957年,Ventura發(fā)明了世界上第一

12、個電子表,從而奠定了電子表的基礎,電子表開始迅速發(fā)展起來?,F(xiàn)代的電子表是基于單片機的一種計時工具,采用延時程序產(chǎn)生一定的時間中斷,用于一秒的定義,通過計數(shù)方式進行滿六十秒分鐘進一,滿六十分小時進一,滿二十四小時小時清零。從而達到計時的功能,是人民日常生活不可缺少的工具。 </p><p>  現(xiàn)在高精度的計時工具大多數(shù)都使用了石英晶體

13、振蕩器,由于電子鐘、石英鐘、石英表都采用了石英技術,因此走時精度高,穩(wěn)定性好,使用方便,不需要經(jīng)常調(diào)試,數(shù)字式電子鐘用集成電路計時時,譯碼代替機械式傳動,用LED顯示器代替指針顯示進而顯示時間,減小了計時誤差,這種表具有時、分、秒顯示時間的功能,還可以進行時和分的校對,片選的靈活性好。</p><p>  1、 AT89S52單片機介紹

14、 </p><p>  AT89S52 具有以下標準功能:8k 字節(jié) Flash,256 字節(jié) RAM,32 位 I/O 口線,看門狗定時器,2 個數(shù)據(jù)指針,三個 16 位定時器/計數(shù)器,一個 6 向量 2 級中斷結(jié)構,全雙工串行口,片內(nèi)晶振及時鐘電路。另外,AT89S52 可降至 0Hz 靜態(tài)邏輯操作,支持 2 種軟件可選擇節(jié)電模式。空閑模式下,CPU停止工作,允許 RAM、定時器/計數(shù)器、串口、中

15、斷繼續(xù)工作。掉電保護方式下,RAM 內(nèi)容被保存,振蕩器被凍結(jié),單片機一切工作停止,直到下一個中斷或硬件復位為止。</p><p>  圖 1.1 單片機引腳圖</p><p>  VCC : 電源 GND: 地</p><p>  P0 口:P0 口是一個 8 位漏極開路的雙向 I/O 口。作為輸出口,每位能驅(qū)動 8 個 TTL 邏輯電平。對 P0 端

16、口寫“1”時,引腳用作高阻抗輸入。當訪問外部程序和數(shù)據(jù)存儲器時,P0 口也被作為低 8 位地址/數(shù)據(jù)復用。在這種模式下,P0 具有內(nèi)部上拉電阻。在 flash 編程時,P0 口也用來接收指令字節(jié);在程序校驗時,輸出指令字節(jié)。程序校時,需要外部上拉電阻。</p><p>  P1 口:P1 口是一個具有內(nèi)部上拉電阻的 8 位雙向 I/O 口,p1 輸出緩沖器能驅(qū)動 4 個TTL 邏輯電平。對 P1 端口寫“1”時,

17、內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。此外,P1.0 和 P1.2 分別作定時器/計數(shù)器 2 的外部計數(shù)輸入(P1.0/T2)和時器/計數(shù)器 2的觸發(fā)輸入(P1.1/T2EX),具體如下表所示。</p><p>  表1.1 AT89S52 P1口第二功能表</p><p>  P2 口:P2 口是一個具有

18、內(nèi)部上拉電阻的 8 位雙向 I/O 口,P2 輸出緩沖器能驅(qū)動 4 個TTL 邏輯電平。對 P2 端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)在訪問外部程序存儲器或用 16 位地址讀取外部數(shù)據(jù)存儲器(例如執(zhí)行 MOVX @DPTR)時,P2 口送出高八位地址</p><p>  P3 口:P3 口是一個具有內(nèi)部上拉電阻的

19、8 位雙向 I/O 口,p2 輸出緩沖器能驅(qū)動 4 個TTL 邏輯電平。對 P3 端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。P3 口亦作為 AT89S52 特殊功能(第二功能)使用,如下表所示。</p><p>  表1.2 AT89S52 P3口第二功能表</p><p>  RST: 復位輸

20、入。晶振工作時,RST 腳持續(xù) 2 個機器周期高電平將使單片機復位。看門狗計時完成后,RST 腳輸出 96 個晶振周期的高電平。特殊寄存器 AUXR(地址 8EH)上的 DISRTO 位可以使此功能無效。DISRTO 默認狀態(tài)下,復位高電平有效。</p><p>  ALE/PROG:地址鎖存控制信號(ALE)是訪問外部程序存儲器時,鎖存低 8 位地址的輸出脈沖。在 flash 編程時,此引腳(PROG)也用作編

21、程輸入脈沖。在一般情況下,ALE 以晶振六分之一的固定頻率輸出脈沖,可用來作為外部定時器或時鐘使用。然而,特別強調(diào),在每次訪問外部數(shù)據(jù)存儲器時,ALE 脈沖將會跳過。</p><p>  PSEN:外部程序存儲器選通信號(PSEN)是外部程序存儲器選通信號。當 AT89S52 從外部程序存儲器執(zhí)行外部代碼時,PSEN 在每個機器周期被激活兩次,而在訪問外部數(shù)據(jù)存儲器時,PSEN 將不被激活。</p>

22、<p>  EA/VPP:訪問外部程序存儲器控制信號。為使能從 0000H 到 FFFFH 的外部程序存儲器讀取指令,EA 必須接 GND。為了執(zhí)行內(nèi)部程序指令,EA 應該接 VCC。在 flash 編程期間,EA 也接收 12 伏 VPP 電壓。</p><p>  XTAL1:振蕩器反相放大器和內(nèi)部時鐘發(fā)生電路的輸入端。</p><p>  XTAL2:振蕩器反相放大器的輸

23、出端。</p><p><b>  2、設計功能及說明</b></p><p>  電子數(shù)字鐘實現(xiàn)的主要功能:</p><p> ?、?實現(xiàn)正常走時(秒→分→時→日→月→年進位)</p><p>  ② 能夠預置時間和日期</p><p> ?、?能夠自動區(qū)分平閏年和大小月</p>

24、<p> ?、?具有鬧鈴及設定鬧鈴時間功能</p><p> ?、?具有整點報時功能</p><p> ?、?具有生日提醒功能,能夠預置生日時間</p><p> ?、?在任何一種預置狀態(tài)下,預置項目會閃爍顯示</p><p><b>  其它設計說明:</b></p><p> ?、?

25、優(yōu)先級:預置>鬧鈴>報時>生日提醒>正常顯示,即預置狀態(tài)下鬧鈴、報時功能及生日提醒功能都無效</p><p> ?、?生日時間到五個數(shù)碼管顯示“HAPPY”</p><p> ?、?生日顯示狀態(tài)下,按下中斷INT0恢復正常顯示且此后只有在下更改生日日期或第二年生日顯示才有效。</p><p> ?、?正常顯示狀態(tài)下按下中斷INT0進入預置狀態(tài)

26、,再按一次恢復。</p><p> ?、?用數(shù)碼管(K0,K1)控制顯示狀態(tài):00:時間,01:鬧鈴時間,10:日期,11。</p><p>  生日時間且顯示樣板如下圖所示:</p><p>  生日:6 月1 日生日,最 鬧鈴:于早晨6 點10 分響,最后后兩位bd 為birthday 的縮寫 一位為一表示使

27、能有效。</p><p>  日期:08 年2 月29 日 時間:12 點39 分45 秒</p><p> ?、?預置由撥碼開關K2/K3/K4分別控制數(shù)碼管12/34/56顯示值,預置優(yōu)先級:</p><p>  LED34>LED12>LED56(相應數(shù)碼管顯示的項目,顯示狀態(tài)下才能預置)</p>

28、;<p> ?、?整點報時聲音為59分51、53、55、57秒的后半秒報四聲低音, 59秒的后半秒報一聲高音</p><p>  ⑧ 鬧鈴每次響一分鐘</p><p> ?、?不論是預置狀態(tài)還是正常走時狀態(tài)均能夠自動區(qū)分平閏年和大小月</p><p>  ⑩ 鬧鈴使能由撥碼開關K5控制并實時顯示</p><p><b>

29、;  3、整體設計方案</b></p><p>  系統(tǒng)硬件電路根據(jù)系統(tǒng)功能可知,需要六個數(shù)碼管,一個外部中斷INT0,一個揚聲器,由此結(jié)合單片機課程學習中對實驗面板的了解,做出如下電路:</p><p>  圖 3.1系統(tǒng)硬件電路圖</p><p>  如圖,晶振頻率12MHz,撥碼開關數(shù)值由P0口讀入;P2口的輸出作為控制數(shù)碼管的段控信號,經(jīng)74LS

30、573即8位數(shù)據(jù)鎖存器接到數(shù)碼管中。數(shù)碼管采用共陰接法(圖中未標示);P1.0-P1.5作為數(shù)碼管的位控信號出端;開關W2經(jīng)一個基本RS鎖存器接入INT0,每按一次開關INTO取反次,按兩次輸入一個下降沿;揚聲器由P1.6口控制。</p><p>  4、單模塊流程設計及程序設計</p><p>  在完成了系統(tǒng)總流程設計后,便進入到了系統(tǒng)設計中工作量最大的模塊流程設計。由于系統(tǒng)模塊劃分雖

31、然是系統(tǒng)設計的基礎,但比較簡單而且模塊劃分有多種方法,因此單模塊的設計可以認為是本程序中最關鍵的部分。單模塊設計的好壞與否決定了系統(tǒng)功能能否被穩(wěn)定地實現(xiàn)以及下一階段調(diào)試程序的難度。鑒于單模塊設計的重要性,我在設計中并不急于對模塊進行編碼,而是反復論證模塊的可行性和流程圖,為下一階段的工作做好準備,同時也能夠盡早發(fā)現(xiàn)系統(tǒng)模塊劃分的錯誤,加以解決。</p><p><b>  4.1初始化模塊</b&

32、gt;</p><p>  初始化模塊包含了各中斷的跳轉(zhuǎn)語句、存儲資源的分配、各存儲器和寄存器的賦值以及中斷及計時器的狀態(tài)設置。源程序中共使用了17字節(jié)的內(nèi)部數(shù)據(jù)存儲地址,其中包含3字節(jié)位尋址地址以便于進行位判斷。</p><p>  三字節(jié)的位尋址地址分配如下:</p><p>  22H—秒的存儲地址,方便對整點報時條件進行判斷</p><p

33、>  23H—月的存儲地址,方便對大小月平閏年進行判斷</p><p>  另外一個位尋址字節(jié)00H地址拆開用做程序狀態(tài)標志位</p><p>  00H(bit,BS)—生日標志位,到生日那天為 1 使程序轉(zhuǎn)入生日顯示段</p><p>  01H(bit,SS)—預置標志,以INT0控制其值,控制預置閃爍的實現(xiàn)</p><p>  

34、02H(bit,GS)—閃爍標志,在預置標志有效時控制閃爍項目的亮和滅兩狀態(tài)</p><p>  03H(bit,F(xiàn)C)—頻率控制,在整點報時時控制產(chǎn)生低音還是高音</p><p>  04H(bit,NB)—忽略生日標志,控制預置及報時的優(yōu)先級高于生日顯示</p><p>  05H(bit)—控制生日信號的有效與否,其使用目的參見調(diào)試過程</p>

35、<p>  源程序中使用了兩個寄存器R1、R0,R1用于控制閃爍的間隔時間, R0用于顯示延時。在初始化模塊中設定了中斷的優(yōu)先級、定時計數(shù)器的工作模式、并打開了定時計數(shù)器TO開始計時其他資源分配項目參見源程序集合及注釋。初始化模塊指令很大一部分都是偽指令,方便了后面程序的編寫。</p><p>  4.2 開關檢測模塊</p><p>  開關檢測模塊主要執(zhí)行兩個任務:</

36、p><p>  ⒈讀取鬧鈴使能控制撥碼開關K5的值并賦予鬧鈴使能相應值;</p><p> ?、沧x取顯示選擇開關(K0,K1)的值并將要顯示的項目值送入顯示緩存LED12、LED34、LED56當k5為1時將A1H送入RE反之送入A1H,其中A為“—”的字型碼查表偏移量。當顯示生日日期時,將生日Birthday的縮寫“bd”的字型碼送入顯示緩存 LED56。</

37、p><p>  圖 4.1開關檢測流程圖</p><p><b>  4.3顯示主程序</b></p><p>  顯示主程序是程序中最復雜的模塊,實現(xiàn)的功能也最多,占用了程序運行過程當中90%以上的執(zhí)行時間。流程圖中由判斷SS(預置信號)開始分成兩個分支,當SS=1,即預置狀態(tài)下程序進入預置閃爍部分。</p><p>  

38、圖 4.2 顯示主程序流程圖</p><p>  預置閃爍的優(yōu)先級是:LED34>LED12>LED56即同預置優(yōu)先級相同(參見調(diào)試部分的詳細說明)閃爍首先判斷是否對LED34進行判斷閃爍,如果是則另外兩個顯示值直接顯示,否則判斷是否對LED12進行閃爍,如果是則直接顯示LED56的值,只有當前兩個顯示值都不閃爍的時候,才判斷是否對LED56進行閃爍,這樣就確保了每次只有一個顯示值閃爍。預置通過GS

39、標志位判斷預置的亮/滅,由R1控制每50輪顯示對GS取反一次。</p><p>  當SS=0時進入判斷鬧鈴/報時及正常顯示模塊,模塊EIGHT(參見其說明)對鬧鈴及報時條件進行判斷,符合條件則對P1.6取反一次并使NB(忽略生日)有效,此時行對BS(生日標志)的判斷,即使響鈴優(yōu)先級高于生日顯示(其實也可以對程序進行修改使響鈴和生日顯示不發(fā)生沖突,修改方法參見程序優(yōu)化)。當不響鈴并且生日標志BS有效時顯示HAPP

40、Y其單列開來。本程序由生日標志BS控制,當?shù)竭_生日時間時,T0中斷程序會將BS置1使之有效在顯示主程序中通過判斷BS的置來控制是否執(zhí)行本模塊標志BS有效時顯示HAPPY其單列開來。本程序由生日標志BS控制,當?shù)竭_生日時間時,T0中斷程序會將BS置1使之有效在顯示主程序中通過判斷BS的置來控制是否執(zhí)行本模塊</p><p>  4.4鬧鈴及整點報時判斷程序(EIGHT)</p><p>  

41、在顯示主程序中每隔一段時間調(diào)用一次本程序來實現(xiàn)鬧鈴及報時功能。符合鬧鈴條件時,每調(diào)用一次本程序?qū)1.6取反一次,調(diào)節(jié)調(diào)用的時間間隔便可以調(diào)節(jié)報時的輸出頻率。在主程序中設置每完成對一個數(shù)碼管的顯示變調(diào)用一次本程序,顯示一個數(shù)碼管的時間大約為1ms,因此響鈴頻率高音約為500Hz,低音約為250Hz。程序判斷鬧鈴使能RE后分成兩個分支,當RE=A1時判斷鬧鈴條件是否滿足,滿足則對P1.6取反一次,否則跳轉(zhuǎn)判斷整點報時條件是否滿足。當RE=

42、0時,直接怕暖整點報時條件是否滿足。判斷整點報時條件時當當前時間滿足:</p><p> ?。∕IN=59)∩(SECOND=59) ∩(COUNT>10)</p><p><b>  時報高音;當滿足:</b></p><p>  (MIN=59)∩(SECOND=51/53/55/57) ∩(COUNT>10)</p>

43、;<p>  時報低音。利用位尋址區(qū)來存儲SECOND的方法,(SECOND>50)∩(SECOND.0=1)時便滿足報低音的秒條件。利用TO中斷次數(shù)存儲器COUNT的大小可以判斷是否到了后半秒(T0每50ms中斷一次,中斷20次到達一秒)。通過增加一個標志位FC來時下對高低音的區(qū)分,高音不受FC的影響,低音只有當FC=0的時候才對P1.6取反一次。并且每調(diào)用一次本程序便對FC取反一次,便達到每調(diào)用兩次取反一次P1.

44、6的效果。本程序的執(zhí)行時間小于40us,因此多次調(diào)用不過分影響執(zhí)行。</p><p>  4.5中斷(TO)計時程序</p><p>  中斷計時程序的流程比較簡單。程序除實現(xiàn)正常走時外還需要判斷是否到達生日時間置生日標志位有效。程序的輸出均為BCD碼,方便了顯示程序?qū)Ω叩臀坏姆蛛x并查表顯示。程序比較復雜的地方在于對平閏年及大小月的判斷。把月MONTH存儲在位尋址區(qū),當MONTH=02H時

45、判斷是否是平閏年,先將年由BCD碼轉(zhuǎn)化為二進制碼,此時當年的后兩位為全零的時候為閏年(由于只顯示年的個位和十位,由2000年開始,00年、04年…為閏年,其共同特點就是二進制后兩位為零),否則為平年。當MONTH≠2時判斷是否為大小月,MOUTH<7時單月(即MONTH.0=1的月)為大月,否則為小月;當MONTH>7時雙月為大月。</p><p>  4.6中斷(T1)預置程序</p>

46、<p>  T1通過中斷INT0控制開啟或關閉,每次定時50毫秒,存儲地址COUNTS計數(shù)15次執(zhí)行一次中斷程序。由開關(K0,K1)控制預置項目,通過開關K2/K3/K4來分別控制LED12/LED34/LED56的預置,當兩個開關都是有效時,具有優(yōu)先級的區(qū)分,確保無論按幾個開關都最多只有一個項目被預置。判斷預置的優(yōu)先級順序是:</p><p>  LED34>LED12>LED56&l

47、t;/p><p>  這樣安排的原因是由于根據(jù)生活經(jīng)驗LED34所對應的4個項目(小時、鬧鈴分、月、生日日)被預置的可能性最大。在預置日期和生日是要注意對大小月及平閏年進行判斷(判斷方法與中斷計時程序中說明的方法類似,但不需要考慮進位)且月和日在溢出后應置一而不是歸零。</p><p>  4.7中斷(INT0)設定程序</p><p>  中斷INT0設置是否進行預置

48、以及對生日標志的清除。且有如下設置順序:清除預置信號并關T1>清除生日標志>設定預置信號并開T1。每按一次中斷都只執(zhí)行其中一個項目</p><p><b>  5、單模塊軟件測試</b></p><p>  5.1編碼中常用的程序結(jié)構說明</p><p> ?、?JNB SS,THREEB;</p><p>

49、  SJMP THREEA</p><p>  THREEB:LJMPTHREE11;</p><p>  THREEA:JNBP0.3,THREE1</p><p>  由于使用JNB等跳轉(zhuǎn)指令的時候,跳轉(zhuǎn)長度比較短,故需要跳轉(zhuǎn)到比較遠的地方時需要用</p><p><b>  這個結(jié)構。相當于:</b></p&

50、gt;<p>  JNB SS,THREE11</p><p>  JNB P0.3,THREE1</p><p>  ② THREE1:MOV A,LED34</p><p>  ANL A,#0FH</p><p>  MOVC A,@A+DPTR</p><p><b>  MOV P2,

51、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></p><p>  MOV A,LED34&l

52、t;/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><p>  THREE14:SETB P1.2</p>&l

53、t;p><b>  NOP</b></p><p>  DJNZ R0,THREE14</p><p><b>  CLR P1.2</b></p><p>  顯示主程序中常用的語句段,分離LED34中的高半位和低半位作為字形碼段控信號查表偏移量,通過R0延時,延時時間大約為每個數(shù)碼管1ms。</p>

54、<p> ?、?TEN6A:MOV A,MONTH</p><p>  CJNE A,#08H,TEN7A</p><p>  TEN7A:JC TEN9A</p><p>  判斷MONTH是否大于08H,由于CJNE指令不能對直接地址進行比較只能通過A來判斷。</p><p> ?、躆OV A,YEAR</p>

55、<p><b>  ADD A,#01</b></p><p><b>  DA A</b></p><p>  MOV YEAR,A</p><p>  對T0及T1中斷程序中常用的對某項目進行加一并進行BCD碼調(diào)整的的程序段,由于“INC A”指令不影響標志位,故不能和“DA A”指令結(jié)合使用。</p

56、><p>  5.2 單模塊軟件測試中的問題及解決</p><p>  由于此前花費大量的經(jīng)歷在模塊的流程圖設計當中,因此在模塊調(diào)試的過程中并沒有出現(xiàn)太多的問題。主要問題在于語法錯誤,比如前述程序結(jié)果說明中的①、④語句和一些輸入的誤。并且由于程序過于長,難以進行完整的軟件調(diào)試,調(diào)試過程中發(fā)現(xiàn)的問題主要出現(xiàn)在燒寫調(diào)試過程中。</p><p>  6、軟件部分燒寫調(diào)試<

57、;/p><p>  我一共進行了三次軟件部分燒寫調(diào)試,糾正了許多程序錯誤,主要修改部分如下:</p><p><b>  第一次調(diào)試:</b></p><p> ?、僦袛囝A置程序無法進行正常的加一程序</p><p>  ②計時進位有誤,無法正常進位</p><p><b>  ③日期無法正

58、常顯示</b></p><p> ?、荛W爍有錯誤,無法正常閃爍</p><p> ?、蒿@示的數(shù)字不穩(wěn)定,有許多干擾</p><p>  從第一次調(diào)試的結(jié)果上看,幾乎所有的功能都無法正常顯示。事實上,在第一次調(diào)試后對程序進行檢查后發(fā)現(xiàn),造成這些問題的主要原因是程序有十幾處的輸入有誤,并不是程序流程上的問題。因此這里不做過多的敘述。</p>&

59、lt;p><b>  第二次調(diào)試:</b></p><p>  經(jīng)過第一次調(diào)試以后的修改,解決了第一次調(diào)試中出現(xiàn)的前四個問題,但第五個問題“顯示的數(shù)字不穩(wěn)定,有許多干擾”仍然無法發(fā)現(xiàn)問題的所在,在機房進行了多次修改都不成功。經(jīng)過思考和對跟其他同學的顯示語句進行比對,我判斷問題的原因可能是我在過去編程時養(yǎng)成的一個不好的習慣,我經(jīng)常使用的一個延時辦法,容易把干擾放大。對于數(shù)碼管的顯示及延時

60、我經(jīng)常使用以下語句:</p><p>  “AAA:MOV P1,#位控</p><p>  MOV P2,#段控</p><p>  DJNZ R0,AAA ”</p><p>  這個語句段比較簡單,不需要另外編寫一個延時程序,延時時間大約1.3ms,用在干擾語句比較少的地方很方便。但卻可能出現(xiàn)一個隱患,假如P1或者P2在賦值過程中會出現(xiàn)

61、干擾,那么對其重復的賦值便會放大干擾。并且由于常常只需要給其中一個數(shù)碼管賦值,而這個語句卻一次性給所有的數(shù)碼管賦位控信號,可能將單個數(shù)碼管段控信號中出現(xiàn)的干擾傳遞到其他管中。因此我對以上程序做了修改如下:</p><p>  MOV P2,#段控</p><p>  THREE13:SETB P1.3</p><p><b>  NOP</b>

62、</p><p>  DJNZ R0,THREE13</p><p><b>  CLR P1.3</b></p><p>  這樣便解決了以上提出的問題。實際上,通過調(diào)用延時程序的方法進行延時同樣也不會出現(xiàn)以上問題,由此可見,在軟件設計中養(yǎng)成一個規(guī)范的設計習慣極為重要。在第二天調(diào)試的時候發(fā)現(xiàn)這個語句的確能夠避免干擾的出現(xiàn)。</p>

63、<p><b>  第三次調(diào)試:</b></p><p>  第三次調(diào)試基本解決了上述出現(xiàn)的問題,但又發(fā)現(xiàn)了兩個新問題:</p><p> ?、僭诔绦驁?zhí)行的過程中,一旦進入生日顯示狀態(tài)便無法通過INT0跳出,除非日期走過一天。</p><p> ?、谠谕瑫r撥下兩個以上的預置開關時,預置和閃爍可能出現(xiàn)不同步的情況。比如預置時間時可能

64、出現(xiàn)小時在閃爍,但改變的確實分鐘的值。由于對程序的流程比較熟悉,產(chǎn)生這兩個問題原因很快就被我發(fā)現(xiàn)。第一個問題產(chǎn)生原因主要是雖然每次按下INT0都將清除生日標志,但生日標志的設定卻是每秒進行一次,因此生日標志被清除后馬上就又會出現(xiàn),所以無法跳出生日顯示。為了解決這個問題,我增加了一個標志位05H(bit)來控制生日標志的設定,只有在05H(bit)有效的情況下,生日顯示才有效,在按INT0清除生日表示的時候同時清除05H(bit),而05

65、H(bit)只有在重新預置生日時間以后或是過了新的一年才會有效,其設定不受外界控制。</p><p>  第二個問題產(chǎn)生的原因主要是比較簡單,預置時間時,判斷哪個項目閃爍的優(yōu)先級,和判斷哪個項目數(shù)值改變的優(yōu)先級不一致,由于是中斷程序和顯示主程序同時控制這個功能,因此這兩個優(yōu)先級必須一樣,否則當同時按下兩個項目的預置開關的時候,中斷程序首先判斷一個開關有效,改變其對應值,而顯示主程序卻首先判斷第二個開關有效,對第二

66、個開關的顯示值進行閃爍。因此只要修改其優(yōu)先級一致即可解決這個問題。程序中設置的優(yōu)先級是K3>K2>K4。</p><p><b>  5、總結(jié)</b></p><p>  在汪普林老師耐心的指導下,我順利完成了這次單片機課程設計課題中的多功能電子表的設計,通過這次的設計使我認識到本人對單片機方面的知識知道的太少了,對于書本上的很多知識還不能靈活運用,尤其是

67、對程序設計語句的理解和運用,不能夠充分理解每個語句的具體含義,導致編程的程序過于復雜,使得需要的存儲空間增大。損耗了過多的內(nèi)存資源。</p><p>  本次的設計使我從中學到了一些很重要的東西,那就是如何從理論到實踐的轉(zhuǎn)化,怎樣將我所學到的知識運用到我以后的工作中去。在大學的課堂的學習只是在給我們灌輸專業(yè)知識,而我們應把所學的用到我們現(xiàn)實的生活中去,此次的多功能電子版表設計給我奠定了一個實踐基礎,我會在以后的學

68、習、生活中磨練自己,使自己適應于以后的競爭,同時在查找資料的過程中我也學到了許多新的知識,在和同學協(xié)作過程中增進同學間的友誼,使我對團隊精神的積極性和重要性有了更加充分的理解。</p><p><b>  致謝</b></p><p>  最后,感謝汪普林老師對我的細心的指導,正是由于汪老師的細心的輔導和他提供給我們的參考資料,使得我的課程設計能夠順利的完成,同時感謝

69、所以在課程設計過程中給于我?guī)椭^的老師和同學,非常感謝。</p><p><b>  參考文獻:</b></p><p>  [1] 謝自美.電子線路設計·實驗·測試[M].武漢:華中理工大學出版社,1992.</p><p>  [2] 何立民.單片機應用系統(tǒng)設計[M].北京:北京航空航天大學出版社,1993.</p

70、><p>  [3] 樓然笛.單片機開發(fā)[M].北京:人民郵電出版社,1994.[4] 付家才.單片機控制工程實踐技術[M].北京:化學工業(yè)出版社 2004.3.[5] 李光才.單片機課程設計 實例指導[M]. 北京:北京航空航天大學出版社 2004.[6] 朱定華.單片機原理及接口技術實驗[M].北京:北方交通大學出版社2002.11.</p><p>  [7] 劉湘濤.江世明.單片

71、機原理與應用[M]. 北京:電子工業(yè)出版社,2006.</p><p><b>  附錄A</b></p><p><b>  附錄B:</b></p><p>  ;*************************************************************ONE初始化</p>

72、<p><b>  ORG 0H</b></p><p><b>  SJMP ONE</b></p><p><b>  ORG 0003H</b></p><p>  LJMP ELEVEN</p><p><b>  ORG 000BH</b&

73、gt;</p><p><b>  LJMP NINE</b></p><p><b>  ORG 001BH</b></p><p><b>  LJMP TEN</b></p><p>  ONE:LED12 EQU 30H ;數(shù)碼管12顯示緩存</p>&l

74、t;p>  LED34 EQU 31H ;數(shù)碼管34顯示緩存</p><p>  LED56 EQU 32H ;數(shù)碼管56顯示緩存</p><p>  COUNT EQU 33H ;定時器T0(用來走時)計數(shù)值存儲器(計數(shù)中斷20次到1秒)</p><p>  COUNTS EQU 34H ;定時器T1(用來預置)計數(shù)值存儲器(計數(shù)中斷15次到預置值加1)&l

75、t;/p><p>  HOUR EQU 40H ;以下為時間,日期,鬧鈴時間,生日的存儲地址</p><p>  MIN EQU 41H</p><p>  SECOND EQU 22H</p><p>  YEAR EQU 50H</p><p>  MONTH EQU 23H</p><p> 

76、 DAY EQU 52H</p><p>  RH EQU 60H ;鬧鈴小時</p><p>  RM EQU 61H ;鬧鈴分</p><p>  RE EQU 62H ;鬧鈴使能</p><p>  BM EQU 71H ;生日-月份</p><p>  BD EQU 72H ;生日-天</p>&

77、lt;p>  MOV LED12,#0</p><p>  MOV LED34,#0</p><p>  MOV LED56,#0</p><p>  MOV COUNT,#0</p><p>  MOV COUNTS,#0</p><p>  MOV HOUR,#0</p><p>  

78、MOV MIN,#0</p><p>  MOV SECOND,#0</p><p>  MOV YEAR,#0</p><p>  MOV MONTH,#1</p><p>  MOV DAY,#1</p><p><b>  MOV RH,#0</b></p><p>

79、<b>  MOV RM,#0</b></p><p><b>  MOV RE,#0</b></p><p><b>  MOV BM,#6</b></p><p><b>  MOV BD,#1</b></p><p>  BS BIT 00H ;bi

80、rthday symbol生日標志(到生日那天就為1)</p><p>  SS BIT 01H ;set symbol預置信號(按下中斷預置為1,便開始閃爍和預置)</p><p>  GS BIT 02H ;glisten symbol閃爍標志</p><p>  FC BIT 03H ;frequency control頻率控制</p><

81、p>  NB BIT 04H ;neglect bitrhday symbol 忽略生日標志</p><p><b>  CLR BS</b></p><p><b>  CLR SS</b></p><p><b>  CLR GS</b></p><p><b&

82、gt;  CLR FC</b></p><p><b>  CLR NB</b></p><p>  SETB 05H ;生日顯示有效標志位</p><p>  MOV IP,#02H;中斷優(yōu)先級:T0>INT0>T1</p><p>  MOV TMOD,#11H</p><

83、p>  MOV IE,#8BH</p><p><b>  SETB IT0</b></p><p>  MOV TH0,#3CH ;50ms</p><p>  MOV TL0,#0B0H</p><p><b>  SETB TR0</b></p><p>  MO

84、V R1,#50 ;顯示延時用</p><p>  MOV R0,#0 ;顯示延時用</p><p>  ;************************************************************** TWO檢測開關號</p><p>  TWO:MOV P0,#0FFH</p><p>  JB P0.5,T

85、WO1</p><p>  MOV RE,#0A0H ;0A0表示鬧鈴無效,送0A0是為了方便將使能查表顯示,表中第A項為"-"</p><p><b>  SJMP TWO2</b></p><p>  TWO1:MOV RE,#0A1H</p><p>  TWO2:JB P0.0,TWO4<

86、;/p><p>  JB P0.1,TWO3</p><p>  MOV LED12,HOUR</p><p>  MOV LED34,MIN</p><p>  MOV LED56,SECOND</p><p>  SJMP THREE</p><p>  TWO3:MOV LED12,YEAR&

87、lt;/p><p>  MOV LED34,MONTH</p><p>  MOV LED56,DAY</p><p>  SJMP THREE</p><p>  TWO4:JB P0.1,TWO5</p><p>  MOV LED12,RH</p><p>  MOV LED34,RM<

88、/p><p>  MOV LED56,RE</p><p>  SJMP THREE</p><p>  TWO5:MOV LED12,BM</p><p>  MOV LED34,BD</p><p>  MOV LED56,#0BCH</p><p>  SJMP THREE</p>

89、<p>  ;************************************** THREE顯示主程序(同時包含了鬧鈴,預置閃爍,鬧鈴功能)</p><p>  THREE:MOV P1,#0</p><p>  MOV P0,#0FFH</p><p>  MOV DPTR,#TAB3</p><p>  JNB S

90、S,THREEB ;判斷預置信號是否有效,預置有效則轉(zhuǎn)入判斷閃爍顯示模塊,否則轉(zhuǎn)入正常顯示模</p><p><b>  塊</b></p><p>  SJMP THREEA</p><p>  THREEB:LJMP THREE11 ;THREE11是正常顯示并判斷整點報時及鬧鈴模塊</p><p>  THREEA

91、:JNB P0.3,THREE1 ;開始是判斷閃爍顯示,這句判斷是否預置分/月/生日的日/鬧鈴分</p><p>  JNB GS,THREE1 ;是否閃爍?</p><p>  LCALL TWELVE ;閃爍則調(diào)用延時不顯示LED34</p><p>  SJMP THREE4</p><p>  THREE1:MOV A,LED34&l

92、t;/p><p>  ANL A,#0FH</p><p>  MOVC A,@A+DPTR</p><p><b>  MOV P2,A</b></p><p>  THREE2:SETB P1.3</p><p><b>  NOP</b></p><p&

93、gt;  DJNZ R0,THREE2</p><p><b>  CLR P1.3</b></p><p>  MOV A,LED34</p><p><b>  SWAP A</b></p><p>  ANL A,#0FH</p><p>  MOVC A,@A+DPT

94、R</p><p><b>  MOV P2,A</b></p><p>  THREE3:SETB P1.2</p><p><b>  NOP</b></p><p>  DJNZ R0,THREE3</p><p><b>  CLR P1.2</b&g

95、t;</p><p>  JNB P0.2,THREE4 ;判斷是否預置小時/年/生日月/鬧鈴的小時</p><p>  JNB GS,THREE4 ;是否顯示小時/年/生日月/鬧鈴的小時</p><p>  LCALL TWELVE</p><p>  SJMP THREE7</p><p>  THREE4:MOV

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

97、t;<p>  DJNZ R0,THREE5</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>  MOV

98、C A,@A+DPTR</p><p><b>  MOV P2,A</b></p><p>  THREE6:SETB P1.0</p><p><b>  NOP</b></p><p>  DJNZ R0,THREE6</p><p><b>  CLR P1

99、.0</b></p><p>  JB P0.0,THREE7 ;數(shù)碼管56只有在顯示日期的天時才有預置閃爍功能,其余三項都不需要判斷閃爍</p><p>  JNB P0.1,THREE7</p><p>  JB P0.3,THREE7</p><p>  JNB P0.4,THREE7</p><p>

100、;  JNB GS,THREE7</p><p>  LCALL TWELVE</p><p>  SJMP THREE10</p><p>  THREE7:MOV A,LED56</p><p>  ANL A,#0FH</p><p>  MOVC A,@A+DPTR</p><p>&l

101、t;b>  MOV P2,A</b></p><p>  THREE8:SETB P1.5</p><p><b>  NOP</b></p><p>  DJNZ R0,THREE8</p><p><b>  CLR P1.5</b></p><p> 

102、 MOV A,LED56</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><p>  THREE9:SETB P1.4&

103、lt;/p><p><b>  NOP</b></p><p>  DJNZ R0,THREE9</p><p><b>  CLR P1.4</b></p><p>  THREE10:DJNZ R1,TWOA</p><p><b>  SJMP TWOB</

104、b></p><p>  TWOA:LJMP TWO</p><p>  TWOB:MOV R1,#50 ;判斷閃爍一次是否完成</p><p>  CPL GS ;取反閃爍標志,用于控制閃爍的亮和滅</p><p>  LJMP TWO ;一輪顯示完后再判斷開關號</p><p>  ;*******

105、*******************正常顯示</p><p>  THREE11:LCALL EIGHT ;判斷是否取反P1.6即輸出鬧鈴或整點報時,以下每次顯示都要調(diào)用一次</p><p>  JB NB,THREE12 ;如果是在整點報時狀態(tài)就不顯示生日提醒,報時過后顯示提醒</p><p>  JNB BS,THREE12</p><p&

106、gt;  SJMP SEVEN ;跳到生日提醒程序</p><p>  THREE12:CLR NB ;開始正常顯示時間及判斷鬧鈴輸出</p><p>  MOV A,LED34</p><p>  ANL A,#0FH</p><p>  MOVC A,@A+DPTR</p><p><b> 

107、 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></p><p>  MOV A

108、,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><p>  THREE14:SETB P1.2</p

109、><p><b>  NOP</b></p><p>  DJNZ R0,THREE14</p><p><b>  CLR P1.2</b></p><p>  LCALL EIGHT</p><p>  MOV A,LED12</p><p>  AN

110、L 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><p>  DJNZ R0,THREE15&l

111、t;/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>  MOVC A,@A+DPTR</p><p>

112、;<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 P1.0</b></p><p

113、>  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>  THREE17:SETB P1.5</p>

114、;<p><b>  NOP</b></p><p>  DJNZ R0,THREE17</p><p><b>  CLR P1.5</b></p><p>  MOV A,LED56</p><p><b>  SWAP A</b></p>&l

115、t;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></p><p>  DJNZ R

116、0,THREE18</p><p><b>  CLR P1.4</b></p><p>  LJMP TWO ;一輪顯示完后判開關</p><p>  TAB3:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H 7FH,6FH,40H,7CH,5EH</p><p>  ;0.1.2.3.4.5.6

117、.7.8.9.-.b.d,的字形表"bd"在顯示生日時間時顯示在LED56</p><p>  ;**************************************************SEVEN生日時顯示生日祝福語”HAPPY”</p><p>  SEVEN:MOV P1,#01H</p><p>  MOV P2,#76H<

118、;/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>  MOV P2,#73H

119、</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>  MOV P2,

120、#6EH</p><p>  DJNZ R0,SEVEN4</p><p><b>  LJMP TWO</b></p><p>  ;******************************************************************EIGHT判斷是否鬧鈴子程序</p><p>  EI

121、GHT: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<

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

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

124、;/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 ;判斷是否報低音&l

溫馨提示

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

評論

0/150

提交評論