單片機(jī)課程設(shè)計(jì)_萬年歷_第1頁
單片機(jī)課程設(shè)計(jì)_萬年歷_第2頁
單片機(jī)課程設(shè)計(jì)_萬年歷_第3頁
單片機(jī)課程設(shè)計(jì)_萬年歷_第4頁
單片機(jī)課程設(shè)計(jì)_萬年歷_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 單片機(jī)系統(tǒng)課程設(shè)計(jì)單片機(jī)系統(tǒng)課 程 設(shè) 計(jì)成績評定表設(shè)計(jì)課題 : 萬年歷 學(xué)院名稱 : 電氣工程學(xué)院 專業(yè)班級 : 學(xué)生姓名 : 學(xué) 號 : 指導(dǎo)教師 : 設(shè)計(jì)地點(diǎn) : 設(shè)計(jì)時(shí)間 : 指導(dǎo)教師意見:成績: 簽名: 年 月 日 單片機(jī)系統(tǒng)課 程 設(shè) 計(jì)課程設(shè)計(jì)名稱: 萬年歷 專 業(yè) 班 級 : 學(xué) 生 姓 名 : 學(xué) 號 : 指 導(dǎo) 教 師 : 課程設(shè)計(jì)地點(diǎn): 課程設(shè)計(jì)時(shí)間: 單片機(jī)系統(tǒng) 課程設(shè)計(jì)任務(wù)書學(xué)生姓名專業(yè)班級學(xué)號題 目課題性質(zhì)工程設(shè)計(jì)課題來源選題指導(dǎo)教師主要內(nèi)容(參數(shù))1、 顯示陽歷年、月、日、時(shí)、分、秒、星期2、 可用按鍵對時(shí)間、日期進(jìn)行調(diào)整任務(wù)要求(進(jìn)度)第1-2天:熟悉課程設(shè)計(jì)

2、任務(wù)及要求,查閱技術(shù)資料,確定設(shè)計(jì)方案。第3-4天:按照確定的方案設(shè)計(jì)單元電路。要求畫出單元電路圖,元件及元件參數(shù)選擇要有依據(jù),各單元電路的設(shè)計(jì)要有詳細(xì)論述。第5-6天:軟件設(shè)計(jì),編寫程序。第7-8天:實(shí)驗(yàn)室調(diào)試。第9-10天:撰寫課程設(shè)計(jì)報(bào)告。要求內(nèi)容完整、圖表清晰、文理流暢、格式規(guī)范、方案合理、設(shè)計(jì)正確,篇幅合理。主要參考資料1 張迎新單片微型計(jì)算機(jī)原理、應(yīng)用及接口技術(shù)(第2版)M北京:國防工業(yè)出版社,20042偉福LAB6000系列單片機(jī)仿真實(shí)驗(yàn)系統(tǒng)使用說明書3 閻石數(shù)字電路技術(shù)基礎(chǔ)(第五版)北京:高等教育出版社,2006審查意見系(教研室)主任簽字: 年 月 日 摘 要:隨著當(dāng)今世界經(jīng)

3、濟(jì)的快速發(fā)展和信息化時(shí)代的來臨,各種各樣的小型智能家電產(chǎn)品陸續(xù)出現(xiàn)在我們的生活中。日歷是人們不可或缺的日常用品。但一般日歷都為紙制用品,使用不便,壽命不長。電子萬年歷采用智能電子控制和顯示技術(shù),改善了紙制日歷的缺陷。本設(shè)計(jì)以AT89C52單片機(jī)為核心,構(gòu)成單片機(jī)控制電路,結(jié)合DS1302時(shí)鐘芯片,完成時(shí)間的調(diào)整和掉電保護(hù),全部信息用LED數(shù)碼管顯示。時(shí)間、日期調(diào)整由按鍵來實(shí)現(xiàn)。日歷能顯示陽歷和時(shí)、分、秒。關(guān)鍵詞:萬年歷;52系列單片機(jī);時(shí)鐘芯片 單片機(jī)課程設(shè)計(jì)目 錄1 概述12 總體方案設(shè)計(jì)12.1 方案1基于AT89C52單片機(jī)的萬年歷設(shè)計(jì)12.2 方案2基于AT89C52單片機(jī)和DS130

4、2的萬年歷設(shè)計(jì)22.3 總體方案23 硬件電路設(shè)計(jì)33.1 主控器 AT89C5233.1.1 AT89C52的主要性能43.1.2 AT89C52的引腳及其功能43.2 時(shí)鐘電路的設(shè)計(jì)73.2.1 DS1302的性能特性73.3.2 DS1302數(shù)據(jù)操作原理83.3 顯示電路的設(shè)計(jì)103.4 鍵盤接口的設(shè)計(jì)124 系統(tǒng)軟件設(shè)計(jì)124.1 主程序設(shè)計(jì)134.2 中斷服務(wù)程序設(shè)計(jì)134.3 子程序設(shè)計(jì)144.3.1 延時(shí)子程序144.3.2 數(shù)碼管動態(tài)掃描子程序144.3.3 定時(shí)器初始化子程序154.3.4 鍵盤掃描子程序154.3.5 顯示子程序165 系統(tǒng)調(diào)試與總結(jié)16參考文獻(xiàn)19附錄A

