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

下載本文檔

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

文檔簡介

1、基于單片機(jī)萬年歷設(shè)計(jì)摘要:本文介紹了基于STC89C52單片機(jī)的多功能電子萬年歷的硬件結(jié)構(gòu)和軟硬件設(shè)計(jì)方法。本設(shè)計(jì)由數(shù)據(jù)顯示模塊、溫度采集模塊、時(shí)間處理模塊和調(diào)整設(shè)置模塊四個(gè)模塊組成。系統(tǒng)以STC89C52單片機(jī)為控制器,以串行時(shí)鐘日歷芯片DS1302記錄日歷和時(shí)間,它可以對年、月、日、時(shí)、分、秒進(jìn)行計(jì)時(shí),還具有閏年補(bǔ)償?shù)榷喾N功能。溫度采集選用DS18B20芯片,萬年歷采用直觀的數(shù)字顯示,數(shù)據(jù)顯示采用1602A液晶顯示模塊,可以在LCD上同時(shí)顯示年、月、日、周日、時(shí)、分、秒,還具有時(shí)間校準(zhǔn)等功能。此萬年歷具有讀取方便、顯示直觀、功能多樣、電路簡潔、成本低廉等諸多優(yōu)點(diǎn),具有廣闊的市場前景。關(guān)鍵字

2、:萬年歷 溫度計(jì) 液晶顯示0 前言隨著科技的快速發(fā)展,時(shí)間的流逝,從觀太陽、擺鐘到現(xiàn)在電子鐘,人類不斷研究,不斷創(chuàng)新紀(jì)錄。它可以對年、月、日、時(shí)、分、秒進(jìn)行計(jì)時(shí),還具有閏年補(bǔ)償?shù)榷喾N功能,而且DS1302的使用壽命長,誤差小。對于數(shù)字電子萬年歷采用直觀的數(shù)字顯示,可以同時(shí)顯示年、月、日、時(shí)、分、秒和溫度等信息,還具有時(shí)間校準(zhǔn)等功能。該電路采用STC89C52單片機(jī)作為核心,功耗小,能在3V的低壓工作,電壓可選用35V電壓供電。此萬年歷具有讀取方便、顯示直觀、功能多樣、電路簡潔、成本低廉等諸多優(yōu)點(diǎn),符合電子儀器儀表的發(fā)展趨勢,具有廣闊的市場前景。1 總體方案設(shè)計(jì)單片機(jī)電子萬年歷的制作有多種方法,

3、可供選擇的器件和運(yùn)用的技術(shù)也有很多種。所以,系統(tǒng)的總體設(shè)計(jì)方案應(yīng)在滿足系統(tǒng)功能的前提下,充分考慮系統(tǒng)使用的環(huán)境,所選的結(jié)構(gòu)要簡單使用、易于實(shí)現(xiàn),器件的選用著眼于合適的參數(shù)、穩(wěn)定的性能、較低的功耗以及低廉的成本。系統(tǒng)的功能往往決定了系統(tǒng)采用的結(jié)構(gòu),經(jīng)過成本,性能,功耗等多方面的考慮決定用三個(gè)8位74LS164串行接口外接LCD顯示器,RESPACK-8對單片機(jī)STC89C52進(jìn)行供電,時(shí)間芯片DS1302連接單片機(jī)STC89C52。從而實(shí)現(xiàn)電子萬年歷的功能。按照系統(tǒng)設(shè)計(jì)的要求,初步確定系統(tǒng)由電源模塊、時(shí)鐘模塊、顯示模塊、鍵盤接口模塊、溫度測量模塊和鬧鐘模塊共六個(gè)模塊組成,電路系統(tǒng)構(gòu)成框圖如圖1所

4、示。鬧鐘模塊獨(dú)立按鍵顯示模塊始終模塊STC89C52溫度模塊電源模塊 圖1 硬件電路框圖2 硬件電路設(shè)計(jì)2.1 單片機(jī)的選擇2.1.1 51單片機(jī)及12單片機(jī)結(jié)構(gòu)及功能單片機(jī)又稱單片微控制器,可以完成復(fù)雜的運(yùn)算、邏輯控制、通信等功能。80C51單片機(jī)的時(shí)鐘信號用來提供單片機(jī)內(nèi)各種位操作時(shí)間基準(zhǔn),80C52單片機(jī)的時(shí)鐘信號。通常有兩種電路形式:內(nèi)部震蕩方式和外部震蕩方式。由于80C52的系統(tǒng)性能滿足系統(tǒng)數(shù)據(jù)采集及時(shí)間精度的要求,而且產(chǎn)品產(chǎn)量豐富來源廣,應(yīng)用也很成熟,故采用來作為控制核心。單片機(jī)系統(tǒng)是實(shí)現(xiàn)環(huán)境電壓多路采集功能的核心模塊。每次選通一路通道信號進(jìn)行模擬量轉(zhuǎn)換數(shù)字量和輸出允許。STC12

