基于單片機(jī)的多功能電子表的設(shè)計(jì)論文 (2)_第1頁(yè)
基于單片機(jī)的多功能電子表的設(shè)計(jì)論文 (2)_第2頁(yè)
基于單片機(jī)的多功能電子表的設(shè)計(jì)論文 (2)_第3頁(yè)
基于單片機(jī)的多功能電子表的設(shè)計(jì)論文 (2)_第4頁(yè)
基于單片機(jī)的多功能電子表的設(shè)計(jì)論文 (2)_第5頁(yè)
已閱讀5頁(yè),還剩33頁(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、. . . 課程設(shè)計(jì)(論文)題 目名稱基于單片機(jī)的多功能電子表設(shè)計(jì)課 程 名 稱單片機(jī)原理與在電氣測(cè)控學(xué)科中的應(yīng)用摘 要單片計(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ā)軟、硬的能力。本設(shè)計(jì)是通過(guò)單片機(jī)設(shè)計(jì)一個(gè)多功能電子表,要求不僅具有電子時(shí)鐘的功能還具有鬧鈴、設(shè)定鬧鈴時(shí)間、整點(diǎn)報(bào)時(shí)、生日提醒功能,而且能夠預(yù)置生日時(shí)間關(guān)鍵字:?jiǎn)纹瑱C(jī);多功能電子表;跑表;數(shù)碼管顯示。目 錄摘要

2、1引言31、 AT89S52單片機(jī)介紹42、設(shè)計(jì)功能與說(shuō)明73、整體設(shè)計(jì)方案94、單模塊流程設(shè)計(jì)與程序設(shè)計(jì)104.1初始化模塊(ONE)114.2開(kāi)關(guān)檢測(cè)模塊(TWO)114.3顯示主程序(THREE)14.4鬧鈴與整點(diǎn)報(bào)時(shí)判斷程序(EIGHT)14.5中斷(TO)計(jì)時(shí)程序(NINE)04.6中斷(T1)預(yù)置程序(TEN)04.7中斷(INT0)設(shè)定程序(ELEVEN)05、總結(jié)1致2參考文獻(xiàn):3附錄A4附錄B:5引言1957年,Ventura發(fā)明了世界上第一個(gè)電子表,從而奠定了電子表的基礎(chǔ),電子表開(kāi)始迅速發(fā)展起來(lái)?,F(xiàn)代的電子表是基于單片機(jī)的一種計(jì)時(shí)工具,采用延時(shí)程序產(chǎn)生一定的時(shí)間中斷,用于一

3、秒的定義,通過(guò)計(jì)數(shù)方式進(jìn)行滿六十秒分鐘進(jìn)一,滿六十分小時(shí)進(jìn)一,滿二十四小時(shí)小時(shí)清零。從而達(dá)到計(jì)時(shí)的功能,是人民日常生活不可缺少的工具。現(xiàn)在高精度的計(jì)時(shí)工具大多數(shù)都使用了石英晶體振蕩器,由于電子鐘、石英鐘、石英表都采用了石英技術(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ì),片選的靈活性好。1、 AT89S52單片機(jī)介紹AT89S52 具有以下標(biāo)準(zhǔn)功能:8k 字節(jié) Flash,256 字節(jié) RAM,32 位 I/O 口線,看門

4、狗定時(shí)器,2 個(gè)數(shù)據(jù)指針,三個(gè) 16 位定時(shí)器/計(jì)數(shù)器,一個(gè) 6 向量 2 級(jí)中斷結(jié)構(gòu),全雙工串行口,片晶振與時(shí)鐘電路。另外,AT89S52 可降至 0Hz 靜態(tài)邏輯操作,支持 2 種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許 RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM 容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。圖1.1 AT89S52 引腳圖VCC : 電源GND: 地P0 口:P0 口是一個(gè) 8 位漏極開(kāi)路的雙向 I/O 口。作為輸出口,每位能驅(qū)動(dòng) 8 個(gè) TTL 邏輯電平。對(duì) P0 端口寫“1”時(shí),引腳用作高阻抗輸入。當(dāng)訪