5、源程序20附錄B 系統(tǒng)原理圖291 概述在日新月異的21世紀(jì)里,家用電子產(chǎn)品得到了迅速發(fā)展。許多家電設(shè)備都趨于人性化、智能化,這些電器設(shè)備大部分都含有CPU控制器或者是單片機(jī)。單片機(jī)以其高可靠性、高性價(jià)比、低電壓、低功耗等一系列優(yōu)點(diǎn),近幾年得到迅猛發(fā)展和大范圍推廣,廣泛應(yīng)用于工業(yè)控制系統(tǒng)、通訊設(shè)備、日常消費(fèi)類產(chǎn)品和玩具等。并且已經(jīng)深入到工業(yè)生產(chǎn)的各個環(huán)節(jié)以及人民生活的各個方面,如車間流水線控制、自動化系統(tǒng)等、智能型家用電器(冰箱、空調(diào)、彩電)等。用單片機(jī)來控制的小型家電產(chǎn)品具有便攜實(shí)用,操作簡單的特點(diǎn)。本文設(shè)計(jì)的電子萬年歷屬于小型智能家用電子產(chǎn)品。利用單片機(jī)進(jìn)行控制,實(shí)時(shí)時(shí)鐘芯片進(jìn)行記時(shí),外加

6、掉電存儲電路和顯示電路,可實(shí)現(xiàn)時(shí)間的調(diào)整和顯示。電子萬年歷既可廣泛應(yīng)用于家庭,也可應(yīng)用于銀行、郵電、賓館、醫(yī)院、學(xué)校、企業(yè)、商店等相關(guān)行業(yè)的大廳,以及單位會議室、門衛(wèi)等場所。因而,此設(shè)計(jì)具有相當(dāng)重要的現(xiàn)實(shí)意義和實(shí)用價(jià)值。2 總體方案設(shè)計(jì)由于現(xiàn)在市面上的電子萬年歷的種類比較多,因此到底選擇什么樣的方案在設(shè)計(jì)中是至關(guān)重要的。正確地選擇方案就可以使產(chǎn)品更加人性化,并且可以減小開發(fā)的難度,縮短開發(fā)的周期,降低產(chǎn)品的成本等等,因此就會被人們普遍接受,并且能夠更快地將產(chǎn)品推向市場實(shí)現(xiàn)其自身的價(jià)值。下面我們就擬訂了兩種方案,希望能夠選擇一種性價(jià)比高的方案。2.1 方案1基于AT89C52單片機(jī)的萬年歷設(shè)計(jì)不

7、使用時(shí)鐘芯片,而直接用AT89C52單片機(jī)來實(shí)現(xiàn)電子萬年歷設(shè)計(jì)。AT89C52是一種帶8K字節(jié)閃爍可編程可擦除只讀存儲器的低電壓,高性能CMOS 8位微處理器,俗稱單片機(jī)。單片機(jī)的可擦除只讀存儲器可以反復(fù)擦寫1000余次。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C52是一種高效微控制器,為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉的方案。若采用單片機(jī)計(jì)時(shí),利用它的一個16位定時(shí)器/計(jì)數(shù)器每50ms產(chǎn)生一個中斷信號,中斷20次后產(chǎn)生一個秒信號,然后根據(jù)時(shí)間進(jìn)制關(guān)系依次向分、時(shí)、日、星期、月、年進(jìn)位。這樣就實(shí)現(xiàn)了直接用單片機(jī)來實(shí)現(xiàn)電子萬年歷設(shè)計(jì)。用單片機(jī)來實(shí)現(xiàn)電子萬

8、年歷設(shè)計(jì),無須外接其他芯片,充分利用了單片機(jī)的資源。但是精度不夠高,誤差較大,掉電后丟失所有數(shù)據(jù),軟件編程較復(fù)雜。2.2 方案2基于AT89C52單片機(jī)和DS1302的萬年歷設(shè)計(jì)在以單片機(jī)為核心構(gòu)成的裝置中,經(jīng)常需要一個實(shí)時(shí)的時(shí)鐘和日歷,以便對一些實(shí)時(shí)發(fā)生事件記錄時(shí)給予時(shí)標(biāo),實(shí)時(shí)時(shí)鐘芯片便可起到這一作用。過去多用并行接口的時(shí)鐘芯片,如MC146818,DS12887等。它們已能完全滿足單片機(jī)系統(tǒng)對實(shí)時(shí)時(shí)鐘的要求,但是這些芯片與單片機(jī)接口復(fù)雜、占用地址, 數(shù)據(jù)總線接線多、芯片體積大占用空間多、近年來串行接口的各種芯片在單片機(jī)系統(tǒng)中應(yīng)用愈來愈多,串行接口的實(shí)時(shí)時(shí)鐘芯片也出現(xiàn)了不少,DS1302是一

9、個綜合性能較好且價(jià)格便宜的串行接口實(shí)時(shí)時(shí)鐘芯片。利用單片機(jī)進(jìn)行控制,采用DS1302作為實(shí)時(shí)時(shí)鐘芯片,其三線接口 SCLK、I/O、 與單片機(jī)進(jìn)行同步通信,外加掉電存儲電路、顯示電路、鍵盤電路,即構(gòu)成一個基本的電子萬年歷系統(tǒng),若還要添加其他功能,在這基礎(chǔ)上外擴(kuò)電路即可。由于在系統(tǒng)設(shè)計(jì)時(shí),需要考慮以下幾點(diǎn)因素:功耗低、精確度高、軟件編程較簡單,芯片的體積小、芯片成本低等,而DS1302芯片有上面所述的諸多優(yōu)點(diǎn),所以本設(shè)計(jì)采用方案2基于DS1302的電子萬年歷設(shè)計(jì)。2.3 總體方案本設(shè)計(jì)以AT89C52單片機(jī)為核心,構(gòu)成單片機(jī)控制電路,結(jié)合DS1302時(shí)鐘芯片,顯示陽歷的年、月、日、星期、時(shí)、分、

