課程設(shè)計(jì)(論文)基于單片機(jī)的多功能電子表設(shè)計(jì)_第1頁(yè)
課程設(shè)計(jì)(論文)基于單片機(jī)的多功能電子表設(shè)計(jì)_第2頁(yè)
課程設(shè)計(jì)(論文)基于單片機(jī)的多功能電子表設(shè)計(jì)_第3頁(yè)
課程設(shè)計(jì)(論文)基于單片機(jī)的多功能電子表設(shè)計(jì)_第4頁(yè)
課程設(shè)計(jì)(論文)基于單片機(jī)的多功能電子表設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、課程設(shè)計(jì)(論文)題 目 名 稱(chēng) 基于單片機(jī)的多功能電子表設(shè)計(jì) 課 程 名 稱(chēng) 單片機(jī)原理及在電氣測(cè)控學(xué)科中的應(yīng)用 學(xué) 生 姓 名 學(xué) 號(hào) 系 、專(zhuān) 業(yè) 電氣工程系 08 級(jí)電氣測(cè)控類(lèi) 指 導(dǎo) 教 師 2010 年 06 月 30 日1摘摘 要要 單片計(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í)鐘

2、的功能還具有鬧鈴、設(shè)定鬧鈴時(shí)間、整點(diǎn)報(bào)時(shí)、生日提醒功能,而且能夠預(yù)置生日時(shí)間關(guān)鍵字:關(guān)鍵字:?jiǎn)纹瑱C(jī);多功能電子表;跑表;數(shù)碼管顯示。2目 錄摘 要 .41 引言 .71.1 多功能電子表簡(jiǎn)介 .71.2 多功能電子表的基本特點(diǎn) .71.3 多功能電子表的原理 .72 單片機(jī)識(shí)的相關(guān)知識(shí) .72.1 單片機(jī)簡(jiǎn)介 .72.2 單片機(jī)的發(fā)展史 .82.3 單片機(jī)的特點(diǎn) .92.4 89c51 單片機(jī)介紹 .93 控制系統(tǒng)的硬件設(shè)計(jì) .123.1 單片機(jī)型號(hào)的選擇 .123.2 數(shù)碼管顯示工作原理 .123.3 按鍵電路、復(fù)位鍵設(shè)計(jì) .143.4 系統(tǒng)電路原理圖 .144 控制系統(tǒng)的軟件設(shè)計(jì) .154

3、.1 程序設(shè)計(jì) .154.2 程序流程圖 .154.3 仿真圖 .204.4 仿真結(jié)果分析 .22總結(jié) .23附錄 .24a2424.3附 b28參考文獻(xiàn) .29致謝4引言引言 1957 年,ventura 發(fā)明了世界上第一個(gè)電子表,從而奠定了電子表的基礎(chǔ),電子表開(kāi)始迅速發(fā)展起來(lái)?,F(xiàn)代的電子表是基于單片機(jī)的一種計(jì)時(shí)工具,采用延時(shí)程序產(chǎn)生一定的時(shí)間中斷,用于一秒的定義,通過(guò)計(jì)數(shù)方式進(jìn)行滿(mǎn)六十秒分鐘進(jìn)一,滿(mǎn)六十分小時(shí)進(jìn)一,滿(mǎn)二十四小時(shí)小時(shí)清零。從而達(dá)到計(jì)時(shí)的功能,是人民日常生活不可缺少的工具。 現(xiàn)在高精度的計(jì)時(shí)工具大多數(shù)都使用了石英晶體振蕩器,由于電子鐘、石英鐘、石英表都采用了石英技術(shù),因此走時(shí)精

4、度高,穩(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ì),片選的靈活性好。51 1、 at89s52at89s52 單片機(jī)介紹單片機(jī)介紹 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é)電

5、模式??臻e模式下,cpu 停止工作,允許 ram、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,ram 內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。 圖 1.1 單片機(jī)引腳圖vcc : 電源 gnd: 地p0 口:p0 口是一個(gè) 8 位漏極開(kāi)路的雙向 i/o 口。作為輸出口,每位能驅(qū)動(dòng) 8 個(gè) ttl 邏輯電平。對(duì) p0 端口寫(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í),需