5、問(wèn)外部程序和數(shù)據(jù)存儲(chǔ)器時(shí),P0 口也被作為低 8 位地址/數(shù)據(jù)復(fù)用。在這種模式下,P0 具有部上拉電阻。在 flash 編程時(shí),P0 口也用來(lái)接收指令字節(jié);在程序校驗(yàn)時(shí),輸出指令字節(jié)。程序校時(shí),需要外部上拉電阻。P1 口:P1 口是一個(gè)具有部上拉電阻的 8 位雙向 I/O 口,p1 輸出緩沖器能驅(qū)動(dòng) 4 個(gè)TTL 邏輯電平。對(duì) P1 端口寫“1”時(shí),部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于部電阻的原因,將輸出電流(IIL)。此外,P1.0 和 P1.2 分別作定時(shí)器/計(jì)數(shù)器 2 的外部計(jì)數(shù)輸入(P1.0/T2)和時(shí)器/計(jì)數(shù)器 2的觸發(fā)輸入(P1.1/T

6、2EX),具體如下表所示。腳號(hào)第二功能P1.0T2(定時(shí)器/計(jì)數(shù)器 T2 的外部計(jì)數(shù)輸入),時(shí)鐘輸出P1.1T2EX(定時(shí)器/計(jì)數(shù)器 T2 的捕捉/重載觸發(fā)信號(hào)和方向控制)P1.5MOSI(在系統(tǒng)編程用)P1.6MISO(在系統(tǒng)編程用)P1.7SCK(在系統(tǒng)編程用)P2 口:P2 口是一個(gè)具有部上拉電阻的 8 位雙向 I/O 口,P2 輸出緩沖器能驅(qū)動(dòng) 4 個(gè)TTL 邏輯電平。對(duì) P2 端口寫“1”時(shí),部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于部電阻的原因,將輸出電流(IIL)在訪問(wèn)外部程序存儲(chǔ)器或用 16 位地址讀取外部數(shù)據(jù)存儲(chǔ)器(例如執(zhí)行 MOVX

7、DPTR)時(shí),P2 口送出高八位地址P3 口:P3 口是一個(gè)具有部上拉電阻的 8 位雙向 I/O 口,p2 輸出緩沖器能驅(qū)動(dòng) 4 個(gè)TTL 邏輯電平。對(duì) P3 端口寫“1”時(shí),部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于部電阻的原因,將輸出電流(IIL)。P3 口亦作為 AT89S52 特殊功能(第二功能)使用,如下表所示。腳號(hào)第二功能P3.0RXD(串行輸入)P3.1TXD(串行輸出)P3.2INT0(外部中斷 0)P3.3INT0(外部中斷 0)P3.4T0(定時(shí)器 0 外部輸入)P3.5T1(定時(shí)器 1 外部輸入)P3.6WR(外部數(shù)據(jù)存儲(chǔ)器寫選通)

8、P3.7RD(外部數(shù)據(jù)存儲(chǔ)器寫選通)RST: 復(fù)位輸入。晶振工作時(shí),RST 腳持續(xù) 2 個(gè)機(jī)器周期高電平將使單片機(jī)復(fù)位??撮T狗計(jì)時(shí)完成后,RST 腳輸出 96 個(gè)晶振周期的高電平。特殊寄存器 AUXR(地址 8EH)上的 DISRTO 位可以使此功能無(wú)效。DISRTO 默認(rèn)狀態(tài)下,復(fù)位高電平有效。ALE/PROG:地址鎖存控制信號(hào)(ALE)是訪問(wèn)外部程序存儲(chǔ)器時(shí),鎖存低 8 位地址的輸出脈沖。在 flash 編程時(shí),此引腳(PROG)也用作編程輸入脈沖。在一般情況下,ALE 以晶振六分之一的固定頻率輸出脈沖,可用來(lái)作為外部定時(shí)器或時(shí)鐘使用。然而,特別強(qiáng)調(diào),在每次訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),ALE 脈

