山東建筑大學(xué)單片機(jī)課程設(shè)計(jì)報(bào)告基于單片機(jī)的多功能電子鐘_第1頁(yè)
山東建筑大學(xué)單片機(jī)課程設(shè)計(jì)報(bào)告基于單片機(jī)的多功能電子鐘_第2頁(yè)
山東建筑大學(xué)單片機(jī)課程設(shè)計(jì)報(bào)告基于單片機(jī)的多功能電子鐘_第3頁(yè)
山東建筑大學(xué)單片機(jī)課程設(shè)計(jì)報(bào)告基于單片機(jī)的多功能電子鐘_第4頁(yè)
山東建筑大學(xué)單片機(jī)課程設(shè)計(jì)報(bào)告基于單片機(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、山東建筑大學(xué)課 程 設(shè) 計(jì) 說(shuō) 明 書(shū)題 目: 基于單片機(jī)的多功能電子鐘課 程: 單片機(jī)課程設(shè)計(jì)院 (部): 信息與電氣工程學(xué)院專(zhuān) 業(yè): 電子信息工程班 級(jí): 電信112學(xué)生姓名: 學(xué) 號(hào): 指導(dǎo)教師: 高煥兵、胡秀蒙完成日期: 2015年1月16日目 錄1 引言 12 系統(tǒng)概述 13 方案設(shè)計(jì) 13.1 方案1基于AT89S52單片機(jī)的多功能時(shí)鐘設(shè)計(jì) 13.2 方案2基于DS1302的多功能時(shí)鐘設(shè)計(jì) 24 系統(tǒng)硬件電路的設(shè)計(jì) 24.1 系統(tǒng)核心部分-單片機(jī) AT89C51 34.2 DS1302時(shí)鐘電路 54.3 存儲(chǔ)電路 94.4 液晶顯示電路 114.5 鍵盤(pán)電路 154.6 鬧鈴電路

2、155 系統(tǒng)程序的設(shè)計(jì) 165.1 陽(yáng)歷程序的設(shè)計(jì) 165.2 時(shí)間調(diào)整程序的設(shè)計(jì) 165.3 陰歷程序的設(shè)計(jì) 176 測(cè)試結(jié)果 207 結(jié)論 20參考文獻(xiàn) 21總結(jié)致謝 22附錄1:主程序附錄2:多功能時(shí)鐘設(shè)計(jì)電路原理圖1 引言在日新月異的21世紀(jì)里,家用電子產(chǎn)品得到了迅速發(fā)展。許多家電設(shè)備都趨于人性化、智能化,這些電器設(shè)備大部分都含有CPU控制器或者是單片機(jī)。單片機(jī)以其高可靠性、高性?xún)r(jià)比、低電壓、低功耗等一系列優(yōu)點(diǎn),近幾年得到迅猛發(fā)展和大范圍推廣,廣泛應(yīng)用于工業(yè)控制系統(tǒng)、通訊設(shè)備、日常消費(fèi)類(lèi)產(chǎn)品和玩具等。并且已經(jīng)深入到工業(yè)生產(chǎn)的各個(gè)環(huán)節(jié)以及人民生活的各個(gè)方面,如車(chē)間流水線控制、自動(dòng)化系統(tǒng)等

3、、智能型家用電器(冰箱、空調(diào)、彩電)等。用單片機(jī)來(lái)控制的小型家電產(chǎn)品具有便攜實(shí)用,操作簡(jiǎn)單的特點(diǎn)。本文設(shè)計(jì)的電子萬(wàn)年歷屬于小型智能家用電子產(chǎn)品。利用單片機(jī)進(jìn)行控制,實(shí)時(shí)時(shí)鐘芯片進(jìn)行記時(shí),外加掉電存儲(chǔ)電路和顯示電路,可實(shí)現(xiàn)時(shí)間的調(diào)整和顯示。電子萬(wàn)年歷既可廣泛應(yīng)用于家庭,也可應(yīng)用于銀行、郵電、賓館、醫(yī)院、學(xué)校、企業(yè)、商店等相關(guān)行業(yè)的大廳,以及單位會(huì)議室、門(mén)衛(wèi)等場(chǎng)所。因而,此設(shè)計(jì)具有相當(dāng)重要的現(xiàn)實(shí)意義和實(shí)用價(jià)值。2 系統(tǒng)概述本設(shè)計(jì)以AT89C51單片機(jī)為核心,構(gòu)成單片機(jī)控制電路,結(jié)合DS1302時(shí)鐘芯片和24C02FLASH存儲(chǔ)器,顯示陽(yáng)歷年、月、日、星期、時(shí)、分、秒和陰歷年、月、日,在顯示陰歷時(shí)間

4、時(shí),能標(biāo)明是否閏月,同時(shí)完成對(duì)它們的自動(dòng)調(diào)整和掉電保護(hù),全部信息用液晶顯示。人機(jī)接口由三個(gè)按鍵來(lái)實(shí)現(xiàn),用這三個(gè)按鍵對(duì)時(shí)間、日期可調(diào),并可對(duì)鬧鈴開(kāi)關(guān)進(jìn)行設(shè)置。軟件控制程序?qū)崿F(xiàn)所有的功能。整機(jī)電路使用+5V穩(wěn)壓電源,可穩(wěn)定工作。系統(tǒng)框圖如圖2-1所示,其軟硬件設(shè)計(jì)簡(jiǎn)單,時(shí)間記錄準(zhǔn)確,可廣泛應(yīng)用于長(zhǎng)時(shí)間連續(xù)顯示的系統(tǒng)中。人機(jī)接口顯示電路軟件控制程序電源電路單片機(jī)控制電路圖2-1 系統(tǒng)框圖3 方案選擇 由于電子萬(wàn)年歷的種類(lèi)比較多,因此方案選擇在設(shè)計(jì)中是至關(guān)重要的。正確地選擇方案可以減小開(kāi)發(fā)難度,縮短開(kāi)發(fā)周期,降低成本,更快地將產(chǎn)品推向市場(chǎng)。3.1基于AT89C51單片機(jī)的電子萬(wàn)年歷設(shè)計(jì)不使用時(shí)鐘芯片,

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

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

7、片。利用單片機(jī)進(jìn)行控制,采用DS1302作為實(shí)時(shí)時(shí)鐘芯片,其三線接口SCLK、I/O、/RST與單片機(jī)進(jìn)行同步通信,外加掉電存儲(chǔ)電路、顯示電路、鍵盤(pán)電路,即構(gòu)成一個(gè)基本的電子萬(wàn)年歷系統(tǒng),若還要添加其他功能,在這基礎(chǔ)上外擴(kuò)電路即可。由于在系統(tǒng)設(shè)計(jì)時(shí),需要考慮以下幾點(diǎn)因素:功耗低、精確度高、軟件編程較簡(jiǎn)單,芯片的體積小、芯片成本低等,而DS1302芯片有上面所述的諸多優(yōu)點(diǎn),所以本設(shè)計(jì)采用方案2。4 系統(tǒng)硬件電路的設(shè)計(jì)按照系統(tǒng)設(shè)計(jì)功能的要求,初步確定設(shè)計(jì)系統(tǒng)由主控模塊、時(shí)鐘模塊、存儲(chǔ)模塊、鍵盤(pán)接口模塊、顯示模塊和鬧鈴模塊共6個(gè)模塊組成,電路系統(tǒng)構(gòu)成框圖如圖4-1所示。主控芯片使用51系列AT89C5