10、秒同時(shí)完成對它們的手動調(diào)整和掉電保護(hù),全部信息用8位八段數(shù)碼管顯示出來。輸入接口由按鍵來實(shí)現(xiàn),用按鍵可以對日期和時(shí)間進(jìn)行調(diào)整。整機(jī)電路使用+5V穩(wěn)壓電源,可穩(wěn)定工作。其軟硬件設(shè)計(jì)簡單,時(shí)間記錄準(zhǔn)確,可廣泛應(yīng)用于長時(shí)間連續(xù)顯示的系統(tǒng)中。按照系統(tǒng)設(shè)計(jì)功能的要求,確定硬件系統(tǒng)由主控制器、時(shí)鐘模塊、顯示模塊、鍵盤接口共4個模塊組成,總體系統(tǒng)構(gòu)成框圖如圖2-1所示。圖2-1 電子萬年歷系統(tǒng)構(gòu)成框圖3 硬件電路設(shè)計(jì)電子萬年歷電路原理圖見附錄B,系統(tǒng)由主控制器AT89C52、時(shí)鐘芯片DS1302、顯示電路及鍵盤掃描電路組成。按照系統(tǒng)設(shè)計(jì)功能的要求,初步確定設(shè)計(jì)系統(tǒng)由主控模塊、時(shí)鐘模塊、顯示模塊、鍵盤接口模塊

11、組成。主控芯片使用52系列AT89C52單片機(jī),時(shí)鐘芯片使用美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘芯片DS1302, DS1302作為主要計(jì)時(shí)芯片,可以做到計(jì)時(shí)準(zhǔn)確。更重要的是,DS1302可以在很小電流的后備 (2.55.5V電源,在2.5V時(shí)耗電小于300nA)下繼續(xù)計(jì)時(shí),并可編程選擇多種充電電流來對后備電源進(jìn)行慢速充電,可以保證后備電源基本不耗電。顯示模塊使用8位八段數(shù)碼管,八段數(shù)碼管雖然操作略顯繁瑣,但可視范圍十分寬,而且經(jīng)濟(jì)實(shí)惠,也不需要復(fù)雜的驅(qū)動程序。鍵盤模塊使用若干個獨(dú)立按鍵即可。3.1 主控器 AT89C52ATMEL公司生產(chǎn)的AT89C52單片機(jī)采用

12、高性能的靜態(tài)80C51設(shè)計(jì),由先進(jìn)工藝制造,并帶有非易失性Flsah程序存儲器。它是一種高性能、低功耗的8位CMOS微處理芯片,市場應(yīng)用最多。其引腳封裝如圖3-1所示。圖3-1 AT89C52引腳封裝圖3.1.1 AT89C52的主要性能8KB Flash ROM,可以檫寫1000次以上,數(shù)據(jù)保存10年。256字節(jié)內(nèi)部RAM。電源控制模式時(shí)鐘可停止和恢復(fù);空閑模式;掉電模式。 6個中斷源。4個中斷優(yōu)先級。4個8位I/O口。全雙工增強(qiáng)型UART。3個16位定時(shí)/計(jì)數(shù)器,T0、T1(標(biāo)準(zhǔn)80C51)和增加的T2(捕獲和比較)。全靜態(tài)工作方式:024MHz。3.1.2 AT89C52的引腳及其功能A

13、T89C52單片機(jī)的管腳說明如下:(1) 主要電源引腳VCC 電源端GND 接地端(2) 外接晶體引腳XTAL1和XTAL2XTAL1 接外部晶體的一個引腳。在單片機(jī)內(nèi)部,它是構(gòu)成片內(nèi)振蕩器的反相放大器的輸入端。當(dāng)采用外部振蕩器時(shí),該引腳接收振蕩器的信號,既把此信號直接接到內(nèi)部時(shí)發(fā)生器的輸入端。XTAL2 接外部晶體的另一個引腳。在單片機(jī)內(nèi)部,它是上述振蕩器的反相放大器的輸出端。采用外部振蕩器時(shí),此引腳應(yīng)懸浮不連接。(3) 控制或與其它電源復(fù)用引腳RST、ALE/、和/VPP復(fù)位輸入端。當(dāng)振蕩器運(yùn)行時(shí),在該引腳上出現(xiàn)兩個機(jī)器周期的高電平將使單片機(jī)復(fù)位。ALE/當(dāng)訪問外部存儲器時(shí),ALE(地址鎖

14、存允許)的輸出用于鎖存地址的低位字節(jié)。即使不訪問外部存儲器,ALE端仍以不變的頻率(此頻率為振蕩器頻率的1/6)周期性地出現(xiàn)正脈沖信號。因此,它可用作對外輸出的時(shí)鐘,或用于定時(shí)目的。然而要注意的是:每當(dāng)訪問外部數(shù)據(jù)存儲器時(shí),將跳過一個ALE脈沖。在對Flash存儲器編程期間,該引腳還用于輸入編程脈沖()。 程序存儲允許()輸出是外部程序存儲器的讀選通信號。當(dāng)AT89S52/LV52由外部程序存儲器取指令(或常數(shù))時(shí),每個機(jī)器周期兩次有效(既輸出2個脈沖)。但在此期間內(nèi),每當(dāng)訪問外部數(shù)據(jù)存儲器時(shí),這兩次有效的信號將不出現(xiàn)。/VPP 外部訪問允許端。要使CPU只訪問外部程序存儲器(地址為0000H

15、FFFFH),則端必須保持低電平(接到GND端)。當(dāng)端保持高電平(接VSS端)時(shí),CPU則執(zhí)行內(nèi)部程序存儲器中的程序。(4) 輸入/輸出引腳 P0.0 P0.7、P1.0P1.7、P2.0 P2.7 和P3.0P3.7P0端口(P0.0 P0.7) P0是一個8位漏極開路型雙向I/O端口。作為輸出口用時(shí),每位能以吸收電流的方式驅(qū)動8個TTL輸入,對端口寫1時(shí),又可作高阻抗輸入端用。P1端口(P1.0 P1.7) P1是一個帶有內(nèi)部上拉電阻的8位雙向I/O端口。P1的輸出緩沖器可驅(qū)動(吸收或輸出電流方式)4個TTL輸入。對端口寫1時(shí),通過內(nèi)部的上拉電阻把端口拉到高電位,這時(shí)可用作輸入口。作輸入口