9、沖將會(huì)跳過(guò)。PSEN:外部程序存儲(chǔ)器選通信號(hào)(PSEN)是外部程序存儲(chǔ)器選通信號(hào)。當(dāng) AT89S52 從外部程序存儲(chǔ)器執(zhí)行外部代碼時(shí),PSEN 在每個(gè)機(jī)器周期被激活兩次,而在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),PSEN 將不被激活。EA/VPP:訪問(wèn)外部程序存儲(chǔ)器控制信號(hào)。為使能從 0000H 到 FFFFH 的外部程序存儲(chǔ)器讀取指令,EA 必須接 GND。為了執(zhí)行部程序指令,EA 應(yīng)該接 VCC。在 flash 編程期間,EA 也接收 12 伏 VPP 電壓。XTAL1:振蕩器反相放大器和部時(shí)鐘發(fā)生電路的輸入端。XTAL2:振蕩器反相放大器的輸出端。2、設(shè)計(jì)功能與說(shuō)明電子數(shù)字鐘實(shí)現(xiàn)的主要功能: 實(shí)現(xiàn)正常走

10、時(shí)(秒分時(shí)日月年進(jìn)位) 能夠預(yù)置時(shí)間和日期 能夠自動(dòng)區(qū)分平閏年和大小月 具有鬧鈴與設(shè)定鬧鈴時(shí)間功能 具有整點(diǎn)報(bào)時(shí)功能 具有生日提醒功能,能夠預(yù)置生日時(shí)間 在任何一種預(yù)置狀態(tài)下,預(yù)置項(xiàng)目會(huì)閃爍顯示其它設(shè)計(jì)說(shuō)明 優(yōu)先級(jí):預(yù)置鬧鈴報(bào)時(shí)生日提醒正常顯示,即預(yù)置狀態(tài)下鬧鈴、報(bào)時(shí)功能與生日提醒功能都無(wú)效 生日時(shí)間到五個(gè)數(shù)碼管顯示“HAPPY” 生日顯示狀態(tài)下,按下中斷INT0恢復(fù)正常顯示且此后只有在下更改生日日期或第二年生日顯示才有效。 正常顯示狀態(tài)下按下中斷INT0進(jìn)入預(yù)置狀態(tài),再按一次恢復(fù)。 用數(shù)碼管(K0,K1)控制顯示狀態(tài):00:時(shí)間,01:鬧鈴時(shí)間,10:日期,11。生日時(shí)間且顯示樣板如下圖所示

11、:生日:6 月1 日生日,最后兩位bd 為birthday 的縮寫。鬧鈴:于早晨6 點(diǎn)10 分響,最后一位為一表示使能有效。日期:08 年2 月29 日時(shí)間:12 點(diǎn)39 分45 秒 預(yù)置由撥碼開(kāi)關(guān)K2/K3/K4分別控制數(shù)碼管12/34/56顯示值,預(yù)置優(yōu)先級(jí):LED34LED12LED56(相應(yīng)數(shù)碼管顯示的項(xiàng)目,顯示狀態(tài)下才能預(yù)置) 整點(diǎn)報(bào)時(shí)聲音為59分51、53、55、57秒的后半秒報(bào)四聲低音, 59秒的后半秒報(bào)一聲高音 鬧鈴每次響一分鐘 不論是預(yù)置狀態(tài)還是正常走時(shí)狀態(tài)均能夠自動(dòng)區(qū)分平閏年和大小月 鬧鈴使能由撥碼開(kāi)關(guān)K5控制并實(shí)時(shí)顯示3、整體設(shè)計(jì)方案系統(tǒng)硬件電路根據(jù)系統(tǒng)功能可知,需要六個(gè)

12、數(shù)碼管,一個(gè)外部中斷INT0,一個(gè)揚(yáng)聲器,由此結(jié)合單片機(jī)課程學(xué)習(xí)中對(duì)實(shí)驗(yàn)面板的了解,做出如下電路:如圖,晶振頻率12MHz,撥碼開(kāi)關(guān)數(shù)值由P0口讀入;P2口的輸出作為控制數(shù)碼管的段控信號(hào),經(jīng)74LS573即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口控制。4、單模塊流程設(shè)計(jì)與程序設(shè)計(jì)在完成了系統(tǒng)總流程設(shè)計(jì)后,便進(jìn)入到了系統(tǒng)設(shè)計(jì)中工作量最大的模塊流程設(shè)計(jì)。由于系統(tǒng)模塊劃分雖然是系統(tǒng)設(shè)計(jì)的基礎(chǔ),但比較簡(jiǎn)單而且模塊劃分有多種方法,

