林承祥電子萬(wàn)年歷的設(shè)計(jì)制作_第1頁(yè)
林承祥電子萬(wàn)年歷的設(shè)計(jì)制作_第2頁(yè)
林承祥電子萬(wàn)年歷的設(shè)計(jì)制作_第3頁(yè)
林承祥電子萬(wàn)年歷的設(shè)計(jì)制作_第4頁(yè)
林承祥電子萬(wàn)年歷的設(shè)計(jì)制作_第5頁(yè)
已閱讀5頁(yè),還剩44頁(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)介

單片機(jī)課程設(shè)計(jì)總結(jié)報(bào)告

題目:電子萬(wàn)年歷的設(shè)計(jì)與制作

專(zhuān)業(yè):理工學(xué)院03級(jí)電子信息科學(xué)

與技術(shù)

班級(jí):2班______________________________

姓名:林承祥

學(xué)號(hào):030303061_______________

指導(dǎo)教師:蔡植善_________________________

二00六年三月十日

一、設(shè)計(jì)目的及意義

(1)在學(xué)習(xí)了《數(shù)字電子技術(shù)》和《單片機(jī)原理及接口技術(shù)》課程后,為了加深對(duì)理論知

識(shí)的理解,學(xué)習(xí)理論知識(shí)在實(shí)際中的運(yùn)用,培養(yǎng)動(dòng)手能力和解決實(shí)際問(wèn)題的經(jīng)驗(yàn)讓學(xué)生接觸

專(zhuān)用時(shí)鐘芯片DS1302,并會(huì)用DS1302芯片開(kāi)發(fā)時(shí)鐘模塊,應(yīng)用到其他系統(tǒng)中去。熟悉WAVE

軟件調(diào)試程序和仿真.

(2)、通過(guò)實(shí)驗(yàn)提高對(duì)單片機(jī)的認(rèn)識(shí);

(3)通過(guò)實(shí)驗(yàn)提高焊接、布局、電路檢查能力;