16、時(shí),因?yàn)橛袃?nèi)部的上拉電阻,那些被外部信號拉低的引腳會輸出一個電流。P2端口 (P2.0P2.7) P2是一個帶有內(nèi)部上拉電阻的8位雙向I/O端口。P2的輸出緩沖器可驅(qū)動(吸收或輸出電流方式)4個TTL輸入。對端口寫1時(shí),通過內(nèi)部的上拉電阻把端口拉到高電位,這時(shí)可用作輸入口。P2作輸入口使用時(shí),因?yàn)橛袃?nèi)部的上拉電阻,那些被外部信號拉低的引腳會輸出一個電流。P3端口(P3.0P3.7) P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流,這是由于上拉的緣故。P3口也可作

17、為AT89S52的一些特殊功能,這些特殊功能見表3-1。表3-1 P3端口的特殊功能 端口引腳 兼 用 功 能 P3.0RXD (串行輸入口) P3.1TXD (串行輸出口) P3.2 (外部中斷0) P3.3 (外部中斷1) P3.4T0 ( 定時(shí)器0的外部輸入) P3.5T1 (定時(shí)器1的外部輸入) P3.6 (外部數(shù)據(jù)存儲器寫選通) P3.7 (外部數(shù)據(jù)存儲器讀選通)本系統(tǒng)即采用AT89C52作為主控芯片,本系統(tǒng)中其管腳分配如圖3-2所示。其中VCC接5V穩(wěn)壓電源,GND接地,RST接復(fù)位電路,P3端口作為獨(dú)立按鍵的接口,XTAL1,XTAL2接外部可換晶振,P0端口作為數(shù)據(jù)總線接到兩片

18、74LS573上作為其輸入信號,P2.7口向DS1302提供CLK時(shí)鐘信號,P2.6向DS1302提供I/O信號,P2.5口向DS1302提供RST復(fù)位/片選線信號,P2.4和P2.3口分別向兩片74LS573提供段選和片選信號。圖3-2 主控芯片及其管腳分配3.2 時(shí)鐘電路的設(shè)計(jì)3.2.1 DS1302的性能特性實(shí)時(shí)時(shí)鐘,可對秒、分、時(shí)、日、周、月以及帶閏年補(bǔ)償?shù)哪赀M(jìn)行計(jì)數(shù);用于高速數(shù)據(jù)暫存的318位RAM;最少引腳的串行I/O;2.55.5V電壓工作范圍;2.5V時(shí)耗電小于300nA;用于時(shí)鐘或RAM數(shù)據(jù)讀/寫的單字節(jié)或多字節(jié)(脈沖方式)數(shù)據(jù)傳送方式;簡單的3線接口;可選的慢速充電(至Vc

19、c1)的能力。DS1302時(shí)鐘芯片包括實(shí)時(shí)時(shí)鐘/日歷和31字節(jié)的靜態(tài)RAM。它經(jīng)過一個簡單的串行接口與微處理器通信。實(shí)時(shí)時(shí)鐘/日歷提供秒、分、時(shí)、日、周、月和年等信息。對于小于31天的月和月末的日期自動調(diào)整,還包括閏年校正的功能。時(shí)鐘的運(yùn)行可以采用24h或帶AM(上午)/PM(下午)的12h格式。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時(shí)鐘信號或RAM數(shù)據(jù)。DS1302有主電源/后備電源雙電源引腳:Vcc1在單電源與電池供電的系統(tǒng)中提供低電源,并提供低功率的電池備份;Vcc2在雙電源系統(tǒng)中提供主電源,在這種運(yùn)用方式中,Vcc1連接到備份電,以便在沒有主電源的情況下能