5、C5A60AD/S2系列帶A/D轉(zhuǎn)換的單片機(jī)的A/D轉(zhuǎn)換口在P1口,上電復(fù)位后P1口為弱上拉型IO口,用戶可以通過軟件設(shè)置將8路中的任何一路設(shè)置為A/D轉(zhuǎn)換,不須作為A/D使用的口可繼續(xù)作為IO口使用。STC12C5A60AD/S2系列單片機(jī)與89C52單片機(jī)最小系統(tǒng)相同,而功能上較51單片機(jī)相比更為強(qiáng)大。單片機(jī)最小系統(tǒng)電路如圖2所示。圖2 單片機(jī)最小系統(tǒng)2.1.2時(shí)鐘電路 89C51系列單片機(jī)的時(shí)鐘信號通常有內(nèi)部振蕩和外部振蕩方式。本最小系統(tǒng)采用外部晶振電路,利用11.0592MHZ的晶體振蕩器和兩個(gè)30pF的電容組成。其中晶體振蕩器起振蕩作用,兩電容起到去耦合的作用,具體設(shè)計(jì)圖如圖3所示:

6、圖3 時(shí)鐘電路2.1.3復(fù)位電路本系統(tǒng)的復(fù)位電路是采用按鍵復(fù)位的電路,復(fù)位輸入引腳RET為其提供了初始化的手段。當(dāng)其ALE及PSEN兩引腳輸出高電平,RET引腳高電平到時(shí),單片機(jī)復(fù)位。按下按鈕,則直接把+5V加到了RET端從而復(fù)位稱為手動復(fù)位。復(fù)位后,P0到P3并行I/O口全為高電平,其它寄存器全部清零,只有SBUF寄存器狀態(tài)不確定。系統(tǒng)復(fù)位電路如圖4所示。圖4 復(fù)位電路2.2時(shí)鐘芯片DS1302接口設(shè)計(jì)與性能分析2.2.1DS1302性能簡介DS1302是Dallas公司生產(chǎn)的一種實(shí)時(shí)時(shí)鐘芯片。它通過串行方式與單片機(jī)進(jìn)行數(shù)據(jù)傳送,能夠向單片機(jī)提供包括秒、分、時(shí)、日、月、年等在內(nèi)的實(shí)時(shí)時(shí)間信息

7、,并可對月末日期、閏年天數(shù)自動進(jìn)行調(diào)整;它還擁有用于主電源和備份電源的雙電源引腳,在主電源關(guān)閉的情況下,也能保持時(shí)鐘的連續(xù)運(yùn)行。另外,它還能提供31字節(jié)的用于高速數(shù)據(jù)暫存的RAM。DS1302時(shí)鐘芯片內(nèi)主要包括移位寄存器、控制邏輯電路、振蕩器。DS1302與單片機(jī)系統(tǒng)的數(shù)據(jù)傳送依靠RST,I/O,SCLK三根端線即可完成。其工作過程可概括為:首先系統(tǒng)RST引腳驅(qū)動至高電平,然后在SCLK時(shí)鐘脈沖的作用下,通過I/O引腳向DS1302輸入地址/命令字節(jié),隨后再在SCLK時(shí)鐘脈沖的配合下,從I/O引腳寫入或讀出相應(yīng)的數(shù)據(jù)字節(jié)。因此,其與單片機(jī)之間的數(shù)據(jù)傳送是十分容易實(shí)現(xiàn)的,DS1302的引腳排列及

8、內(nèi)部結(jié)構(gòu)圖如圖4:DS1302引腳說明: X1,X2 32.768kHz晶振引腳GND 地線RST 復(fù)位端I/O 數(shù)據(jù)輸入/輸出端口SCLK 串行時(shí)鐘端口VCC1 慢速充電引腳VCC2 電源引腳 圖4 DS1302的引腳2.2.2DS1302接口電路設(shè)計(jì)1時(shí)鐘芯片DS1302的接口電路及工作原理:圖5 DS1302與MCU接口電路圖5為DS1302的接口電路,其中Vcc1為后備電源,Vcc2為主電源。VCC1在單電源與電池供電的系統(tǒng)中提供低電源并提供低功率的電池備份。VCC2在雙電源系統(tǒng)中提供主電源,在這種運(yùn)用方式中VCC1連接到備份電源,以便在沒有主電源的情況下能保存時(shí)間信息以及數(shù)據(jù)。DS1