8、1單片機(jī),時(shí)鐘芯片使用美國(guó)DALLAS公司推出的一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘芯片DS1302,存儲(chǔ)模塊采用美國(guó)ATMEL公司生產(chǎn)的低功耗CMOS串行EEPROM存儲(chǔ)芯片AT24C02。DS1302作為主要計(jì)時(shí)芯片,可以做到計(jì)時(shí)準(zhǔn)確。更重要的是,DS1302可以在很小電流的后備 (2.55.5V電源,在2.5V時(shí)耗電小于300nA)下繼續(xù)計(jì)時(shí),并可編程選擇多種充電電流來(lái)對(duì)后備電源進(jìn)行慢速充電,可以保證后備電源基本不耗電。(89C51)主控模塊DS1302時(shí)鐘電路鍵掃描電路液晶顯示存儲(chǔ)電路鬧鈴電路圖4-1 電子萬(wàn)年歷電路系統(tǒng)構(gòu)成框圖4.1 系統(tǒng)核心部分閃電存儲(chǔ)型器件AT89C514.1.

9、1 AT89C51具有下列主要性能5: 8KB可改編程序Flash存儲(chǔ)器(可經(jīng)受1000次的寫(xiě)入/擦除周期) 全靜態(tài)工作:0Hz24MHz三級(jí)程序存儲(chǔ)器保密1288字節(jié)內(nèi)部RAM32條可編程I/O線2個(gè)16位定時(shí)器/計(jì)數(shù)器6個(gè)中斷源可編程串行通道片內(nèi)時(shí)鐘振蕩器4.1.2 AT89C51的引腳及功能AT89C51單片機(jī)的管腳說(shuō)明如圖4-2所示。圖4-2 AT89C51的管腳(1) 主要電源引腳 VCC 電源端 GND 接地端(2) 外接晶體引腳XTAL1和XTAL2 XTAL1 接外部晶體的一個(gè)引腳。在單片機(jī)內(nèi)部,它是構(gòu)成片內(nèi)振蕩器的反相放大器的輸入端。當(dāng)采用外部振蕩器時(shí),該引腳接收振蕩器的信號(hào)

10、,既把此信號(hào)直接接到內(nèi)部時(shí)鐘發(fā)生器的輸入端。 XTAL2 接外部晶體的另一個(gè)引腳。在單片機(jī)內(nèi)部,它是上述振蕩器的反相放大器的輸出端。采用外部振蕩器時(shí),此引腳應(yīng)懸浮不連接。(3) 控制或與其它電源復(fù)用引腳RST、ALE/PROG、/PSEN和/EA/VPP RST 復(fù)位輸入端。 當(dāng)振蕩器運(yùn)行時(shí),在該引腳上出現(xiàn)兩個(gè)機(jī)器周期的高電平將使單片機(jī)復(fù)位。 ALE/PROG 當(dāng)訪問(wèn)外部存儲(chǔ)器時(shí),ALE(地址鎖存允許)的輸出用于鎖存地址的低位字節(jié)。即使不訪問(wèn)外部存儲(chǔ)器,ALE端仍以不變的頻率(此頻率為振蕩器頻率的1/6)周期性地出現(xiàn)正脈沖信號(hào)。因此,它可用作對(duì)外輸出的時(shí)鐘,或用于定時(shí)目的。然而要注意的是:每當(dāng)

11、訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過(guò)一個(gè)ALE脈沖。在對(duì)Flash存儲(chǔ)器編程期間,該引腳還用于輸入編程脈沖(/PROG)6。 /PSEN 程序存儲(chǔ)允許(/PSEN)輸出是外部程序存儲(chǔ)器的讀選通信號(hào)。當(dāng)AT89C51/LV51由外部程序存儲(chǔ)器取指令(或常數(shù))時(shí),每個(gè)機(jī)器周期兩次/PSEN有效(既輸出2個(gè)脈沖)。但在此期間內(nèi),每當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的/PSEN信號(hào)將不出現(xiàn)。/EA/VPP 外部訪問(wèn)允許端。要使CPU只訪問(wèn)外部程序存儲(chǔ)器(地址為0000HFFFFH),則/EA端必須保持低電平(接到GND端)。當(dāng)/EA端保持高電平(接VSS端)時(shí),CPU則執(zhí)行內(nèi)部程序存儲(chǔ)器中的程序。(4) 輸入

12、/輸出引腳 P0.0 P0.7、P1.0P1.7、P2.0 P2.7 和P3.0P3.7 P0端口(P0.0 P0.7) P0是一個(gè)8位漏極開(kāi)路型雙向I/O端口。作為輸出口用時(shí),每位能以吸收電流的方式驅(qū)動(dòng)8個(gè)TTL輸入,對(duì)端口寫(xiě)1時(shí),又可作高阻抗輸入端用。P1端口(P1.0 P1.7) P1是一個(gè)帶有內(nèi)部上拉電阻的8位雙向I/O端口。P1的輸出緩沖器可驅(qū)動(dòng)(吸收或輸出電流方式)4個(gè)TTL輸入。對(duì)端口寫(xiě)1時(shí),通過(guò)內(nèi)部的上拉電阻把端口拉到高電位,這時(shí)可用作輸入口。作輸入口時(shí),因?yàn)橛袃?nèi)部的上拉電阻,那些被外部信號(hào)拉低的引腳會(huì)輸出一個(gè)電流。 P2端口 (P2.0P2.7) P2是一個(gè)帶有內(nèi)部上拉電阻的

13、8位雙向I/O端口。P2的輸出緩沖器可驅(qū)動(dòng)(吸收或輸出電流方式)4個(gè)TTL輸入。對(duì)端口寫(xiě)1時(shí),通過(guò)內(nèi)部的上拉電阻把端口拉到高電位,這時(shí)可用作輸入口。P2作輸入口使用時(shí),因?yàn)橛袃?nèi)部的上拉電阻,那些被外部信號(hào)拉低的引腳會(huì)輸出一個(gè)電流。P3端口(P3.0P3.7) P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門(mén)電流。當(dāng)P3口寫(xiě)入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流,這是由于上拉的緣故。P3口也可作為AT89C51的一些特殊功能,這些特殊功能見(jiàn)表4-17。表4-1 P3端口的特殊功能 端口引腳 兼 用 功 能 P3.0RX

