2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩39頁(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><b>  摘 要</b></p><p>  單片計(jì)算機(jī)即單片微型計(jì)算機(jī)。由RAM ,ROM,CPU構(gòu)成,定時(shí),計(jì)數(shù)和多種接口于一體的微控制器。它體積小,成本低,功能強(qiáng),廣泛應(yīng)用于智能產(chǎn)業(yè)和工業(yè)自動(dòng)化上。而51系列單片機(jī)是各單片機(jī)中最為典型和最有代表性的一種。這次課程設(shè)計(jì)通過(guò)對(duì)它的學(xué)習(xí),應(yīng)用,從而達(dá)到學(xué)習(xí)、設(shè)計(jì)、開(kāi)發(fā)軟、硬的能力。</p><p>

2、;  本設(shè)計(jì)是通過(guò)單片機(jī)設(shè)計(jì)一個(gè)多功能電子表,要求不僅具有電子時(shí)鐘的功能還具有鬧鈴、設(shè)定鬧鈴時(shí)間、整點(diǎn)報(bào)時(shí)、生日提醒功能,而且能夠預(yù)置生日時(shí)間</p><p>  關(guān)鍵字:?jiǎn)纹瑱C(jī);多功能電子表;跑表;數(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單片機(jī)介紹3&l

8、t;/p><p>  2、設(shè)計(jì)功能及說(shuō)明6</p><p>  3、整體設(shè)計(jì)方案8</p><p>  4、單模塊流程設(shè)計(jì)及程序設(shè)計(jì)8</p><p>  4.1初始化模塊8</p><p>  4.2 開(kāi)關(guān)檢測(cè)模塊9</p><p>  4.3顯示主程序9</p><

9、;p>  4.4鬧鈴及整點(diǎn)報(bào)時(shí)判斷程序(EIGHT)11</p><p>  4.5中斷(TO)計(jì)時(shí)程序11</p><p>  4.6中斷(T1)預(yù)置程序11</p><p>  4.7中斷(INT0)設(shè)定程序12</p><p>  5、單模塊軟件測(cè)試12</p><p>  5.1編碼中常用的程序

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

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

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

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

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

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

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

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

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

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

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

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

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

23、出端。</p><p><b>  2、設(shè)計(jì)功能及說(shuō)明</b></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>

24、<p> ?、?具有鬧鈴及設(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> ?、?

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

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

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

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

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

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

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

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

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

34、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>  04H(bit,NB)—忽略生日標(biāo)志,控制預(yù)置及報(bào)時(shí)的優(yōu)先級(jí)高于生日顯示</p><p>  05H(bit)—控制生日信號(hào)的有效與否,其使用目的參見(jiàn)調(diào)試過(guò)程</p>

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

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

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

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

39、標(biāo)志位判斷預(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í)條件進(jìn)行判斷,符合條件則對(duì)P1.6取反一次并使NB(忽略生日)有效,此時(shí)行對(duì)BS(生日標(biāo)志)的判斷,即使響鈴優(yōu)先級(jí)高于生日顯示(其實(shí)也可以對(duì)程序進(jìn)行修改使響鈴和生日顯示不發(fā)生沖突,修改方法參見(jiàn)程序優(yōu)化)。當(dāng)不響鈴并且生日標(biāo)志BS有效時(shí)顯示HAPP

40、Y其單列開(kāi)來(lái)。本程序由生日標(biāo)志BS控制,當(dāng)?shù)竭_(dá)生日時(shí)間時(shí),T0中斷程序會(huì)將BS置1使之有效在顯示主程序中通過(guò)判斷BS的置來(lái)控制是否執(zhí)行本模塊標(biāo)志BS有效時(shí)顯示HAPPY其單列開(kāi)來(lái)。本程序由生日標(biāo)志BS控制,當(dāng)?shù)竭_(dá)生日時(shí)間時(shí),T0中斷程序會(huì)將BS置1使之有效在顯示主程序中通過(guò)判斷BS的置來(lái)控制是否執(zhí)行本模塊</p><p>  4.4鬧鈴及整點(diǎn)報(bào)時(shí)判斷程序(EIGHT)</p><p>  

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

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

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

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

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

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

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