13、因此單模塊的設(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ò)誤,加以解決。4.1初始化模塊(ONE)初始化模塊包含了各中斷的跳轉(zhuǎn)語(yǔ)句、存儲(chǔ)資源的分配、各存儲(chǔ)器和寄存器的賦值以與中斷與計(jì)時(shí)器的狀態(tài)設(shè)置。源程序中共使用了17字節(jié)的部數(shù)據(jù)存儲(chǔ)地址,其中包含3字節(jié)位尋址地址以便于進(jìn)行位判斷。三字節(jié)的位尋址地址分配如下:22H秒的存儲(chǔ)地址,方便對(duì)整點(diǎn)報(bào)時(shí)條件進(jìn)行判斷23H月的存儲(chǔ)地址,方便

14、對(duì)大小月平閏年進(jìn)行判斷另外一個(gè)位尋址字節(jié)00H地址拆開(kāi)用做程序狀態(tài)標(biāo)志位00H(bit,BS)生日標(biāo)志位,到生日那天為 1 使程序轉(zhuǎn)入生日顯示段01H(bit,SS)預(yù)置標(biāo)志,以INT0控制其值,控制預(yù)置閃爍的實(shí)現(xiàn)02H(bit,GS)閃爍標(biāo)志,在預(yù)置標(biāo)志有效時(shí)控制閃爍項(xiàng)目的亮和滅兩狀態(tài)03H(bit,F(xiàn)C)頻率控制,在整點(diǎn)報(bào)時(shí)時(shí)控制產(chǎn)生低音還是高音04H(bit,NB)忽略生日標(biāo)志,控制預(yù)置與報(bào)時(shí)的優(yōu)先級(jí)高于生日顯示05H(bit)控制生日信號(hào)的有效與否,其使用目的參見(jiàn)調(diào)試過(guò)程源程序中使用了兩個(gè)寄存器R1、R0,R1用于控制閃爍的間隔時(shí)間, R0用于顯示延時(shí)。在初始化模塊中設(shè)定了中斷的優(yōu)先級(jí)