14、D (串行輸入口) P3.1TXD (串行輸出口) P3.2/INT0 (外部中斷0) P3.3/INT1 (外部中斷1) P3.4T0 ( 定時(shí)器0的外部輸入) P3.5T1 (定時(shí)器1的外部輸入) P3.6/WR (外部數(shù)據(jù)存儲(chǔ)器寫(xiě)選通) P3.7/RD (外部數(shù)據(jù)存儲(chǔ)器讀選通)4.2 DS1302時(shí)鐘電路4.2.1 DS1302芯片介紹低功耗時(shí)鐘芯片DS1302可以對(duì)年、月、日、時(shí)、分、秒進(jìn)行計(jì)時(shí),且具有閏年補(bǔ)償?shù)榷喾N功能。DS1302用于數(shù)據(jù)記錄,特別是對(duì)某些具有特殊意義的數(shù)據(jù)點(diǎn)的記錄上,能實(shí)現(xiàn)數(shù)據(jù)與出現(xiàn)該數(shù)據(jù)的時(shí)間同時(shí)記錄。這種記錄對(duì)長(zhǎng)時(shí)間的連續(xù)測(cè)控系統(tǒng)結(jié)果的分析以及對(duì)異常數(shù)據(jù)出現(xiàn)的

15、原因的查找有重要意義8。采用DS1302作為記錄測(cè)控系統(tǒng)中的數(shù)據(jù)記錄,其軟硬件設(shè)計(jì)簡(jiǎn)單,時(shí)間記錄準(zhǔn)確,既避免了連續(xù)記錄的大工作量,又避免了定時(shí)記錄的盲目性,給連續(xù)長(zhǎng)時(shí)間的測(cè)量、控制系統(tǒng)的正常運(yùn)行及檢查都來(lái)了很大的方便,可廣泛應(yīng)用于長(zhǎng)時(shí)間連續(xù)的測(cè)控系統(tǒng)中。在測(cè)量控制系統(tǒng)中,特別是長(zhǎng)時(shí)間無(wú)人職守的測(cè)控系統(tǒng)中,經(jīng)常需要記錄某些具有特殊意義的數(shù)據(jù)及其出現(xiàn)的時(shí)間。記錄及分析這些特殊意義的數(shù)據(jù),對(duì)測(cè)控系統(tǒng)的性能分析及正常運(yùn)行具有重要的意義。傳統(tǒng)的數(shù)據(jù)記錄方式是隔時(shí)采樣或定時(shí)采樣,沒(méi)有具體的時(shí)間記錄,因此只能記錄數(shù)據(jù)而無(wú)法準(zhǔn)確記錄其出現(xiàn)的時(shí)間;若采用單片機(jī)計(jì)時(shí),一方面需要采用計(jì)數(shù)器,占用硬件資源,另一方面需

16、要設(shè)置中斷、查詢(xún)等,同樣耗費(fèi)單片機(jī)的資源,而且某些測(cè)控系統(tǒng)可能不允許。而在系統(tǒng)中采用DS1302則能很好地解決這個(gè)問(wèn)題。(1) DS1302的性能特性實(shí)時(shí)時(shí)鐘,可對(duì)秒、分、時(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ù)讀/寫(xiě)的單字節(jié)或多字節(jié)(脈沖方式)數(shù)據(jù)傳送方式;簡(jiǎn)單的3線接口;可選的慢速充電(至VCC1)的能力。DS1302時(shí)鐘芯片包括實(shí)時(shí)時(shí)鐘/日歷和31字節(jié)的靜態(tài)RAM。它經(jīng)過(guò)一個(gè)簡(jiǎn)單的串行接口與微處理器通信。實(shí)時(shí)時(shí)鐘/日歷提供秒、分、時(shí)、日、周、月和年等信

17、息。對(duì)于小于31天的月和月末的日期自動(dòng)進(jìn)行調(diào)整,還包括閏年校正的功能。時(shí)鐘的運(yùn)行可以采用24h或帶AM(上午)/PM(下午)的12h格式。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)或RAM數(shù)據(jù)。DS1302有主電源/后備電源雙電源引腳:VCC1 在單電源與電池供電的系統(tǒng)中提供低電源,并提供低功率的電池備份;VCC2在雙電源系統(tǒng)中提供主電源,在這種運(yùn)用方式中,VCC1 連接到備份電源,以便在沒(méi)有主電源的情況下能保存時(shí)間信息以及數(shù)據(jù)。DS1302由VCC1或VCC2中較大者供電。當(dāng)VCC2大于VCC1+0.2V時(shí),VCC2給DS1302供電;當(dāng)VCC2小于VCC1

18、時(shí),DS1302由VCC1供電。(2) DS1302數(shù)據(jù)操作原理DS1302在任何數(shù)據(jù)傳送時(shí)必須先初始化,把RST腳置為高電平,然后把8位地址和命令字裝入移位寄存器,數(shù)據(jù)在SCLK的上升沿被輸入。無(wú)論是讀周期還是寫(xiě)周期,開(kāi)始8位指定40個(gè)寄存器中哪個(gè)被訪問(wèn)到。在開(kāi)始8個(gè)時(shí)鐘周期,把命令字節(jié)裝入移位寄存器之后,另外的時(shí)鐘周期在讀操作時(shí)輸出數(shù)據(jù),在寫(xiě)操作時(shí)寫(xiě)入數(shù)據(jù)。時(shí)鐘脈沖的個(gè)數(shù)在單字節(jié)方式下為8加8,在多字節(jié)方式下為8加字節(jié)數(shù),最大可達(dá)248字節(jié)數(shù)。圖4-3 DS1302管腳圖如果在傳送過(guò)程中置RST為低電平,則會(huì)終止本次數(shù)據(jù)傳送,并且I/O引腳變?yōu)楦咦钁B(tài)。上電運(yùn)行時(shí),在VCC =2.5V之前,

19、RST腳必須保持低電平。只有在SCLK為低電平時(shí),才能將RST置為高電平。DS1302的管腳圖如圖4-3所示,內(nèi)部結(jié)構(gòu)圖如圖4-4所示,表4-2為各引腳的功能。電源控制輸入移位寄存器實(shí)時(shí)時(shí)鐘命令與控制邏輯318RAM振蕩器與分頻器圖4-4 DS1302內(nèi)部結(jié)構(gòu)圖表4-2 DS1302引腳功能表引腳號(hào)引腳名稱(chēng)功能1VCC2主電源2,3X1,X2振蕩源,外接32768HZ晶振4GND地線5RST復(fù)位/片選線6I/O串行數(shù)據(jù)輸入/輸出端(雙向)7SCLK串行數(shù)據(jù)輸入端8VCC1后備電源DS1302的控制字如圖4-5所示??刂谱止?jié)的最高有效位(位7)必須是邏輯1;如果它為邏輯0,則不能把數(shù)據(jù)寫(xiě)入到DS

20、1302中。位6如果為0,則表示存取日歷時(shí)鐘數(shù)據(jù);為1表示存取RAM數(shù)據(jù)。位51(A4A0)指示操作單元的地址。最低有效位(位0)如為0,表示要進(jìn)行寫(xiě)操作;為1表示進(jìn)行讀操作??刂谱止?jié)總是從最低位開(kāi)始輸入/輸出。7 6 5 4 3 2 1 01RAM CKA4A3A2A1A0RAM K圖4-5 控制字節(jié)的含義為了提高對(duì)32個(gè)地址的尋址能力(地址/命令位15邏輯1),可以把時(shí)鐘/日歷或RAM寄存器規(guī)定為多字節(jié)(burst)方式。位6規(guī)定時(shí)鐘或RAM,而位0規(guī)定讀或?qū)?。在時(shí)鐘/日歷寄存器中的地址931或RAM寄存器中的地址31不能存儲(chǔ)數(shù)據(jù)。在多字節(jié)方式中,讀或?qū)憦牡刂?的位0開(kāi)始。必須按數(shù)據(jù)傳送的