6、要外部上拉電阻。p1 口:p1 口是一個(gè)具有內(nèi)部上拉電阻的 8 位雙向 i/o 口,p1 輸出緩沖器能驅(qū)動(dòng) 4 個(gè) ttl 邏輯電平。對(duì) p1 端口寫(xiě)“1”時(shí),內(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),具體如下表所示。6表 1.1 at89s52 p1 口第二功能表腳號(hào)第二功能p1.0t2(定時(shí)器/計(jì)數(shù)器 t2 的外部計(jì)數(shù)輸入),時(shí)鐘輸出p1.1t2ex(定時(shí)器/計(jì)數(shù)器 t2

7、 的捕捉/重載觸發(fā)信號(hào)和方向控制)p1.5mosi(在系統(tǒng)編程用)p1.6miso(在系統(tǒng)編程用)p1.7sck(在系統(tǒng)編程用)p2 口:p2 口是一個(gè)具有內(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 口送出高八位地址p3 口:p3 口是一個(gè)具有內(nèi)部上拉電阻的 8 位雙向 i/o 口,p2 輸出緩沖器能驅(qū)動(dòng) 4

8、 個(gè) ttl 邏輯電平。對(duì) p3 端口寫(xiě)“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(iil)。p3 口亦作為 at89s52 特殊功能(第二功能)使用,如下表所示。表 1.1 at89s52 p3 口第二功能表腳號(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ǔ)器寫(xiě)選通)p3.7rd(外部數(shù)據(jù)存儲(chǔ)器寫(xiě)選通)rst: 復(fù)位輸入。晶振工作時(shí),rst

9、腳持續(xù) 2 個(gè)機(jī)器周期高電平將使單片機(jī)復(fù)位??撮T(mén)狗計(jì)時(shí)完成后,rst 腳輸出 96 個(gè)晶振周期的高電平。特殊寄存器 auxr(地址 8eh)上的 disrto 位可以使此功能無(wú)效。disrto 默認(rèn)狀態(tài)下,復(fù)位高電平有效。7ale/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 脈沖將會(huì)跳過(guò)。psen:外部程序存儲(chǔ)器選通信號(hào)(psen)是外部程序存儲(chǔ)器選

10、通信號(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í)行內(nèi)部程序指令,ea 應(yīng)該接 vcc。在 flash 編程期間,ea 也接收 12 伏 vpp 電壓。xtal1:振蕩器反相放大器和內(nèi)部時(shí)鐘發(fā)生電路的輸入端。xtal2:振蕩器反相放大器的輸出端。82 2、設(shè)計(jì)功能及說(shuō)明、設(shè)計(jì)功能及說(shuō)明電子數(shù)字鐘實(shí)現(xiàn)的主要功能: 實(shí)現(xiàn)正常走時(shí)(秒分時(shí)日月年進(jìn)位) 能夠預(yù)置時(shí)間和日期 能夠

11、自動(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í)間且顯示樣板如下圖所示:生日:6 月1 日生日,最 鬧鈴:于早晨6 點(diǎn)

12、10 分響,最后后兩位bd 為birthday 的縮寫(xiě) 一位為一表示使能有效。日期:08 年2 月29 日 時(shí)間:12 點(diǎn)39 分45 秒9 預(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í)顯示103 3、整體設(shè)計(jì)方案、整體設(shè)計(jì)方案系統(tǒng)硬件電路根據(jù)系統(tǒng)功能可知,需要六個(gè)數(shù)碼管,一個(gè)外部中斷

13、 int0,一個(gè)揚(yáng)聲器,由此結(jié)合單片機(jī)課程學(xué)習(xí)中對(duì)實(shí)驗(yàn)面板的了解,做出如下電路:圖 3.1 系統(tǒng)硬件電路圖如圖,晶振頻率 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 口控制。114 4、單模塊流程設(shè)計(jì)及程序設(shè)計(jì)、單模塊流程設(shè)計(jì)及程序設(shè)計(jì)在完成了系統(tǒng)總流程設(shè)計(jì)后,便進(jìn)入到了系統(tǒng)設(shè)計(jì)中工作量最大的模塊流程設(shè)