15、、定時(shí)計(jì)數(shù)器的工作模式、并打開(kāi)了定時(shí)計(jì)數(shù)器TO開(kāi)始計(jì)時(shí)其他資源分配項(xiàng)目參見(jiàn)源程序集合與注釋。初始化模塊指令很大一部分都是偽指令,方便了后面程序的編寫。24 / 384.2開(kāi)關(guān)檢測(cè)模塊(TWO)開(kāi)關(guān)檢測(cè)模塊主要執(zhí)行兩個(gè)任務(wù):讀取鬧鈴使能控制撥碼開(kāi)關(guān)K5的值并賦予鬧鈴使能相應(yīng)值;讀取顯示選擇開(kāi)關(guān)(K0,K1)的值并將要顯示的項(xiàng)目值送入顯示緩存LED12、LED34、LED56當(dāng)k5為1時(shí)將A1H送入RE反之送入A1H,其中A為“”的字型碼查表偏移量。當(dāng)顯示生日日期時(shí),將生日Birthday的縮寫“bd”的字型碼送入顯示緩存LED56。開(kāi)關(guān)檢測(cè)模塊的執(zhí)行時(shí)間大約在40uS左右。4.3顯示主程序(TH

16、REE)顯示主程序是程序中最復(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ù)置閃爍部分。預(yù)置閃爍的優(yōu)先級(jí)是:LED34LED12LED56即同預(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標(biāo)志位判斷預(yù)置的亮/滅,由R1控制每50輪顯示對(duì)GS取反

17、一次。當(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í)顯示HAPPY其單列開(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使之有效在顯示主程

18、序過(guò)判斷BS的置來(lái)控制是否執(zhí)行本模塊4.4鬧鈴與整點(diǎn)報(bào)時(shí)判斷程序(EIGHT)在顯示主程序中每隔一段時(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=0時(shí),直接怕暖整點(diǎn)報(bào)時(shí)條件是否滿足。判斷整點(diǎn)報(bào)時(shí)條件時(shí)當(dāng)當(dāng)前時(shí)間滿足:(MIN=5

19、9)(SECOND=59) (COUNT10)時(shí)報(bào)高音;當(dāng)滿足:(MIN=59)(SECOND=51/53/55/57) (COUNT10)時(shí)報(bào)低音。利用位尋址區(qū)來(lái)存儲(chǔ)SECOND的方法,(SECOND50)(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.6的效果。本程序的執(zhí)行時(shí)間小于40us,因此多次調(diào)用不過(guò)分

20、影響執(zhí)行。4.5中斷(TO)計(jì)時(shí)程序(NINE)中斷計(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í)判斷是否是平閏年,先將年由BCD碼轉(zhuǎn)化為二進(jìn)制碼,此時(shí)當(dāng)年的后兩位為全零的時(shí)候?yàn)殚c年(由于只顯示年的個(gè)位和十位,由2000年開(kāi)始,00年、04年為閏年,其共同特點(diǎn)就是二進(jìn)制后兩位為零),否則為平年。當(dāng)MONTH2時(shí)判斷是否為大小月,MOUTH7時(shí)雙月為大月。4.6中斷(T1)預(yù)置程序(TEN)T1

21、通過(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í)順序是:LED34LED12LED56這樣安排的原因是由于根據(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)置一而不是歸零。4.7

22、中斷(INT0)設(shè)定程序(ELEVEN)中斷INT0設(shè)置是否進(jìn)行預(yù)置以與對(duì)生日標(biāo)志的清除。且有如下設(shè)置順序:清除預(yù)置信號(hào)并關(guān)T1清除生日標(biāo)志設(shè)定預(yù)置信號(hào)并開(kāi)T1。每按一次中斷都只執(zhí)行其中一個(gè)項(xiàng)目5、總結(jié)在宇紅老師耐心的指導(dǎo)下,我順利完成了這次單片機(jī)課程設(shè)計(jì)課題中的多功能電子表的設(shè)計(jì),通過(guò)這次的設(shè)計(jì)使我認(rèn)識(shí)到本人對(duì)單片機(jī)方面的知識(shí)知道的太少了,對(duì)于書本上的很多知識(shí)還不能靈活運(yùn)用,尤其是對(duì)程序設(shè)計(jì)語(yǔ)句的理解和運(yùn)用,不能夠充分理解每個(gè)語(yǔ)句的具體含義,導(dǎo)致編程的程序過(guò)于復(fù)雜,使得需要的存儲(chǔ)空間增大。損耗了過(guò)多的存資源。本次的設(shè)計(jì)使我從中學(xué)到了一些很重要的東西,那就是如何從理論到實(shí)踐的轉(zhuǎn)化,怎樣將我所學(xué)

23、到的知識(shí)運(yùn)用到我以后的工作中去。在大學(xué)的課堂的學(xué)習(xí)只是在給我們灌輸專業(yè)知識(shí),而我們應(yīng)把所學(xué)的用到我們現(xiàn)實(shí)的生活中去,此次的多功能電子版表設(shè)計(jì)給我奠定了一個(gè)實(shí)踐基礎(chǔ),我會(huì)在以后的學(xué)習(xí)、生活中磨練自己,使自己適應(yīng)于以后的競(jìng)爭(zhēng),同時(shí)在查找資料的過(guò)程中我也學(xué)到了許多新的知識(shí),在和同學(xué)協(xié)作過(guò)程中增進(jìn)同學(xué)間的友誼,使我對(duì)團(tuán)隊(duì)精神的積極性和重要性有了更加充分的理解。致最后,感進(jìn)田老師對(duì)我的細(xì)心的指導(dǎo),正是由于老師的細(xì)心的輔導(dǎo)和他提供給我們的參考資料,使得我的課程設(shè)計(jì)能夠順利的完成,同時(shí)感所以在課程設(shè)計(jì)過(guò)程中給于我?guī)椭^(guò)的老師和同學(xué),非常感。 婷 2010年6月30日參考文獻(xiàn):1 自美電子線路設(shè)計(jì)實(shí)驗(yàn)測(cè)試M:

24、華中理工大學(xué),1992.2 何立民單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)M:航空航天大學(xué),1993.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.7 湘濤江世明單片機(jī)原理與應(yīng)用M. :電子工業(yè),2006.附錄A附錄B:;*ONE初始化ORG 0SJMP ONEORG 0003HLJMP ELEVENORG 000BHLJMP NINEORG 001BHLJMP TENONE:LED12 EQU 30H ;數(shù)碼管12顯示緩存LED3

25、4 EQU 31H ;數(shù)碼管34顯示緩存LED56 EQU 32H ;數(shù)碼管56顯示緩存COUNT EQU 33H ;定時(shí)器T0(用來(lái)走時(shí))計(jì)數(shù)值存儲(chǔ)器(計(jì)數(shù)中斷20次到1秒)COUNTS EQU 34H ;定時(shí)器T1(用來(lái)預(yù)置)計(jì)數(shù)值存儲(chǔ)器(計(jì)數(shù)中斷15次到預(yù)置值加1)HOUR EQU 40H ;以下為時(shí)間,日期,鬧鈴時(shí)間,生日的存儲(chǔ)地址MIN EQU 41HSECOND EQU 22HYEAR EQU 50HMONTH EQU 23HDAY EQU 52HRH EQU 60H ;鬧鈴小時(shí)RM EQU 61H ;鬧鈴分RE EQU 62H ;鬧鈴使能BM EQU 71H ;生日月份BD EQ

26、U 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 ;birthday symbol生日標(biāo)志(到生日那天就為1)SS BIT 01H ;set symbol預(yù)置信號(hào)(按下中斷預(yù)置為1,便開(kāi)始閃爍和預(yù)置)GS BIT 02H ;glisten symbol閃爍標(biāo)志F

27、C BIT 03H ;frequency control頻率控制NB BIT 04H ;neglect bitrhday symbol 忽略生日標(biāo)志CLR BSCLR SSCLR GSCLR FCCLR NBSETB 05H ;生日顯示有效標(biāo)志位MOV IP,#02H;中斷優(yōu)先級(jí):T0INT0T1MOV TMOD,#11HMOV IE,#8BHSETB IT0MOV TH0,#3CH ;50msMOV TL0,#0B0HSETB TR0MOV R1,#50 ;顯示延時(shí)用MOV R0,#0 ;顯示延時(shí)用;* TWO檢測(cè)開(kāi)關(guān)號(hào)TWO:MOV P0,#0FFH P0.5,TWO1MOV RE,#0A

28、0H ;0A0表示鬧鈴無(wú)效,送0A0是為了方便將使能查表顯示,表中第A項(xiàng)為-SJMP TWO2TWO1:MOV RE,#0A1HTWO2: P0.0,TWO4 P0.1,TWO3MOV LED12,HOURMOV LED34,MINMOV LED56,SECONDSJMP THREETWO3:MOV LED12,YEARMOV LED34,MONTHMOV LED56,DAYSJMP THREETWO4: P0.1,TWO5MOV LED12,RHMOV LED34,RMMOV LED56,RESJMP THREETWO5:MOV LED12,BMMOV LED34,BDMOV LED56,#

29、0BCHSJMP THREE;* THREE顯示主程序(同時(shí)包含了鬧鈴,預(yù)置閃爍,鬧鈴功能)THREE:MOV P1,#0MOV P0,#0FFHMOV DPTR,#TAB3JNB SS,THREEB ;判斷預(yù)置信號(hào)是否有效,預(yù)置有效則轉(zhuǎn)入判斷閃爍顯示模塊,否則轉(zhuǎn)入正常顯示模塊SJMP THREEATHREEB:LJMP THREE11 ;THREE11是正常顯示并判斷整點(diǎn)報(bào)時(shí)與鬧鈴模塊THREEA:JNB P0.3,THREE1 ;開(kāi)始是判斷閃爍顯示,這句判斷是否預(yù)置分/月/生日的日/鬧鈴分JNB GS,THREE1 ;是否閃爍?LCALL TWELVE ;閃爍則調(diào)用延時(shí)不顯示LED34SJ

30、MP THREE4THREE1:MOV A,LED34ANL A,#0FHMOVC A,A+DPTRMOV P2,ATHREE2:SETB P1.3NOPDJNZ R0,THREE2CLR P1.3MOV A,LED34SWAP AANL A,#0FHMOVC A,A+DPTRMOV P2,ATHREE3:SETB P1.2NOPDJNZ R0,THREE3CLR P1.2JNB P0.2,THREE4 ;判斷是否預(yù)置小時(shí)/年/生日月/鬧鈴的小時(shí)JNB GS,THREE4 ;是否顯示小時(shí)/年/生日月/鬧鈴的小時(shí)LCALL TWELVESJMP THREE7THREE4:MOV A,LED12A

31、NL A,#0FHMOVC A,A+DPTRMOV P2,ATHREE5:SETB P1.1NOPDJNZ R0,THREE5CLR P1.1MOV A,LED12SWAP AANL A,#0FHMOVC A,A+DPTRMOV P2,ATHREE6:SETB P1.0NOPDJNZ R0,THREE6CLR P1.0 P0.0,THREE7 ;數(shù)碼管56只有在顯示日期的天時(shí)才有預(yù)置閃爍功能,其余三項(xiàng)都不需要判斷閃爍JNB P0.1,THREE7 P0.3,THREE7JNB P0.4,THREE7JNB GS,THREE7LCALL TWELVESJMP THREE10THREE7:MOV

32、A,LED56ANL A,#0FHMOVC A,A+DPTRMOV P2,ATHREE8:SETB P1.5NOPDJNZ R0,THREE8CLR P1.5MOV A,LED56SWAP AANL A,#0FHMOVC A,A+DPTRMOV P2,ATHREE9:SETB P1.4NOPDJNZ R0,THREE9CLR P1.4THREE10:DJNZ R1,TWOASJMP TWOBTWOA:LJMP TWOTWOB:MOV R1,#50 ;判斷閃爍一次是否完成CPL GS ;取反閃爍標(biāo)志,用于控制閃爍的亮和滅LJMP TWO ;一輪顯示完后再判斷開(kāi)關(guān)號(hào);*正常顯示THREE11:LC

33、ALL EIGHT ;判斷是否取反P1.6即輸出鬧鈴或整點(diǎn)報(bào)時(shí),以下每次顯示都要調(diào)用一次 NB,THREE12 ;如果是在整點(diǎn)報(bào)時(shí)狀態(tài)就不顯示生日提醒,報(bào)時(shí)過(guò)后顯示提醒JNB BS,THREE12SJMP SEVEN ;跳到生日提醒程序THREE12:CLR NB ;開(kāi)始正常顯示時(shí)間與判斷鬧鈴輸出MOV A,LED34ANL A,#0FHMOVC A,A+DPTRMOV P2,ATHREE13:SETB P1.3NOPDJNZ R0,THREE13CLR P1.3MOV A,LED34SWAP AANL A,#0FHMOVC A,A+DPTRMOV P2,ATHREE14:SETB P1.2N

34、OPDJNZ R0,THREE14CLR P1.2LCALL EIGHTMOV A,LED12ANL A,#0FHMOVC A,A+DPTRMOV P2,ATHREE15:SETB P1.1NOPDJNZ R0,THREE15CLR P1.1MOV A,LED12SWAP AANL A,#0FHMOVC A,A+DPTRMOV P2,ATHREE16:SETB P1.0NOPDJNZ R0,THREE16CLR P1.0LCALL EIGHTMOV A,LED56ANL A,#0FHMOVC A,A+DPTRMOV P2,ATHREE17:SETB P1.5NOPDJNZ R0,THREE17

35、CLR P1.5MOV A,LED56SWAP AANL A,#0FHMOVC A,A+DPTRMOV P2,ATHREE18:SETB P1.4NOPDJNZ R0,THREE18CLR P1.4LJMP TWO ;一輪顯示完后判開(kāi)關(guān)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在顯示生日時(shí)間時(shí)顯示在LED56;*SEVEN生日時(shí)顯示生日祝福語(yǔ)”HAPPY”SEVEN:MOV P1,#01HMOV P2,#76HDJNZ R0,SEVENSEVEN1:MO

36、V 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判斷是否鬧鈴子程序EIGHT:MOV A,RECJNE A,#0A1H,EIGHT1MOV A,MINCJNE A,RM,EIGHT1MOV A,HOURCJNE A,RH,EIGHT1SJMP EIGHT4 ;鬧鈴時(shí)間到則CPLP1.6一次并

37、忽略生日標(biāo)志(即NB有效)EIGHT1:MOV A,MINCJNE A,#59H,EIGHT7MOV A,SECONDCJNE A,#59H,EIGHT5 ;是否等于59分59秒EIGHT2:MOV A,COUNT ;是否到達(dá)后半秒CJNE A,#10,EIGHT3EIGHT3:JC EIGHT7EIGHT4:CPL P1.6SETB NBSJMP EIGHT7EIGHT5:MOV A,SECONDCJNE A,#51H,EIGHT6 ;是否大于51秒EIGHT6:JC EIGHT7JNB 10H,EIGHT7 ;判斷是否報(bào)低音 FC,EIGHT7 ; 只有FC有效時(shí)才輸出SJMP EIGHT

38、2EIGHT7:CPL FC ;用來(lái)控制報(bào)低音和高音,滿足報(bào)低音條件時(shí),調(diào)用兩次本程序?qū)1.6取反一次,高音時(shí)調(diào)用一次取反一次RET;* NINE中斷(T0)計(jì)時(shí)程序(包含了秒分時(shí)日月年間的進(jìn)位與判斷大小月,平閏年)NINE:MOV TH0,#3CH ;開(kāi)定時(shí)器MOV TL0,#0B0HSETB TR0INC COUNTMOV A,COUNTCJNE A,#20,INEAASJMP AAAINEAA:LJMP NINE1AAA:MOV COUNT,#0 ; 計(jì)時(shí)MOV A,SECONDADD A,#01DA A ;換成bcd碼以方便顯示MOV SECOND,ACJNE A,#60H,INEA