21、次序?qū)懽钕鹊?個(gè)寄存器。但是,當(dāng)以多字節(jié)方式寫(xiě)RAM時(shí),為了傳送數(shù)據(jù)不必寫(xiě)所有31字節(jié)。不管是否寫(xiě)了全部31字節(jié),所寫(xiě)的每一字節(jié)都將傳送至RAM。數(shù)據(jù)讀寫(xiě)程序如圖4-6所示。SCLKKRSTI/O571357210246046R/CA2A3A0A1R/WA41DATAI/OBYTEDATAI/OBYTE圖4-6 數(shù)據(jù)讀寫(xiě)程序DS1302共有12個(gè)寄存器,其中有7個(gè)寄存器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式,其日歷、時(shí)間寄存器及其控制字見(jiàn)表4-3,其中奇數(shù)為讀操作,偶數(shù)為寫(xiě)操作。表4-3 DS1302的日歷、時(shí)鐘寄存器及其控制字寄存器名命令字取值范圍各位內(nèi)容寫(xiě)操作讀操作76543210秒

22、寄存器80H81H00-59CH10SECSEC分鐘寄存器82H83H00-59010MINMIN小時(shí)寄存器84H85H01- 12或00-2312/24010APHRHR日期寄存器86H87H01-28,29,30,310010DATEDATE月份寄存器88H89H01-12000IOMMONTH周日寄存器8AH8BH01-0700000DAY年份寄存器8CH8DH00-9910YEARYEAR時(shí)鐘暫停:秒寄存器的位7定義位時(shí)鐘暫停位。當(dāng)它為1時(shí),DS1302停止振蕩,進(jìn)入低功耗的備份方式。通常在對(duì)DS1302進(jìn)行寫(xiě)操作時(shí)(如進(jìn)入時(shí)鐘調(diào)整程序),停止振蕩。當(dāng)它為0時(shí),時(shí)鐘將開(kāi)始啟動(dòng)。AM-P

23、M/12-24小時(shí)方式:小時(shí)寄存器的位7定義為12或24小時(shí)方式選擇位。它為高電平時(shí),選擇12小時(shí)方式。在此方式下,位5是AM/PM位,此位是高電平時(shí)表示PM,低電平表示AM,在24小時(shí)方式下,位5為第二個(gè)10小時(shí)位(2023h)。4.2.2 DS1302 的應(yīng)用實(shí)時(shí)時(shí)鐘芯片DS1302采用串行數(shù)據(jù)傳輸,可為掉電保護(hù)電源提供可編程的充電功能,也可以關(guān)閉充電功能,芯片采用32768Hz晶振。要特別說(shuō)明的是,備用電源BT1可以用電池或超級(jí)電容(10萬(wàn)F以上)。雖然DS1302在主電源掉電后耗電很小,但如果要長(zhǎng)時(shí)間保證時(shí)鐘正常,最好選用小型充電電池。如果斷電時(shí)間較短(幾小時(shí)或幾天),可以用漏電較小的

24、普通電解電容代替(100F就可以保證1小時(shí)的正常走時(shí))9。DS1302在第一次加電后,需進(jìn)行初始化操作。初始化后就可以按正常方法調(diào)整時(shí)間及鬧鈴。DS1302的時(shí)鐘電路如圖4-3所示。圖4-7 DS1302時(shí)鐘電路4.3 存儲(chǔ)電路4.3.1 AT24C02管腳介紹AT24C0210是美國(guó)ATMEL公司的低功耗CMOS串行EEPROM,它是內(nèi)含2568位存儲(chǔ)空間,具有工作電壓寬(2.55.5V)、擦寫(xiě)次數(shù)多(大于10000次)、寫(xiě)入速度快(小于10ms)等特點(diǎn)。 AT24C02的1、2、3腳是三條地址線,用于確定芯片的硬件地址。第8腳和第4腳分別為正、負(fù)電源。第5腳SDA為串行數(shù)據(jù)輸入/輸出,數(shù)據(jù)

25、通過(guò)這條雙向I2C總線串行傳送。第6腳SCL為串行時(shí)鐘輸入線。SDA和SCL都需要和正電源間各接一個(gè)4.7K的電阻上拉。I2C總線是一種用于I2C器件之間連接的二線制總線。它通過(guò)SDA(串行數(shù)據(jù)線)及SCL(串行時(shí)鐘線)兩根線在連到總線上的器件之間傳送信息,并根據(jù)地址識(shí)別每個(gè)器件:不管是單片機(jī)、存儲(chǔ)器、LCD驅(qū)動(dòng)器還是鍵盤(pán)接口。4.3.2 AT24C02的特性(1) I2C總線的基本結(jié)構(gòu)采用I2C總線標(biāo)準(zhǔn)的單片機(jī)或I2C器件,其內(nèi)部不僅有I2C接口電路,而且將內(nèi)部各單元電路按功能劃分為若干相對(duì)獨(dú)立的模塊,通過(guò)軟件尋址實(shí)現(xiàn)片選,減少了器件片選線的連接。CPU不僅能通過(guò)指令將某個(gè)功能單元電路掛靠或

26、摘離總線,還可對(duì)該單元的工作狀況進(jìn)行檢測(cè),從而實(shí)現(xiàn)對(duì)硬件系統(tǒng)的既簡(jiǎn)單又靈活的擴(kuò)展與控制。(2) 雙向傳輸?shù)慕涌谔匦詡鹘y(tǒng)的單片機(jī)串行接口的發(fā)送和接收一般都各用一條線,而I2C總線則根據(jù)器件的功能通過(guò)軟件程序使其可工作于發(fā)送或接收方式。當(dāng)某個(gè)器件向總線上發(fā)送信息時(shí),它就是發(fā)送器(也叫主器件),而當(dāng)其從總線上接收信息時(shí),又成為接收器(也叫從器件)。主器件用于啟動(dòng)總線上傳送數(shù)據(jù)并產(chǎn)生時(shí)鐘以開(kāi)放傳送的器件,此時(shí)任何被尋址的器件均被認(rèn)為是從器件。I2C總線的控制完全由掛接在總線上的主器件送出的地址和數(shù)據(jù)決定。總線上主和從(即發(fā)送和接收)的關(guān)系不是一成不變的,而是取決于此時(shí)數(shù)據(jù)傳送的方向。SDA和SCL均為

27、雙向I/O線,通過(guò)上拉電阻接正電源。當(dāng)總線空閑時(shí),兩根線都是高電平。連接總線的器件的輸出級(jí)必須是集電極或漏極開(kāi)路,以具有線“與”功能。I2C總線的數(shù)據(jù)傳送速率在標(biāo)準(zhǔn)工作方式下為100kbit/s,在快速方式下,最高傳送速率可達(dá)400kbit/s。(3) I2C總線上的時(shí)鐘信號(hào)在I2C總線上傳送信息時(shí)的時(shí)鐘同步信號(hào)是由掛接在SCL時(shí)鐘線上的所有器件的邏輯“與”完成的。SCL線上由高電平到低電平的跳變將影響到這些器件,一旦某個(gè)器件的時(shí)鐘信號(hào)下跳為低電平,將使SCL線一直保持低電平,使SCL線上的所有器件開(kāi)始低電平期。此時(shí),低電平周期短的器件的時(shí)鐘由低至高的跳變并不能影響SCL線的狀態(tài),于是這些器件