14、計(jì)。由于系統(tǒng)模塊劃分雖然是系統(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ò)誤,加以解決。各模塊設(shè)計(jì)概述初始化模塊(one)初始化模塊包含了各中斷的跳轉(zhuǎn)語(yǔ)句、存儲(chǔ)資源的分配、各存儲(chǔ)器和寄存器的賦值以及中斷及計(jì)時(shí)器的狀態(tài)設(shè)置。源程序中共使用了 17 字節(jié)的內(nèi)部數(shù)據(jù)存儲(chǔ)地址,其中包含 3 字節(jié)位尋址地址以便于進(jìn)行位判斷。三字

15、節(jié)的位尋址地址分配如下:22h秒的存儲(chǔ)地址,方便對(duì)整點(diǎn)報(bào)時(shí)條件進(jìn)行判斷23h月的存儲(chǔ)地址,方便對(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,fc)頻率控制,在整點(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ò)程源程序中使用了

16、兩個(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ě)。開(kāi)關(guān)檢測(cè)模塊(two)開(kāi)關(guān)檢測(cè)模塊主要執(zhí)行兩個(gè)任務(wù):1讀取鬧鈴使能控制撥碼開(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í),將生日 bir

17、thday 的縮寫(xiě)“bd”的字型碼送入顯示緩存 led56。圖 4.1 開(kāi)關(guān)檢測(cè)流程圖顯示主程序(three)顯示主程序是程序中最復(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ù)置閃爍部分。1圖 4.2 顯示主程序流程圖預(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è)顯示值都

18、不閃爍的時(shí)候,才判斷是否對(duì) led56 進(jìn)行閃爍,這樣就確保了每次只有一個(gè)顯示值閃爍。預(yù)置通過(guò) gs 標(biāo)志位判斷預(yù)置的亮/滅,由 r1 控制每 50 輪顯示對(duì) gs 取反一次。當(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 中

19、斷程序會(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í)行本模塊鬧鈴及整點(diǎn)報(bào)時(shí)判斷程序(eight)在顯示主程序中每隔一段時(shí)間調(diào)用一次本程序來(lái)實(shí)現(xiàn)鬧鈴及報(bào)時(shí)功能。符合鬧鈴條件時(shí),每調(diào)用一次本程序?qū)?p1.6 取反一次,調(diào)節(jié)調(diào)用的時(shí)間間隔便可以調(diào)節(jié)報(bào)時(shí)的輸出頻率。在主程序中設(shè)置每完成對(duì)一個(gè)數(shù)碼管的顯示變調(diào)用一次本程序,顯示一個(gè)數(shù)碼管的時(shí)間大約為 1ms,因此響鈴頻率高音約為 500h

20、z,低音約為 250hz。程序判斷鬧鈴使能 re 后分成兩個(gè)分支,當(dāng) re=a1 時(shí)判斷鬧鈴條件是否滿(mǎn)足,滿(mǎn)足則對(duì) p1.6 取反一次,否則跳轉(zhuǎn)判斷整點(diǎn)報(bào)時(shí)條件是否滿(mǎn)足。當(dāng) re=0 時(shí),直接怕暖整點(diǎn)報(bào)時(shí)條件是否滿(mǎn)足。判斷整點(diǎn)報(bào)時(shí)條件時(shí)當(dāng)當(dāng)前時(shí)間滿(mǎn)足:(min=59)(second=59) (count10)時(shí)報(bào)高音;當(dāng)滿(mǎn)足:(min=59)(second=51/53/55/57) (count10)時(shí)報(bào)低音。利用位尋址區(qū)來(lái)存儲(chǔ) second 的方法,(second50)(second.0=1)時(shí)便滿(mǎn)足報(bào)低音的秒條件。利用 to 中斷次數(shù)存儲(chǔ)器 count 的大小可以判斷是否到了后半秒(t0

21、每 50ms 中斷一次,中斷 20 次到達(dá)一秒)。通過(guò)增加一個(gè)標(biāo)志位 fc 來(lái)1時(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ò)分影響執(zhí)行。中斷(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) m