9、302由VCC1或VCC2 兩者中較大者供電。當(dāng)VCC2大于VCC1+0.2V時(shí),VCC2給DS1302供電。當(dāng)VCC2小于VCC1時(shí),DS1302由VCC1供電。DS1302在每次進(jìn)行讀、寫程序前都必須初始化,先把SCLK端置 “0”,接著把RST端置“1”,最后才給予SCLK脈沖;讀/寫時(shí)序如下圖6所示。表-1為DS1302的控制字,此控制字的位7必須置1,若為0則不能對DS1302進(jìn)行讀寫數(shù)據(jù)。對于位6,若對時(shí)間進(jìn)行讀/寫時(shí),CK=0,對程序進(jìn)行讀/寫時(shí)RAM=1。位1至位5指操作單元的地址。位0是讀/寫操作位,進(jìn)行讀操作時(shí),該位為1;進(jìn)行寫操作時(shí),該位為0。控制字節(jié)總是從最低位開始輸入

10、/輸出的。表-2為DS1302的日歷、時(shí)間寄存器內(nèi)容:“CH”是時(shí)鐘暫停標(biāo)志位,當(dāng)該位為1時(shí),時(shí)鐘振蕩器停止,DS1302處于低功耗狀態(tài);當(dāng)該位為0時(shí),時(shí)鐘開始運(yùn)行?!癢P”是寫保護(hù)位,在任何的對時(shí)鐘和RAM的寫操作之前,“WP”必須為0。當(dāng)“WP”為1時(shí),寫保護(hù)位防止對任一寄存器的寫操作。2、DS1302的控制字DS1302的控制字如表2所示。控制字節(jié)的高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入DS1302中,位6如果0,則表示存取日歷時(shí)鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為1表示進(jìn)行讀操作,為0表示進(jìn)行寫操作??刂谱止?jié)總是從最低

11、位開始輸出。表2 DS1302的控制字格式 1 RAM/CKA4A3A2A1A0RD/WR3、數(shù)據(jù)輸入輸出(I/O)在控制指令字輸入后的下一個(gè)SCLK時(shí)鐘的上升沿時(shí),數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個(gè)SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時(shí)從低位0位到高位7。如下圖6所示。圖6 DS1302讀/寫時(shí)序圖4、DS1302的寄存器AMDS1302有12個(gè)寄存器,其中有7個(gè)寄存器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式,其日歷、時(shí)間寄存器及其控制字見表3。 表3 DS1302的日歷、時(shí)間寄存器寫寄存器讀寄存器Bit7Bit6Bi

12、t5Bit7Bit3Bit2Bit1Bit080H81HCH10秒秒82H83H10分分84H85H12/010時(shí)時(shí)/PM86H87H0010 日日88H89H00010月月8AH8BH00000星期8CH8DH 10年年8EH8FHWP0000000此外,DS1302 還有年份寄存器、控制寄存器、充電寄存器、時(shí)鐘突發(fā)寄存器及與RAM相關(guān)的寄存器等。時(shí)鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內(nèi)容。 DS1302與RAM相關(guān)的寄存器分為兩類:一類是單個(gè)RAM單元,共31個(gè),每個(gè)單元組態(tài)為一個(gè)8位的字節(jié),其命令控制字為C0HFDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的

13、RAM寄存器,此方式下可一次性讀寫所有的RAM的31個(gè)字節(jié),命令控制字為FEH(寫)、FFH(讀)。2.3溫度芯片DS18B20接口設(shè)計(jì)與性能分析2.3.1 DS18B20性能簡介1.DS18B20的主要特性DS18B20溫度傳感器是美國DALLAS半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等元件相比,它能直接讀出被測溫度,并且可根據(jù)實(shí)際要求通過簡單的編程實(shí)現(xiàn)9-12位的數(shù)字值讀數(shù)方式。現(xiàn)場溫度直接以"一線總線"的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場溫度測量,如:環(huán)境控制、設(shè)備或過程控制、測溫類消費(fèi)電子產(chǎn)品等。與前一代產(chǎn)品不同,新