28、將進(jìn)入高電平等待的狀態(tài)。當(dāng)所有器件的時(shí)鐘信號(hào)都上跳為高電平時(shí),低電平期結(jié)束,SCL線被釋放返回高電平,即所有的器件都同時(shí)開(kāi)始它們的高電平期。其后,第一個(gè)結(jié)束高電平期的器件又將SCL線拉成低電平。這樣就在SCL線上產(chǎn)生一個(gè)同步時(shí)鐘??梢?jiàn),時(shí)鐘低電平時(shí)間由時(shí)鐘低電平期最長(zhǎng)的器件確定,而時(shí)鐘高電平時(shí)間由時(shí)鐘高電平期最短的器件確定。(4) 數(shù)據(jù)的傳送在數(shù)據(jù)傳送過(guò)程中,必須確認(rèn)數(shù)據(jù)傳送的開(kāi)始和結(jié)束。當(dāng)時(shí)鐘線SCL為高電平時(shí),數(shù)據(jù)線SDA由高電平跳變?yōu)榈碗娖蕉x為“開(kāi)始”信號(hào);當(dāng)SCL線為高電平時(shí),SDA線發(fā)生低電平到高電平的跳變?yōu)椤敖Y(jié)束”信號(hào)。開(kāi)始和結(jié)束信號(hào)都是由主器件產(chǎn)生。在開(kāi)始信號(hào)以后,總線即被認(rèn)為

29、處于忙狀態(tài);在結(jié)束信號(hào)以后的一段時(shí)間內(nèi),總線被認(rèn)為是空閑的。 I2C總線的數(shù)據(jù)傳送格式是:在I2C總線開(kāi)始信號(hào)后,送出的第一個(gè)字節(jié)數(shù)據(jù)是用來(lái)選擇從器件地址的,其中前7位為地址碼,第8位為方向位(R/W)。方向位為“0”表示發(fā)送,即主器件把信息寫(xiě)到所選擇的從器件;方向位為“1”表示主器件將從從器件讀信息。開(kāi)始信號(hào)后,系統(tǒng)中的各個(gè)器件將自己的地址和主器件送到總線上的地址進(jìn)行比較,如果與主器件發(fā)送到總線上的地址一致,則該器件即為被主器件尋址的器件,其接收信息還是發(fā)送信息則由第8位(R/W)確定。在I2C總線上每次傳送的數(shù)據(jù)字節(jié)數(shù)不限,但每一個(gè)字節(jié)必須為8位,而且每個(gè)傳送的字節(jié)后面必須跟一個(gè)認(rèn)可位(第

30、9位),也叫應(yīng)答位(ACK)。每次都是先傳最高位,通常從器件在接收到每個(gè)字節(jié)后都會(huì)做出響應(yīng),即釋放SCL線返回高電平,準(zhǔn)備接收下一個(gè)數(shù)據(jù)字節(jié),主器件可繼續(xù)傳送。如果從器件正在處理一個(gè)實(shí)時(shí)事件而不能接收數(shù)據(jù)時(shí)(例如正在處理一個(gè)內(nèi)部中斷,在這個(gè)中斷處理完之前就不能接收I2C總線上的數(shù)據(jù)字節(jié)),可以使時(shí)鐘SCL線保持低電平,從器件必須使SDA保持高電平,此時(shí)主器件產(chǎn)生1個(gè)結(jié)束信號(hào),使傳送異常結(jié)束,迫使主器件處于等待狀態(tài)。當(dāng)從器件處理完畢時(shí)將釋放SCL線,主器件繼續(xù)傳送。 當(dāng)主器件發(fā)送完一個(gè)字節(jié)的數(shù)據(jù)后,接著發(fā)出對(duì)應(yīng)于SCL線上的一個(gè)時(shí)鐘(ACK)認(rèn)可位,在此時(shí)鐘內(nèi)主器件釋放SDA線,一個(gè)字節(jié)傳送結(jié)束

31、,而從器件的響應(yīng)信號(hào)將SDA線拉成低電平,使SDA在該時(shí)鐘的高電平期間為穩(wěn)定的低電平。從器件的響應(yīng)信號(hào)結(jié)束后,SDA線返回高電平,進(jìn)入下一個(gè)傳送周期。(5) 總線競(jìng)爭(zhēng)的仲裁總線上可能掛接有多個(gè)器件,有時(shí)會(huì)發(fā)生兩個(gè)或多個(gè)主器件同時(shí)想占用總線的情況。例如,多單片機(jī)系統(tǒng)中,可能在某一時(shí)刻有兩個(gè)單片機(jī)要同時(shí)向總線發(fā)送數(shù)據(jù),這種情況叫做總線競(jìng)爭(zhēng)。I2C總線具有多主控能力,可以對(duì)發(fā)生在SDA線上的總線競(jìng)爭(zhēng)進(jìn)行仲裁,其仲裁原則是這樣的:當(dāng)多個(gè)主器件同時(shí)想占用總線時(shí),如果某個(gè)主器件發(fā)送高電平,而另一個(gè)主器件發(fā)送低電平,則發(fā)送電平與此時(shí)SDA總線電平不符的那個(gè)器件將自動(dòng)關(guān)閉其輸出級(jí)。總線競(jìng)爭(zhēng)的仲裁是在兩個(gè)層次上

32、進(jìn)行的。首先是地址位的比較,如果主器件尋址同一個(gè)從器件,則進(jìn)入數(shù)據(jù)位的比較,從而確保了競(jìng)爭(zhēng)仲裁的可靠性。由于是利用I2C總線上的信息進(jìn)行仲裁,因此不會(huì)造成信息的丟失。24C02與單片機(jī)的接口非常簡(jiǎn)單,如圖4-8所示。A0,A1,A2為器件地址線,WP為寫(xiě)保護(hù)引腳,SCL,SDA為二線串行接口,符合I2C總線協(xié)議。圖4-8 24C02存儲(chǔ)電路4.4 液晶顯示電路顯示器部分是由HD61202液晶顯示控制驅(qū)動(dòng)器和HY12864液晶顯示器組成的,下面我們對(duì)其分別進(jìn)行介紹。4.4.1 液晶顯示控制驅(qū)動(dòng)器HD61202的特點(diǎn)HD61202液晶顯示控制驅(qū)動(dòng)器是一種帶有驅(qū)動(dòng)輸出的圖形液晶顯示控制器,它可直接與