22、onth=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í)雙月為大月。中斷(t1)預(yù)置程序(ten)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ū)分,

23、確保無(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ō)明的方法類(lèi)似,但不需要考慮進(jìn)位)且月和日在溢出后應(yīng)置一而不是歸零。中斷(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)目15 5、總結(jié)、總結(jié)在趙宇紅老師耐心的指導(dǎo)下

24、,我順利完成了這次單片機(jī)課程設(shè)計(jì)課題中的多功能電子表的設(shè)計(jì),通過(guò)這次的設(shè)計(jì)使我認(rèn)識(shí)到本人對(duì)單片機(jī)方面的知識(shí)知道的太少了,對(duì)于書(shū)本上的很多知識(shí)還不能靈活運(yùn)用,尤其是對(duì)程序設(shè)計(jì)語(yǔ)句的理解和運(yùn)用,不能夠充分理解每個(gè)語(yǔ)句的具體含義,導(dǎo)致編程的程序過(guò)于復(fù)雜,使得需要的存儲(chǔ)空間增大。損耗了過(guò)多的內(nèi)存資源。本次的設(shè)計(jì)使我從中學(xué)到了一些很重要的東西,那就是如何從理論到實(shí)踐的轉(zhuǎn)化,怎樣將我所學(xué)到的知識(shí)運(yùn)用到我以后的工作中去。在大學(xué)的課堂的學(xué)習(xí)只是在給我們灌輸專(zhuān)業(yè)知識(shí),而我們應(yīng)把所學(xué)的用到我們現(xiàn)實(shí)的生活中去,此次的多功能電子版表設(shè)計(jì)給我奠定了一個(gè)實(shí)踐基礎(chǔ),我會(huì)在以后的學(xué)習(xí)、生活中磨練自己,使自己適應(yīng)于以后的競(jìng)爭(zhēng),

25、同時(shí)在查找資料的過(guò)程中我也學(xué)到了許多新的知識(shí),在和同學(xué)協(xié)作過(guò)程中增進(jìn)同學(xué)間的友誼,使我對(duì)團(tuán)隊(duì)精神的積極性和重要性有了更加充分的理解。2致謝致謝最后,感謝尹進(jìn)田老師對(duì)我的細(xì)心的指導(dǎo),正是由于尹老師的細(xì)心的輔導(dǎo)和他提供給我們的參考資料,使得我的課程設(shè)計(jì)能夠順利的完成,同時(shí)感謝所以在課程設(shè)計(jì)過(guò)程中給于我?guī)椭^(guò)的老師和同學(xué),非常感謝。 張婷 2010 年 6 月 30 日3參考文獻(xiàn):參考文獻(xiàn):1 謝自美電子線路設(shè)計(jì)實(shí)驗(yàn)測(cè)試m武漢:華中理工大學(xué)出版社,1992.2 何立民單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)m北京:北京航空航天大學(xué)出版社,1993.3 樓然笛單片機(jī)開(kāi)發(fā)m北京:人民郵電出版社,1994.4 付家才單片機(jī)控制

26、工程實(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.4附錄附錄 a a5附錄附錄 b:b:;*one 初始化org 0sjmp oneorg 0003hljmp elevenorg 000bhljmp nineorg 001bhljmp tenone:led12 equ 30h ;數(shù)碼管 12 顯示緩存led34 equ 31h ;數(shù)碼管 34 顯示緩存led56 equ

27、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 equ 72h ;生日天6mov led1

28、2,#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)志fc bit 03h ;fr

29、equency 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,#8bh7setb 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,#0ffhjb p0.5,two1mov re,#0a0h ;0a0

30、表示鬧鈴無(wú)效,送 0a0 是為了方便將使能查表顯示,表中第 a項(xiàng)為-sjmp two2two1:mov re,#0a1htwo2:jb p0.0,two4jb p0.1,two3mov led12,hourmov led34,minmov led56,secondsjmp threetwo3:mov led12,yearmov led34,monthmov led56,daysjmp threetwo4:jb p0.1,two5mov led12,rhmov led34,rmmov led56,resjmp three8two5:mov led12,bmmov led34,bdmov led5

31、6,#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í)不顯示 l

32、ed34sjmp three4three1:mov a,led34anl a,#0fhmovc a,a+dptrmov p2,athree2:setb p1.3nopdjnz r0,three2clr p1.3mov a,led34swap a9anl 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

33、,led12anl 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.0jb p0.0,three7 ;數(shù)碼管 56 只有在顯示日期的天時(shí)才有預(yù)置閃爍功能,其余三項(xiàng)都不需要判斷閃爍10jnb p0.1,three7jb p0.3,three7jnb p0.4,three7jnb gs,three7lcall twelvesjmp thr

34、ee10three7:mov 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);