14、的產(chǎn)品支持3V5.5V的電壓范圍,使系統(tǒng)設(shè)計(jì)更靈活、方便。其性能特點(diǎn)可歸納如下:1獨(dú)特的單線接口僅需要一個(gè)端口引腳進(jìn)行通信;2測溫范圍在-55到125,分辨率最大可達(dá)0.0625;3采用了3線制與單片機(jī)相連,減少了外部硬件電路;4零待機(jī)功耗;5可通過數(shù)據(jù)線供電,電壓范圍在3.0V-5.5V;6用戶可定義的非易失性溫度報(bào)警設(shè)置;7報(bào)警搜索命令識別并標(biāo)志超過程序限定溫度(溫度報(bào)警條件)的器件; 8負(fù)電壓特性,電源極性接反時(shí),溫度計(jì)不會因發(fā)熱燒毀,只是不能正常工作。2.DS18B20工作原理    DS18B20的讀寫時(shí)序和測溫原理與DS1820相同,只是得到的溫度值的

15、位數(shù)因分辨率不同而不同,且溫度轉(zhuǎn)換時(shí)的延時(shí)時(shí)間由2s減為750ms。 DS18B20測溫原理如圖5所示。圖中低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用于產(chǎn)生固定頻率的脈沖信號送給計(jì)數(shù)器1。高溫度系數(shù)晶振隨溫度變化其振蕩率明顯改變,所產(chǎn)生的信號作為計(jì)數(shù)器2的脈沖輸入。計(jì)數(shù)器1和溫度寄存器被預(yù)置在55所對應(yīng)的一個(gè)基數(shù)值。計(jì)數(shù)器1對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行減法計(jì)數(shù),當(dāng)計(jì)數(shù)器1的預(yù)置值減到0時(shí),溫度寄存器的值將加1,計(jì)數(shù)器1的預(yù)置將重新被裝入,計(jì)數(shù)器1重新開始對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行計(jì)數(shù),如此循環(huán)直到計(jì)數(shù)器2計(jì)數(shù)到0時(shí),停止溫度寄存器值的累加,此時(shí)溫度寄存器中的數(shù)值即為所測溫度。圖7

16、中的斜率累加器用于補(bǔ)償和修正測溫過程中的非線性,其輸出用于修正計(jì)數(shù)器1的預(yù)置值。LSB位置/清除增加計(jì)數(shù)器1斜率累加器計(jì)數(shù)比較器溫度寄存器減到0預(yù)置計(jì)數(shù)器2減到0停止預(yù)置低溫度系數(shù)晶振高溫度系數(shù)晶振圖7 DS18B20測溫原理2.3.2 DS18B20接口電路設(shè)計(jì) 如8圖所示,該系統(tǒng)中采用數(shù)字式溫度傳感器DS18B20,具有測量精度高,電路連接簡單特點(diǎn),此類傳感器僅需要一條數(shù)據(jù)線進(jìn)行數(shù)據(jù)傳輸,用P3.7與DS18B20的DQ口連接,Vcc接電源,GND接地。 圖8溫度傳感器DS18B20接口電路2.3.3 DS18B20的工作時(shí)序 1、復(fù)位時(shí)序圖圖9復(fù)位時(shí)序圖2、讀時(shí)序圖圖10讀時(shí)序圖3、寫時(shí)

17、序圖圖11 寫時(shí)序圖 4、工作時(shí)序 1)總線時(shí)序圖12 總線時(shí)序2)寫周期時(shí)序圖13寫周期時(shí)序3)起始/停止時(shí)序圖14 起始/停止時(shí)序4)應(yīng)答時(shí)序圖15 應(yīng)答時(shí)序5)立即地址讀時(shí)序圖16 立即地址讀時(shí)序2.4 LCD顯示模塊2.4.1LCM1602的特性及使用說明1.LCM1602的接口信號說明如表4:表4 LCM1602的接口信號編號引腳符號功能說明編號引腳符號功能說明1VSS電源地9D2DATA I/O2VDD電源正極10D3DATA I/O3VL液晶顯示偏壓信號11D4DATA I/O4RS數(shù)據(jù)/命令選擇端(H/L)12D5DATA I/O5R/W讀/寫選擇端(H/L)13D6DATA