(4X通過(guò)實(shí)驗(yàn)提高軟件調(diào)試能力;

(5)進(jìn)一步熟悉和掌握單片機(jī)的結(jié)構(gòu)及工作原理。

(6)通過(guò)課程設(shè)計(jì),掌握以單片機(jī)核心的電路設(shè)計(jì)的基本方法和技術(shù),了解表關(guān)電路參

數(shù)的計(jì)算方法。

(7)通過(guò)實(shí)際程序設(shè)計(jì)和調(diào)試,逐步掌握模塊化程序設(shè)計(jì)方法和調(diào)試技術(shù)。

(8)通過(guò)完成一個(gè)包括電路設(shè)計(jì)和程序開(kāi)發(fā)的完整過(guò)程,使學(xué)生了解開(kāi)發(fā)一單片機(jī)應(yīng)用

系統(tǒng)的全過(guò)程,為今后從事相應(yīng)打下基礎(chǔ)。

二、設(shè)計(jì)內(nèi)容要求

電子萬(wàn)年歷能顯示陽(yáng)歷年、月、日、星期、[小]時(shí)、分、秒和陰歷月、日,在顯示陰歷時(shí)間

時(shí)能標(biāo)明是否為閏年。

三、方案選擇與實(shí)驗(yàn)基本原理。

按照系統(tǒng)設(shè)計(jì)功能的要求,初步確定設(shè)計(jì)系統(tǒng)由主控模塊、時(shí)鐘模塊、顯示模塊、鍵

盤(pán)接口模塊共4個(gè)模塊組成,電路系統(tǒng)構(gòu)成框圖如圖L1所示。主控芯片使用51系列AT89c52

單片機(jī),時(shí)鐘芯片使用美國(guó)DALLAS公司推出的一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘

DS1302o采用DS1302作為主要計(jì)時(shí)芯片,可以做到計(jì)時(shí)準(zhǔn)確。更重要的是,DS1302可以

在很小電流的后備電源(2.5—5.5V電源,在2.5V時(shí)耗電小于300nA)下繼續(xù)計(jì)時(shí),并可

編程選擇多種充電電流來(lái)對(duì)后備電源進(jìn)行慢速充電,可以保證后備電源基本不耗電。顯示

模塊采用普通的共陽(yáng)LED數(shù)碼管,鍵輸入采用查詢法實(shí)現(xiàn)調(diào)整功能。

圖1電子萬(wàn)年歷電路系統(tǒng)構(gòu)成框圖

系統(tǒng)硬件甩路的設(shè)計(jì)

圖2為電子萬(wàn)年歷電路設(shè)計(jì)原理圖,系統(tǒng)由主控制器AT89c52、時(shí)鐘芯片DS1302、串口

顯示電路及鍵掃描電路組成。

<-<-

至tn

N

l!S!IH

龍式!

gqop。j-ut*S

主xniun

PJ玲小

6

l!!!l!l4到

拿孥

玲最一x

N&$

U。PUJ

仙山」至二皿山

玲最

■?o3P■?>??-Wr&

,皿訕!>

芭工

齦8騁監(jiān)當(dāng)

能<.浣V.

D-(iKKHtQQNSXfu=SBI

Oo<oJoeHIVV

VvvIvOSWIWv昱

-nIVc^dS£盤(pán)E

_.W/WKNfL

roSC邕&【

0更aieO

gWwSdJ6

OoU

.ENUECY

±-wlG§9WT一

1.rf/£,£v

HSKRsZdq

nff

圖2電子萬(wàn)年歷電路設(shè)計(jì)原理圖

3.3.1主控制器AT89c52

ATMEL公司生產(chǎn)的AT89C52單片機(jī)采用高性能的靜態(tài)80C51設(shè)計(jì),由先進(jìn)工藝制造,

并帶有非易失性Flash程序存儲(chǔ)器。它是一種高性能、低功耗的8位cMos微處理芯片,市

場(chǎng)應(yīng)用最多。主要性能特點(diǎn)有:

?8KHFlashROM,可以擦除1000次以上,數(shù)據(jù)保存10年

?256字節(jié)內(nèi)部RAM。

■電源控制模式

一一時(shí)鐘可停止和恢復(fù)

——空閑模式;

----掉電模式。

?6個(gè)中斷源。

?4個(gè)中斷優(yōu)先級(jí)。

?4個(gè)8位I/O口。

■全雙工增強(qiáng)型UART。

?3個(gè)16位定時(shí)/計(jì)數(shù)器,To、T1(標(biāo)準(zhǔn)80c51)和增加的T2(捕獲和比較)。

?全靜態(tài)工作方式:0-24MHz。

3.3.2時(shí)鐘電路DS1302

1.dsl302的性能特性

?實(shí)時(shí)時(shí)鐘,可對(duì)秒、分、時(shí)、日、周、月以及帶閏年補(bǔ)償?shù)哪赀M(jìn)行計(jì)數(shù):

?用于高速數(shù)據(jù)暫存的31X8位RAM;

?最少引腳的串行I/。;

?2.5—5.5V電壓工作范圍;

?2.5V時(shí)耗電小于300nA;

?用于時(shí)鐘或RAM數(shù)據(jù)讀/寫(xiě)的單字節(jié)或多字節(jié)(脈沖方式)數(shù)據(jù)傳送方式;

?簡(jiǎn)單的3線接口;

?可選的慢速充電(至Vccl)的能力。

D51302時(shí)鐘芯片包括實(shí)時(shí)時(shí)鐘/日歷和31字節(jié)的靜態(tài)RAM。它經(jīng)過(guò)一個(gè)簡(jiǎn)單的串行接口

與微處理器通信。實(shí)時(shí)時(shí)鐘/日歷提供秒、分、時(shí)、日、周、月和年等信息。對(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ù)。Dsl302有主電源/后備電源雙電源引腳:Vccl在

單電源與電他供電的系統(tǒng)中提供低電源,并提供低功率的電池備份;Vcc2在雙電源系統(tǒng)中

提供主電源,在這種運(yùn)用方式中,Vccl連接到備份電,以便在沒(méi)有主電源的情況下能保存

時(shí)間信息以及數(shù)據(jù)。Dsl302由Vccl或vcc2中較大者供電。當(dāng)vcc2大于Vccl十o.2v時(shí),

vcc2V給DS1302供電;當(dāng)vcc2小于Vccl時(shí),DS1302由Vccl供電。

2.DS1302數(shù)據(jù)操作原理

Dsl302在任何數(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ù)。

如果在傳送過(guò)程中置RsT腳為低電平,則會(huì)終止本次數(shù)據(jù)傳送,并且1/()引腳變?yōu)楦?/p>

阻態(tài)。上電運(yùn)行時(shí),在Vcc22.5V之前,RsT腳必須保持低電平。只有在scLK為低電平

時(shí),才能將RsT置為高電平。D引302的引腳及內(nèi)部結(jié)構(gòu)圖如圖3.3所示,表3.1為各引

腳的功能

引眄弓牌標(biāo)功能

1%主電源

,(c

2,3x>,x髓泳版32768kHz晶板

GND2

4GND地線

5RST施/片殿

61/0串行&軸人/鼬*(雙向)

7SCLK串行懿葡入第

后備電源

8vw

圖3DS1302引腳及內(nèi)部結(jié)構(gòu)表1DS102引腳功能

Dsl302的控制字如圖3.4所示??刂谱止?jié)的最高有效位(位7)必須是邏輯1;如果它為

0,則不能把數(shù)據(jù)寫(xiě)入到Dsl302中。位6如果為0,則表示存取日歷時(shí)鐘數(shù)據(jù);為1表示存

RAM數(shù)據(jù)。位5—1(A4-A0)指示操作單元的地址。最低有效位(位0)如為0,表示要進(jìn)行寫(xiě)