33、8位微處理器相連,它可與HD61203配合對(duì)液晶屏進(jìn)行行、列驅(qū)動(dòng)。HD61202是一種帶有列驅(qū)動(dòng)輸出的液晶顯示控制器,它可與行驅(qū)動(dòng)器HD61203配合使用,組成液晶顯示驅(qū)動(dòng)控制系統(tǒng)12。(1) 內(nèi)藏6464=4096位顯示RAM,RAM中每位數(shù)據(jù)對(duì)應(yīng)LCD屏上一個(gè)點(diǎn)的亮、暗狀態(tài);(2) HD61202是列驅(qū)動(dòng)器,具有64路列驅(qū)動(dòng)輸出;(3) HD61202讀、寫(xiě)操作時(shí)序與68系列微處理器相符,因此它可直接與68系列微處理器接口相連;(4) HD61202的占空比為1/321/64。4.4.2 液晶顯示控制驅(qū)動(dòng)器HD61202的引腳功能HD61202的引腳功能如下表4-4所示。表4-4 HD61

34、202的引腳功能引腳符號(hào)狀態(tài)引腳名稱(chēng)功能CS1,CS2,CS3輸入芯片片選端CS1和CS2低電平選通,CS3高電平選通。E輸入讀寫(xiě)使能信號(hào)在E下降沿,數(shù)據(jù)被鎖存(寫(xiě))入HD61202;在E高電平期間,數(shù)據(jù)被讀出R/W輸入讀寫(xiě)選擇信號(hào)R/W=1為讀選通,R/W=0為寫(xiě)選通RS輸入數(shù)據(jù)、指令選擇信號(hào)RS=1為數(shù)據(jù)操作 RS=0為寫(xiě)指令或讀狀態(tài)DB0-DB7三態(tài)數(shù)據(jù)總線RST輸入復(fù)位信號(hào)復(fù)位信號(hào)有效時(shí),關(guān)閉液晶顯示,使顯示起始行為0,RST可跟MPU相連,由MPU控制;也可直接接VDD,使之不起作用。4.4.3 液晶顯示控制驅(qū)動(dòng)器HD61202的指令系統(tǒng)HD61202的指令系統(tǒng)比較簡(jiǎn)單,總共只有七種

35、?,F(xiàn)分別介紹如下。 (1) 顯示開(kāi)/關(guān)指令R/W RSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB00 0 0 0 1 1 1 1 1 1/0當(dāng)DBO=1時(shí),LCD顯示RAM中的內(nèi)容;DBO=0時(shí),關(guān)閉顯示。(2) 顯示起始行(ROW)設(shè)置指令R/W RSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 1 1 顯示起始行(0-63)該指令設(shè)置了對(duì)應(yīng)液晶屏最上一行的顯示RAM的行號(hào),有規(guī)律的改變顯示起始行,可以使LCD實(shí)現(xiàn)顯示滾屏的效果。(3) 頁(yè)(PAGE)置指令R/W RSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 1 0

36、1 1 1頁(yè)號(hào)(0-7)顯示RAM共64行,分8頁(yè),每頁(yè)8行。(4) 列地址(Y Address)設(shè)置指令R/W RSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 1 顯示列地址(0-63)設(shè)置了頁(yè)地址和列地址,就唯一確定了顯示RAM中的一個(gè)單元,這樣MPU就可以用讀、寫(xiě)指令讀出該單元中的內(nèi)容或向該單元寫(xiě)進(jìn)一個(gè)字節(jié)數(shù)據(jù)。(5) 讀狀態(tài)指令R/W RSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 1 0BUSY 0 ON/OFF REST 0 0 0 0該指令用來(lái)查詢(xún)HD61202的狀態(tài),各參量含義如下:BUSY:1-內(nèi)部在工作 0-正常狀態(tài)ON/

37、OFF:1-顯示關(guān)閉 0-顯示打開(kāi)REST: 1-復(fù)位狀態(tài) 0-正常狀態(tài)在BUSY和REST狀態(tài)時(shí),除讀狀態(tài)指令外,其它指令均不對(duì)HD61202產(chǎn)生作用。在對(duì)HD61202操作之前要查詢(xún)BUSY狀態(tài),以確定是否可以對(duì)HD61202進(jìn)行操作。(6) 寫(xiě)數(shù)據(jù)指令R/W RSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 1 寫(xiě) 數(shù) 據(jù)(7) 讀數(shù)據(jù)指令R/W RSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 1 1 讀 顯 示 數(shù) 據(jù)讀、寫(xiě)數(shù)據(jù)指令每執(zhí)行完一次讀、寫(xiě)操作,列地址就自動(dòng)增一,必須注意的是,進(jìn)行讀操作之前,必須有一次空讀操作,緊接著再讀才會(huì)讀出所要

38、讀的單元中的數(shù)據(jù)。4.4.4 HY-12864的電路結(jié)構(gòu)特點(diǎn)HY-12864是使用HD61202作為列驅(qū)動(dòng)器,同時(shí)使用HD61203作為行驅(qū)動(dòng)器的液晶模塊。由于HD61203不與MPU發(fā)生聯(lián)系,只要提供電源就能產(chǎn)生行驅(qū)動(dòng)信號(hào)和各種同步信號(hào),比較簡(jiǎn)單,因此這就不做介紹了。下面主要介紹以下HY-12864這個(gè)模塊的邏輯電路圖。HY-12864共有兩片HD61202和一片HD61203,如下圖4-9所示。圖4-9 HY-12864的邏輯電路圖在HY-12864中,兩片HD61202的ADC均接高電平,RST也接高電平,這樣在使用HY-12864時(shí)就不必再考慮這兩個(gè)引腳的作用。/CSA跟HD61202

39、(1)的/CS1相連;/CSB跟HD61202(2)的CS1相連,因此/CSA、/CSB選通組合信號(hào)為/CSA,/CSB=01選通(1),/CSA,/CSB=10選通(2)。對(duì)于HY-12864,只要供給VDD、VSS和V0即可,HD61202和HD61203所需的電源將由模塊內(nèi)部電路在VDD和V0、VSS的作用下產(chǎn)生。4.4.5 HY-12864的應(yīng)用以下內(nèi)容為以單片機(jī)8031為例機(jī)的接口電路,電路原理圖如圖4-10所示??刂齐娐窞橹苯釉L問(wèn)方式的接口電路。圖4-10 8031與液晶的接口電路根據(jù)以上電路原理圖中液晶的各引腳與單片機(jī)的接法,可得本設(shè)計(jì)的液晶模塊電路如圖4-11所示。VSS接地;

40、數(shù)字電源VDD接5V;對(duì)比度控制電壓V0接電位器,可通過(guò)調(diào)節(jié)電位器調(diào)整液晶亮度;數(shù)據(jù)、指令選擇信號(hào)RS接單片機(jī)P2.0口;讀寫(xiě)選擇信號(hào)R/W接單片機(jī)P2.1口;單片機(jī)讀、寫(xiě)選通信號(hào)/RD、/WR通過(guò)與非門(mén)接液晶的讀寫(xiě)使能信號(hào)E;DB0DB7分別接單片機(jī)的P0.0P0.7口;芯片1、芯片2的片選分別接單片機(jī)的P2.2、P2.3口;復(fù)位端RST、背光正電源LEDA接5V;液晶驅(qū)動(dòng)電壓VEE、背光負(fù)電源LEDK接地。圖4-11 液晶模塊電路4.5 鍵盤(pán)電路本設(shè)計(jì)共采用按鍵3個(gè),分別與單片機(jī)的P1.7、P1.6、P1.5口相連,分別對(duì)應(yīng)光標(biāo)移動(dòng),時(shí)間、日期調(diào)整,退出、鬧鈴開(kāi)關(guān)鍵的功能。與單片機(jī)的接法可