18、I/O6E使能信號14D7DATA I/O7D0DATA I/O15BLA背光正極8D1DATA I/O16BLK背光負(fù)極2、基本操作時(shí)序如下:1)讀狀態(tài):RS=L,RW=H,E=H2)寫指令:RS=L,RW=L,D0D7=指令碼,E=高脈沖3)讀數(shù)據(jù):RS=H,RW=H,E=H4)寫數(shù)據(jù):RS=H,RW=L,D0D7=數(shù)據(jù),E=高脈沖3、初始化設(shè)置 1)顯示模式設(shè)置如表5:表5顯示模式設(shè)置指令碼功能00111000設(shè)置16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口2) 顯示開/關(guān)及光標(biāo)設(shè)置如表6: 表6 顯示開/關(guān)及光標(biāo)設(shè)置指令碼功能00001DCBD=1開顯示;D=0關(guān)顯示C=1顯示光標(biāo);C=0不

19、顯示光標(biāo)B=1光標(biāo)閃爍;B=0光標(biāo)不顯示000001NSN=1當(dāng)讀或?qū)懸粋€(gè)字符后地址指針加一,且光標(biāo)加一N=0當(dāng)讀或?qū)懸粋€(gè)字符后地址指針減一,且光標(biāo)減一S=1當(dāng)寫一個(gè)字符,整屏顯示左移(N=1)2.4.2LCM1602與MCU的接口電路 LCD的D0D7分別接單片機(jī)的的P2口,作為數(shù)據(jù)線,因?yàn)镻0口內(nèi)部沒有上拉電阻,所以外部另外加上10K的上拉電阻;P1.0P1.2分別接LCD的RS、RW、E三個(gè)控制管腳;RV1用來調(diào)節(jié)LCD的顯示灰度;BLK、BLA為背光的陰極和陽極,接上相應(yīng)電平即點(diǎn)亮背光燈。2.5按鍵模塊設(shè)計(jì) 本系統(tǒng)用到了5個(gè)按鍵,其中一個(gè)用作系統(tǒng)手動復(fù)位,另外4個(gè)采用獨(dú)立按鍵,該種接法

20、查詢簡單,程序處理簡單,可節(jié)省CPU資源,按鍵電路如圖17所示,4個(gè)獨(dú)立按鍵分別與STC89C52的P3.4、P3.5、P3.6、P3.7接口相連。圖17 按鍵電路 對以上4個(gè)按鍵作簡要說明:S4SET 鍵,S3UP鍵,S2DOWN鍵,S5OUT/STOP鍵。SET 鍵:按下SET鍵進(jìn)入時(shí)間校準(zhǔn)狀態(tài),按一下進(jìn)入秒調(diào)整,兩下分調(diào)整,依此類推可進(jìn)行各年月日,時(shí)分秒以及星期的校準(zhǔn);UP鍵:當(dāng)SET鍵按下時(shí),UP進(jìn)行SET選定項(xiàng)(如:小時(shí))的加操作;DOWN鍵:當(dāng)SET鍵按下時(shí),DOWN進(jìn)行SET選定項(xiàng)(如:小時(shí))的減操作;OUT鍵:當(dāng)OUT鍵按下時(shí),此鍵功能為退出校準(zhǔn)功能,進(jìn)入下一模式,顯示溫度值和