操作;為1表示進(jìn)行讀操作??刂谱止?jié)總是從最低位開(kāi)始輸入/輸出。

為了提高對(duì)32個(gè)地址的尋址能力(地址/命令位1?5=邏輯1),可以把時(shí)鐘/日歷或

RAM寄存器規(guī)定為多字節(jié)(burst)方式。位6規(guī)定時(shí)鐘或RAM,而位0規(guī)定讀或?qū)憽T跁r(shí)鐘/

日歷寄存器中的地址9-31或RAM寄存器中的地址31不能存儲(chǔ)數(shù)據(jù)。在多字節(jié)方式中,讀

或?qū)憦牡刂?的位0開(kāi)始。必須按數(shù)據(jù)傳送的次序?qū)懽钕鹊?個(gè)寄存器。但是,當(dāng)以多字節(jié)

方式寫(xiě)RAM時(shí),為了傳送數(shù)據(jù)不必寫(xiě)所有31字節(jié)。小管是否寫(xiě)了全部31字節(jié),所寫(xiě)的每一

字節(jié)都將傳送至RAM。

圖4DS1302的控制字

SCLKm---w--w--u-w---iR--j?-w--u-u-

RST4567

01234567012^.,,1.

:,:

I/OAOAtA2A3A4R/CI:\

一DATAI/OBYTE!DATAVOBYTEn

圖5DS1302數(shù)據(jù)讀/寫(xiě)時(shí)序

Dsl302共有12個(gè)寄存器,其中有7個(gè)寄存器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)位為BCD

碼形式。其H歷、時(shí)間寄存器及其控制字見(jiàn)表3.2,其中奇數(shù)為讀操作,偶數(shù)為寫(xiě)操作。

時(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—PM/12—24[?。輹r(shí)方式:[小]時(shí)寄存器的位7定義為12

或24[?。輹r(shí)方式選擇位。它為高電平時(shí),選擇12[小]時(shí)方式。在此方式下,位5是AM/PM

位,此位是高電平時(shí)表示PM,低電平表示AM。在24[小]時(shí)方式下,位5為第二個(gè)10[小]

時(shí)位(20—23h)。

命令字節(jié)寄存細(xì)容

翱罪名取觸用

寫(xiě)讀76543210

杪箱器80H81H00?59CH10sSEC

分病器

82H83H00-59010minMIN

[小]時(shí)寄存器84H’8/OQ?23或01?1212/24010A/PHRHR

口期寄存「

86H87H01-28,29,30,3100IODATEDATE

月份寄存器88H89n01-1200010MMONTH

用神器8AH8BH01?0700000DAY

年寄儲(chǔ)8CHSDH00?9910YEARYEAR

表2內(nèi)部寄存器地址和內(nèi)容

DS1302的品振選用32.768kHz,電容推薦值為6PF,因?yàn)檎袷庮l率較低,也可以不接

電容.對(duì)計(jì)時(shí)精度影響不大。3.3.3顯示電路的設(shè)計(jì)

顯示部分采用普通的共陽(yáng)數(shù)碼管顯示,采用動(dòng)態(tài)掃描,以減少硬件電路。考慮到一次掃

描19位數(shù)的管顯示時(shí)會(huì)出現(xiàn)閃爍情況,設(shè)計(jì)時(shí)19個(gè)數(shù)碼管分3排同時(shí)掃描。第一排6個(gè)數(shù)

管分別為千年、百年、十午、年、十月、月,第二排6位數(shù)碼管分別為十時(shí)、時(shí)、十分、分、

十秒、秒,第三排7位數(shù)碼管分別為星期、陰歷十月、陰歷月、陰歷十日、陰歷日、十日、

日。顯示時(shí)采用串行口輸出段碼,用3片741sl64來(lái)驅(qū)動(dòng)3排數(shù)碼管,這樣掃描一次只需

7mso

7411sl64內(nèi)部為8個(gè)D觸發(fā)器,用以實(shí)現(xiàn)數(shù)據(jù)的串行移位,7411sl64特性見(jiàn)表3。單

片機(jī)以串行口方式0(移仿寄存器方式)輸山數(shù)據(jù),3片74LS164作為3排共陽(yáng)數(shù)碼管的串/

并轉(zhuǎn)換顯示接口。741sl64為T(mén)TL單向8位移位寄存器,可實(shí)現(xiàn)串行輸入,并行輸出。其

中A、B(第1、2腳)為串行數(shù)據(jù)輸入端,2個(gè)引腳按邏輯“與”運(yùn)算規(guī)律輸入信號(hào),共一個(gè)

輸入信號(hào)時(shí)可并接,共同作為輸入腳。cP(第8腳)為時(shí)鐘輸入端,可連接到串行口的TxD

端。每一個(gè)時(shí)鐘信號(hào)的上升沿加到cP端時(shí),移位寄存器移一位。8個(gè)時(shí)鐘脈沖過(guò)后,8位二

進(jìn)制數(shù)全部移入

741sl64中。MR腳(第9腳)為復(fù)位端,當(dāng)該腳為低電平時(shí);移位寄存器各位復(fù)0;只有當(dāng)

它為高電平時(shí),時(shí)鐘脈沖才起作用。QI—Q8(第3—6和10—13引腳)并行輸出端分別接數(shù)

碼管的h—a(因?yàn)榇衝從低位開(kāi)始傳送)各段對(duì)應(yīng)的引腳上。在給出了8個(gè)脈沖后,最先

進(jìn)入741oS164的第1個(gè)字L1數(shù)據(jù)到達(dá)廠最高位。再來(lái)1個(gè)脈沖,第1個(gè)脈沖就會(huì)從最高

位移出,進(jìn)入下個(gè)74L5164的第1位。3片741'S164首尾相串,而時(shí)鐘端則接在一起。這

樣,當(dāng)輸入8個(gè)

脈沖時(shí),從一9片機(jī)RXD端輸出的第1字節(jié)數(shù)據(jù)就進(jìn)入了第1片-74LS164中,而當(dāng)?shù)?個(gè)8

