基于單片機(jī)萬(wàn)年歷設(shè)計(jì).doc
《基于單片機(jī)萬(wàn)年歷設(shè)計(jì).doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《基于單片機(jī)萬(wàn)年歷設(shè)計(jì).doc(26頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
基于單片機(jī)萬(wàn)年歷設(shè)計(jì) 摘要:本文介紹了基于STC89C52單片機(jī)的多功能電子萬(wàn)年歷的硬件結(jié)構(gòu)和軟硬件設(shè)計(jì)方法。本設(shè)計(jì)由數(shù)據(jù)顯示模塊、溫度采集模塊、時(shí)間處理模塊和調(diào)整設(shè)置模塊四個(gè)模塊組成。系統(tǒng)以STC89C52單片機(jī)為控制器,以串行時(shí)鐘日歷芯片DS1302記錄日歷和時(shí)間,它可以對(duì)年、月、日、時(shí)、分、秒進(jìn)行計(jì)時(shí),還具有閏年補(bǔ)償?shù)榷喾N功能。溫度采集選用DS18B20芯片,萬(wàn)年歷采用直觀的數(shù)字顯示,數(shù)據(jù)顯示采用1602A液晶顯示模塊,可以在LCD上同時(shí)顯示年、月、日、周日、時(shí)、分、秒,還具有時(shí)間校準(zhǔn)等功能。此萬(wàn)年歷具有讀取方便、顯示直觀、功能多樣、電路簡(jiǎn)潔、成本低廉等諸多優(yōu)點(diǎn),具有廣闊的市場(chǎng)前景。 關(guān)鍵字:萬(wàn)年歷 溫度計(jì) 液晶顯示 0 前言 隨著科技的快速發(fā)展,時(shí)間的流逝,從觀太陽(yáng)、擺鐘到現(xiàn)在電子鐘,人類不斷研究,不斷創(chuàng)新紀(jì)錄。它可以對(duì)年、月、日、時(shí)、分、秒進(jìn)行計(jì)時(shí),還具有閏年補(bǔ)償?shù)榷喾N功能,而且DS1302的使用壽命長(zhǎng),誤差小。對(duì)于數(shù)字電子萬(wàn)年歷采用直觀的數(shù)字顯示,可以同時(shí)顯示年、月、日、時(shí)、分、秒和溫度等信息,還具有時(shí)間校準(zhǔn)等功能。該電路采用STC89C52單片機(jī)作為核心,功耗小,能在3V的低壓工作,電壓可選用3~5V電壓供電。 此萬(wàn)年歷具有讀取方便、顯示直觀、功能多樣、電路簡(jiǎn)潔、成本低廉等諸多優(yōu)點(diǎn),符合電子儀器儀表的發(fā)展趨勢(shì),具有廣闊的市場(chǎng)前景。 1 總體方案設(shè)計(jì) 單片機(jī)電子萬(wàn)年歷的制作有多種方法,可供選擇的器件和運(yùn)用的技術(shù)也有很多種。所以,系統(tǒng)的總體設(shè)計(jì)方案應(yīng)在滿足系統(tǒng)功能的前提下,充分考慮系統(tǒng)使用的環(huán)境,所選的結(jié)構(gòu)要簡(jiǎn)單使用、易于實(shí)現(xiàn),器件的選用著眼于合適的參數(shù)、穩(wěn)定的性能、較低的功耗以及低廉的成本。 系統(tǒng)的功能往往決定了系統(tǒng)采用的結(jié)構(gòu),經(jīng)過(guò)成本,性能,功耗等多方面的考慮決定用三個(gè)8位74LS164串行接口外接LCD顯示器,RESPACK-8對(duì)單片機(jī)STC89C52進(jìn)行供電,時(shí)間芯片DS1302連接單片機(jī)STC89C52。從而實(shí)現(xiàn)電子萬(wàn)年歷的功能。 按照系統(tǒng)設(shè)計(jì)的要求,初步確定系統(tǒng)由電源模塊、時(shí)鐘模塊、顯示模塊、鍵盤(pán)接口模塊、溫度測(cè)量模塊和鬧鐘模塊共六個(gè)模塊組成,電路系統(tǒng)構(gòu)成框圖如圖1所示。 鬧鐘模塊 獨(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í)鐘信號(hào)用來(lái)提供單片機(jī)內(nèi)各種位操作時(shí)間基準(zhǔn),80C52單片機(jī)的時(shí)鐘信號(hào)。通常有兩種電路形式:內(nèi)部震蕩方式和外部震蕩方式。由于80C52的系統(tǒng)性能滿足系統(tǒng)數(shù)據(jù)采集及時(shí)間精度的要求,而且產(chǎn)品產(chǎn)量豐富來(lái)源廣,應(yīng)用也很成熟,故采用來(lái)作為控制核心。 單片機(jī)系統(tǒng)是實(shí)現(xiàn)環(huán)境電壓多路采集功能的核心模塊。每次選通一路通道信號(hào)進(jìn)行模擬量轉(zhuǎn)換數(shù)字量和輸出允許。STC12C5A60AD/S2系列帶A/D轉(zhuǎn)換的單片機(jī)的A/D轉(zhuǎn)換口在P1口,上電復(fù)位后P1口為弱上拉型IO口,用戶可以通過(guò)軟件設(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í)鐘信號(hào)通常有內(nèi)部振蕩和外部振蕩方式。本最小系統(tǒng)采用外部晶振電路,利用11.0592MHZ的晶體振蕩器和兩個(gè)30pF的電容組成。其中晶體振蕩器起振蕩作用,兩電容起到去耦合的作用,具體設(shè)計(jì)圖如圖3所示: 圖3 時(shí)鐘電路 2.1.3復(fù)位電路 本系統(tǒng)的復(fù)位電路是采用按鍵復(fù)位的電路,復(fù)位輸入引腳RET為其提供了初始化的手段。當(dāng)其ALE及PSEN兩引腳輸出高電平,RET引腳高電平到時(shí),單片機(jī)復(fù)位。按下按鈕,則直接把+5V加到了RET端從而復(fù)位稱為手動(dòng)復(fù)位。復(fù)位后,P0到P3并行I/O口全為高電平,其它寄存器全部清零,只有SBUF寄存器狀態(tài)不確定。系統(tǒng)復(fù)位電路如圖4所示。 圖4 復(fù)位電路 2.2時(shí)鐘芯片DS1302接口設(shè)計(jì)與性能分析 2.2.1DS1302性能簡(jiǎn)介 DS1302是Dallas公司生產(chǎn)的一種實(shí)時(shí)時(shí)鐘芯片。它通過(guò)串行方式與單片機(jī)進(jìn)行數(shù)據(jù)傳送,能夠向單片機(jī)提供包括秒、分、時(shí)、日、月、年等在內(nèi)的實(shí)時(shí)時(shí)間信息,并可對(duì)月末日期、閏年天數(shù)自動(dòng)進(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三根端線即可完成。其工作過(guò)程可概括為:首先系統(tǒng)RST引腳驅(qū)動(dòng)至高電平,然后在SCLK時(shí)鐘脈沖的作用下,通過(guò)I/O引腳向DS1302輸入地址/命令字節(jié),隨后再在SCLK時(shí)鐘脈沖的配合下,從I/O引腳寫(xiě)入或讀出相應(yīng)的數(shù)據(jù)字節(jié)。因此,其與單片機(jī)之間的數(shù)據(jù)傳送是十分容易實(shí)現(xiàn)的,DS1302的引腳排列及內(nèi)部結(jié)構(gòu)圖如圖4: DS1302引腳說(shuō)明: 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連接到備份電源,以便在沒(méi)有主電源的情況下能保存時(shí)間信息以及數(shù)據(jù)。 DS1302由VCC1或VCC2 兩者中較大者供電。當(dāng)VCC2大于VCC1+0.2V時(shí),VCC2給DS1302供電。當(dāng)VCC2小于VCC1時(shí),DS1302由VCC1供電。 DS1302在每次進(jìn)行讀、寫(xiě)程序前都必須初始化,先把SCLK端置 “0”,接著把RST端置“1”,最后才給予SCLK脈沖;讀/寫(xiě)時(shí)序如下圖6所示。表-1為DS1302的控制字,此控制字的位7必須置1,若為0則不能對(duì)DS1302進(jìn)行讀寫(xiě)數(shù)據(jù)。對(duì)于位6,若對(duì)時(shí)間進(jìn)行讀/寫(xiě)時(shí),CK=0,對(duì)程序進(jìn)行讀/寫(xiě)時(shí)RAM=1。位1至位5指操作單元的地址。位0是讀/寫(xiě)操作位,進(jìn)行讀操作時(shí),該位為1;進(jìn)行寫(xiě)操作時(shí),該位為0??刂谱止?jié)總是從最低位開(kāi)始輸入/輸出的。表-2為DS1302的日歷、時(shí)間寄存器內(nèi)容:“CH”是時(shí)鐘暫停標(biāo)志位,當(dāng)該位為1時(shí),時(shí)鐘振蕩器停止,DS1302處于低功耗狀態(tài);當(dāng)該位為0時(shí),時(shí)鐘開(kāi)始運(yùn)行。“WP”是寫(xiě)保護(hù)位,在任何的對(duì)時(shí)鐘和RAM的寫(xiě)操作之前,“WP”必須為0。當(dāng)“WP”為1時(shí),寫(xiě)保護(hù)位防止對(duì)任一寄存器的寫(xiě)操作。 2、DS1302的控制字 DS1302的控制字如表2所示??刂谱止?jié)的高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫(xiě)入DS1302中,位6如果0,則表示存取日歷時(shí)鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為1表示進(jìn)行讀操作,為0表示進(jìn)行寫(xiě)操作??刂谱止?jié)總是從最低位開(kāi)始輸出。 表2 DS1302的控制字格式 1 RAM/CK A4 A3 A2 A1 A0 RD/WR 3、數(shù)據(jù)輸入輸出(I/O) 在控制指令字輸入后的下一個(gè)SCLK時(shí)鐘的上升沿時(shí),數(shù)據(jù)被寫(xiě)入DS1302,數(shù)據(jù)輸入從低位即位0開(kāi)始。同樣,在緊跟8位的控制指令字后的下一個(gè)SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時(shí)從低位0位到高位7。如下圖6所示。 圖6 DS1302讀/寫(xiě)時(shí)序圖 4、DS1302的寄存器AM DS1302有12個(gè)寄存器,其中有7個(gè)寄存器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式,其日歷、時(shí)間寄存器及其控制字見(jiàn)表3。 表3 DS1302的日歷、時(shí)間寄存器 寫(xiě)寄存器 讀寄存器 Bit7 Bit6 Bit5 Bit7 Bit3 Bit2 Bit1 Bit0 80H 81H CH 10秒 秒 82H 83H 10分 分 84H 85H 12/ 0 10 時(shí) 時(shí) /PM 86H 87H 0 0 10 日 日 88H 89H 0 0 0 10月 月 8AH 8BH 0 0 0 0 0 星期 8CH 8DH 10年 年 8EH 8FH WP 0 0 0 0 0 0 0 此外,DS1302 還有年份寄存器、控制寄存器、充電寄存器、時(shí)鐘突發(fā)寄存器及與RAM相關(guān)的寄存器等。時(shí)鐘突發(fā)寄存器可一次性順序讀寫(xiě)除充電寄存器外的所有寄存器內(nèi)容。 DS1302與RAM相關(guān)的寄存器分為兩類:一類是單個(gè)RAM單元,共31個(gè),每個(gè)單元組態(tài)為一個(gè)8位的字節(jié),其命令控制字為C0H~FDH,其中奇數(shù)為讀操作,偶數(shù)為寫(xiě)操作;另一類為突發(fā)方式下的RAM寄存器,此方式下可一次性讀寫(xiě)所有的RAM的31個(gè)字節(jié),命令控制字為FEH(寫(xiě))、FFH(讀)。 2.3溫度芯片DS18B20接口設(shè)計(jì)與性能分析 2.3.1 DS18B20性能簡(jiǎn)介 1.DS18B20的主要特性 DS18B20溫度傳感器是美國(guó)DALLAS半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等元件相比,它能直接讀出被測(cè)溫度,并且可根據(jù)實(shí)際要求通過(guò)簡(jiǎn)單的編程實(shí)現(xiàn)9-12位的數(shù)字值讀數(shù)方式。現(xiàn)場(chǎng)溫度直接以"一線總線"的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場(chǎng)溫度測(cè)量,如:環(huán)境控制、設(shè)備或過(guò)程控制、測(cè)溫類消費(fèi)電子產(chǎn)品等。與前一代產(chǎn)品不同,新的產(chǎn)品支持3V~5.5V的電壓范圍,使系統(tǒng)設(shè)計(jì)更靈活、方便。其性能特點(diǎn)可歸納如下: 1獨(dú)特的單線接口僅需要一個(gè)端口引腳進(jìn)行通信; 2測(cè)溫范圍在-55℃到125℃,分辨率最大可達(dá)0.0625℃; 3采用了3線制與單片機(jī)相連,減少了外部硬件電路; 4零待機(jī)功耗; 5可通過(guò)數(shù)據(jù)線供電,電壓范圍在3.0V-5.5V; 6用戶可定義的非易失性溫度報(bào)警設(shè)置; 7報(bào)警搜索命令識(shí)別并標(biāo)志超過(guò)程序限定溫度(溫度報(bào)警條件)的器件; 8負(fù)電壓特性,電源極性接反時(shí),溫度計(jì)不會(huì)因發(fā)熱燒毀,只是不能正常工作。 2.DS18B20工作原理 DS18B20的讀寫(xiě)時(shí)序和測(cè)溫原理與DS1820相同,只是得到的溫度值的位數(shù)因分辨率不同而不同,且溫度轉(zhuǎn)換時(shí)的延時(shí)時(shí)間由2s減為750ms。 DS18B20測(cè)溫原理如圖5所示。圖中低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用于產(chǎn)生固定頻率的脈沖信號(hào)送給計(jì)數(shù)器1。高溫度系數(shù)晶振隨溫度變化其振蕩率明顯改變,所產(chǎn)生的信號(hào)作為計(jì)數(shù)器2的脈沖輸入。計(jì)數(shù)器1和溫度寄存器被預(yù)置在-55℃所對(duì)應(yīng)的一個(gè)基數(shù)值。計(jì)數(shù)器1對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行減法計(jì)數(shù),當(dāng)計(jì)數(shù)器1的預(yù)置值減到0時(shí),溫度寄存器的值將加1,計(jì)數(shù)器1的預(yù)置將重新被裝入,計(jì)數(shù)器1重新開(kāi)始對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行計(jì)數(shù),如此循環(huán)直到計(jì)數(shù)器2計(jì)數(shù)到0時(shí),停止溫度寄存器值的累加,此時(shí)溫度寄存器中的數(shù)值即為所測(cè)溫度。圖7中的斜率累加器用于補(bǔ)償和修正測(cè)溫過(guò)程中的非線性,其輸出用于修正計(jì)數(shù)器1的預(yù)置值。 LSB 位置/清除 增加 計(jì)數(shù)器1 斜率累加器 計(jì)數(shù)比較器 溫度寄存器 減到0 預(yù)置 計(jì)數(shù)器2 減到0 停止 預(yù)置 低溫度系數(shù)晶振 高溫度系數(shù)晶振 圖7 DS18B20測(cè)溫原理 2.3.2 DS18B20接口電路設(shè)計(jì) 如8圖所示,該系統(tǒng)中采用數(shù)字式溫度傳感器DS18B20,具有測(cè)量精度高,電路連接簡(jiǎn)單特點(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、寫(xiě)時(shí)序圖 圖11 寫(xiě)時(shí)序圖 4、工作時(shí)序 1)總線時(shí)序 圖12 總線時(shí)序 2)寫(xiě)周期時(shí)序 圖13寫(xiě)周期時(shí)序 3)起始/停止時(shí)序 圖14 起始/停止時(shí)序 4)應(yīng)答時(shí)序 圖15 應(yīng)答時(shí)序 5)立即地址讀時(shí)序 圖16 立即地址讀時(shí)序 2.4 LCD顯示模塊 2.4.1LCM1602的特性及使用說(shuō)明 1.LCM1602的接口信號(hào)說(shuō)明如表4: 表4 LCM1602的接口信號(hào) 編號(hào) 引腳符號(hào) 功能說(shuō)明 編號(hào) 引腳符號(hào) 功能說(shuō)明 1 VSS 電源地 9 D2 DATA I/O 2 VDD 電源正極 10 D3 DATA I/O 3 VL 液晶顯示偏壓信號(hào) 11 D4 DATA I/O 4 RS 數(shù)據(jù)/命令選擇端(H/L) 12 D5 DATA I/O 5 R/W 讀/寫(xiě)選擇端(H/L) 13 D6 DATA I/O 6 E 使能信號(hào) 14 D7 DATA I/O 7 D0 DATA I/O 15 BLA 背光正極 8 D1 DATA I/O 16 BLK 背光負(fù)極 2、基本操作時(shí)序如下: 1)讀狀態(tài):RS=L,RW=H,E=H 2)寫(xiě)指令:RS=L,RW=L,D0~D7=指令碼,E=高脈沖 3)讀數(shù)據(jù):RS=H,RW=H,E=H 4)寫(xiě)數(shù)據(jù):RS=H,RW=L,D0~D7=數(shù)據(jù),E=高脈沖 3、初始化設(shè)置 1)顯示模式設(shè)置如表5: 表5顯示模式設(shè)置 指令碼 功能 0 0 1 1 1 0 0 0 設(shè)置16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口 2) 顯示開(kāi)/關(guān)及光標(biāo)設(shè)置如表6: 表6 顯示開(kāi)/關(guān)及光標(biāo)設(shè)置 指令碼 功能 0 0 0 0 1 D C B D=1開(kāi)顯示;D=0關(guān)顯示 C=1顯示光標(biāo);C=0不顯示光標(biāo) B=1光標(biāo)閃爍;B=0光標(biāo)不顯示 0 0 0 0 0 1 N S N=1當(dāng)讀或?qū)懸粋€(gè)字符后地址指針加一,且光標(biāo)加一 N=0當(dāng)讀或?qū)懸粋€(gè)字符后地址指針減一,且光標(biāo)減一 S=1當(dāng)寫(xiě)一個(gè)字符,整屏顯示左移(N=1) 2.4.2LCM1602與MCU的接口電路 LCD的D0~D7分別接單片機(jī)的的P2口,作為數(shù)據(jù)線,因?yàn)镻0口內(nèi)部沒(méi)有上拉電阻,所以外部另外加上10K的上拉電阻;P1.0—P1.2分別接LCD的RS、RW、E三個(gè)控制管腳;RV1用來(lái)調(diào)節(jié)LCD的顯示灰度;BLK、BLA為背光的陰極和陽(yáng)極,接上相應(yīng)電平即點(diǎn)亮背光燈。 2.5按鍵模塊設(shè)計(jì) 本系統(tǒng)用到了5個(gè)按鍵,其中一個(gè)用作系統(tǒng)手動(dòng)復(fù)位,另外4個(gè)采用獨(dú)立按鍵,該種接法查詢簡(jiǎn)單,程序處理簡(jiǎn)單,可節(jié)省CPU資源,按鍵電路如圖17所示,4個(gè)獨(dú)立按鍵分別與STC89C52的P3.4、P3.5、P3.6、P3.7接口相連。 圖17 按鍵電路 對(duì)以上4個(gè)按鍵作簡(jiǎn)要說(shuō)明:S4——SET 鍵,S3——UP鍵,S2——DOWN鍵,S5——OUT/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)入下一模式,顯示溫度值和上下限的溫度值。 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),而無(wú)法執(zhí)行程序。因此要求單片機(jī)復(fù)位后能脫離復(fù)位狀態(tài)。而本系統(tǒng)選用的是12MHz的晶振,因此一個(gè)機(jī)器周期為1μs,那么復(fù)位脈沖寬度最小應(yīng)為2μs。在實(shí)際應(yīng)用系統(tǒng)中,考慮到電源的穩(wěn)定時(shí)間,參數(shù)漂移,晶振穩(wěn)定時(shí)間以及復(fù)位的可靠性等因素,必須有足夠的余量。 根據(jù)應(yīng)用的要求,復(fù)位操作通常有兩種基本形式:上電復(fù)位、手動(dòng)復(fù)位。 上電復(fù)位要求接通電源后,自動(dòng)實(shí)現(xiàn)復(fù)位操作。STC89C52單片機(jī)的上電復(fù)位POR(Power 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ī)開(kāi)始進(jìn)入運(yùn)行狀態(tài)之前,還要至少推遲2個(gè)機(jī)器周期的延時(shí)。 本設(shè)計(jì)采用上電且開(kāi)關(guān)復(fù)位電路,如圖18所示上電后,由于電容充電,使RST持續(xù)一段高電平時(shí)間。當(dāng)單片機(jī)已在運(yùn)行之中時(shí),按下復(fù)位鍵也能使RST持續(xù)一段時(shí)間的高電平,從而實(shí)現(xiàn)上電且開(kāi)關(guān)復(fù)位的操作。通常選擇C=10~30μF,本設(shè)計(jì)采用的電容值為10μF的電容和電阻為4.7K的電阻。 圖18 復(fù)位電路 3 系統(tǒng)的軟件設(shè)計(jì) 電子萬(wàn)年歷的功能是在程序控制下實(shí)現(xiàn)的。該系統(tǒng)的軟件設(shè)計(jì)方法與硬件設(shè)計(jì)相對(duì)應(yīng),按整體功能分成多個(gè)不同的程序模塊,分別進(jìn)行設(shè)計(jì)、編程和調(diào)試,最后通過(guò)主程序?qū)⒏鞒绦蚰K連接起來(lái)。這樣有利于程序修改和調(diào)試,增強(qiáng)了程序的可移植性。 本系統(tǒng)的軟件部分主要要進(jìn)行公歷計(jì)算程序設(shè)計(jì),溫度測(cè)量程序設(shè)計(jì),按鍵的掃描輸入等。程序開(kāi)始運(yùn)行后首先要進(jìn)行初始化,把單片機(jī)的各引腳的狀態(tài)按程序里面的初始化命令進(jìn)行初始化,初始化完成后運(yùn)行溫度測(cè)量程序,讀取出溫度傳感器測(cè)量出來(lái)的溫度,然后運(yùn)行公歷計(jì)算程序,得到公歷的時(shí)間、日期信息,再運(yùn)行按鍵掃描程序,檢測(cè)有無(wú)按鍵按下,如果沒(méi)有按鍵按下則直接調(diào)用節(jié)日計(jì)算程序,根據(jù)得到的公歷日期信息計(jì)算出節(jié)日,如果有按鍵按下則更新按鍵修改后的變量后送給節(jié)日計(jì)算程序,由節(jié)日計(jì)算程序根據(jù)修改后的變量計(jì)算出對(duì)應(yīng)的節(jié)假日,計(jì)算完成后運(yùn)行顯示程序,顯示程序?qū)⒌玫降臏囟葦?shù)據(jù)、公歷信息、節(jié)假日信息送給對(duì)應(yīng)的數(shù)碼管讓其顯示。 3.1主程序流程圖的設(shè)計(jì) 主程序流程圖: 開(kāi)始 DS1302初始化 設(shè)置DS1302 讀年月日星期時(shí)分秒 將讀取的數(shù)據(jù)處理后送液晶屏顯示 返回 圖19 主程序流程圖 3.2 程序設(shè)計(jì) 3.2.1 DS1302讀寫(xiě)程序設(shè)計(jì) 本系統(tǒng)的時(shí)間讀取主要來(lái)源于單片機(jī)對(duì)DS1302的操作,在硬件上時(shí)鐘芯片DS1302與單片機(jī)的連接需要三條線,即SCLK(7)、I/O(6)、RST(5),具體連接圖見(jiàn)系統(tǒng)硬件設(shè)計(jì)原理圖。讀取寫(xiě)程序設(shè)計(jì)如下: sbit clk = P1^3; //ds1302時(shí)鐘線定義 sbit io = P1^4; //數(shù)據(jù)線 sbit rst = P1^5; //復(fù)位線 //秒 分 時(shí) 日 月 年 星期 uchar code write_add[]={0x80,0x82,0x84,0x86,0x88,0x8c,0x8a}; //寫(xiě)地址 uchar code read_add[] ={0x81,0x83,0x85,0x87,0x89,0x8d,0x8b}; //讀地址 uchar code init_ds[] ={0x58,0x00,0x00,0x01,0x01,0x13,0x1}; uchar miao,fen,shi,ri,yue,week,nian; uchar i; uchar fen1=0x11,shi1=0; //兩個(gè)鬧鐘變量的定義 bit open1; /*************寫(xiě)一個(gè)數(shù)據(jù)到對(duì)應(yīng)的地址里***************/ void write_ds1302(uchar add,uchar dat) { rst = 1; //把復(fù)位線拿高 for(i=0;i<8;i++) { //低位在前 clk = 0; //時(shí)鐘線拿低開(kāi)始寫(xiě)數(shù)據(jù) io = add & 0x01; add >>= 1; //把地址右移一位 clk = 1; //時(shí)鐘線拿高 } for(i=0;i<8;i++) { clk = 0; //時(shí)鐘線拿低開(kāi)始寫(xiě)數(shù)據(jù) io = dat & 0x01; dat >>= 1; //把數(shù)據(jù)右移一位 clk = 1; //時(shí)鐘線拿高 } rst = 0; //復(fù)位線合低 clk = 0; io = 0; } /*************從對(duì)應(yīng)的地址讀一個(gè)數(shù)據(jù)出來(lái)***************/ uchar read_ds1302(uchar add) { uchar value,i; rst = 1; //把復(fù)位線拿高 for(i=0;i<8;i++) { //低位在前 clk = 0; //時(shí)鐘線拿低開(kāi)始寫(xiě)數(shù)據(jù) io = add & 0x01; add >>= 1; //把地址右移一位 clk = 1; //時(shí)鐘線拿高 } for(i=0;i<8;i++) { clk = 0; //時(shí)鐘線拿低開(kāi)始讀數(shù)據(jù) value >>= 1; if(io == 1) value |= 0x80; clk = 1; //時(shí)鐘線拿高 } rst = 0; //復(fù)位線合低 clk = 0; io = 0; return value; //返回讀出來(lái)的數(shù)據(jù) } /*************把要的時(shí)間 年月日 都讀出來(lái)***************/ void read_time() { miao = read_ds1302(read_add[0]); //讀秒 fen = read_ds1302(read_add[1]); //讀分 shi = read_ds1302(read_add[2]); //讀時(shí) ri = read_ds1302(read_add[3]); //讀日 yue = read_ds1302(read_add[4]); //讀月 nian = read_ds1302(read_add[5]); //讀年 week = read_ds1302(read_add[6]); //讀星期 Conversion(0,nian,yue,ri); //農(nóng)歷轉(zhuǎn)換 n_nian = year_moon ; n_yue = month_moon ; n_ri = day_moon ; } /*************把要寫(xiě)的時(shí)間 年月日 都寫(xiě)入ds1302里***************/ void write_time() { write_ds1302(0x8e,0x00); //打開(kāi)寫(xiě)保護(hù) write_ds1302(write_add[0],miao); //寫(xiě)秒 write_ds1302(write_add[1],fen); //寫(xiě)分 write_ds1302(write_add[2],shi); //寫(xiě)時(shí) write_ds1302(write_add[3],ri); //寫(xiě)日 write_ds1302(write_add[4],yue); //寫(xiě)月 write_ds1302(write_add[5],nian); //寫(xiě)星期 write_ds1302(write_add[6],week); //寫(xiě)年 write_ds1302(0x8e,0x80); //關(guān)閉寫(xiě)保護(hù) } /*************把數(shù)據(jù)保存到ds1302 RAM中**0-31*************/ void write_ds1302ram(uchar add,uchar dat) { add <<= 1; //地址是從第二位開(kāi)始的 add &= 0xfe; //把最低位清零 是寫(xiě)的命令 add |= 0xc0; //地址最高兩位為 1 write_ds1302(0x8e,0x00); write_ds1302(add,dat); write_ds1302(0x8e,0x80); } /*************把數(shù)據(jù)從ds1302 RAM讀出來(lái)**0-31*************/ uchar read_ds1302ram(uchar add) { add <<= 1; //地址是從第二位開(kāi)始的 add |= 0x01; //把最高位置1 是讀命令 add |= 0xc0; //地址最高兩位為 1 return(read_ds1302(add)); } /*************初始化ds1302時(shí)間***************/ void init_ds1302() { uchar i; rst = 0; //第一次讀寫(xiě)數(shù)據(jù)時(shí)要把IO品拿低 clk = 0; io = 0; i = read_ds1302ram(30); if(i != 3) { i = 3; write_ds1302ram(30,i); //4050 4100 3080 write_ds1302(0x8e,0x00); //打開(kāi)寫(xiě)保護(hù) for(i=0;i<7;i++) write_ds1302(write_add[i],init_ds[i]); //把最高位值0 允許ds1302工作 write_ds1302(0x8e,0x80); //關(guān)寫(xiě)保護(hù) } } 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(D0)為邏輯0,指定寫(xiě)操作(輸入),D0=1,指定讀操作(輸出) 。 3.2.2 溫度程序設(shè)計(jì) 單總線上最基本的操作有初始化、寫(xiě)和讀3種,所有其它的操作都由這3種基本操作組合而成,初始化用于對(duì)總線上的器件進(jìn)行狀態(tài)復(fù)位,寫(xiě)用于主節(jié)點(diǎn)向總線上寫(xiě)入一位數(shù)據(jù),讀用于主節(jié)點(diǎn)從總線上讀取一位數(shù)據(jù)。在這3種操作中,只有寫(xiě)操作是單向的,初始化操作和讀操作都是雙向的。具體程序設(shè)計(jì)如下: byte ow_reset(void) { byte presence; DQ = 0; //拉低總線 delay(29); // 保持 480us DQ = 1; // 釋放總線 delay(3); // 等待回復(fù) presence = DQ; // 讀取信號(hào) delay(25); // 等待結(jié)束信號(hào) 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; delay(1); if(DQ)value|=0x80; delay(6); } return(value); } //向 1-WIRE 總線上寫(xiě)一個(gè)字節(jié) void write_byte(char val) { byte i; for (i=8; i>0; i--) // 一次寫(xiě)一位 { 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將編寫(xiě)完成的程序編譯生成HEX文件,將HEX文件燒錄到兩片單片機(jī)中,進(jìn)行仿真實(shí)驗(yàn),結(jié)果如圖20所示。 圖20 仿真圖 5 結(jié)論 在整個(gè)設(shè)計(jì)過(guò)程中,硬件方面主要設(shè)計(jì)了STC89C52單片機(jī)的最小系統(tǒng)、DS1302接口電路、DS18B20接口電路、鬧鐘及LCD顯示;軟件方面借助各個(gè)渠道的資料,主要設(shè)計(jì)了陽(yáng)歷數(shù)據(jù)讀取程序、陽(yáng)歷轉(zhuǎn)陰歷程序、溫度采集程序、鬧鈴程序以及LCD顯示程序;系統(tǒng)的調(diào)試主要是通過(guò)一塊STC89C52開(kāi)發(fā)板,再借助于Keil、STC以及少許自己搭建的外圍電路實(shí)現(xiàn)的;再此過(guò)程中,分步調(diào)試時(shí)顯示出了陽(yáng)歷的日期及時(shí)間,還有實(shí)時(shí)溫度,集中調(diào)試時(shí)沒(méi)有達(dá)到預(yù)期效果。此萬(wàn)年歷具有讀顯示直觀、功能多樣、電路簡(jiǎn)潔、成本低廉等諸多優(yōu)點(diǎn),符合電子儀器儀表的發(fā)展趨勢(shì),具有廣闊的市場(chǎng)前景。 在整個(gè)設(shè)計(jì)過(guò)程中學(xué)到了許多沒(méi)學(xué)到的知識(shí),在電路焊接時(shí)雖然沒(méi)什么大問(wèn)題,但從中也知道了焊接在整個(gè)作品中的重要性,電路工程量大,不能心急,一個(gè)個(gè)慢慢來(lái)不能急于求成。反而達(dá)到事半功倍的效果。對(duì)電路的設(shè)計(jì)、布局要先有一個(gè)好的構(gòu)思,才顯得電路板美觀、大方。程序編寫(xiě)中,由于思路不清晰,開(kāi)始時(shí)遇到了很多的問(wèn)題,經(jīng)過(guò)靜下心來(lái)思考,理清了思路,反而得心應(yīng)手。在此次設(shè)計(jì)中,知道了做事要有一顆平常的心,不要想著走捷徑,一步一腳印。也練就了我的耐心,做什么事都要有耐心。在本次設(shè)計(jì)中學(xué)到了很多很多東西,這是最重要的。總之,此次畢業(yè)設(shè)計(jì)使我的能力得到了全方位的提高,次設(shè)計(jì)的電子萬(wàn)年歷也存在的不足的地方,有待于以后的改進(jìn)。 參考文獻(xiàn) [1]陳明熒. 8051單片機(jī)課程設(shè)計(jì)實(shí)訓(xùn)教程[M].北京:清華大學(xué)出版社 [2]蘇平.單片機(jī)的原理與接口技術(shù)[M].北京:電子工業(yè)出版社,2006:1-113. [3]王忠民.微型計(jì)算機(jī)原理[M].西安:西安科技大學(xué)出版社,2003:15-55. [4]何立民.單片機(jī)高級(jí)教程[M].北京:北京航空航天大學(xué)出版社,2003年 [5]紀(jì)宗南.單片機(jī)外圍器件使用手冊(cè)[M].北京:北京航空航天大學(xué)出版社,622-655. [6]周雪.模擬電子技術(shù)[M]西安: 西安電子科技大學(xué)出版社,2005:81-95. [7]左金生.電子與模擬電子技術(shù)[M].北京:電子工業(yè)出版社,2004:105-131. [8]尹勇.單片機(jī)開(kāi)發(fā)環(huán)境μVision2的開(kāi)發(fā)指南[M]. 北京:北京航空航天大學(xué)出版社,2004:173-199. [9]馬忠梅,籍順心等.單片機(jī)的C語(yǔ)言應(yīng)用程序設(shè)計(jì)[M].北京航空航天大學(xué)出版社, 2001年 [10]新編單片機(jī)原理與應(yīng)用(第二版).西安電子科技大學(xué)出版社,2007.2 [11]張萌.單片機(jī)應(yīng)用系統(tǒng)開(kāi)發(fā)綜合實(shí)例[M]. 北京:清華大學(xué)出版社,2007.7 [12]樓然苗.單片機(jī)課程設(shè)計(jì)指導(dǎo)[M]. 北京:北京航空航天大學(xué)出版社,2007.7 [13]朱思榮.51單片機(jī)實(shí)現(xiàn)公歷與農(nóng)歷、星期的轉(zhuǎn)換[Z].當(dāng)當(dāng)電子網(wǎng) [14]李廣弟. 單片機(jī)原理及應(yīng)用[M] 北京航空航天大學(xué)出版社,2004年 課設(shè)體會(huì) 課程設(shè)計(jì)是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識(shí),發(fā)現(xiàn),提出,分析和解決實(shí)際問(wèn)題,鍛煉實(shí)踐能力的重要環(huán)節(jié),是對(duì)學(xué)生實(shí)際工作能力的具體訓(xùn)練和考察過(guò)程,隨著科學(xué)技術(shù)發(fā)展的日新月異,單片機(jī)已經(jīng)成為當(dāng)今計(jì)算機(jī)應(yīng)用中空前活躍的領(lǐng)域,在生活中可以說(shuō)是無(wú)處不在。因此作為二十一世紀(jì)的大學(xué)來(lái)說(shuō)掌握單片機(jī)的開(kāi)發(fā)技術(shù)是十分重要的。 通過(guò)三周的課程設(shè)計(jì),鞏固了課堂上所學(xué)的知識(shí)。期間不斷的查閱資料,加深了我對(duì)單片機(jī)的理解。之后焊接硬件過(guò)程中出現(xiàn)各種問(wèn)題,最后在老師和同學(xué)的幫助下成功的解決了問(wèn)題。這讓我懂得了光有課本上的知識(shí)是不夠的,一定要理論結(jié)合實(shí)踐,在實(shí)踐中把理論知識(shí)具體化,這樣才能更好的掌握好知識(shí)。而且通過(guò)和同學(xué)的合作,讓我更明白相互之間的協(xié)調(diào)的重要性。因?yàn)槲覀儗W(xué)的都是單片機(jī)理論方面的東西,實(shí)際應(yīng)用方面較少,所以在設(shè)計(jì)過(guò)程中遇到了各種各樣的問(wèn)題,可以說(shuō)困難重重。比如說(shuō)Proteus軟件的仿真電路連接,剛開(kāi)始使用的時(shí)候比較陌生,器件的選取都存在問(wèn)題。經(jīng)過(guò)上網(wǎng)搜索資料,這個(gè)問(wèn)題很快解決了。這期間難免會(huì)遇到過(guò)各種各樣的問(wèn)題,同時(shí)在設(shè)計(jì)的過(guò)程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過(guò)的知識(shí)理解得不夠深刻,掌握得不夠牢固。 這次實(shí)習(xí)讓我受益匪淺,無(wú)論從知識(shí)上還是其他的各個(gè)方面。上課的時(shí)候?qū)W習(xí)的單片機(jī)只是從理論的角度去理解枯燥乏味。但在實(shí)習(xí)中見(jiàn)過(guò)甚至使用了單片機(jī)及其系統(tǒng),能夠理論聯(lián)系實(shí)際的學(xué)習(xí),開(kāi)闊了眼界,提高了單片機(jī)知識(shí)的理解和水平。在這次課程設(shè)計(jì)中又讓我體會(huì)到了合作與團(tuán)隊(duì)的力量,當(dāng)遇到不會(huì)的地方就會(huì)和同學(xué)互相討論。最后感謝老師和同學(xué)對(duì)我的幫助。 附錄1 電路原理圖- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 基于 單片機(jī) 萬(wàn)年歷 設(shè)計(jì)
鏈接地址:http://kudomayuko.com/p-6648146.html