39、AMOV 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碼換成二進(jìn)制碼ANL A,#0F0HSWAP AMOV B,#10MUL ABMOV 24H,AMOV A,YEARANL A,#0FHADD A,24H A

40、CC.0,TEN5A ;二進(jìn)制碼后兩位為00表示為閏年 ACC.1,TEN5AMOV 24H,#01MOV A,DAYCJNE A,#30H,NINE1MOV DAY,#1SJMP NINE0TEN5A:MOV A,DAYCJNE A,#29H,NINE1MOV DAY,#1SJMP NINE0;*判斷大小月;大于等于8月時(shí)雙月為大月,小于8月時(shí)單月為大月TEN6A:MOV A,MONTHCJNE A,#08H,TEN7ATEN7A:JC TEN9A 18H,TEN8AMOV A,DAYCJNE A,#32H,NINE1MOV DAY,#1SJMP NINE0TEN8A:MOV A,DAYCJ

41、NE A,#31H,NINE1MOV DAY,#1SJMP NINE0TEN9A:JNB 18H,TEN10AMOV A,DAYCJNE A,#32H,NINE1MOV DAY,#1SJMP NINE0TEN10A:MOV A,DAYCJNE A,#31H,NINE1MOV DAY,#1;*NINE0:MOV A,MONTHADD A,#01DA AMOV MONTH,ASETB 05HCJNE A,#13H,NINE1MOV MONTH,#1MOV A,YEARADD A,#01DA AMOV YEAR,ANINE1:MOV A,MONTHCJNE A,BM,NINE2MOV A,DAYCJ