21、上下限的溫度值。2.6復(fù)位電路的設(shè)計(jì) 當(dāng)STC89C52單片機(jī)的復(fù)位引腳RST(全稱RESET)出現(xiàn)2個(gè)機(jī)器周期以上的高電平時(shí),單片機(jī)就完成了復(fù)位操作。如果RST持續(xù)為高電平,單片機(jī)就處于循環(huán)復(fù)位狀態(tài),而無法執(zhí)行程序。因此要求單片機(jī)復(fù)位后能脫離復(fù)位狀態(tài)。而本系統(tǒng)選用的是12MHz的晶振,因此一個(gè)機(jī)器周期為1s,那么復(fù)位脈沖寬度最小應(yīng)為2s。在實(shí)際應(yīng)用系統(tǒng)中,考慮到電源的穩(wěn)定時(shí)間,參數(shù)漂移,晶振穩(wěn)定時(shí)間以及復(fù)位的可靠性等因素,必須有足夠的余量。 根據(jù)應(yīng)用的要求,復(fù)位操作通常有兩種基本形式:上電復(fù)位、手動復(fù)位。上電復(fù)位要求接通電源后,自動實(shí)現(xiàn)復(fù)位操作。STC89C52單片機(jī)的上電復(fù)位POR(Pow

22、er On Reset)實(shí)質(zhì)上就是上電延時(shí)復(fù)位,也就是在上電延時(shí)期間把單片機(jī)鎖定在復(fù)位狀態(tài)上。在單片機(jī)每次初始加電時(shí),首先投入工作的功能部件是復(fù)位電路。復(fù)位電路把單片機(jī)鎖定在復(fù)位狀態(tài)上并且維持一個(gè)延時(shí)(記作TRST),以便給予電源電壓從上升到穩(wěn)定的一個(gè)等待時(shí)間;在電源電壓穩(wěn)定之后,再插入一個(gè)延時(shí),給予時(shí)鐘振蕩器從起振到穩(wěn)定的一個(gè)等待時(shí)間;在單片機(jī)開始進(jìn)入運(yùn)行狀態(tài)之前,還要至少推遲2個(gè)機(jī)器周期的延時(shí)。 本設(shè)計(jì)采用上電且開關(guān)復(fù)位電路,如圖18所示上電后,由于電容充電,使RST持續(xù)一段高電平時(shí)間。當(dāng)單片機(jī)已在運(yùn)行之中時(shí),按下復(fù)位鍵也能使RST持續(xù)一段時(shí)間的高電平,從而實(shí)現(xiàn)上電且開關(guān)復(fù)位的操作。通常選

23、擇C=1030F,本設(shè)計(jì)采用的電容值為10F的電容和電阻為4.7K的電阻。圖18 復(fù)位電路3 系統(tǒng)的軟件設(shè)計(jì)電子萬年歷的功能是在程序控制下實(shí)現(xiàn)的。該系統(tǒng)的軟件設(shè)計(jì)方法與硬件設(shè)計(jì)相對應(yīng),按整體功能分成多個(gè)不同的程序模塊,分別進(jìn)行設(shè)計(jì)、編程和調(diào)試,最后通過主程序?qū)⒏鞒绦蚰K連接起來。這樣有利于程序修改和調(diào)試,增強(qiáng)了程序的可移植性。本系統(tǒng)的軟件部分主要要進(jìn)行公歷計(jì)算程序設(shè)計(jì),溫度測量程序設(shè)計(jì),按鍵的掃描輸入等。程序開始運(yùn)行后首先要進(jìn)行初始化,把單片機(jī)的各引腳的狀態(tài)按程序里面的初始化命令進(jìn)行初始化,初始化完成后運(yùn)行溫度測量程序,讀取出溫度傳感器測量出來的溫度,然后運(yùn)行公歷計(jì)算程序,得到公歷的時(shí)間、日期

24、信息,再運(yùn)行按鍵掃描程序,檢測有無按鍵按下,如果沒有按鍵按下則直接調(diào)用節(jié)日計(jì)算程序,根據(jù)得到的公歷日期信息計(jì)算出節(jié)日,如果有按鍵按下則更新按鍵修改后的變量后送給節(jié)日計(jì)算程序,由節(jié)日計(jì)算程序根據(jù)修改后的變量計(jì)算出對應(yīng)的節(jié)假日,計(jì)算完成后運(yùn)行顯示程序,顯示程序?qū)⒌玫降臏囟葦?shù)據(jù)、公歷信息、節(jié)假日信息送給對應(yīng)的數(shù)碼管讓其顯示。3.1主程序流程圖的設(shè)計(jì)主程序流程圖:開始DS1302初始化設(shè)置DS1302讀年月日星期時(shí)分秒將讀取的數(shù)據(jù)處理后送液晶屏顯示返回圖19 主程序流程圖3.2 程序設(shè)計(jì)3.2.1 DS1302讀寫程序設(shè)計(jì)本系統(tǒng)的時(shí)間讀取主要來源于單片機(jī)對DS1302的操作,在硬件上時(shí)鐘芯片DS130

25、2與單片機(jī)的連接需要三條線,即SCLK(7)、I/O(6)、RST(5),具體連接圖見系統(tǒng)硬件設(shè)計(jì)原理圖。讀取寫程序設(shè)計(jì)如下:sbit clk = P13; /ds1302時(shí)鐘線定義sbit io = P14; /數(shù)據(jù)線sbit rst = P15; /復(fù)位線/秒 分 時(shí) 日 月 年 星期 uchar code write_add=0x80,0x82,0x84,0x86,0x88,0x8c,0x8a; /寫地址uchar code read_add =0x81,0x83,0x85,0x87,0x89,0x8d,0x8b; /讀地址uchar code init_ds =0x58,0x00,0x