35、*正常顯示11three11:lcall eight ;判斷是否取反 p1.6 即輸出鬧鈴或整點(diǎn)報(bào)時(shí),以下每次顯示都要調(diào)用一次jb 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 p

36、2,athree14:setb p1.2nopdjnz r0,three14clr p1.2lcall eightmov a,led12anl a,#0fhmovc a,a+dptrmov p2,athree15:setb p1.1nop12djnz 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

37、 p1.5nopdjnz r0,three17clr p1.5mov a,led56swap aanl a,#0fhmovc a,a+dptrmov p2,athree18:setb p1.4nopdjnz r0,three18clr p1.4ljmp two ;一輪顯示完后判開(kāi)關(guān)13tab3: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

38、,#76hdjnz r0,sevenseven1:mov p1,#02hmov p2,#77hdjnz r0,seven1seven2:mov p1,#04hmov p2,#73hdjnz r0,seven2seven3:mov p1,#08hmov p2,#73hdjnz r0,seven3seven4:mov p1,#10hmov p2,#6ehdjnz r0,seven4ljmp two;*eight判斷是否鬧鈴子程序eight:mov a,recjne a,#0a1h,eight1mov a,mincjne a,rm,eight1mov a,hourcjne a,rh,eight1sj

39、mp eight4 ;鬧鈴時(shí)間到則 cplp1.6 一次并忽略生日標(biāo)志(即 nb 有效)14eight1: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 ;判

40、斷是否報(bào)低音jb fc,eight7 ; 只有 fc 有效時(shí)才輸出sjmp eight2eight7:cpl fc ;用來(lái)控制報(bào)低音和高音,滿(mǎn)足報(bào)低音條件時(shí),調(diào)用兩次本程序?qū)?p1.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 aaa15ineaa:ljmp nine1aaa:mov count,#0 ; 計(jì)時(shí)mov a,secondadd a,

41、#01da a ;換成 bcd 碼以方便顯示mov second,acjne a,#60h,ineaamov 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 a16m

42、ov b,#10mul abmov 24h,amov a,yearanl a,#0fhadd a,24hjb acc.0,ten5a ;二進(jìn)制碼后兩位為 00 表示為閏年jb 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 ten9ajb 18h,te

43、n8amov a,daycjne a,#32h,nine1mov day,#1sjmp nine0ten8a:mov a,daycjne a,#31h,nine1mov day,#1sjmp nine017ten9a: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,ye

44、aradd a,#01da amov year,anine1:mov a,monthcjne a,bm,nine2mov a,daycjne a,bd,nine2jnb 05h,nine2setb bsnine2:reti;*ten 中斷(t1)預(yù)置加一程序由int0 控制其的開(kāi)啟與關(guān)閉18;*判斷預(yù)置項(xiàng)目ten:mov th1,#3chmov tl1,#0b0hsetb tr1inc countsmov a,countscjne a,#15,tenemov counts,#0jb p0.0,rbrbjb p0.1,datsjmp timedat: ljmp daterbrb:jb p0.1,

45、bdatljmp rtimebdat:ljmp bdatetene:reti;*預(yù)置時(shí)間time: jnb p0.3,ten1mov a,minadd a,#01da amov min,acjne a,#60h,tenamov min,#0sjmp tenaten1:jnb p0.2,tenamov a,houradd a,#01da amov hour,a19cjne 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:

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論