版權(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> 摘 要………………………………………………………………………………3</p><p> 關(guān)鍵詞………………………………………………………………………………3</p><p> 一、設(shè)計(jì)任務(wù)與要求………………………………………………………………3</p>&l
2、t;p> 二、方案設(shè)計(jì)與論證………………………………………………………………3</p><p> 方案一…………………………………………………………………………3</p><p> 方案二…………………………………………………………………………4</p><p> 方案三…………………………………………………………………………4</p>
3、<p> 硬件單元電路設(shè)計(jì)與參數(shù)計(jì)算………………………………………………5</p><p> 1. 主控制系統(tǒng)…………………………………………………………………5</p><p> 2. 時(shí)鐘振蕩電路………………………………………………………………5</p><p> 3. 復(fù)位電路……………………………………………………………………6</p
4、><p> 4. DS1302時(shí)鐘電路 …………………………………………………………7</p><p> 5. 按鍵電路……………………………………………………………………8</p><p> 6. 顯示電路……………………………………………………………………8</p><p> 7. 蜂鳴器電路……………………………………………………
5、……………9</p><p> 軟件設(shè)計(jì)與流程圖……………………………………………………………9</p><p> 五、 總原電路及元器件清單……………………………………………………13</p><p> 1. 總原理圖……………………………………………………………………13</p><p> 2. PCB制板圖……………………………
6、……………………………………13</p><p> 3. 整體電路仿真圖以及仿真結(jié)果分析 ……………………………………14</p><p> 4.元件清單……………………………………………………………………14</p><p> 六、安裝與調(diào)試 …………………………………………………………………15</p><p> 1. 電路安裝…
7、…………………………………………………………………15</p><p> 2. 電路調(diào)試……………………………………………………………………15</p><p> 3. 軟件調(diào)試……………………………………………………………………16</p><p> 七、性能測(cè)試與分析 ……………………………………………………………16</p><p&g
8、t; 八、結(jié)論與心得 …………………………………………………………………16</p><p> 九、參考文獻(xiàn) ……………………………………………………………………16</p><p> 十、致謝 …………………………………………………………………………16</p><p> 十一、程序清單 …………………………………………………………………17</p&
9、gt;<p> 基于AT89S52的電子萬(wàn)年歷設(shè)計(jì)</p><p> 摘要: 隨著社會(huì)的快速發(fā)展,時(shí)間的流逝,從觀察太陽(yáng)、擺鐘到現(xiàn)在的單片機(jī)電子鐘,人類不斷研究,不斷創(chuàng)造新紀(jì)錄,單片機(jī)電子萬(wàn)年歷已成為當(dāng)今人類準(zhǔn)確、快速獲取時(shí)間信息的重要工具之一。本設(shè)計(jì)的電子萬(wàn)年歷以AT89S52單片機(jī)為控制核心,采用Dallas公司的DS1302實(shí)時(shí)時(shí)鐘構(gòu)成時(shí)鐘電路,能夠?qū)崿F(xiàn)時(shí)間和日期的顯示,還增加了鬧鐘報(bào)時(shí)的
10、功能。設(shè)計(jì)詳細(xì)地分析設(shè)計(jì)原理和制作的全過(guò)程。</p><p> 關(guān)鍵詞:?jiǎn)纹瑱C(jī);實(shí)時(shí)時(shí)鐘;DS1302 </p><p> 一、設(shè)計(jì)任務(wù)與要求:</p><p><b> 基本要求:</b></p><p> 能夠顯示年、月、日、時(shí)、分。</p><p> 可以人為校正年、月、日、時(shí)、
11、分。</p><p> 第一次開(kāi)機(jī)顯示:2000 01 01 12.00。</p><p><b> 掉電信息不丟失。</b></p><p><b> 創(chuàng)新擴(kuò)展:</b></p><p><b> 具有鬧鐘功能。</b></p><p><
12、;b> 二、方案設(shè)計(jì)與論證</b></p><p><b> 方案一:</b></p><p> 按照系統(tǒng)設(shè)計(jì)的功能的要求,初步確定系統(tǒng)由主控模塊、時(shí)鐘模塊、顯示模塊各鍵盤(pán)接口模塊共4個(gè)模塊組成,電路系統(tǒng)構(gòu)成框圖如圖1所示。主控芯片使用52系列AT89S52單片機(jī),時(shí)鐘芯片使用美國(guó)DALLAS公司推出的一款高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘DS
13、1302。采用DS1302作為計(jì)時(shí)芯片,可以做到計(jì)時(shí)準(zhǔn)確。更重要的是,DS1302可以在很小電流的后備電源(2.5V--5.5V電源,在2。5V時(shí)耗電小于300nA)下繼續(xù)計(jì)時(shí),而且DS1302可以編程選擇多種充電電流來(lái)對(duì)后備電源進(jìn)行慢速充電,可以 保證后備電源基本功不耗電。顯示模塊采用普通的共陽(yáng)LED數(shù)碼管,鍵輸入采用查詢法實(shí)現(xiàn)功能調(diào)整。</p><p> 圖1 電子萬(wàn)年歷電路系統(tǒng)構(gòu)成框圖</p>
14、;<p><b> 方案二:</b></p><p> 按照系統(tǒng)設(shè)計(jì)的要求和功能,將系統(tǒng)分為主控模塊、時(shí)鐘電路模塊、按鍵掃描模塊,LCD顯示模塊,電源電路、復(fù)位電路、晶振電路幾個(gè)模塊,系統(tǒng)框圖如圖2所示。主控模塊采用AT89S52單片機(jī),按鍵模塊用四個(gè)按鍵,用于調(diào)整時(shí)間和設(shè)定鬧鐘,顯示模塊采用LCD1602,時(shí)鐘電路模塊采用DS1302實(shí)時(shí)時(shí)鐘實(shí)現(xiàn)對(duì)時(shí)間,日期的操作。<
15、;/p><p> 圖2 基于AT89S52單片機(jī)的電子萬(wàn)年歷系統(tǒng)框圖</p><p><b> 方案三:</b></p><p> 按照系統(tǒng)設(shè)計(jì)的要求和功能,將系統(tǒng)分為主控制器模塊、顯示模塊、按鍵開(kāi)關(guān)模塊、蜂鳴器電路模塊。系統(tǒng)框圖如圖3所示,主控制模塊采用AT89S52單片機(jī)為控制中心,顯示模塊采用液晶LCD1602顯示,計(jì)時(shí)使用AT89S5
16、2單片機(jī)自帶的定時(shí)器功能,實(shí)現(xiàn)對(duì)時(shí)間、日期的操作,通過(guò)按鍵盤(pán)開(kāi)關(guān)實(shí)現(xiàn)對(duì)時(shí)間、日期的調(diào)整。</p><p> 圖3 基于AT89S52單片機(jī)的電子萬(wàn)年歷總體設(shè)計(jì)框圖</p><p> 方案論證:上面提到的三個(gè)方案中,在電路原理方面大致相同,都能夠達(dá)到設(shè)計(jì)任務(wù)與要求,在方案一款方案二中使用外部的時(shí)鐘芯片DS1302來(lái)實(shí)現(xiàn)日期和時(shí)間的操作,方案三中則利用了單片機(jī)自身的定時(shí)器功能;在方案二和方
17、案三在顯示模塊上都使用液晶顯示屏LCD1602作為顯示,方案一則使用LED數(shù)碼管作為顯示,采用LED數(shù)碼管動(dòng)態(tài)掃描,數(shù)碼管的價(jià)格適中,對(duì)于顯示數(shù)字較好,而且使用單片機(jī)的端口也較少;采用LCD1602液晶顯示屏,液晶顯示屏的顯示功能強(qiáng)大,可以顯示大量文字、圖形,顯示多樣性,清晰可見(jiàn),價(jià)格相對(duì)LED數(shù)碼管來(lái)說(shuō)要昂貴些,但是基于本設(shè)計(jì)顯示的東西較多,若采用LED數(shù)碼管的話,所需數(shù)碼管較多,價(jià)格也相應(yīng)的會(huì)提高,而且不利于控制,對(duì)于LCD1602
18、,隨著現(xiàn)在制造的發(fā)展,價(jià)格也在下降,同時(shí)它所使用的端口也不很多,能夠清晰的顯示,比較適合顯示大量的數(shù)字,因此選擇LCD1602作為顯示模塊。DS1302是一款高性能的實(shí)時(shí)時(shí)鐘芯片,以計(jì)時(shí)準(zhǔn)確、接口簡(jiǎn)單、使用方便、工作電壓范圍寬和低功耗等優(yōu)點(diǎn),得到廣泛的應(yīng)用,同時(shí)可以對(duì)秒、時(shí)、分、日、月、年以及潤(rùn)年補(bǔ)償?shù)哪赀M(jìn)行計(jì)數(shù),而且在掉電時(shí)能夠在外部紐扣電池的供電下</p><p> 通過(guò)對(duì)上述方案的論證分析,本次設(shè)計(jì)選擇方
19、案二,采用AT89S52作為主控制系統(tǒng),DS1302提供時(shí)鐘,LCD1602液晶作為顯示模塊</p><p> 三、硬件單元電路設(shè)計(jì)與參數(shù)計(jì)算</p><p><b> 主控制系統(tǒng)</b></p><p> 單片機(jī)中央處理系統(tǒng)的方案設(shè)計(jì),我們選用具有ATMEL公司的AT89C52單片機(jī)作為中央處理器,如圖4所示。該單片機(jī)除了擁有MCS-5
20、1系列單片機(jī)的所有優(yōu)點(diǎn)外,內(nèi)部還具有8K的在系統(tǒng)可編程FLASH存儲(chǔ)器,低功耗的空閑和掉電模式,極大的降低了電路的功耗,還包含了定時(shí)器、程序存儲(chǔ)器、數(shù)據(jù)存儲(chǔ)器等硬件,其硬件能符合整個(gè)控制系統(tǒng)的要求,不需要外接其他存儲(chǔ)器芯片和定時(shí)器件,方便地構(gòu)成一個(gè)最小系統(tǒng)。整個(gè)系統(tǒng)結(jié)構(gòu)緊湊,抗干擾能力強(qiáng),性價(jià)比高。是比較合適的方案。</p><p> 圖4 AT89S52主控制系統(tǒng)</p><p>&l
21、t;b> 2、時(shí)鐘振蕩電路</b></p><p> 時(shí)鐘振蕩電路圖5所示,時(shí)鐘振蕩電路用于產(chǎn)生單片機(jī)正常工作時(shí)所需要的時(shí)鐘信號(hào),電路由兩個(gè)30pF的瓷片電容和一個(gè)12MHz的晶振組成,并接入到單片機(jī)的XTAL1和XTAL2引腳處,使單片機(jī)工作于內(nèi)部振蕩模式。此電路在加電后延遲大約10ms振蕩器起振,在XTAL2引腳產(chǎn)生幅度為3V左右的正弦波時(shí)鐘信號(hào),其振蕩頻率主要由石英晶振的頻率決定。電路
22、中兩個(gè)電容C1、C2的作用使電路快速起振,提高電路的運(yùn)行速度,對(duì)于AT89S52其工作頻率為0至33MHz,在這個(gè)范圍內(nèi)單片機(jī)能夠正常的工作。</p><p> 圖5 AT89S52時(shí)鐘振蕩電路</p><p><b> 3、復(fù)位電路</b></p><p> 復(fù)位電路由電阻和極性電容組成,如圖6所示,通過(guò)高電平使單片機(jī)復(fù)位,在時(shí)鐘電路開(kāi)
23、始工作后,當(dāng)高電平的時(shí)間超過(guò)大約2us時(shí),即可實(shí)現(xiàn)復(fù)位。此復(fù)位電路同時(shí)具備了上電復(fù)位和手動(dòng)復(fù)位的功能,上電復(fù)位發(fā)生在開(kāi)機(jī)加電時(shí),由系統(tǒng)自動(dòng)完成,手動(dòng)復(fù)位通過(guò)一個(gè)按鍵來(lái)實(shí)現(xiàn),在程序運(yùn)行時(shí),若遇到死機(jī),死循環(huán)或程序“跑飛”等情況,通過(guò)手動(dòng)復(fù)位就可以實(shí)現(xiàn)重新啟動(dòng)的操作。手動(dòng)按鈕復(fù)位需要人為在復(fù)位輸入端RST上加入高電平。一般采用的辦法是在RST端和正電源Vcc之間接一個(gè)按鈕和一個(gè)電阻,如圖所示,當(dāng)人為按下按鈕時(shí),則Vcc 的+5V電平就會(huì)直接
24、加到RST端,由于人的動(dòng)作再快也會(huì)使按鈕保持接通達(dá)數(shù)十毫秒,所以,完全能夠滿足復(fù)位的時(shí)間要求。上電復(fù)位的工作過(guò)程是在加電時(shí),復(fù)位電路通過(guò)電容加給RST端一個(gè)短暫的高電平信號(hào),此高電平信號(hào)隨著Vcc對(duì)電容的充電過(guò)程而逐漸回落,即RST端的高電平持續(xù)時(shí)間取決于電容的充電時(shí)間,由圖可知充電時(shí)間為:T=2.3RC=2.3*10*10-6*5.1*103=0.1173s ,保證系統(tǒng)能夠可靠地復(fù)位。</p><p> 圖6
25、 AT89S52復(fù)位電路</p><p> 4、DS1302時(shí)鐘電路</p><p> 時(shí)鐘電路主要由時(shí)鐘芯片DS1302、備用電池、晶振等幾部分組成,如圖7所示。DS1302采用3線串行接口,占用引腳少,內(nèi)部集成了可編程日歷時(shí)鐘,用戶可以根據(jù)需要通過(guò)單片機(jī)的控制來(lái)自行設(shè)置,支持雙電源供電,可以使用外部主電源和備用電源,備份電源能夠使時(shí)鐘芯片繼續(xù)工作。</p><p
26、> 圖7 DS1302時(shí)鐘電路</p><p><b> 5、按鍵電路</b></p><p> 按鍵電路由四個(gè)輕觸開(kāi)關(guān)組成,如圖8所示。按鍵用來(lái)調(diào)整時(shí)間和設(shè)定鬧鐘,其一端直接接到單片機(jī)的端口,另一端接地,當(dāng)按下按鍵時(shí),相應(yīng)的端口變?yōu)榈碗娖?,通過(guò)檢測(cè)這一低電平就可以判斷是哪個(gè)鍵按下,從而作相應(yīng)的操作。</p><p><b&g
27、t; 圖8 按鍵電路</b></p><p><b> 6、顯示電路</b></p><p> 顯示電路采用LCD1602液晶顯示,圖中只畫(huà)出了其相應(yīng)的接口,如圖9所示。3腳用于調(diào)節(jié)LCD1602的背光,4、5、6為L(zhǎng)CD1602的控制口,用于控制其寫(xiě)入或是讀出指令,7至14腳為L(zhǎng)CD1602的數(shù)據(jù)口,將數(shù)傳送到LCD1602中。</p>
28、<p> 圖9 LCD1602接口電路</p><p><b> 7、蜂鳴器電路</b></p><p> 蜂鳴器電路由一個(gè)220歐的電阻,三極管8550,及蜂鳴器組成,如圖10所示。通過(guò)控制三極管的導(dǎo)通和截止來(lái)實(shí)現(xiàn)蜂鳴器的響與不響。</p><p><b> 圖10 蜂鳴器電路</b></p&
29、gt;<p> 四、軟件設(shè)計(jì)與流程圖</p><p><b> 1、程序流程圖</b></p><p> 主程序首先初始化定時(shí)器、LCD1602及DS1302,然后就開(kāi)始查詢按鍵,有鍵按下則開(kāi)始調(diào)整時(shí)間和設(shè)置鬧鐘,若沒(méi)有按下,則執(zhí)行下面的時(shí)間、日期及鬧鐘時(shí)間的顯示,最后依次循環(huán)這些相同的操作,相應(yīng)流程圖如圖11所示:</p><
30、p> 圖11 程序主流程圖</p><p> 按鍵的檢測(cè)主要是通過(guò)查詢的辦法來(lái)實(shí)現(xiàn),利用按鍵進(jìn)行間調(diào)整及鬧鐘設(shè)置,首先檢測(cè)K1鍵是否按下,當(dāng)K1鍵按下時(shí),并且K2鍵按下時(shí),則設(shè)置初始的默認(rèn)時(shí)間;當(dāng)K1按下,并且K4按下時(shí),則是開(kāi)啟鬧鐘功能;若只是K3按下則開(kāi)始設(shè)置時(shí)間及日期,同時(shí)被選擇的時(shí)間和日期開(kāi)始閃爍,第一次按下K3時(shí),設(shè)置年份,若按下K1,則是減1操作,按下K2是加1操作,設(shè)置好年后,第二次按下K
31、3時(shí),則是設(shè)置月份,按K1減,按K2則加1,依次循環(huán)下去,則可以將時(shí)間和日期設(shè)置完畢;而當(dāng)按下K4時(shí),則是設(shè)置鬧鐘時(shí)間,第一次按下K4,設(shè)置時(shí),按K1時(shí)減1,按K2時(shí)加1,第二次按下時(shí),設(shè)置分,同樣的操作,按K1分減1,按K2分加1,程序流程圖12所示:</p><p> 圖12 時(shí)間調(diào)整及鬧鐘設(shè)置程序流程圖</p><p><b> 2、軟件設(shè)計(jì)</b><
32、/p><p><b> 2.1軟件總設(shè)計(jì)</b></p><p> 主程序首先對(duì)系統(tǒng)環(huán)境初始化,設(shè)置定時(shí)器T0工作模式為16位定時(shí)/計(jì)數(shù)器模式,置位總中斷允許位EA,并對(duì)鍵盤(pán)端口置位,再對(duì)LCD1602初始化,DS1302初始化。接著掃描鍵盤(pán),在鍵盤(pán)程序里面是對(duì)時(shí)間、日期及鬧鐘的調(diào)整,最下面是時(shí)間的顯示及鬧鐘比較時(shí)間。</p><p><
33、b> 2.2子程序設(shè)計(jì)</b></p><p> 讀寫(xiě)DS1302子程序:</p><p> 讀寫(xiě)LCD1602子程序:</p><p> 五、總原電路及元器件清單</p><p><b> 1、總原理圖</b></p><p> 基于AT89S52單片機(jī)的電子萬(wàn)年歷
34、硬件電路圖如圖13所示,系統(tǒng)由AT89S52單片機(jī),按鍵掃描電路、顯示電路、時(shí)鐘電路、晶振電路、復(fù)位電路、電源指示電路及蜂鳴器輸出電路。</p><p> 圖13 基于AT89S52的電子萬(wàn)年歷電路原理圖</p><p><b> 2、PCB制板圖</b></p><p> 基于AT89S52單片機(jī)的電子萬(wàn)年歷制板如圖14所示:<
35、/p><p> 圖14 基于AT89S52的電子萬(wàn)年歷PCB制板圖</p><p> 3、整體電路仿真圖以及仿真結(jié)果分析 </p><p> 3.1整體電路仿真圖</p><p><b> 如圖15所示所示。</b></p><p> 圖15 電子萬(wàn)年歷仿真圖</p>&l
36、t;p><b> 3.2仿真結(jié)果分析</b></p><p> 仿真正確顯示了時(shí)間,在LCD1602中正確顯示了當(dāng)前日期、時(shí)間并可以顯示鬧鐘時(shí)間,通過(guò)按按鍵K3,就可以開(kāi)始設(shè)置時(shí)間,依次按K3依次在年、月、日、時(shí)、分之間切換,并且相應(yīng)的調(diào)整的位會(huì)閃爍,按K2鍵用于加1操作,K1鍵用于減1操作。按K4鍵則可以設(shè)置鬧鐘時(shí)間,依次按K4可以在時(shí)和分之間切換,按K2鍵,可以增加值,按K1鍵
37、,可以減小值。鬧鐘開(kāi)啟設(shè)置:先按住K1,然后再按K4就可以開(kāi)啟鬧鐘功能,當(dāng)設(shè)置好鬧鐘后并開(kāi)啟鬧鐘功能后,就可以有鬧鐘功能,鬧鐘時(shí)間為1分鐘。仿真正確顯示了我們需要達(dá)到的要求,符合了我們?cè)O(shè)計(jì)的要求。</p><p><b> 4、元件清單</b></p><p> 基于AT89S52單片機(jī)的電子萬(wàn)年歷元件清單如表1所示。</p><p>
38、表1 基于AT89S52單片機(jī)的電子萬(wàn)年歷元件清單</p><p><b> 六、安裝與調(diào)試</b></p><p><b> 1、電路安裝</b></p><p> 用Protel99se 畫(huà)好PCB后,并做出相應(yīng)的電路板,測(cè)試過(guò)電路板沒(méi)有短路和斷路后,對(duì)照Protel99se中的PCB板圖將相應(yīng)的元件插到電路板
39、上,首先將矮的電子元件先插上,然后將其焊在電路板上,依照高矮,將剩余的元件安裝在電路板上,并依次焊接好.當(dāng)焊接完成后.剪去引腳,并測(cè)試電路焊接后是否有短路.</p><p><b> 2、電路調(diào)試</b></p><p> 在測(cè)試中遇到LCD1602不能夠顯示出時(shí)間和日期,經(jīng)過(guò)檢查才發(fā)現(xiàn)是LCD1602的背光沒(méi)有調(diào)好,通過(guò)調(diào)節(jié)接在LCD1602上3腳上的滑動(dòng)變阻器
40、,改變所給的電壓,可以清晰地看見(jiàn)了LCD能夠顯示。</p><p> 對(duì)于DS1302在測(cè)試過(guò)程中發(fā)其上電不久就發(fā)熱,在檢查電路過(guò)程中,不是因?yàn)榘l(fā)現(xiàn)芯片短路,最終檢查發(fā)現(xiàn)原來(lái)是DS1302的引腳接法不正確,給+5V的應(yīng)該是芯片的腳,給后備電池的是1腳,當(dāng)換過(guò)來(lái)之后,芯片就不發(fā)熱了,而且可以正常顯示出我們要顯示的時(shí)間和日期。</p><p><b> 3、軟件調(diào)試</b&
41、gt;</p><p> 在軟件調(diào)試過(guò)程中,當(dāng)按下按鍵調(diào)節(jié)時(shí)間和日期后,時(shí)間不能繼續(xù)在加,后來(lái)分析了程序才發(fā)現(xiàn),是在設(shè)置好時(shí)間和日期時(shí)我們暫停了時(shí)鐘,在設(shè)置完后沒(méi)有啟動(dòng)時(shí)鐘,所以時(shí)間和日期就不能夠繼續(xù)走,在那里停止了,發(fā)現(xiàn)這個(gè)原因后,我在設(shè)置完時(shí)間后就開(kāi)啟時(shí)鐘,時(shí)間和日期就能夠正確顯示了。</p><p><b> 七、性能測(cè)試與分析</b></p>
42、<p> 上電測(cè)試,LCD1602能夠正確顯示時(shí)間和日期,第一次K3按鈕,開(kāi)始設(shè)置年,再按K1,年減1,按K2,年加1,按二次K3,設(shè)置月,按K1,月減1,按K2,月加1,按三次K3,設(shè)置日,按K1,日減1,按K2,日加1,按四次K3,設(shè)置時(shí),按K1,時(shí)減1,按K2,時(shí)加1,按五次K3,設(shè)置分,按K1,分減1,按K2,分加1,按第五次,設(shè)置時(shí)間完成。鬧鐘設(shè)置,按下K4,開(kāi)始設(shè)置鬧鐘,按第一次,設(shè)置分,按K1,時(shí)減1,按K2
43、,時(shí)加1,按第二次設(shè)置分,按K1,分減1,按K2,分加1,設(shè)置好鬧鐘后,按組合鍵K1+K4開(kāi)啟鬧鐘功能,當(dāng)?shù)紧[鐘時(shí)間后,蜂鳴器響,鬧鐘時(shí)間為1分鐘,</p><p> 在對(duì)電路測(cè)試后,電路達(dá)到了所需的功能。</p><p> 通過(guò)對(duì)電路的多次的反復(fù)測(cè)試與分析,可以對(duì)電路的原理及功能更加熟悉,同時(shí)提高了設(shè)計(jì)能力及對(duì)電路的分析能力,同時(shí)在軟件的編程方面得到了更高的提高,對(duì)編程能力得到加強(qiáng),
44、同時(shí)對(duì)所學(xué)的知識(shí)得到了大的提高與鞏固。</p><p><b> 八、結(jié)論與心得</b></p><p> 在這學(xué)期的課程序設(shè)計(jì)中,在收獲知識(shí)的同時(shí),還收獲了閱歷,收獲了成熟,在此過(guò)程中,我們通過(guò)查找大量資料,請(qǐng)教老師,以及不懈的努力,不僅培養(yǎng)了獨(dú)立思考、 動(dòng)手制作的能力,在各種其它能力上也都有了提高。更重要的是,在課程序設(shè)計(jì)里,我們學(xué)會(huì)了很多學(xué)習(xí)的方法。而這是以
45、后最實(shí)用的,真的是受益匪淺。要面 對(duì)社會(huì)的挑戰(zhàn),只有不斷的學(xué)習(xí)、實(shí)踐,再學(xué)習(xí)、再實(shí)踐。同時(shí)在與老師和同學(xué)的交流過(guò)程中,互動(dòng)學(xué)習(xí),將知識(shí)融會(huì)貫通,提高自己與人交流的能力,提高自己的團(tuán)隊(duì)意思。老師給我們提出了許多革新非常的好,讓我們能夠有更多的發(fā)揮空間,提高了自己開(kāi)發(fā)創(chuàng)新的能力。</p><p><b> 九、參考文獻(xiàn)</b></p><p> [1] 李廣弟兄 朱月
46、秀 冷祖祁,單片機(jī)基礎(chǔ)(第3版):北京航航天大學(xué)出版社</p><p> [2] 華成英 童詩(shī)白, 模擬電子技術(shù)基礎(chǔ)(第四版):高等教育出版社</p><p> [3] 康華光,電子技術(shù)基礎(chǔ) 數(shù)字部分(第五版):高等教育出版社</p><p> [4] 趙建領(lǐng) 薛園園 ,零基礎(chǔ)學(xué)單片機(jī)C語(yǔ)言程序設(shè)計(jì):機(jī)械工業(yè)出版社</p><p>
47、[5] 樓然苗 李光飛. 單片機(jī)課程設(shè)計(jì)指導(dǎo):北京航航天大學(xué)出版社</p><p> [6] 李鳳霞. C語(yǔ)言程序設(shè)計(jì)教程(第二版):北京理工大學(xué)出版社</p><p> [7] 趙亮 侯國(guó)銳. 單片機(jī)C語(yǔ)言編程與實(shí)例:人民郵電出版社</p><p> [8] 張義和 王敏男 許宏昌 余春長(zhǎng) . 例說(shuō)5單片機(jī)(C語(yǔ)言版):人民郵電出版社</p>
48、<p><b> 十、致謝</b></p><p> 感謝學(xué)院給我們提供了一個(gè)展現(xiàn)自己的舞臺(tái),給我們一次難得煅煉的機(jī)會(huì),使得我們的動(dòng)手能力和專業(yè)技能都有了很大的提高,對(duì)本專業(yè)的東西有了更進(jìn)一步的了解。同時(shí),在做作品的日子里得了彭老師的悉心指導(dǎo),在此向我們的指導(dǎo)教師致以誠(chéng)摯的謝意,感謝提供相關(guān)技術(shù)幫助的老師和同學(xué),你們的支持和鼓勵(lì)使我們對(duì)這次的作品完全有了信心和動(dòng)力,也給了我們很
49、多無(wú)私的幫助和支持,我們?cè)诖松畋碇x意。</p><p><b> 十一、程序清單</b></p><p><b> 程序清單如下:</b></p><p> #include<reg51.h></p><p> #include<intrins.h></p>
50、;<p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> sbit LCD_RS = P2^5; //LCD1602指令,數(shù)據(jù)控制端口 </p><p> sbit LCD_RW = P2^6;//LCD1602讀、寫(xiě)控制端口
51、</p><p> sbit LCD_EN = P2^7;//LCD1602使能</p><p> sbit K1 = P1^0;//K1鍵</p><p> sbit K2 = P1^1;//K2鍵</p><p> sbit K3 = P1^2;//K3鍵</p><p> sbit K4 = P
52、1^3;//K4鍵</p><p> sbit reset = P2^2;//5腳復(fù)位</p><p> sbit io = P2^1;//6腳IO</p><p> sbit sclk = P2^0;//7腳時(shí)鐘</p><p> sbit BEEP = P3^7;//蜂鳴器端口</p><p>
53、 bit flag=1,hour=0,min=0;</p><p> bit year=0,month=0,day=0;</p><p> bit bj_flag=0;//報(bào)警標(biāo)志位</p><p> uchar timecount=0,count=0; </p><p> uchar str[]="Alarm:"
54、;;</p><p> uchar init [] ={0x00,0x00,0x00,0x00,0x00,0x00,0x00}; </p><p> uchar init1[] ={0x00,0x00};</p><p> uchar init2[] ={0x00,0x00,0x12,0x01,0x01,0x01,0x00}; </p><
55、;p> //秒,分, 時(shí), 日, 月,星期,年,默認(rèn)時(shí)間設(shè)置</p><p> uchar bj_time[] ={0x00,0x00,0x00}; </p><p><b> //秒, 分, 時(shí)</b></p><p> uchar code mytab[8] = {0x01,0x1b,0x1d,0x19,0x1d,0x1b,
56、0x01,0x00};//小喇叭形狀定義</p><p> #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};</p><p> void Set_W1302(uchar addr);</p><p> void Set_Flash(uchar row,uchar col);</p>
57、<p> void Set_place(uchar row,uchar col);</p><p> void Play_nowtime();</p><p> void key_set(uchar num,uchar row,uchar col );</p><p> void alarm_time();</p><
58、p> void Play_alarmtime();</p><p> void Time_compare();</p><p> /******************************************************************/</p><p> /*******************************
59、***********************************/</p><p> void delay1(int ms)</p><p><b> {</b></p><p> unsigned char y;</p><p> while(ms--)</p><p><b
60、> {</b></p><p> for(y = 0; y<250; y++)</p><p><b> {</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p>
61、<p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b><
62、;/p><p> /******************************************************************/</p><p> /* </p><p> /*檢查L(zhǎng)CD忙狀態(tài)
63、 </p><p> /*lcd_busy為1時(shí),忙,等待。lcd-busy為0時(shí),閑,可寫(xiě)指令與數(shù)據(jù)。 </p><p> /* </p><p>
64、 /******************************************************************/</p><p> bit lcd_busy()</p><p> { </p><p> bit result;</p><p> LCD_RS
65、 = 0;</p><p> LCD_RW = 1;</p><p> LCD_EN = 1;</p><p> delayNOP();</p><p> result = (bit)(P0&0x80);</p><p> LCD_EN = 0;</p><p> retur
66、n(result); </p><p><b> }</b></p><p> /*********************************************************/</p><p> /* </
67、p><p> /*寫(xiě)指令數(shù)據(jù)到LCD </p><p> /*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。 </p><p> /* <
68、/p><p> /*********************************************************/</p><p> void lcd_wcmd(uchar cmd)</p><p> { </p><p> while(lcd_busy());<
69、/p><p> LCD_RS = 0;</p><p> LCD_RW = 0;</p><p> LCD_EN = 0;</p><p><b> _nop_();</b></p><p><b> _nop_(); </b></p><p>
70、<b> P0 = cmd;</b></p><p> delayNOP();</p><p> LCD_EN = 1;</p><p> delayNOP();</p><p> LCD_EN = 0; </p><p><b> }</b></p>
71、;<p> /********************************************************/</p><p> /* </p><p> /*寫(xiě)顯示數(shù)據(jù)到LCD
72、 </p><p> /*RS=H,RW=L,E=高脈沖,D0-D7=數(shù)據(jù)。 </p><p> /* </p><p> /***************************************
73、*****************/</p><p> void lcd_wdat(uchar dat)</p><p> { </p><p> while(lcd_busy());</p><p> LCD_RS = 1;</p><p> LCD_RW
74、= 0;</p><p> LCD_EN = 0;</p><p><b> P0 = dat;</b></p><p> delayNOP();</p><p> LCD_EN = 1;</p><p> delayNOP();</p><p> LCD_EN
75、 = 0; </p><p><b> }</b></p><p> /********************************************************/ </p><p> /* LCD初始化設(shè)定
76、 </p><p> /********************************************************/</p><p> void init_lcd()</p>
77、<p><b> { </b></p><p> delay1(15); </p><p> lcd_wcmd(0x01); //清除LCD的顯示內(nèi)容</p><p> lcd_wcmd(0x38); //16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)</p><p> delay1(5
78、);</p><p> lcd_wcmd(0x38); </p><p> delay1(5);</p><p> lcd_wcmd(0x38); </p><p> delay1(5);</p><p> lcd_wcmd(0x0c); //顯示開(kāi),關(guān)光標(biāo)</
79、p><p> delay1(5);</p><p> lcd_wcmd(0x06); //移動(dòng)光標(biāo)</p><p> delay1(5);</p><p> lcd_wcmd(0x01); //清除LCD的顯示內(nèi)容</p><p> delay1(5);</p><p>
80、;<b> }</b></p><p> /********************************************************/</p><p><b> // </b></p><p> /***********************************************
81、*********/</p><p> void delay()</p><p><b> {</b></p><p><b> uchar j;</b></p><p> for(j=250;j>0;j--);</p><p><b> }<
82、/b></p><p> /*******************************************************/</p><p> /* </p><p> /* 寫(xiě)字符串函數(shù)
83、 </p><p> /* </p><p> /*******************************************************/</p><p> void write_str(uchar
84、 addr,uchar *p)</p><p><b> {</b></p><p> uchar i=0; </p><p> lcd_wcmd(addr);</p><p> while(p[i]!='\0')</p><p><b> {</b>
85、;</p><p> lcd_wdat(p[i]);</p><p><b> i++;</b></p><p><b> }</b></p><p><b> }</b></p><p> /*************************
86、******************************/</p><p> /* </p><p> /* 設(shè)定顯示位置 </p><p> /*
87、 </p><p> /*******************************************************/</p><p> void write_position(uchar row,uchar col)</p><p><b> {&l
88、t;/b></p><p> uchar place;</p><p> if(row==1)</p><p><b> {</b></p><p> place=0x80+col-1;</p><p> lcd_wcmd(place);</p><p>&
89、lt;b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> place=0xc0+col-1;</p><p> lcd_wcmd(place);</p><p><b>
90、 }</b></p><p><b> }</b></p><p> /*******************************************************/</p><p> /* </p
91、><p> /*自定義字符寫(xiě)入CGRAM </p><p> /* </p><p> /***************************************************
92、****/</p><p> void writetab() </p><p><b> { </b></p><p> unsigned char i;</p><p> lcd_wcmd(0x40); //寫(xiě)CGRAM</p><p> for (i =
93、0; i< 8; i++) </p><p> lcd_wdat(mytab[i]); </p><p><b> }</b></p><p> /*******************************************************/</p><p><
94、;b> //</b></p><p> /*******************************************************/</p><p> void write_byte(uchar inbyte)</p><p><b> {</b></p><p><
95、b> uchar i;</b></p><p> for(i=0;i<8;i++)</p><p><b> {</b></p><p> sclk=0; //寫(xiě)的時(shí)候低電平改變數(shù)據(jù)</p><p> if(inbyte&0x01)</p>
96、<p><b> io=1;</b></p><p><b> else</b></p><p><b> io=0; </b></p><p> sclk=1; //寫(xiě)的時(shí)候高電平,把數(shù)據(jù)寫(xiě)入ds1302</p><p><b&g
97、t; _nop_();</b></p><p> inbyte=inbyte>>1;</p><p><b> }</b></p><p><b> }</b></p><p> /******************************************
98、**************/</p><p> /********************************************************/</p><p> uchar read_byte() //sclk的下跳沿讀數(shù)據(jù) </p><p><b> {</b></p><p&g
99、t; uchar i,temp=0; </p><p> io=1; //設(shè)置為輸入口</p><p> for(i=0;i<7;i++)</p><p><b> {</b></p><p><b> sclk=0;</b></p>&l
100、t;p><b> if(io==1)</b></p><p> temp=temp|0x80;</p><p><b> else</b></p><p> temp=temp&0x7f;</p><p> sclk=1; //產(chǎn)生下跳沿</p&
101、gt;<p> temp=temp>>1;</p><p><b> }</b></p><p> return (temp);</p><p><b> }</b></p><p> /**************************************
102、******************/</p><p> // 往ds1302的某個(gè)地址寫(xiě)入數(shù)據(jù) </p><p> /********************************************************/</p><p> void write_ds1302(uchar cmd,uchar indata)</p>&
103、lt;p><b> {</b></p><p><b> sclk=0;</b></p><p><b> reset=1;</b></p><p> write_byte(cmd); </p><p> write_byte(indata);&l
104、t;/p><p><b> sclk=0;</b></p><p><b> reset=0;</b></p><p><b> }</b></p><p> /********************************************************
105、/</p><p> // 讀ds1302某地址的的數(shù)據(jù) </p><p> /********************************************************/</p><p> uchar read_ds1302(uchar addr)</p><p><b> {</b>&l
106、t;/p><p> uchar backdata;</p><p><b> sclk=0;</b></p><p><b> reset=1;</b></p><p> write_byte(addr); //先寫(xiě)地址</p><p> backdata=r
107、ead_byte(); //然后讀數(shù)據(jù)</p><p><b> sclk=0;</b></p><p><b> reset=0;</b></p><p> return (backdata);</p><p><b> }</b></p><p
108、> /*********************************************************/</p><p><b> // 設(shè)置初始時(shí)間</b></p><p> /*********************************************************/</p><p>
109、 void set_ds1302(uchar addr,uchar *p,uchar n) //寫(xiě)入n個(gè)數(shù)據(jù)</p><p><b> {</b></p><p> write_ds1302(0x8e,0x00); //寫(xiě)控制字,允許寫(xiě)操作</p><p> for(;n>0;n--)</p><
110、;p><b> {</b></p><p> write_ds1302(addr,*p);</p><p><b> p++;</b></p><p> addr=addr+2;</p><p><b> }</b></p><p>
111、write_ds1302(0x8e,0x80); //寫(xiě)保護(hù),不允許寫(xiě)</p><p><b> }</b></p><p> /*******************************************************/</p><p> // 讀取當(dāng)前時(shí)間 </p><p>
112、; /*******************************************************/</p><p> void read_nowtime(uchar addr,uchar *p,uchar n)</p><p><b> {</b></p><p> for(;n>0;n--)</p>
113、;<p><b> {</b></p><p> *p=read_ds1302(addr);</p><p><b> p++;</b></p><p> addr=addr+2;</p><p><b> } </b></p><p
114、><b> }</b></p><p> /*******************************************************/</p><p> // 初始化DS1302</p><p> /*******************************************************
115、/</p><p> void init_ds1302()</p><p><b> {</b></p><p><b> reset=0;</b></p><p><b> sclk=0;</b></p><p> write_ds1302(
116、0x80,0x00); </p><p> write_ds1302(0x90,0xa6); //一個(gè)二極管+4K電阻充電</p><p> write_ds1302(0x8e,0x80); //寫(xiě)保護(hù)控制字,禁止寫(xiě)</p><p><b> }</b></p><p> /*******************
117、***********************************/ </p><p> /* 蜂鳴器響一聲 </p&g
118、t;<p> /******************************************************/</p><p> void beep()</p><p><b> {</b></p><p> unsigned char y;</p><p> for (y=0;y
119、<100;y++)</p><p><b> {</b></p><p><b> delay();</b></p><p> BEEP=!BEEP; //BEEP取反</p><p><b> } </b></p>&
120、lt;p> BEEP=1; //關(guān)閉蜂鳴器</p><p> delay1(50);</p><p><b> }</b></p><p> /**********************************************************/
121、 </p><p> /* 閃爍函數(shù) </p><p> /*****************************************
122、*****************/</p><p> void flash()</p><p><b> {</b></p><p><b> if(flag)</b></p><p><b> {</b></p><p> write_p
123、osition(1,14);</p><p> lcd_wdat(':');</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> write_
124、position(1,14);</p><p> lcd_wdat(0x20);</p><p><b> }</b></p><p><b> }</b></p><p> /*********************************************************
125、*/</p><p><b> // 主函數(shù)</b></p><p> /**********************************************************/</p><p> void main()</p><p><b> {</b></p>
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于at89s52的電子萬(wàn)年歷畢業(yè)論文
- 萬(wàn)年歷畢業(yè)論文---基于at89s52單片機(jī)的電子萬(wàn)年歷設(shè)計(jì)
- 基于at89s52單片機(jī)的電子萬(wàn)年歷設(shè)計(jì)畢業(yè)論文
- 基于at89s52單片機(jī)的萬(wàn)年歷設(shè)計(jì)畢業(yè)論文
- 基于at89s52單片機(jī)的電子萬(wàn)年歷設(shè)計(jì)1畢業(yè)論文
- 畢業(yè)設(shè)計(jì)---制作單片機(jī)at89s52的萬(wàn)年歷
- 萬(wàn)年歷畢業(yè)設(shè)計(jì)---基于stc89c52萬(wàn)年歷的設(shè)計(jì)
- 基于89c52的電子萬(wàn)年歷
- 電子萬(wàn)年歷畢業(yè)論文
- 畢業(yè)論文——電子萬(wàn)年歷設(shè)計(jì)
- 電子萬(wàn)年歷設(shè)計(jì)-畢業(yè)論文
- 畢業(yè)論文——電子萬(wàn)年歷設(shè)計(jì)
- 基于at89s52單片機(jī)和ds1302的電子萬(wàn)年歷畢業(yè)設(shè)計(jì)
- 基于at89s52單片機(jī)和ds1302的電子萬(wàn)年歷畢業(yè)設(shè)計(jì)開(kāi)題報(bào)告
- 畢業(yè)設(shè)計(jì)---基于at89s52單片機(jī)的數(shù)字萬(wàn)年歷設(shè)計(jì)與實(shí)現(xiàn)
- 電子萬(wàn)年歷的設(shè)計(jì)畢業(yè)論文
- 萬(wàn)年歷設(shè)計(jì)畢業(yè)論文
- 數(shù)字電子萬(wàn)年歷的畢業(yè)論文
- 基于labview的電子萬(wàn)年歷的設(shè)計(jì)畢業(yè)論文
- 萬(wàn)年歷設(shè)計(jì)制作【畢業(yè)論文】
評(píng)論
0/150
提交評(píng)論