個(gè)脈沖到來(lái)后,第1字節(jié)數(shù)據(jù)就進(jìn)入了第2片74LS164,而隨后的第2字節(jié)的數(shù)據(jù)則進(jìn)入了

第1片74LS164。這樣,當(dāng)?shù)?個(gè)8個(gè)脈沖完成后,首次送出的數(shù)據(jù)被送到了最下面的164(第

3片)中,其它數(shù)據(jù)依次出現(xiàn)在第二和第一片74LS164中,實(shí)現(xiàn)了數(shù)據(jù)在74LS164中的串行

輸入、并行輸出。

操作模式輸入輸出

復(fù)位1VTRABQOQl~Q7

LXXLQO~Q6

HLLLQ6

移位HLIILQO~Q6

HHLLQO-Q6

HHHHQO~Q6

表374LS164特性表

在方式0狀態(tài)下,串行口為同步移位寄存器方式,其波特率是固定的,為fosc/12。數(shù)

據(jù)由RxD(P3.0)端輸入或輸出,同步移位脈沖由TxD(P3.1)端輸出。發(fā)送、接收數(shù)據(jù)時(shí)低位

在先。所以,根據(jù)本小節(jié)下面提供的硬件電路圖,在編寫(xiě)程序時(shí),查共陽(yáng)數(shù)碼管的段碼的二

進(jìn)制數(shù)據(jù)應(yīng)該將正常的共陽(yáng)數(shù)碼管0—9的二進(jìn)制值按位反序排序,如原來(lái)的二進(jìn)制為

11000000(C0H),要改為00000011(0311),就能使數(shù)碼管正常顯示。

3.3.4鍵盤(pán)接口的設(shè)計(jì)

由于按鍵只有3個(gè),用普通按鈕接10kw上拉電阻,用查詢法完成讀鍵功能。

3.4系統(tǒng)程序的設(shè)計(jì)

因?yàn)槭褂昧藭r(shí)鐘芯片DS1302,陽(yáng)歷程序只需從DS1302各寄存器中讀出年、周、月、日、

[?。輹r(shí)、分、秒等數(shù)據(jù),再處理即可。在首次對(duì)DS1302進(jìn)行操作之前,必須對(duì)它進(jìn)行初始

化,然后從DS1302中讀出數(shù)據(jù),再經(jīng)過(guò)處理后,送給顯示緩沖單元。陽(yáng)歷程序流程圖見(jiàn)圖

3.6所示。

開(kāi)始

初始化1302

13。2開(kāi)始振蕩

從1302中讀出年、

周、月、日、[小]時(shí)、

分、秒

讀出的數(shù)據(jù)都為BCD

碼,將其高低位分離,

送顯示緩沖單元

圖6陽(yáng)歷程序流程圖

3.4.2時(shí)間調(diào)整程序設(shè)計(jì)

調(diào)整時(shí)間用2個(gè)調(diào)整按鈕,1個(gè)作為移位、控制用,另外1個(gè)作為加和減用,分別定義

為控制按鈕、加按鈕。在調(diào)整時(shí)間過(guò)程中,要調(diào)整的位與別的位應(yīng)該有區(qū)別,所以增加了閃

爍功能,即調(diào)整的位一直在閃爍,直到調(diào)整下一位。閃爍原理就是,讓要調(diào)整的一位每隔一

定時(shí)間熄滅一次,比如說(shuō)50ms?利用定時(shí)器計(jì)時(shí),當(dāng)達(dá)到50ms溢出時(shí),就送給該位熄

滅符,在下一次溢出時(shí)。再送正常顯示的值,不斷交替,直到調(diào)整該位結(jié)束。此時(shí)送正常顯

示值給該位,再進(jìn)人下一位調(diào)整閃爍程序。時(shí)間調(diào)整程序程序流程圖如圖3.7所示。

3.4.3陰歷程序設(shè)計(jì)

陰歷程序的實(shí)現(xiàn)是要靠陽(yáng)歷日期來(lái)推算的。要根據(jù)陽(yáng)歷來(lái)推算陰歷日期,首先要設(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é)表示??偣灿?/p>

1字節(jié)就可以存儲(chǔ)一年中任何一天陽(yáng)歷和陰歷的對(duì)應(yīng)關(guān)系的有關(guān)數(shù)據(jù),例如2004年的陰歷

和陽(yáng)歷對(duì)應(yīng)關(guān)系如表3.4所列。

圖7時(shí)間調(diào)整程序流程圖

月份123456789101112閏2月

大小小大大大小大小大小大小大小

天ft1000101010101

二進(jìn)制293030302930293029302930

-------

十六進(jìn)制425221

表42004年的陰歷和陽(yáng)歷關(guān)系表

2004年的春節(jié)和元旦差20天,這樣2004年的信息表示為:21,42H,52H,21H。其中

表示12個(gè)月大小信息的字,第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)歷為該年中的第幾天。圖3.8為計(jì)算