41、參照附錄1電子萬(wàn)年歷設(shè)計(jì)電路原理圖。4.6 鬧鈴電路當(dāng)鬧鈴顯示“關(guān)”時(shí),鬧鈴不起作用;當(dāng)鬧鈴顯示“開(kāi)”時(shí),設(shè)定鬧鈴時(shí)間,鬧鈴時(shí)間只可設(shè)定時(shí)和分,當(dāng)前時(shí)間不斷與設(shè)定的鬧鈴時(shí)間比較,不相等時(shí)不產(chǎn)生任何現(xiàn)象,一旦相等,P3.5輸出一個(gè)高電平使三極管導(dǎo)通,從而使蜂鳴器工作,鬧鈴起作用。鬧鈴電路如圖4-12所示。圖4-12 鬧鈴電路5 系統(tǒng)程序的設(shè)計(jì)5.1 陽(yáng)歷程序的設(shè)計(jì)因?yàn)槭褂昧藭r(shí)鐘芯片DS1302,陽(yáng)歷程序只需從DS1302各寄存器中讀出年、周、月、日、小時(shí)、分、秒等數(shù)據(jù),再處理即可。在首次對(duì)DS1302進(jìn)行操作之前,必須對(duì)它進(jìn)行初始化,然后從DS1302中讀出數(shù)據(jù),再經(jīng)過(guò)處理后,送給顯示緩沖單元。

42、陽(yáng)歷程序流程圖見(jiàn)圖5-1所示。 開(kāi) 始初始化DS1302讀24C021302開(kāi)始振蕩從1302中讀出年、周、月、日、小時(shí)、分、秒將BCD碼高低位分離,送顯示緩沖單元圖5-1 陽(yáng)歷程序流程圖5.2 時(shí)間調(diào)整程序設(shè)計(jì)調(diào)整時(shí)間用三個(gè)調(diào)整按鈕,一個(gè)作為移位、控制用,一個(gè)作為加用,一個(gè)作為退出調(diào)整和鬧鈴開(kāi)關(guān)用。分別定義為控制按鈕、加按鈕、退出按鈕。在調(diào)整時(shí)間過(guò)程中,要調(diào)整的位與別的位應(yīng)該有區(qū)別,所以增加了閃爍功能,即調(diào)整的位一直在閃爍,直到調(diào)整下一位。閃爍原理就是,讓要調(diào)整的一位每隔一定的時(shí)間熄滅一次,例如間隔時(shí)間為50ms。利用定時(shí)器計(jì)時(shí),當(dāng)達(dá)到50ms溢出時(shí),就送給該位熄滅符,在下一次溢出時(shí),再送正

43、常顯示的值,不斷交替,直到調(diào)整該位結(jié)束。此時(shí)送正常顯示值給該位,再進(jìn)入下一位調(diào)整閃爍程序。時(shí)間調(diào)整程序流程圖如圖5-2所示??刂奇I有效,進(jìn)入年調(diào)整程序等待按鍵程序加鍵有效年加1控制鍵有效,進(jìn)入月調(diào)整程序控制鍵有效,進(jìn)入日調(diào)整程序控制鍵有效,進(jìn)入星期調(diào)整程序控制鍵有效,進(jìn)入時(shí)調(diào)整程序控制鍵有效,進(jìn)入分調(diào)整程序等待按鍵程序加鍵有效月加1等待按鍵程序加鍵有效日加1等待按鍵程序加鍵有效星期加1等待按鍵程序加鍵有效小時(shí)加1等待按鍵程序加鍵有效分加1控制鍵有效,跳出時(shí)間調(diào)整程序,進(jìn)入主循環(huán)程序圖5-2 時(shí)間調(diào)整程序流程圖5.3 陰歷程序設(shè)計(jì)陰歷程序的實(shí)現(xiàn)是要靠陽(yáng)歷日期來(lái)推算的。要根據(jù)陽(yáng)歷來(lái)推算陰歷日期,首

44、先要設(shè)計(jì)算法。推算方法是,根據(jù)陽(yáng)歷當(dāng)前日期在一年中的天數(shù)來(lái)計(jì)算陰歷日期。陽(yáng)歷一個(gè)月不是30天就是31天(2月除外,閏年2月為29天,平年2月為28天)。陰歷一年有12個(gè)月或13個(gè)月(含閏月),一個(gè)月為30天或29天。如果把一個(gè)只有29天的月稱(chēng)為小月,用1為標(biāo)志,把30天的月稱(chēng)為大月,用0為標(biāo)志,那么12位二進(jìn)制就能表示一年12個(gè)月的大小。如果有閏月,則把閏月的月份作為一個(gè)字節(jié)的高4位,低4位表示閏月大小,大月為0,小月為1,這樣一個(gè)字節(jié)就包括了所有閏月的信息。陰歷春節(jié)和陽(yáng)歷元旦相差的天數(shù)也用一個(gè)字節(jié)表示??偣灿?字節(jié)就可以存儲(chǔ)一年中任何一天陽(yáng)歷和陰歷的對(duì)應(yīng)關(guān)系的有關(guān)數(shù)據(jù),例如2004年的陰歷和

45、陽(yáng)歷對(duì)應(yīng)關(guān)系如表5-1所示。表5-1 2004年的陰歷和陽(yáng)歷對(duì)應(yīng)關(guān)系表月份123456789101112閏2月大小小大大大小大小大小大小大小二進(jìn)制1000101010101天數(shù) 293030302930293029302930十六進(jìn)制4252212004年的春節(jié)和元旦差21天,這樣2004年的信息表示為:21,42H,51H,21H。其中表示12個(gè)月大小信息的字節(jié),第4位和第7位不用,第1個(gè)字節(jié)為十進(jìn)制,其它的都為十六進(jìn)制。按此方法,50年的陽(yáng)歷和陰歷對(duì)應(yīng)關(guān)系表總共使用200字節(jié)。有了算法和數(shù)據(jù)以后,就可以設(shè)計(jì)軟件了。先要根據(jù)當(dāng)前陽(yáng)歷的日期,算出陽(yáng)歷為該年中的第幾天。圖5-3為計(jì)算陽(yáng)歷中任何一