20、保存時(shí)間信息以及數(shù)據(jù)。DS1302由Vcc1或Vcc2中較大者供電。當(dāng)Vcc2大于Vcc1+0.2V時(shí),Vcc2給DS1302供電;當(dāng)Vcc2小于Vcc時(shí), DS13026由Vcc1供電。3.3.2 DS1302數(shù)據(jù)操作原理DS1302在任何數(shù)據(jù)傳送時(shí)必須先初始化,把RST腳置為高電平,然后把8位地址和命令字裝入移位寄存器,數(shù)據(jù)在SCLK的上升沿被輸入。無論是讀周期還是寫周期,開始8位指定40個寄存器中哪個將被訪問到。在開始8個時(shí)鐘周期,把命令字節(jié)裝入移位寄存器之后,另外的時(shí)鐘周期在讀操作時(shí)輸出數(shù)據(jù),在寫操作是寫入時(shí)寫入數(shù)據(jù)。時(shí)鐘脈沖的個數(shù)在單字節(jié)方式下為8加8,在多字節(jié)方式下為8加字節(jié)數(shù),最

21、大可達(dá)248字節(jié)數(shù)。如果在傳送過程中置RST腳為低電平,則會終止本次數(shù)據(jù)傳送,并且I/O引腳變?yōu)楦咦钁B(tài)。上電運(yùn)行時(shí),在Vcc大于等于2.5V之前,RST腳必須保持低電平。只有在SCLK為低電平時(shí),才能將RST置為高電平。DS1302內(nèi)部結(jié)構(gòu)圖如圖3-3所示,表3-2為各引腳的功能。圖3-3 DS1302內(nèi)部結(jié)構(gòu)表 3-2 DS1302引腳功能引腳號引腳名稱功 能1Vcc2主電源2,3X1,X2振蕩源,外界32.768kHz晶振4GND地線5RST復(fù)位/片選線6I/O串行數(shù)據(jù)輸入/輸出端(雙向)7SCLK串行數(shù)據(jù)輸入端8Vcc1后備電池DS1302的控制字如圖3-4所示。控制字節(jié)的最高位(位7)

22、必須是邏輯1;如果它為0,則不能把數(shù)據(jù)寫入到DS1302中。位6如果為0,則表示存取日歷時(shí)鐘數(shù)據(jù);為1表示存取RAM數(shù)據(jù)。位51(A4A0)指示操作單元的地址。最低有效位(位0)如為0,表示要進(jìn)行寫操作;為1表示進(jìn)行讀操作??刂谱止?jié)總是從最低位開始輸入/輸出。圖3-4 DS1302的控制字為了提高對32個地址的尋址能力(地址/命令位15=邏輯1),可以把時(shí)鐘/日歷或RAM寄存器規(guī)定為多字節(jié)(burst)方式。位6規(guī)定時(shí)鐘或RAM,而位0規(guī)定讀或?qū)?。在時(shí)鐘/日歷寄存器中的地址931或RAM寄存器中的地址31不能寄存數(shù)據(jù)。在多字節(jié)方式中,讀或?qū)憦牡刂?的位0開始。必須按數(shù)據(jù)傳送的次序?qū)懽钕鹊?個寄

23、存器。但是,當(dāng)以多字節(jié)方式寫RAM時(shí),為了傳送數(shù)據(jù)不必寫所有31字節(jié)。不管是否寫了全部31字節(jié),所寫的每一字節(jié)都將傳送至RAM。DS1302共有12個寄存器,其中有7個寄存器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式。其日歷、時(shí)間寄存器及其控制字見表3-3,其中奇數(shù)為讀操作,偶數(shù)為寫操作。表3-3 內(nèi)部寄存器地址和內(nèi)容積存器名命令字節(jié)取值范圍積存器內(nèi)容寫讀76543210秒積存器80H81H0059CH10SSEC分積存器82H83H0059010 minMIN小時(shí)積存器84H85H0023或011212/24010A/PHRHR日積存器85H87H0128,29,30,310010DATE

24、DATE月積存器88H89H011200010MMONTH周積存器8AH8BH010700000DAY年積存器8CHD3H009910YEARYEAR時(shí)鐘暫停:秒寄存器的位7定義位時(shí)鐘暫停位。當(dāng)它為1時(shí),DS1302停止震蕩,進(jìn)入低功耗的備份方式。通常在對DS1302進(jìn)行寫操作時(shí)(如進(jìn)入時(shí)鐘調(diào)整程序),停止震蕩。當(dāng)它為0時(shí),時(shí)鐘將開始啟動。AMPM/1224小時(shí)方式:小時(shí)寄存器的位7定義為12或24小時(shí)方式選擇位。它為高電平時(shí),選擇12小時(shí)方式。在此方式下,位5是AM/PM位,此位是高電平時(shí)表示PM低電平表示AM。在24小時(shí)方式下,位5為第二個10小時(shí)位(2023h)。DS1302的晶震選用3

25、2.768kHz,電容推薦值為33pF,因?yàn)檎鹗庮l率較低,也可以不接電容,對計(jì)時(shí)精度影響不大。本系統(tǒng)即采用了DS1302時(shí)鐘芯片,其外部電路如圖3-5所示。其中VCC2接5V系統(tǒng)穩(wěn)壓電源,VCC1接備用干電池,SCLK、I/O、RST端口與主控制器相對應(yīng)的端口相連接,X1、X2外界晶振。圖3-5 時(shí)鐘電路3.3 顯示電路的設(shè)計(jì)顯示部分采用普通的共陰極數(shù)碼管顯示,采用動態(tài)掃描,以減少硬件電路。為了減少I/O接口,在使用兩個LG3641共陰極數(shù)碼管的情況下,采用2片74HC573分別作為數(shù)碼管的驅(qū)動,輸出位選和段選信號驅(qū)動數(shù)碼管顯示相應(yīng)內(nèi)容。數(shù)碼管的一種是半導(dǎo)體發(fā)光器件,數(shù)碼管可分為七段數(shù)碼管和八