陽(yáng)歷中任何一天在該年中為第幾天的程序流程圖。

計(jì)算出當(dāng)前陽(yáng)歷日期為該年中的第幾天后,再減去陽(yáng)歷該年春節(jié)和元旦的日差,如果夠

減.則相減的結(jié)果就是陰歷在該年的總第幾天了。根據(jù)該數(shù)據(jù)就可以推算出具體的當(dāng)前陰歷

日期;如果不夠減,則表示當(dāng)?shù)年帤v年為陽(yáng)歷年的前一年。這種情況下,根據(jù)實(shí)際、當(dāng)前陰

歷日期會(huì)處十陰歷11月或12月,此時(shí)春節(jié)和元旦的日差減去前面計(jì)算出的當(dāng)前陽(yáng)歷日期在

陽(yáng)歷年為第幾天的數(shù)據(jù).其結(jié)果表示當(dāng)?shù)年帤v日期離春節(jié)的天數(shù)。計(jì)算出的陽(yáng)歷天數(shù)為該年

的第幾天,存放在寄存器只2和只3中。計(jì)算出天數(shù)后,如果大于#FFH,則把#FFH存放在

R2中,余值存放在R3中。也就是說(shuō)在用寄存器R2和R3表示的天數(shù)信息中.R2充當(dāng)主寄存

器,數(shù)據(jù)先存滿R2,再存R3。整個(gè)轉(zhuǎn)換程序中,這里面的數(shù)據(jù)不能被覆蓋。

計(jì)算出陽(yáng)歷總天數(shù)后,就可以根據(jù)它來(lái)推算陰歷日期。推算方法是,先用總天數(shù)減去春

節(jié)相元旦的日差,如果結(jié)果為1,則該天正好是春節(jié)(因?yàn)榇汗?jié)在元旦之后,在計(jì)算春節(jié)和

幾旦的日差0時(shí),假設(shè)元旦為0天,春節(jié)為M天,則日差為M。而前面計(jì)算的陽(yáng)歷總天數(shù)是

該天在該年

中的第幾天,是以元旦為1而得到的,與計(jì)算春節(jié)和元旦日差的這種方法相比,其數(shù)值少了

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ù)查表所得的該年的陰歷的閏月和大小月的信息,就可以推算出該大的

陰歷日期

了。圖3.9為由總天數(shù)推算出陰歷日期的程序流程圖。

圖9推算陰歷日期的程序流程圖

四、調(diào)試總結(jié)及改進(jìn)

(1)DS1302與微處理器進(jìn)行數(shù)據(jù)交換時(shí),首先由微處理器向電路發(fā)送命令字節(jié),命令字

節(jié)最高位MSB(D7)必須為邏輯1,如果D7=0,則禁止寫(xiě)DS1302,即寫(xiě)保護(hù):D6=0,指

定時(shí)鐘數(shù)據(jù),D6=1,臃RAM數(shù)據(jù);D5?D1指定輸入或輸出的特定寄存器:最低位LSB(DO)

為邏輯0,指定寫(xiě)操作(輸入),D0=1,指定讀操作(輸出)。在DS1302的時(shí)鐘日歷或RAM

進(jìn)行數(shù)據(jù)傳送時(shí),DS1302必須首先發(fā)送命令字節(jié)。若進(jìn)行單字節(jié)傳送,8位命令字節(jié)傳送

結(jié)束之后,在下2個(gè)SCLK周期的上升沿輸入數(shù)據(jù)字節(jié),或在下8個(gè)SCLK周期的下降沿

輸出數(shù)據(jù)字節(jié)。DS1302與RAM相關(guān)的寄存器分為兩類(lèi):一類(lèi)是單個(gè)RAM單元,共31

個(gè),每個(gè)單元組態(tài)為一個(gè)8位的字節(jié),其命令控制字為C0H?FDH,其中奇數(shù)為讀操作,