46、天在該年中為第幾天的程序流程圖。置陽(yáng)歷總天數(shù)為0當(dāng)前月為1月?總天數(shù)中加入該月天數(shù)月數(shù)加1與當(dāng)前月同?總天數(shù)中加入號(hào)數(shù)當(dāng)前號(hào)數(shù)是總天數(shù)計(jì)算陽(yáng)歷天數(shù)結(jié)束,總天數(shù)中的數(shù)據(jù)為當(dāng)前日期在陽(yáng)歷年中為第幾天YNNY圖5-3 計(jì)算陽(yáng)歷天數(shù)程序流程圖計(jì)算出當(dāng)前陽(yáng)歷日期為該年中的第幾天后,再減去陽(yáng)歷該年春節(jié)和元旦的日差,如果夠減,則相減的結(jié)果就是陰歷在該年中的總第幾天了。根據(jù)該數(shù)據(jù)就可以推算出具體的當(dāng)前陰歷日期;如果不夠減,則表示當(dāng)前陰歷年為陽(yáng)歷年的前一年。這種情況下,根據(jù)實(shí)際,當(dāng)前陰歷日期會(huì)處于陰歷11月或12月,此時(shí)春節(jié)和元旦的日差減去前面計(jì)算出的當(dāng)前陽(yáng)歷日期在陽(yáng)歷年為第幾天的數(shù)據(jù),其結(jié)果表示當(dāng)前陰歷日期離

47、春節(jié)的天數(shù)。計(jì)算出的陽(yáng)歷天數(shù)為該年的第幾天,存放在寄存器R2和R3中。計(jì)算出天數(shù)后,如果大于#FFH,則把#FFH存放在R2中,余值存放在R3中。也就是說(shuō)在用寄存器R2和R3表示的天數(shù)信息中,R2充當(dāng)主寄存器,數(shù)據(jù)先存滿(mǎn)R2,再存R3。在整個(gè)轉(zhuǎn)換程序中,這里面的數(shù)據(jù)不能被覆蓋。計(jì)算出陽(yáng)歷總天數(shù)后,就可以根據(jù)它來(lái)推算陰歷日期。推算方法是,先用總天數(shù)減去春節(jié)和元旦的日差,如果結(jié)果為1,則該天正好是春節(jié)(因?yàn)榇汗?jié)在元旦之后,在計(jì)算春節(jié)和元旦的日差時(shí),假設(shè)元旦為0天,春節(jié)為n天,則日差為n。而前面計(jì)算的陽(yáng)歷總天數(shù)是該天在該年中的第幾天,是以元旦為1而得到的,與計(jì)算春節(jié)和元旦日差的這樣方法相比,其數(shù)值少

48、了1,所以要在原來(lái)本應(yīng)該以0作為該天就是春節(jié)的依據(jù)的基礎(chǔ)上加1,所以以1作為該天是春節(jié)的標(biāo)志);如果結(jié)果小于1,則陰歷應(yīng)該是陽(yáng)歷的前一年;如果結(jié)果大于1,說(shuō)明陽(yáng)歷和陰歷為同一年。再根據(jù)查表所得的該年的陰歷的閏年和大小月的信息,就可以推算出該天的陰歷日期了。圖5-4為由總天數(shù)推算出陰歷日期的程序流程圖。程序入口R2減1個(gè)月天數(shù) 夠減?下個(gè)月為閏月?減去閏月天數(shù)月加1月份為當(dāng)前正在減的月份的前一個(gè)月的最后一天月份為當(dāng)前正在減的月份,號(hào)數(shù)為R2中的值R2=0?R3=0?R2=R2+R3R3=0YYYYNNNN圖5-4 推算陰歷日期的程序流程圖6 測(cè)試結(jié)果設(shè)計(jì)完成后,給系統(tǒng)上電,液晶顯示屏顯示結(jié)果如圖

49、6-1所示。天津工程師范學(xué)院通信0202班劉敏畢業(yè)設(shè)計(jì)SOLAR 2000/01/01LUNAR 2095/11/2500:00:00 SUN 鬧鈴 關(guān)閏月 00:00滾動(dòng)顯示圖6-1 液晶顯示屏的顯示結(jié)果調(diào)節(jié)10K電位器R4可調(diào)整液晶顯示屏的亮度。調(diào)整到合適亮度后,按控制按鈕,光標(biāo)會(huì)從陽(yáng)歷年位開(kāi)始閃爍,進(jìn)入設(shè)定調(diào)整狀態(tài)。此時(shí)按加按鈕,當(dāng)前數(shù)字就可改變。按一次,數(shù)字加1;若長(zhǎng)按,則數(shù)字連續(xù)加。此時(shí),調(diào)整的位一直在閃爍,直到再次按光標(biāo)移動(dòng)控制位,光標(biāo)跳到下一位閃爍。調(diào)整順序依次為:陽(yáng)歷年、月、日,陰歷年、月、日,時(shí)、分、秒,鬧鈴時(shí)、分。當(dāng)全部參數(shù)調(diào)整完畢后,按退出按鈕,光標(biāo)停止閃爍,退出設(shè)定調(diào)整

50、狀態(tài);當(dāng)再次按下此按鈕,鬧鈴顯示“開(kāi)”;當(dāng)?shù)谌伟聪麓随I,鬧鈴顯示“關(guān)”。若當(dāng)前月為閏月,則屏幕左下角會(huì)顯示“閏月”;若不是閏月,則無(wú)顯示。調(diào)試分為硬件調(diào)試和軟件調(diào)試。硬件調(diào)試主要是檢測(cè)硬件電路是否有短路、斷路、虛焊等。DS1302的硬件電路很簡(jiǎn)單,只通過(guò)3根線與單片機(jī)相連,很容易檢測(cè),主要是檢查其引腳,如晶振和電源等是否接好。另外可以通過(guò)軟件來(lái)調(diào)試硬件,如為了測(cè)試顯示電路連接是否正確,可以編寫(xiě)一個(gè)簡(jiǎn)單的顯示程序來(lái)測(cè)試它。接下來(lái)可進(jìn)行軟件調(diào)試,可以編寫(xiě)只含DS1302的計(jì)時(shí)和讀寫(xiě)程序、顯示程序,測(cè)試DS1302是否正常工作。最后調(diào)試時(shí)間調(diào)整程序和陰歷推算程序。計(jì)時(shí)器最關(guān)鍵的是計(jì)時(shí)的精度。電子萬(wàn)

51、年歷中DS1302電路使用專(zhuān)用的晶振,經(jīng)測(cè)試制作的電子萬(wàn)年歷,一星期快了3s左右,誤差較大,實(shí)驗(yàn)設(shè)計(jì)中可換用標(biāo)準(zhǔn)晶振或用軟件進(jìn)行修正。7 結(jié)論本設(shè)計(jì)硬件電路較簡(jiǎn)單,所用器件較少,電路中使用了AT89C51單片機(jī)、DS1302時(shí)鐘芯片、24C02FLASH存儲(chǔ)器和HY-12864液晶顯示器等主要芯片,實(shí)現(xiàn)了預(yù)計(jì)功能。在對(duì)芯片的管腳功能和用法有充分的了解后,根據(jù)設(shè)計(jì)要求設(shè)計(jì)硬件電路,包括單片機(jī)控制電路、時(shí)鐘電路、存儲(chǔ)電路、鍵盤(pán)掃描電路、顯示電路和鬧鈴電路。然后通過(guò)軟件編程,實(shí)現(xiàn)了對(duì)年、月、日、時(shí)、分、秒、星期、閏年和陰歷的自動(dòng)調(diào)整,用按鍵進(jìn)行控制,用液晶模塊進(jìn)行顯示,并具有鬧鈴功能。電子萬(wàn)年歷可以正

溫馨提示

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