26、段數(shù)碼管,區(qū)別在于八段數(shù)碼管比七段數(shù)碼管多一個用于顯示小數(shù)點(diǎn)的發(fā)光二極管單元DP(decimal point),其基本單元是發(fā)光二極管。本系統(tǒng)采用動態(tài)顯示驅(qū)動。動態(tài)顯示驅(qū)動是將所有數(shù)碼管通過分時(shí)輪流控制各個數(shù)碼管的的COM端,就使各個數(shù)碼管輪流受控顯示。將所有數(shù)碼管的8個顯示筆劃a,b,c,d,e,f,g,dp的同名端連在一起,另外為每個數(shù)碼管的公共極COM增加位選通控制電路,位選通由各自獨(dú)立的I/O線控制,當(dāng)單片機(jī)輸出字形碼時(shí),所有數(shù)碼管都接收到相同的字形碼,但究竟是那個數(shù)碼管會顯示出字形,取決于單片機(jī)對位選通COM端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制打開,該位就顯示出字形

27、,沒有選通的數(shù)碼管就不會亮。圖3-6 74HC573引腳圖74HC573包含八進(jìn)制3態(tài)非反轉(zhuǎn)透明鎖存器,是一種高性能硅門CMOS器件。SL74HC573跟LS/AL573的管腳一樣,其引腳圖見圖3-6。器件的輸入是和標(biāo)準(zhǔn)CMOS輸出兼容的,加上拉電阻他們能和LS/ALSTTL輸出兼容。當(dāng)鎖存使能端為高時(shí),這些器件的鎖存對于數(shù)據(jù)是透明的(也就是說輸出同步)。當(dāng)鎖存使能變低時(shí),符合建立時(shí)間和保持時(shí)間的數(shù)據(jù)會被鎖存。本系統(tǒng)所采用的顯示電路接線圖如圖3-7所示。其中,第一片74LS573作為數(shù)碼管的段碼驅(qū)動,輸入端與單片機(jī)的P0口相連接,輸出端接八位共陰數(shù)碼管相應(yīng)的段碼輸入端(a-dp),端口C與單片

28、機(jī)相應(yīng)的段碼輸出端相連接,VCC接主電源,GND、OC接地。相應(yīng)的,第二片74LS573作為數(shù)碼管的位碼驅(qū)動,輸入端與單片機(jī)的P0口相連接,輸出端接八位共陰數(shù)碼管相應(yīng)的位碼端口相連接,CC接主電源,GND、OC接地。圖3-7 數(shù)碼管顯示電路3.4 鍵盤接口的設(shè)計(jì)由于按鍵有8個,用普通按鈕接10K上拉電阻,用查詢法完成讀鍵功能。其線路連接圖下圖所示。圖3-8 按鍵電路4 系統(tǒng)軟件設(shè)計(jì)本系統(tǒng)軟件分為主程序、中斷服務(wù)程序、子程序三個模塊進(jìn)行編寫。由于本系統(tǒng)程序相對來講比較簡單,用輪詢法對鍵盤進(jìn)行反復(fù)掃描,用中斷法進(jìn)行數(shù)碼管顯示,每隔一段時(shí)間,定時(shí)器向CPU申請中斷,調(diào)用中斷服務(wù)子程序,根據(jù)當(dāng)前的鍵值

29、,顯示日期、時(shí)間或者周秒。而子程序?yàn)橐恍┏S玫难訒r(shí)函數(shù)、顯示函數(shù)等。4.1 主程序設(shè)計(jì)由于本系統(tǒng)程序相對來講比較簡單,主程序流程圖如圖4-1所示。系統(tǒng)上電啟動后,定義后續(xù)過程中要使用到的全局變量,對定時(shí)器和DS1302進(jìn)行初始化之后,進(jìn)入主循環(huán)對鍵盤進(jìn)行掃描,若檢測到有按鍵按下,進(jìn)入相應(yīng)的鍵處理程序;若沒有檢測到按鍵按下,繼續(xù)掃描鍵盤。圖4-1 主程序流程圖4.2 中斷服務(wù)程序設(shè)計(jì)定時(shí)器0定時(shí)時(shí)間到,向CPU申請中斷而進(jìn)入中斷服務(wù)程序。進(jìn)入中斷服務(wù)程序后,先清中斷標(biāo)志位,再對定時(shí)器0賦初始值,接著調(diào)用數(shù)碼管掃描子程序達(dá)到數(shù)碼管動態(tài)顯示的目的,延時(shí)100ms后,讀標(biāo)志位置1,這里的“讀”是指從時(shí)

30、鐘芯片DS1302中讀取相關(guān)數(shù)據(jù)。圖4-2 中斷服務(wù)程序流程圖4.3 子程序設(shè)計(jì)4.3.1 延時(shí)子程序此延時(shí)子程序可用于對延時(shí)時(shí)間不是特別精確的場合,其程序流程圖如圖4-3所示,主體是一個循環(huán)結(jié)構(gòu),先對t賦初始值255,通過循環(huán)執(zhí)行“t-”指令而達(dá)到延時(shí)的目的。圖4-3 延時(shí)子程序流程圖4.3.2 數(shù)碼管動態(tài)掃描子程序本系統(tǒng)使用8位八段共陰極數(shù)碼管用于顯示時(shí)間和日期,而74LS73作為數(shù)碼管的驅(qū)動芯片,如要控制數(shù)碼管的顯示只需要用程序控制74LS73即可。子程序中定義i為需要顯示的位數(shù),通過對段碼和位碼的鎖存達(dá)來到數(shù)碼管動態(tài)顯示的目的。圖4-4 數(shù)碼管動態(tài)掃描子程序流程圖4.3.3 定時(shí)器初始