偶數(shù)為寫(xiě)操作;再一類(lèi)為突發(fā)方式下的RAM寄存器,在此方式下可一次性讀、寫(xiě)所有的

RAM的31個(gè)字節(jié)。

(2)在仿真頭調(diào)試時(shí)候,我發(fā)現(xiàn)在LED顯示板上能夠正常顯示數(shù)字,但是秒位不能記數(shù),

檢查DS1302的連接(沒(méi)有錯(cuò),接觸也良好),說(shuō)明了這片DS1302不能記數(shù),然后換掉

DS1302后此時(shí)不但可以正常顯示數(shù)字,而且可以正常記數(shù),說(shuō)明剛才那片是壞的。

(3)(2M)晶振的調(diào)試,在調(diào)試晶振的時(shí)候發(fā)現(xiàn),在沒(méi)有給電路同電的時(shí)候,晶振兩端輸

出波形是個(gè)不穩(wěn)定的正弦波,而通電后也是個(gè)正弦波,但是中間一個(gè)引腳接地時(shí)候,波形比

較穩(wěn)定,接示波器時(shí)間長(zhǎng)了,發(fā)現(xiàn)DS1302很發(fā)燙(時(shí)間很短內(nèi)溫度達(dá)到很高),但是不

接示波器,時(shí)間長(zhǎng)點(diǎn)也不會(huì)出現(xiàn)發(fā)燙現(xiàn)象。我認(rèn)為是示波器引腳上的電和電路板上的電相通

的原因。

五元器件

主控器AT89c52一片、時(shí)鐘芯片DS1302一片、10P瓷片電容2個(gè)、22P瓷片電容3個(gè),

32.768K(時(shí)鐘晶體)1片、510歐排電阻3個(gè)、共陽(yáng)LED19片,9012三極管1片、8550三極

管7個(gè),2M晶體1片、74LS104三片、發(fā)光二極管一個(gè)、按鈕開(kāi)關(guān)2個(gè)、萬(wàn)能電路板(大

小個(gè)I個(gè)),5V電源一個(gè)、導(dǎo)線若干。

六、參考書(shū)目

1、李振聲.實(shí)驗(yàn)電子技術(shù)(P182?193).國(guó)防工業(yè)大學(xué)出版社,2001年

2李飛光單片機(jī)課程設(shè)計(jì)實(shí)例指導(dǎo)北京航空航天大學(xué)出版社2004年

七程序調(diào)試

SCLKEQUP3.2

10EQUP3.3

RSTEQUP3.4

YEARDATA66H

MONTHDATA65H

WEEKDATA64H

DAYDATA63H

HOURDATA62H

MINTUEDATA61H

SECONDDATA60H

DS1302.ADDRDATA32H

DS1302_DATADATA31H

ORG0000H

AJMPSTART

ORG0003H

RETI

ORG000BH

RETI

ORG0013H

RETI

ORG001BH

LJMPINTT1

ORG0023H

RETI

ORG002BH

RETI

START:SETBEA

MOVSCON,#OOH

MOVTMOD,#10H

MOVTL1,#OOH

MOVTH1,#OOH

MOVDS1302_ADDR,#8EH

MOVDS1302_DATA,#00H

LCALLWRITE

MOVDS1302_ADDR,#90H

MOVDS1302_DATA,#0A6H

LCALLWRITE

MAIN1:MOVDS1302_ADDR,#8DH

LCALLREAD

MOVYEAR,DS1302_DATA

MOVDS1302_ADDR,#8BH

LCALLREAD

MOVWEEK,DS1302_DATA

MOVDS1302_ADDR,#89H

LCALLREAD

MOVMONTH,DS1302_DATA

MOVDS1302_ADDR,#87H

LCALLREAD

MOVDAY,DS1302_DATA

MOVDS1302_ADDR,#85H

LCALLREAD

MOVHOUR,DS1302_DATA

MOVDS1302_ADDR,#83H

LCALLREAD

MOVMINTUE,DS1302_DATA

MOVDS1302_ADDR,#81H

LCALLREAD

MOVSECOND,DS1302_DATA

MOVRO,YEAR

LCALLDIVIDE

MOV7BH,R1

MOV4BH,R1

MOV7CH,R2

MOV4CH,R2

MOV78H,WEEK

MOV48H,WEEK

MOVRO,MONTH

LCALLDIVIDE

MOV79H,R1

MOV49H,R1

MOV7AH,R2

MOV4AH,R2

MOVRO,DAY

LCALLDIVIDE

MOV76H,R1

MOV46H,R1

MOV77H,R2

MOV47H,R2

MOVRO,HOUR

LCALLDIVIDE

MOV74H,R1

MOV44H,R1

MOV75H,R2

MOV45H,R2

MOVR0,MINTUE

LCALLDIVIDE

MOV72H,R1

MOV42H,R1

MOV73H,R2

MOV43H,R2

MOVRO,SECOND

LCALLDIVIDE

MOV7OH,R1

MOV4OH,R1

MOV71H,R2