42、NE A,BD,NINE2JNB 05H,NINE2SETB BSNINE2:RETI;*TEN中斷(T1)預(yù)置加一程序由INT0控制其的開(kāi)啟與關(guān)閉;*判斷預(yù)置項(xiàng)目TEN:MOV TH1,#3CHMOV TL1,#0B0HSETB TR1INC COUNTSMOV A,COUNTSCJNE A,#15,TENEMOV COUNTS,#0 P0.0,RBRB P0.1,DATSJMP TIMEDAT: LJMP DATERBRB: P0.1,BDATLJMP RTIMEBDAT:LJMP BDATETENE:RETI;*預(yù)置時(shí)間TIME: JNB P0.3,TEN1MOV A,MINADD A,

43、#01DA AMOV MIN,ACJNE A,#60H,TENAMOV MIN,#0SJMP TENATEN1:JNB P0.2,TENAMOV A,HOURADD A,#01DA AMOV HOUR,ACJNE A,#24H,TENAMOV HOUR,#0TENA:RETI;*預(yù)置日期DATE:JNB P0.3,TEN3MOV A,MONTHADD A,#01DA AMOV MONTH,ACJNE A,#13H,TENBMOV MONTH,#1SJMP TENBTEN3:JNB P0.2,TEN4MOV A,YEARADD A,#01DA AMOV YEAR,ASJMP TENBTEN4:JNB P0.4,TENBMOV A,DAYADD A,#01DA AMOV DAY,A;*判斷平

溫馨提示

  • 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ù)網(wǎng)僅提供信息存儲(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)論