31、化子程序首選選擇定時(shí)器/計(jì)數(shù)器的工作方式為定時(shí)器0工作方式1,再對其賦初始值,然后打開總中斷,打開定時(shí)器0中斷,打開定時(shí)器0開關(guān),定時(shí)器初始化工作完成。圖4-5 定時(shí)器初始化子程序流程圖4.3.4 鍵盤掃描子程序鍵盤掃描用于向系統(tǒng)輸入數(shù)據(jù),其工作流程如圖4-6所示。簡單描述為:(1) 判斷有無閉合鍵,若無則退出;(2) 延時(shí)10ms去抖動;(3) 再次判斷有無閉合鍵,若無則退出;(4) 識別閉合鍵并取得鍵值;(5) 退出鍵盤掃描子程序。圖4-6 鍵盤掃描子程序流程圖4.3.5 顯示子程序?yàn)榱耸怪鞒绦蚪Y(jié)構(gòu)上更加緊湊和清晰,故將顯示部分的程序代碼單獨(dú)拿出來定義為一個子函數(shù)來調(diào)用。其功能相對比較簡單

32、,將數(shù)據(jù)從時(shí)鐘芯片取出來經(jīng)過簡單運(yùn)算放入輸出緩沖區(qū)。圖4-7 顯示子程序流程圖5 系統(tǒng)調(diào)試與總結(jié)系統(tǒng)研制完成后,在自己的單片機(jī)開發(fā)板上進(jìn)行了系統(tǒng)功能測試。系統(tǒng)上電后顯示正常。按下按鍵K1,LED數(shù)碼管能夠在日期、時(shí)間之間切換顯示;按下按鍵K3調(diào)節(jié)小時(shí)數(shù)值,其能夠在0-23之間循環(huán)遞增調(diào)節(jié);按下按鍵K5調(diào)節(jié)分鐘數(shù)值,其能夠在0-59之間循環(huán)遞增調(diào)節(jié);按下按鍵K2,K4調(diào)節(jié)年份數(shù)值,按K2年份數(shù)值遞增,按K4年份數(shù)值遞減,年份可設(shè)定為0-99;按下按鍵K6可進(jìn)行分鐘數(shù)值的調(diào)節(jié),調(diào)節(jié)范圍為0-59;按下按鍵K8可進(jìn)行日數(shù)值的調(diào)節(jié),實(shí)際上調(diào)節(jié)范圍可以是0-31,但是調(diào)節(jié)是要根據(jù)不同的月份適當(dāng)調(diào)節(jié)。實(shí)際

33、調(diào)試結(jié)果如下圖所示。圖5-1 調(diào)試結(jié)果1圖5-2 調(diào)試結(jié)果2此次設(shè)計(jì)立足于電子技術(shù)的實(shí)際運(yùn)用,不斷實(shí)踐,開拓了思維,設(shè)計(jì)以考查、調(diào)研、搜集資料、擬訂方案、進(jìn)行系統(tǒng)規(guī)劃、編程、仿真、調(diào)試的流程,使我深刻的體會到了在學(xué)習(xí)我們專業(yè)的過程中理論與實(shí)踐相結(jié)合的重要性,同時(shí)也解決了以前學(xué)習(xí)比較模糊的專業(yè)知識點(diǎn),使自己掌握的專業(yè)知識更加結(jié)構(gòu)化、系統(tǒng)化??傊敬卧O(shè)計(jì)在任課老師的輔導(dǎo)與大力支持下;在指導(dǎo)老師的耐心指導(dǎo)下;在各位同學(xué)和朋友的貼心幫助下解決了許多設(shè)計(jì)中的實(shí)際困難,我以最低的成本和最簡單的方案設(shè)計(jì)出了功能強(qiáng)大的電子萬年歷。29參考文獻(xiàn)1 張迎新單片微型計(jì)算機(jī)原理、應(yīng)用及接口技術(shù)(第2版)M北京:國防

34、工業(yè)出版社,2004 2 何立民單片機(jī)應(yīng)用文集,北京:北京航空航天大學(xué)出版社,1991,53723 公茂法單片機(jī)人機(jī)接口實(shí)例集,北京:北京航空航天大學(xué)出版社,1998.2,32594 何立明單片機(jī)高級教程應(yīng)用與設(shè)計(jì),北京:北京航天航空大學(xué)出版社,2000.4,1491735 李廣弟,朱月秀單片機(jī)基礎(chǔ),北京:北京航空航天大學(xué)出版社,2001.8,36856 樓然苗,李光飛MCS51系列單片機(jī)設(shè)計(jì)實(shí)例,北京:北京航天航空大學(xué)出版社,2001.3,75837 李華單片機(jī)原理與接口技術(shù),北京:清華大學(xué)出版社,33808 王偉高性能、低功耗帶RAM實(shí)時(shí)時(shí)鐘芯片DS1302(上),電子世界:第一期,199