MOV41H,R2

LCALLDISPLAY

LCALLGENGXIAN

JNBP1.2,NUM

JNBP1.1,SETG

JNBFO,SSS

CLRPL3

LJMPMAIN1

sss:SETBP1.3

LJMPMAIN1

NUM:MOVMONTH,#OAAH

MOVHOUR,#OAAH

MOVMINTUE,#OAAH

MOVSECOND,#04H

MOVRO,MONTH

LCALLDIVIDE

MOV79H,R1

MOV49H,R1

MOV7AH,R2

MOV4AH,R2

MOVRO,HOUR

LCALLDIVIDE

MOV74H,R1

MOV44H,R1

MOV75H,R2

MOV45H,R2

MOVR0,MINTUE

LCALLDIVIDE

MOV72H,R1

MOV42H,R1

MOV73H,R2

MOV43H,R2

MOVRO,SECOND

LCALLDIVIDE

MOV7OH,R1

MOV4OH,R1

MOV71H,R2

MOV41H,R2

LCALLDISPLAY

JNBP1.2,NUM

LJMPMAIN1

SETG:SETBTRI

SETBET1

CLR08H

CLR09H

CLROAH

CLROBH

CLROCH

CLRODH

CLROEH

CLROFH

MOVDS1302_ADDR,#8EH

MOVDS1302_DATA,#00H

LCALLWRITE

MOVDS1302_ADDR,#80H

MOVDS1302_DATA,#80H

LCALLWRITE

GWAIT:LCALLDISPLAY

JNBP1.1,GWAIT

SETG1:LCALLDISPLAY

JNBP1.1,SETG2

JNBP1.2,GADDYEAR

AJMPSETG1

GADDYEAR:MOVR7,66H

LCALLADD1

MOV66H,A

CJNEA,#51H,GADDYEAR1

MOV66H,#01H

GADDYEAR1:MOVDS1302_ADDR,#8CH

MOVDS1302_DATA,66H

LCALLWRITE

MOVR0,66H

LCALLDIVIDE

MOV4BH,R1

MOV7BH,R1

MOV4CH,R2

MOV7CH,R2

WAITT1:LCALLDISPLAY

JNBP1.2,WAITT1

AJMPSETG1

SETG2:SETBOAH

GWAIT2:LCALLDISPLAY

JNBP1.1,GWAIT2

SETG3:LCALLDISPLAY

JNBP1.1,SETG4

JNBP1.2,GADDMONTH

AJMPSETG3

GADDMONTH:MOVR7.65H

LCALLADD1

MOV65H,A

CJNEA,#13H,GADDMONTH1

MOV65H,#01H

GADDMONTH1:MOVDS1302_ADDR,#88H

MOVDS1302_DATA,65H

LCALLWRITE

MOVR0,65H

LCALLDIVIDE

MOV79H,R1

MOV49H,R1

MOV7AH,R2

MOV4AH,R2

WAITT2:LCALLDISPLAY

JNBP1.2,WAITT2

AJMPSETG3

SETG4:SETBOBH

GWAIT4:LCALLDISPLAY

JNBP1.1,GWAIT4

SETG5:LCALLDISPLAY

JNBP1.1,SETG6

JNBP1.2,GADDDAY

AJMPSETG5

GADDDAY:MOVR7,63H

LCALLADD1

MOV63H,A

CJNEA,#32H,GADDDAY1

MOV63H,#01H

GADDDAY1:MOVDS1302_ADDR,#86H

MOVDS1302_DATA,63H

LCALLWRITE

MOVR0,63H

LCALLDIVIDE

MOV76H,R1

MOV46H,R1

MOV77H,R2

MOV47H,R2

WAITT3:LCALLDISPLAY

JNBP1.2,WAITT3

AJMPSETG5

SETG6:SETBOCH

GWAIT6:LCALLDISPLAY

JNBP1.1,GWAIT6

SETG7:LCALLDISPLAY

JNBP1.1,SETG8

JNBP1.2,GADDWEEK

AJMPSETG7

GADDWEEK:MOVR7,64H

LCALLADD1

MOV64H,A

CJNEA,#08H,GADDWEEK1

MOV64H,#01H

GADDWEEK1:MOVDS1302_ADDR,#8AH

MOVDS1302_DATA,64H

LCALLWRITE

MOVR0,64H

LCALLDIVIDE

MOV48H,R1

MOV78H,R1

WAITT4:LCALLDISPLAY

JNBP1.2,WAITT4

AJMPSETG7

SETG8:SETBODH

GWAIT8:LCALLDISPLAY

JNBP1.LGWAIT8

SETG9:LCALLDISPLAY

JNBPl.1,SETGIO

JNBPl.2,GADDHOUR

AJMPSETG9

GADDHOUR:MOVR7,62H

LCALLADD1

MOV62H,A

CJNEA,#24H,GADDHOUR1

MOV62H,#00H

GADDHOUR1:MOVDS1302_ADDR,#84H