48、以及對(duì)生日標(biāo)志的清除。且有如下設(shè)置順序:清除預(yù)置信號(hào)并關(guān)T1>清除生日標(biāo)志>設(shè)定預(yù)置信號(hào)并開(kāi)T1。每按一次中斷都只執(zhí)行其中一個(gè)項(xiàng)目</p><p><b>  5、單模塊軟件測(cè)試</b></p><p>  5.1編碼中常用的程序結(jié)構(gòu)說(shuō)明</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)指令的時(shí)候,跳轉(zhuǎn)長(zhǎng)度比較短,故需要跳轉(zhuǎn)到比較遠(yuǎn)的地方時(shí)需要用</p><p><b>  這個(gè)結(jié)構(gòu)。相當(dāng)于:</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>  顯示主程序中常用的語(yǔ)句段,分離LED34中的高半位和低半位作為字形碼段控信號(hào)查表偏移量,通過(guò)R0延時(shí),延時(shí)時(shí)間大約為每個(gè)數(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指令不能對(duì)直接地址進(jìn)行比較只能通過(guò)A來(lái)判斷。</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>  對(duì)T0及T1中斷程序中常用的對(duì)某項(xiàng)目進(jìn)行加一并進(jìn)行BCD碼調(diào)整的的程序段,由于“INC A”指令不影響標(biāo)志位,故不能和“DA A”指令結(jié)合使用。</p

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

57、;/p><p>  我一共進(jìn)行了三次軟件部分燒寫(xiě)調(diào)試,糾正了許多程序錯(cuò)誤,主要修改部分如下:</p><p><b>  第一次調(diào)試:</b></p><p> ?、僦袛囝A(yù)置程序無(wú)法進(jìn)行正常的加一程序</p><p>  ②計(jì)時(shí)進(jìn)位有誤,無(wú)法正常進(jìn)位</p><p><b> ?、廴掌跓o(wú)法正

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

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

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

61、干擾,那么對(duì)其重復(fù)的賦值便會(huì)放大干擾。并且由于常常只需要給其中一個(gè)數(shù)碼管賦值,而這個(gè)語(yǔ)句卻一次性給所有的數(shù)碼管賦位控信號(hào),可能將單個(gè)數(shù)碼管段控信號(hào)中出現(xiàn)的干擾傳遞到其他管中。因此我對(duì)以上程序做了修改如下:</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>  這樣便解決了以上提出的問(wèn)題。實(shí)際上,通過(guò)調(diào)用延時(shí)程序的方法進(jìn)行延時(shí)同樣也不會(huì)出現(xiàn)以上問(wèn)題,由此可見(jiàn),在軟件設(shè)計(jì)中養(yǎng)成一個(gè)規(guī)范的設(shè)計(jì)習(xí)慣極為重要。在第二天調(diào)試的時(shí)候發(fā)現(xiàn)這個(gè)語(yǔ)句的確能夠避免干擾的出現(xiàn)。</p>

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

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

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

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

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

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

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

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

71、機(jī)原理與應(yīng)用[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 ;定時(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ù)置值加1)&l

75、t;/p><p>  HOUR EQU 40H ;以下為時(shí)間,日期,鬧鈴時(shí)間,生日的存儲(chǔ)地址</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 ;鬧鈴小時(shí)</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生日標(biāo)志(到生日那天就為1)</p><p>  SS BIT 01H ;set symbol預(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><

81、p>  NB BIT 04H ;neglect bitrhday symbol 忽略生日標(biāo)志</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 ;生日顯示有效標(biāo)志位</p><p>  MOV IP,#02H;中斷優(yōu)先級(jí):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 ;顯示延時(shí)用</p><p>  MOV R0,#0 ;顯示延時(shí)用</p><p>  ;************************************************************** TWO檢測(cè)開(kāi)關(guān)號(hào)</p><p>  TWO:MOV P0,#0FFH</p><p>  JB P0.5,T

85、WO1</p><p>  MOV RE,#0A0H ;0A0表示鬧鈴無(wú)效,送0A0是為了方便將使能查表顯示,表中第A項(xiàng)為"-"</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顯示主程序(同時(shí)包含了鬧鈴,預(yù)置閃爍,鬧鈴功能)</p><p>  THREE:MOV P1,#0</p><p>  MOV P0,#0FFH</p><p>  MOV DPTR,#TAB3</p><p>  JNB S

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

91、:JNB P0.3,THREE1 ;開(kāi)始是判斷閃爍顯示,這句判斷是否預(yù)置分/月/生日的日/鬧鈴分</p><p>  JNB GS,THREE1 ;是否閃爍?</p><p>  LCALL TWELVE ;閃爍則調(diào)用延時(shí)不顯示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 ;判斷是否預(yù)置小時(shí)/年/生日月/鬧鈴的小時(shí)</p><p>  JNB GS,THREE4 ;是否顯示小時(shí)/年/生日月/鬧鈴的小時(shí)</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只有在顯示日期的天時(shí)才有預(yù)置閃爍功能,其余三項(xiàng)都不需要判斷閃爍</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 ;取反閃爍標(biāo)志,用于控制閃爍的亮和滅</p><p>  LJMP TWO ;一輪顯示完后再判斷開(kāi)關(guān)號(hào)</p><p>  ;*******

105、*******************正常顯示</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í)過(guò)后顯示提醒</p><p>  JNB BS,THREE12</p><p&

106、gt;  SJMP SEVEN ;跳到生日提醒程序</p><p>  THREE12:CLR NB ;開(kāi)始正常顯示時(shí)間及判斷鬧鈴輸出</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 ;一輪顯示完后判開(kāi)關(guān)</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"在顯示生日時(shí)間時(shí)顯示在LED56</p><p>  ;**************************************************SEVEN生日時(shí)顯示生日祝福語(yǔ)”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 ;鬧鈴時(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 ;是

123、否等于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<

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 ;判斷是否報(bào)低音&l

溫馨提示

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