35、5,26359 王偉高性能、低功耗帶RAM實(shí)時(shí)時(shí)鐘芯片DS1302(下),電子世界:第四期,1995,3241附錄A 源程序/*- 名稱:萬年歷 編寫:王曉輝 日期:2015.1.X 修改:無 內(nèi)容:DS1302實(shí)時(shí)時(shí)鐘數(shù)碼管顯示,時(shí)間和日期切換顯示 按下按鍵,循環(huán)切換 時(shí)間格式xx-xx-xx日期格式xx-xx-xx周秒格式-x- xx-*/#include /包含頭文件,頭文件包含特殊功能寄存器的定義#include ds1302.h#define KeyPort P3 /定義按鍵端口#define DataPort P0 /定義數(shù)據(jù)端口 程序中遇到DataPort 則用P0 替換sbit

36、 LATCH1=P23;/定義鎖存使能端口 段鎖存sbit LATCH2=P24;/ 位鎖存bit ReadTimeFlag;/定義讀時(shí)間標(biāo)志unsigned char code dofly_DuanMa10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/ 顯示段碼值09unsigned char code dofly_WeiMa=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/分別對應(yīng)相應(yīng)的數(shù)碼管點(diǎn)亮,即位碼unsigned char TempData8; /存儲顯示值的全局變量void DelayUs

37、2x(unsigned char t);/us級延時(shí)函數(shù)聲明 void DelayMs(unsigned char t); /ms級延時(shí)void Display(unsigned char FirstBit,unsigned char Num);/數(shù)碼管顯示函數(shù)unsigned char KeyScan(void);/鍵盤掃描void Init_Timer0(void);/定時(shí)器初始化void displaytime(void);/時(shí)間顯示函數(shù)聲明void displaydate(void);/日期顯示函數(shù)聲明void displatzhoumiao(void);/周秒顯示函數(shù)聲明/*- 主函

38、數(shù)-*/void main (void)unsigned char num,displaynum; Init_Timer0();Ds1302_Init();/Ds1302_Write_Time();while (1) /主循環(huán)num=KeyScan(); /按鍵掃描switch(num)case 1:displaynum+; if(displaynum=3) displaynum=0;break;case 2: time_buf11+;if(time_buf11=100)time_buf11=0; Ds1302_Write_Time();break; /正常日期 年 加1case 3: tim

39、e_buf14+;if(time_buf14=24)time_buf14=0; Ds1302_Write_Time();break; /正常時(shí)間 小時(shí) 加1case 4: time_buf11-;if(time_buf11=0)time_buf11=99; Ds1302_Write_Time();break; /正常日期 年 減1case 5:time_buf15+;if(time_buf15=60)time_buf15=0; Ds1302_Write_Time();break;/分加1case 6: time_buf12+;if(time_buf12=13)time_buf12=1; Ds1

40、302_Write_Time();break; /正常日期 月 加1case 7: break;case 8: time_buf13+;if(time_buf13=32)time_buf13=1; Ds1302_Write_Time();break; /正常日期 日 加1default: break;if(ReadTimeFlag=1) ReadTimeFlag=0; Ds1302_Read_Time();if(displaynum=0) /顯示時(shí)間displaytime(); else if(displaynum=1)/顯示日期displaydate();else if(displaynum

41、=2)/顯示周秒displatzhoumiao(); /*- uS延時(shí)函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值 unsigned char 是定義無符號字符變量,其值的范圍是 0255 這里使用晶振12M,精確延時(shí)請使用匯編,大致延時(shí) 長度如下 T=tx2+5 uS -*/void DelayUs2x(unsigned char t) while(-t);/*- mS延時(shí)函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值 unsigned char 是定義無符號字符變量,其值的范圍是 0255 這里使用晶振12M,精確延時(shí)請使用匯編-*/void DelayMs(

42、unsigned char t) while(t-) /大致延時(shí)1mS DelayUs2x(245); DelayUs2x(245); /*- 顯示函數(shù),用于動態(tài)掃描數(shù)碼管 輸入?yún)?shù) FirstBit 表示需要顯示的第一位,如賦值2表示從第三個數(shù)碼管開始顯示 如輸入0表示從第一個顯示。 Num表示需要顯示的位數(shù),如需要顯示99兩位數(shù)值則該值輸入2-*/void Display(unsigned char FirstBit,unsigned char Num) static unsigned char i=0; DataPort=0; /清空數(shù)據(jù),防止有交替重影 LATCH1=1; /段鎖存 L

43、ATCH1=0; DataPort=dofly_WeiMai+FirstBit; /取位碼 LATCH2=1; /位鎖存 LATCH2=0; DataPort=TempDatai; /取顯示數(shù)據(jù),段碼 LATCH1=1; /段鎖存 LATCH1=0; i+; if(i=Num) i=0;/*- 定時(shí)器初始化子程序-*/void Init_Timer0(void) TMOD |= 0x01; /使用模式1,16位定時(shí)器,使用|符號可以在使用多個定時(shí)器時(shí)不受影響 /TH0=0x00; /給定初值 /TL0=0x00; EA=1; /總中斷打開 ET0=1; /定時(shí)器中斷打開 TR0=1; /定時(shí)器開關(guān)打開/*- 定時(shí)器中斷子程序-*/void Timer0_isr(void) interrupt 1 static

溫馨提示

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

評論

0/150

提交評論