MOVDS1302_DATA,62H

LCALLWRITE

MOVR0,62H

LCALLDIVIDE

MOV74H,R1

MOV44H,R1

MOV75H,R2

MOV45H,R2

WAITT5:LCALLDISPLAY

JNBPI.2,WAITT5

AJMPSETG9

SETGIO:SETBOEH

GWAITT10:LCALLDISPLAY

JNBP1.1,GWAITT1O

SETG1I:LCALLDISPLAY

JNBP1.1,SETGOUT

JNBP1.2,GADDMINTUE

AJMPSETG11

GADDMINTUE:MOVR7,61H

LCALLADD1

MOV61H,A

CJNEA,#6OH,GADDMINTUE1

MOV61H,#OOH

GADDMINTUEkMOVDS1302_ADDR,#82H

MOVDS1302_DATA,61H

CALLWRITE

MOVR0,61H

LCALLDIVIDE

MOV72H,R1

MOV42H,R1

MOV73H,R2

MOV43H,R2

WAITT6:LCALLDISPLAY

JNBP1.2,WAITT6

AJMPSETG11

SETGOUT:LCALLDISPLAY

JNBP1.1,SETGOUT

LCALLGENGXIAN

MOVDS1302_ADDR,#80H

MOVDS1302_DATA,#00H

LCALLWRITE

MOVDS1302_ADDR,#8EH

MOVDS1302_DATA,#80H

LCALLWRITE

CLR08H

CLR09H

CLROAH

CLROBH

CLROCH

CLRODH

CLROEH

CLROFH

CLRET1

CLRTRI

UMPMAIN1

INTT1:PUSHACC

PUSHPSW

GFLASH:CPLOFH

JBOFH,GFLASH1

MOV7CH,4CH

MOV7BH,4BH

MOV7AH,4AH

MOV79H,49H

MOV78H,48H

MOV77H,47H

MOV76H,46H

MOV75H,45H

MOV74H,44H

MOV73H,43H

MOV72H,42H

MOV71H,41H

MOV70H,40H

GFLASHOUT:POPPSW

POPACC

RETI

GFLASH1:JB0AH.GFLASH2

MOV7CH,#0AH

MOV7BH,#0AH

AJMPGFLASHOUT

GFLASH2:JB0BH,GFLASH3

MOV7AH,#0AH

MOV79H,#0AH

AJMPGFLASHOUT

GFLASH3:JB0CH,GFLASH4

MOV77H,#0AH

MOV76H,#0AH

AJMPGFLASHOUT

GFLASH4:JB0DH,GFLASH5

MOV78H,#0AH

AJMPGFLASHOUT

GFLASH5:JB0EH,GFLASH6

MOV75H,#0AH

MOV74H,#0AH

AJMPGFLASHOUT

GFLASH6:MOV73H,#0AH

MOV72H,#0AH

AJMPGFLASHOUT

ADD1:MOVA,R7

ADDA,#01H

DAA

RET

DIVIDE:MOVA,RO

ANLA,#0FH

MOVRI,A

MOVA,RO

SWAPA

ANLA,#0FH

MOVR2,A

RET

WRITE:CLRSCLK

NOP

SETBRST

NOP

MOVA,DS1302_ADDR

MOVR4,#8

WRITE1:RRCA

NOP

NOP

CLRSCLK

NOP

NOP

NOP

MOVIO,C

NOP

NOP

NOP

SETBSCLK

NOP

NOP

DJNZREWRITE1

CLRSCLK

NOP

MOVA,DS1302_DATA

MOVR4,#8

WRITE2:RRCA

NOP

CLRSCLK

NOP

NOP

MOVIO,C

NOP

NOP

NOP

SETBSCLK

NOP

NOP

DJNZR4,WRITE2

CLRRST

RET

READ:CLRSCLK

NOP

NOP

SETBRST

NOP

MOVA,DS1302_ADDR

MOVR4,#8

READ1:RRCA

NOP

MOVIO,C

NOP

NOP

NOP

SETBSCLK

NOP

NOP

NOP

CLRSCLK

NOP

NOP

DJNZR4,READ1

MOVR4,#8

READ2:CLRSCLK

NOP

NOP

NOP

MOVCJO

NOP

NOP

NOP

NOP

NOP

RRCA

NOP

NOP

NOP

NOP

SETBSCLK

NOP

DJNZR4,READ2

MOVDS1302_DATA,A

CLRRST

RET

BCD_10:MOVA,RO

ANLA,#0FH

MOVRI,A

MOVA,RO

SWAPA

ANLA,#0FH

MOVB,#10

MULAB

ADDA,RI

MOVRO,A

RET

CHECKMONTH:LCALLBCD_10

MOVA,RO

MOVB,#04

MULAB

MOVRI,A

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVR7,A

INCRI

MOVA,RI

MOVCA,@A+DPTR

MOVR6,A

INCRI

MOVA,RI

MOVCA,@A+DPTR

溫馨提示

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