26、00,0x01,0x01,0x13,0x1; uchar miao,fen,shi,ri,yue,week,nian;uchar i;uchar fen1=0x11,shi1=0; /兩個(gè)鬧鐘變量的定義bit open1;/*寫一個(gè)數(shù)據(jù)到對應(yīng)的地址里*/void write_ds1302(uchar add,uchar dat)rst = 1; /把復(fù)位線拿高for(i=0;i<8;i+) /低位在前clk = 0; /時(shí)鐘線拿低開始寫數(shù)據(jù)io = add & 0x01; add >>= 1; /把地址右移一位clk = 1; /時(shí)鐘線拿高for(i=0;i<8

27、;i+)clk = 0; /時(shí)鐘線拿低開始寫數(shù)據(jù)io = dat & 0x01;dat >>= 1; /把數(shù)據(jù)右移一位clk = 1; /時(shí)鐘線拿高rst = 0; /復(fù)位線合低clk = 0;io = 0;/*從對應(yīng)的地址讀一個(gè)數(shù)據(jù)出來*/uchar read_ds1302(uchar add)uchar value,i;rst = 1; /把復(fù)位線拿高for(i=0;i<8;i+) /低位在前clk = 0; /時(shí)鐘線拿低開始寫數(shù)據(jù)io = add & 0x01; add >>= 1; /把地址右移一位clk = 1; /時(shí)鐘線拿高for(i=

28、0;i<8;i+)clk = 0; /時(shí)鐘線拿低開始讀數(shù)據(jù)value >>= 1;if(io = 1)value |= 0x80;clk = 1; /時(shí)鐘線拿高rst = 0; /復(fù)位線合低clk = 0;io = 0;return value; /返回讀出來的數(shù)據(jù)/*把要的時(shí)間 年月日 都讀出來*/void read_time()miao = read_ds1302(read_add0);/讀秒fen = read_ds1302(read_add1);/讀分shi = read_ds1302(read_add2);/讀時(shí)ri = read_ds1302(read_add3)

29、;/讀日yue = read_ds1302(read_add4);/讀月nian = read_ds1302(read_add5);/讀年week = read_ds1302(read_add6);/讀星期Conversion(0,nian,yue,ri);/農(nóng)歷轉(zhuǎn)換 n_nian = year_moon ;n_yue = month_moon ;n_ri = day_moon ;/*把要寫的時(shí)間 年月日 都寫入ds1302里*/void write_time()write_ds1302(0x8e,0x00);/打開寫保護(hù)write_ds1302(write_add0,miao);/寫秒wri

30、te_ds1302(write_add1,fen);/寫分write_ds1302(write_add2,shi);/寫時(shí)write_ds1302(write_add3,ri);/寫日write_ds1302(write_add4,yue);/寫月write_ds1302(write_add5,nian);/寫星期write_ds1302(write_add6,week);/寫年write_ds1302(0x8e,0x80);/關(guān)閉寫保護(hù)/*把數(shù)據(jù)保存到ds1302 RAM中*0-31*/void write_ds1302ram(uchar add,uchar dat)add <<

31、= 1; /地址是從第二位開始的add &= 0xfe; /把最低位清零 是寫的命令add |= 0xc0; /地址最高兩位為 1 write_ds1302(0x8e,0x00);write_ds1302(add,dat);write_ds1302(0x8e,0x80);/*把數(shù)據(jù)從ds1302 RAM讀出來*0-31*/uchar read_ds1302ram(uchar add)add <<= 1; /地址是從第二位開始的add |= 0x01; /把最高位置1 是讀命令add |= 0xc0; /地址最高兩位為 1 return(read_ds1302(add);/*

32、初始化ds1302時(shí)間*/void init_ds1302()uchar i;rst = 0;/第一次讀寫數(shù)據(jù)時(shí)要把IO品拿低clk = 0;io = 0;i = read_ds1302ram(30); if(i != 3)i = 3;write_ds1302ram(30,i); /4050 4100 3080write_ds1302(0x8e,0x00); /打開寫保護(hù)for(i=0;i<7;i+)write_ds1302(write_addi,init_dsi);/把最高位值0 允許ds1302工作write_ds1302(0x8e,0x80);/關(guān)寫保護(hù)DS1302與微處理器進(jìn)行數(shù)

33、據(jù)交換時(shí),首先由微處理器向電路發(fā)送命令字節(jié),命令字節(jié)最高位MSB(D7)必須為邏輯 1,如果D7=0,則禁止寫DS1302,即寫保護(hù);D6=0,指定時(shí)鐘數(shù)據(jù),D6=1,指定RAM數(shù)據(jù);D5D1指定輸入或輸出的特定寄存器;最低位LSB(D0)為邏輯0,指定寫操作(輸入),D0=1,指定讀操作(輸出) 。3.2.2 溫度程序設(shè)計(jì)單總線上最基本的操作有初始化、寫和讀3種,所有其它的操作都由這3種基本操作組合而成,初始化用于對總線上的器件進(jìn)行狀態(tài)復(fù)位,寫用于主節(jié)點(diǎn)向總線上寫入一位數(shù)據(jù),讀用于主節(jié)點(diǎn)從總線上讀取一位數(shù)據(jù)。在這3種操作中,只有寫操作是單向的,初始化操作和讀操作都是雙向的。具體程序設(shè)計(jì)如下:

34、byte ow_reset(void) byte presence; DQ = 0; /拉低總線 delay(29); / 保持 480us DQ = 1; / 釋放總線 delay(3); / 等待回復(fù) presence = DQ; / 讀取信號 delay(25); / 等待結(jié)束信號 return(presence); / 返回 0:正常 1:不存在 /從 1-wire 總線上讀取一個(gè)字節(jié)byte read_byte(void) byte i; byte value = 0; for (i=8;i>0;i-) value>>=1; DQ = 0; DQ = 1; dela

35、y(1); if(DQ)value|=0x80; delay(6); return(value);/向 1-WIRE 總線上寫一個(gè)字節(jié)void write_byte(char val) byte i; for (i=8; i>0; i-) / 一次寫一位 DQ = 0; / DQ = val&0x01; delay(5); / DQ = 1; val=val/2; delay(5);4 調(diào)試分析在protues上進(jìn)行仿真實(shí)驗(yàn)。首先使用Keil uVsion 2將編寫完成的程序編譯生成HEX文件,將HEX文件燒錄到兩片單片機(jī)中,進(jìn)行仿真實(shí)驗(yàn),結(jié)果如圖20所示。圖20 仿真圖5 結(jié)論

36、在整個(gè)設(shè)計(jì)過程中,硬件方面主要設(shè)計(jì)了STC89C52單片機(jī)的最小系統(tǒng)、DS1302接口電路、DS18B20接口電路、鬧鐘及LCD顯示;軟件方面借助各個(gè)渠道的資料,主要設(shè)計(jì)了陽歷數(shù)據(jù)讀取程序、陽歷轉(zhuǎn)陰歷程序、溫度采集程序、鬧鈴程序以及LCD顯示程序;系統(tǒng)的調(diào)試主要是通過一塊STC89C52開發(fā)板,再借助于Keil、STC以及少許自己搭建的外圍電路實(shí)現(xiàn)的;再此過程中,分步調(diào)試時(shí)顯示出了陽歷的日期及時(shí)間,還有實(shí)時(shí)溫度,集中調(diào)試時(shí)沒有達(dá)到預(yù)期效果。此萬年歷具有讀顯示直觀、功能多樣、電路簡潔、成本低廉等諸多優(yōu)點(diǎn),符合電子儀器儀表的發(fā)展趨勢,具有廣闊的市場前景。在整個(gè)設(shè)計(jì)過程中學(xué)到了許多沒學(xué)到的知識,在電路焊接時(shí)雖然沒什么大問題,但從中也知道了焊接在整個(gè)作品中的重要性,電路工程量大,不能心急,一個(gè)個(gè)慢慢來不能急于求成。反而達(dá)到事半功倍的效果。對電路的設(shè)計(jì)、布局要先有一個(gè)好的構(gòu)思,才顯得電路板美觀、大方。程序編寫中,由于思路不清晰,開始時(shí)遇到了很多的問題,經(jīng)過靜下心來思考,理清了思路,反而得心應(yīng)手。在此次設(shè)計(jì)中,知道了做事要有一顆平常的心,不要想著走捷徑,一步一腳印。也練就了我的耐心,做什么事都要有耐心。在本次設(shè)計(jì)中學(xué)到了很多很多東西,這是最重要的??傊?,此次畢業(yè)設(shè)計(jì)使我的能力得到了全方位的提高,次設(shè)計(jì)的

溫馨提示

  • 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

提交評論