目錄 摘 要 ABSTRACT 1 引言 2 功能要求 3 方案論證與設(shè)計 3.1 控制部分的方案選擇 3.2 測溫部分的方案選擇 3.3 顯示部分的方案選擇 4 系統(tǒng)硬件電路設(shè)計 4.1 主控器 AT89C52 4.2 時鐘電路 DS1302 4.2.1. DS1302的性能特性 4.2.2 DS1302數(shù)據(jù)操作原理 4.3 測溫電路的設(shè)計 4.3.1 溫度傳感器工作原理 4.3.2 DS18B20與單片機的接口電路 4.4 顯示電路的設(shè)計 4.5 鍵盤接口的設(shè)計 5 系統(tǒng)程序的設(shè)計 5.1 陽歷程序設(shè)計 5.2 時間調(diào)整程序設(shè)計 5.3 溫度程序設(shè)計 5.3.1 主程序 5.3.2 讀出溫度子程序 5.3.3 溫度轉(zhuǎn)換命令子程序 5.3.4 計算溫度子程序 5.3.5顯示數(shù)據(jù)刷新子程序 6 調(diào)試及性能分析 6.1 調(diào)試步驟 6.2 性能分析 7 總結(jié) 參考文獻(xiàn) 致 謝
基于51單片機的電子萬年歷的設(shè)計 摘 要電子萬年歷是單片機系統(tǒng)的一個應(yīng)用,由硬件和軟件相配合使用。硬件由主控器、時鐘電路、溫度檢測電路、顯示電路、鍵盤接口5個模塊組成。主控模塊用AT89C52、時鐘電路用時鐘芯片DS1302、顯示模塊用LED數(shù)碼管、溫度檢測采用DS18B20溫度傳感器、鍵盤接口電路用普通按鍵接上拉電阻完成;軟件利用C語言編程實現(xiàn)單片機程序控制。單片機通過時鐘芯片DS1302獲取時間數(shù)據(jù),DS18B20采集溫度信號送該給單片機處理,單片機再把時間數(shù)據(jù)和溫度數(shù)據(jù)送給74LS154譯碼,然后通過三極管C9015放大驅(qū)動LED數(shù)碼管顯示陽歷年、月、日、時、秒、鬧鐘、星期、溫度。
1 引言隨著微電子技術(shù)和超大規(guī)模集成電路技術(shù)的不斷發(fā)展,家用電子產(chǎn)品不但種類日益豐富,而且變得更加經(jīng)濟實用,單片微型計算機體積小、性價比高、功能強、可靠性高等獨有的特點,在各個領(lǐng)域得到了廣泛的應(yīng)用。電子萬年歷是一種應(yīng)用非常廣泛的日常計時工具,數(shù)字顯示的日歷鐘已經(jīng)越來越流行,特別是適合在家庭居室、辦公室、大廳、會議室、車站和廣場等使用。LED數(shù)字顯示的日歷鐘顯示清晰直觀、走時準(zhǔn)確、可以進(jìn)行夜視,并且還可以擴展出多種功能。功能也越來越齊全,除了公歷年月日、時分秒、星期顯示及鬧鈴。但通過我們對各種電子鐘表、歷的不斷觀察總結(jié)發(fā)現(xiàn)目前市場的鐘、歷都存在一些不足之處,比如:時鐘不精確、產(chǎn)品成本太高、無環(huán)境溫度顯示等,這都給人們的使用帶來了某些不便。為此設(shè)計了一種功能全面、計時準(zhǔn)確、成本低廉的基于51單片機的萬年歷。 2 功能要求1. 萬年歷能用數(shù)碼管顯示陽歷年、月、日、星期、[小]時、分、秒并設(shè)置指定時間的鬧鈴。 2. 數(shù)字式溫度計要求測溫范圍-50~100°C, LED數(shù)碼管直讀顯示。 3 方案論證與設(shè)計3.1 控制部分的方案選擇1. 用可編程邏輯器件設(shè)計。可采用ALTERA公司的FLEX10K系列PLD器件。設(shè)計起來結(jié)構(gòu)清晰,各個模塊,從硬件上設(shè)計起來相對簡單,控制與顯示的模塊間的連接也會比較方便。但是考慮到本設(shè)計的特點,EDA在功能擴展上比較受局限,而且EDA占用的資源也相對多一些。從成本上來講,用可編程邏輯器件來設(shè)計也沒有什么優(yōu)勢。 2. 用凌陽16位單片機設(shè)計。凌陽16位單片機有豐富的中斷源和時基,方便本實驗的設(shè)計。它的準(zhǔn)確度相當(dāng)高,并且C語言和匯編兼容的編程環(huán)境也很方便來實現(xiàn)一些遞歸調(diào)用。I/O口功能也比較強大,方便使用。用凌陽16位單片機做控制器最有特色的就是它的可編程音頻處理,可完成語音的錄制播放和識別。這些都方便對設(shè)計進(jìn)行擴展,使設(shè)計更加完善。成本也相對低一些。但是,在控制與顯示的結(jié)合上有些復(fù)雜,顯示模組資源相對有限,而且單片機的穩(wěn)定性不是很高。 3. 主控芯片使用51系列AT89C52單片機,時鐘芯片用美國DALLAS公司推出的一種高性能、低功耗、帶RAM的時鐘DS1302。采用DS1302作為主要計時芯片,可以做到計時準(zhǔn)確。更重要的是,DS1302可以在很小電流的后備電源(2.5~5V電源,在2.5V時耗電小于300nA)下繼續(xù)計時,停電后時鐘無需重新調(diào)整,并可編程選擇多種充電電流來對后備電源進(jìn)行慢速充電,可以保證后備電源基本不耗電,還可自設(shè)鬧鈴,陽歷、星期與年月日自動對應(yīng)。本系統(tǒng)采用了此方案。 3.2 測溫部分的方案選擇1.在日常生活及工農(nóng)業(yè)生產(chǎn)中經(jīng)常要乃至溫度的檢測及控制,傳統(tǒng)的測溫元件有熱電偶和熱電阻。而熱電偶和熱電阻測一般都是電壓,再轉(zhuǎn)換成對應(yīng)的溫度,需要比較多的外部硬件支持,硬件電路復(fù)雜,軟件調(diào)試復(fù)雜,制作成本高。 2.與前面相比,采用美國DALLAS半導(dǎo)體公司繼DS1820之后推出的一種改進(jìn)型智能溫度傳感器DS18B20作為檢測元件,測溫范圍為-55~125°C,最大分辨率可達(dá)0.0625°C。DS18B20可以直接讀出被測溫度值,而且采用3線制與單片機相連,減少了外部的硬件電路,具有低成本和易使用的特點。 3.3 顯示部分的方案選擇1. 液晶顯示方式。液晶顯示效果出眾,可以運用菜單項來方便操作,但是在顯示時,特別是使用秒表功能時掃描速度跟不上,屏幕會有明顯的閃爍。而且由于61板的存儲空間有限,液晶顯示就不能與語音播抱程序同時實現(xiàn)。這些大大影響了電子萬年歷的性能。 2. 相比液晶顯示,8段數(shù)碼管雖然操作比液晶顯示略顯繁瑣,但可視范圍十分寬,而且經(jīng)濟實惠,也不需要復(fù)雜的驅(qū)動程序。所以最后選擇LED數(shù)碼管顯示方案。 綜上所述,按照系統(tǒng)設(shè)計功能的要求,確定硬件系統(tǒng)由主控制器、時鐘模塊、測溫電路、顯示模塊、鍵盤接口共5個模塊組成,總體系統(tǒng)構(gòu)成框圖如圖3.1所示。
圖3.1 電子萬年歷系統(tǒng)構(gòu)成框圖
4 系統(tǒng)硬件電路設(shè)計電子萬年歷電路原理圖見附件一,系統(tǒng)由主控制器AT89C52、時鐘芯片DS1302、溫度傳感器DS18B20傳感器、顯示電路及鍵盤掃描電路組成。 4.1 主控器 AT89C52ATMEL公司生產(chǎn)的AT89C52單片機采用高性能的靜態(tài)80C51設(shè)計,由先進(jìn)工藝制造,并帶有非易失性Flsah程序存儲器。它是一種高性能、低功耗的8位CMOS微處理芯片,市場應(yīng)用最多。主要性能特點有: 8KB Flash ROM,可以檫寫1000次以上,數(shù)據(jù)保存10年。 256字節(jié)內(nèi)部RAM。 電源控制模式 ——時鐘可停止和恢復(fù); ——空閑模式; ——掉電模式。 6個中斷源。 4個中斷優(yōu)先級。 4個8位I/O口。 全雙工增強型UART。 3個16位定時/計數(shù)器,T0、T1(標(biāo)準(zhǔn)80C51)和增加的T2(捕獲和比較)。 全靜態(tài)工作方式:0~24MHz。 4.2 時鐘電路 DS13024.2.1. DS1302的性能特性實時時鐘,可對秒、分、時、日、周、月以及帶閏年補償?shù)哪赀M(jìn)行計數(shù); 用于高速數(shù)據(jù)暫存的31×8位RAM; 最少引腳的串行I/O; 2.5~5.5V電壓工作范圍; 2.5V時耗電小于300nA; 用于時鐘或RAM數(shù)據(jù)讀/寫的單字節(jié)或多字節(jié)(脈沖方式)數(shù)據(jù)傳送方式; 簡單的3線接口; 可選的慢速充電(至Vcc1)的能力。 DS1302時鐘芯片包括實時時鐘/日歷和31字節(jié)的靜態(tài)RAM。它經(jīng)過一個簡單的串行接口與微處理器通信。實時時鐘/日歷提供秒、分、時、日、周、月和年等信息。對于小于31天的月和月末的日期自動調(diào)整,還包括閏年校正的功能。時鐘的運行可以采用24h或帶AM(上午)/PM(下午)的12h格式。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。DS1302有主電源/后備電源雙電源引腳:Vcc1在單電源與電池供電的系統(tǒng)中提供低電源,并提供低功率的電池備份;Vcc2在雙電源系統(tǒng)中提供主電源,在這種運用方式中,Vcc1連接到備份電,以便在沒有主電源的情況下能保存時間信息以及數(shù)據(jù)。DS1302由Vcc1或Vcc2中較大者供電。當(dāng)Vcc2大于Vcc1+0.2V時,Vcc2給DS1302供電;當(dāng)Vcc2小于Vcc時, DS13026由Vcc1供電。 4.2.2 DS1302數(shù)據(jù)操作原理DS1302在任何數(shù)據(jù)傳送時必須先初始化,把RST腳置為高電平,然后把8位地址和命令字裝入移位寄存器,數(shù)據(jù)在SCLK的上升沿被輸入。無論是讀周期還是寫周期,開始8位指定40個寄存器中哪個將被訪問到。在開始8個時鐘周期,把命令字節(jié)裝入移位寄存器之后,另外的時鐘周期在讀操作時輸出數(shù)據(jù),在寫操作是寫入時寫入數(shù)據(jù)。時鐘脈沖的個數(shù)在單字節(jié)方式下為8加8,在多字節(jié)方式下為8加字節(jié)數(shù),最大可達(dá)248字節(jié)數(shù)。 如果在傳送過程中置RST腳為低電平,則會終止本次數(shù)據(jù)傳送,并且I/O引腳變?yōu)楦咦钁B(tài)。上電運行時,在Vcc大于等于2.5V之前,RST腳必須保持低電平。只有在SCLK為低電平時,才能將RST置為高電平。DS1302的引腳及內(nèi)部結(jié)構(gòu)圖如圖4.1所示,表4.1為各引腳的功能。 DS1302的控制字如圖4.2所示。控制字節(jié)的最高位(位7)必須是邏輯1;如果它為0,則不能把數(shù)據(jù)寫入到DS1302中。位6如果為0,則表示存取日歷時鐘數(shù)據(jù);為1表示存取RAM數(shù)據(jù)。位5~1(A4~A0)指示操作單元的地址。最低有效位(位0)如為0,表示要進(jìn)行寫操作;為1表示進(jìn)行讀操作。控制字節(jié)總是從最低位開始輸入/輸出。 為了提高對32個地址的尋址能力(地址/命令位1~5=邏輯1),可以把時鐘/日歷或RAM寄存器規(guī)定為多字節(jié)(burst)方式。位6規(guī)定時鐘或RAM,而位0規(guī)定讀或?qū)憽T跁r鐘/日歷寄存器中的地址9~31或RAM寄存器中的地址31不能寄存數(shù)據(jù)。在多字節(jié)方式中,讀或?qū)憦牡刂?的位0開始。必須按數(shù)據(jù)傳送的次序?qū)懽钕鹊?個寄存器。但是,當(dāng)以多字節(jié)方式寫RAM時,為了傳送數(shù)據(jù)不必寫所有31字節(jié)。不管是否寫了全部31字節(jié),所寫的每一字節(jié)都將傳送至RAM。 
表 4.1 DS1302引腳功能
7 6 5 4 3 2 1 0 圖 4.2 DS1302的控制字 DS1302共有12個寄存器,其中有7個寄存器與日歷、時鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式。其日歷、時間寄存器及其控制字見表3.2,其中奇數(shù)為讀操作,偶數(shù)為寫操作。 時鐘暫停:秒寄存器的位7定義位時鐘暫停位。當(dāng)它為1時,DS1302停止震蕩,進(jìn)入低功耗的備份方式。通常在對DS1302進(jìn)行寫操作時(如進(jìn)入時鐘調(diào)整程序),停止震蕩。當(dāng)它為0時,時鐘將開始啟動。 AM-PM/12-24[小]時方式:[小]時寄存器的位7定義為12或24[小]時方式選擇位。它為高電平時,選擇12[小]時方式。在此方式下,位5是AM/PM位,此位是高電平時表示PM低電平表示AM。在24[小]時方式下,位5為第二個10[小]時位(20~23h)。 表 4.2 內(nèi)部寄存器地址和內(nèi)容
DS1302的晶震選用32.768kHz,電容推薦值為33pF,因為震蕩頻率較低,也可以不接電容,對計時精度影響不大。 4.3 測溫電路的設(shè)計測溫電路主要使用溫度傳感器DS18B20,由于精度要求不高所以采用2位共陽LED數(shù)碼管以動態(tài)掃描法實現(xiàn)溫度顯示。其設(shè)計原理圖如附件一所示。 4.3.1 溫度傳感器工作原理DS18B20溫度傳感器是美國DALLAS半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測溫元件相比,它能直接讀出被測溫度,并且可根據(jù)實際要示通過簡單的編程實現(xiàn)9~12位的數(shù)字值讀數(shù)方式。DS18B20的性能特點如下: 獨特的單線接口僅需要一個端口引腳進(jìn)行通信; 多個DS18B20可以并聯(lián)在唯一的三線上,實現(xiàn)多點組網(wǎng)功能; 無須外部器件; 可通過數(shù)據(jù)線供電,電壓范圍為3.0~3.5V; 零待機功耗; 溫度以9或12數(shù)字量讀出; 用戶可定義的非易失性溫度報警設(shè)置; 報警搜索命令識別并標(biāo)志超過程序限定溫度(溫度報警條件)的器件; 負(fù)電壓特性,電源極性接反時,溫度計不會因發(fā)熱而燒毀,但不能正常工作。 DS18B20采用3腳PR—35封裝或8腳SOIC封裝,其內(nèi)部結(jié)構(gòu)框圖如圖4.3所示。 64位ROM的位結(jié)構(gòu)如圖4.4所示。開始8位是產(chǎn)品類型的編號,接著是每個器件的唯一的序號,共有48位,最后8位是前面56位的CRC檢驗碼,這也是多個DS18B20可以采用一線進(jìn)行通信的原因。非易失性溫度報警觸發(fā)器TH和TL,可通過軟件寫入戶報警上下限。 DS18B20溫度傳感器的內(nèi)部存儲器還包括一個調(diào)整暫存RAM和一個易失性的可電擦除的EERAM。高速暫存RAM的結(jié)構(gòu)為8字節(jié)存儲器,結(jié)構(gòu)如圖4.5所示。頭2個字節(jié)包含測得的溫度信息,第3和第4節(jié)是TH和TL的拷貝,是易失的,每次上電復(fù)位時被刷新。第5個字節(jié)為配置寄存器,它的內(nèi)容用于確定溫度值的數(shù)字轉(zhuǎn)換分辨率。DS18B20工作時按此寄存器中的分辨率將溫度轉(zhuǎn)換為相應(yīng) MSB LSB MSB LSB MSB LSB 圖4.4 64位ROM結(jié)構(gòu)圖 | 1字節(jié) 2字節(jié) 3字節(jié) 4字節(jié) 5字節(jié)  6字節(jié) 7字節(jié) 8字節(jié) 9字節(jié) |
| |
| |
| | | | | |
| |
| |
| |
|
圖4.5 高速暫存RAM結(jié)構(gòu)圖 精度的數(shù)值。該字節(jié)各位的定義如圖4.6所示。低5位一直1,M是測試模式位,用于設(shè)置DS18B20在工作模式還是在測試模式。在DS18B20出廠時該位被設(shè)置為0,用戶不要去改動,R1和R0決定溫度轉(zhuǎn)換的精度位數(shù),即用來設(shè)置分辨率,定義方法見表4.3。 由表4.3可見,DS18B20溫度轉(zhuǎn)換的時間比較長,而且設(shè)定的分辨率越高,所需要的溫度數(shù)據(jù)轉(zhuǎn)換時間就越長。因此,在實際應(yīng)用中要將分辨率和轉(zhuǎn)換時間權(quán)衡考慮。 高速暫存RAM的第6、7、8字節(jié)保留未用,表現(xiàn)為全邏輯1。第9字節(jié)讀出前面所有8字節(jié)的CRC碼,可用來檢驗數(shù)據(jù),從而保證通信數(shù)據(jù)的正確性。 當(dāng)DS18B20接收到溫度轉(zhuǎn)換命令后,開始啟動轉(zhuǎn)換。轉(zhuǎn)換完成后的溫度值就以16位帶符號擴展的二進(jìn)制補碼形式存儲在高速暫存存儲器的第1、2字節(jié)。單片機可以通過單線接口讀出該數(shù)據(jù),讀數(shù)據(jù)時低位在先,高位在后,數(shù)據(jù)格式以0.0625°C/LSB形式表示。溫度值格式如圖4.7所示。
圖 4.6 配置寄存器 表 4.3 DS18B20分辨率的定義規(guī)定
表 4.4 DS18B20溫度與測得值對應(yīng)表
圖 4.7 溫度數(shù)字值格式 當(dāng)符號位S=0時,表現(xiàn)測得的溫度值為正值,可以直接將二進(jìn)制位轉(zhuǎn)換為十進(jìn)制,當(dāng)符號位S=1時,表示測得的溫度值為負(fù)值,要先將補碼變成原碼再計算十進(jìn)制值。表4.4是一部分溫度值對應(yīng)的二進(jìn)制溫度數(shù)據(jù)。 DS18B20完成溫度轉(zhuǎn)換后,把測得的溫度值與RAM中的TH、TL字節(jié)內(nèi)容作比較。若T>TH或T<TL,則將該器件內(nèi)的報警標(biāo)志位置位,并對主機發(fā)出的報警搜索命令作出響應(yīng)。因此,可用多只DS18B20同時測量溫度并進(jìn)行報警搜索。 在64位ROM的最高有效字節(jié)中存儲有循環(huán)冗余檢驗碼(CRC)。主機根據(jù)ROM的前56位來計算CRC值,并和存入DS18B20的CRC作比較,以判斷主機收到的ROM數(shù)據(jù)是否正確。 DS18B20的測溫原理如圖4.8所示。圖中低溫度系數(shù)晶振的振蕩頻率受溫度的影響很小,用于產(chǎn)生固定頻率的脈沖信號送給減法計數(shù)器1;高溫度系數(shù)晶振隨溫度變化其振蕩頻率明顯改變,所產(chǎn)生的信號作為減法計數(shù)器2的脈沖輸入。圖中還隱含著計數(shù)門,當(dāng)計算門打開時,DS18B20就對低溫度系數(shù)振蕩器產(chǎn)生的時鐘脈沖進(jìn)行計數(shù),進(jìn)而完成溫度測量。計數(shù)門的開啟時間由高溫度系數(shù)振蕩器來決定,每次測量前,首先將-55°C所對應(yīng)的一個基數(shù)分別置入減法計數(shù)器1、溫度寄存器中,減法計數(shù)器1和溫度寄存器被預(yù)置在-55°C所對應(yīng)的一個基數(shù)值。 減法計數(shù)器1對低溫系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行減法計數(shù),當(dāng)減法計數(shù)器1的預(yù)置值減到0時,溫度寄存的值將加1,減法計數(shù)器1的預(yù)置值將重新被裝入,減法計數(shù)器1重新開始對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行計數(shù),如此循環(huán)直到減法計數(shù)器2計數(shù)到0時,停止溫度寄存器值的累加,此時溫度寄存器中的數(shù)值就是所測溫度值。圖4.8中的斜率累加器用于補償和修正測溫過程中的非線性,其輸出用于修正減法計數(shù)器的預(yù)置值,只要計數(shù)門未關(guān)閉就重復(fù)上述過程,直到溫度寄存器值達(dá)到被測溫度值。   另外,由于DS18B20單線通信功能是分時完成的,它有嚴(yán)格的時隙概念,因此讀寫時序很重要。系統(tǒng)對DS18B20的各種操作必須按協(xié)議進(jìn)行。操作協(xié)議為:初始化DS18B20(發(fā)復(fù)位脈沖) 發(fā)ROM功能指令 發(fā)存儲器操作命令 處理數(shù)據(jù)。 4.3.2 DS18B20與單片機的接口電路DS18B20可以采用兩種方式供電,一種是采用電源供電方式,此時DS18B20的1腳接地,2腳作為引線,3腳接電源。另一種是寄生電源供電方式。單片機端口接單線總線,為保證在有效的DS18B20時鐘周期內(nèi)提供足夠的電流,可用一個MOSFET管來完成對總線的上拉。 當(dāng)DS18B20處于寫存儲器操作和溫度A/D轉(zhuǎn)換操作時,總線上必須有強的上拉,上拉開啟時間最大為10us。采用寄生電源供電方式時VDD和GND端均接地。由于單線制只有一根線,因此發(fā)送接口必須是三態(tài)的。 4.4 顯示電路的設(shè)計顯示部分采用普通的共陽數(shù)碼管顯示,采用動態(tài)掃描,以減少硬件電路。考慮到第一次掃描17位數(shù)碼管顯示時會出現(xiàn)閃爍情況,設(shè)計時17個數(shù)碼管分3排同時掃描。第一排8個數(shù)碼管分別為千年、百年、十年、年、十月、月、十日、日,第二排7個數(shù)碼管分別為十時、時、十分、分、十秒、秒,第三排3個數(shù)碼管分別為星期、溫度(兩位)顯示。顯示時采用串行口輸出段碼,用1片74LS164來驅(qū)動3排數(shù)碼管,這樣掃描一次只需7ms。 表 4.5 74LS164特性表
74LS164內(nèi)部為8個D觸發(fā)器,用以實現(xiàn)數(shù)據(jù)的串行移位,74LS164特性見表4.5。單片機以串口方式0(移位寄存器方式)輸出數(shù)據(jù),3片74LS164作為3排共陽數(shù)碼管的串/并轉(zhuǎn)換顯示接口。74LS164為TTl單向8位移位寄存器,可實現(xiàn)串行輸入,并行輸出。其中A、B(第1、2腳)為串行數(shù)據(jù)輸入端,2個引腳按邏輯“與”運算規(guī)律輸入信號,共一個輸入信號時可并接,共同作為輸入腳。CP(第8腳)為時鐘輸入端,可連接到串行口的TXD端。每一個時鐘信號的上升沿加到CP端時,移位寄存器移一位。8個時鐘脈沖過后,8位二進(jìn)制數(shù)全部移入74LS164中。MR腳(第9腳)為復(fù)位端,當(dāng)該腳為低電平時,移位寄存器各位復(fù)0;只有當(dāng)它高電平時,時鐘脈沖才起作用。Q1~Q8(第3~6和10~13引腳)并行輸出端分別接數(shù)碼管的h~a(因為串口從低位開始傳送)各段對應(yīng)的引腳上。在給出了8個脈沖后,最先進(jìn)入74LS164的第一個字節(jié)數(shù)據(jù)到達(dá)了最高位。再來1個脈沖,第1個脈沖就會從最高位移出,進(jìn)入下個74LS164的第1位。3片74LS164首尾相串,而時鐘端則接在一起。這樣,當(dāng)輸入8個脈沖時,從單片機RXD端輸出的第1字節(jié)數(shù)據(jù)就進(jìn)入了第1片74LS164中,而當(dāng)?shù)?個8個脈沖到來后,第1字節(jié)數(shù)據(jù)就進(jìn)入了第2片74LS164,而隨后的第2字節(jié)的數(shù)據(jù)則進(jìn)入了第1片74LS164。這樣,當(dāng)?shù)?個8個脈沖完成后,首次送出的數(shù)據(jù)被送到了最下面的164(第3片)中,其它數(shù)據(jù)依次出現(xiàn)在第二和第一片74LS164中,實現(xiàn)了數(shù)據(jù)在74LS164中的串行輸入、并行輸出。 在方式0狀態(tài)下,串行口為同步移位寄存器方式,其波特率是固定的,為fosc/12。數(shù)據(jù)由RXD(P3.0)端輸入或輸出,同步移位脈沖由TXD(P3.1)端輸出。發(fā)送、接收數(shù)據(jù)時低位在先。所以根據(jù)提供的硬件電路圖,在編寫程序時,查共陽數(shù)碼管的段碼的二進(jìn)制數(shù)據(jù)應(yīng)該將正常的共陽數(shù)據(jù)管0~9的二進(jìn)制值按位反序排序,如原來的二進(jìn)制為11000000(C0H),要改為00000011(03H),就能使數(shù)碼管正常顯示。 4.5 鍵盤接口的設(shè)計由于按鍵只有5個,用普通按鈕接10K上拉電阻,用查詢法完成讀鍵功能。 5 系統(tǒng)程序的設(shè)計5.1 陽歷程序設(shè)計因為使用了時鐘芯片DS1302,陽歷程序只需從DS1302各寄存器中讀出年、周、月、日、[小]時、分、秒等數(shù)據(jù),再處理即可。在首次對DS1302進(jìn)行操作之前,必須對它進(jìn)行初始化,然后從DS1302中讀出數(shù)據(jù),再經(jīng)過處理后,送給顯示緩沖單元。陽歷程序流程圖見圖5.1所示。  5.2 時間調(diào)整程序設(shè)計調(diào)整時間用5個調(diào)整按鈕,1個作為移位、控制用,2個作為加和減用,還有2個作為鬧鐘調(diào)整使用,分別定義為控制按鈕、加按鈕、減按鈕、鬧鐘加按紐、鬧鐘減按紐。在調(diào)整時間過程中,要調(diào)整的位與別的位應(yīng)該有區(qū)別。所以增加了閃爍功能,即調(diào)整的位一直在閃爍,直到調(diào)整下一位。閃爍原理就是,讓要調(diào)整的一位每隔一定時間熄滅一次,比如說50ms。利用定時器計時,當(dāng)達(dá)到50ms溢出時,就送給該位熄滅符,在下一次溢出時,再送正常顯示的值,不斷交替,直到調(diào)整該位結(jié)束。此時送正常顯示值給該位,再進(jìn)入下一位調(diào)整閃爍程序。時間調(diào)整程序流程圖如圖5.2所示。 5.3 溫度程序設(shè)計系統(tǒng)程序主要包括主程序、讀出溫度子程序、溫度轉(zhuǎn)換命令子程序、計算溫度子程序、顯示數(shù)據(jù)刷新子程序等等。 5.3.1 主程序主程序的主要功能是負(fù)責(zé)溫度的實時顯示、讀出并處理DS18B20的測量溫度值,溫度測量每1s進(jìn)行一次。其程序流程圖見5.3。 5.3.2 讀出溫度子程序主要功能是讀出RAM中的9字節(jié),在讀出時需進(jìn)行CRC校驗,校驗有錯時不進(jìn)行溫度數(shù)據(jù)的改寫。其程序流程圖如圖5.4所示。 5.3.3 溫度轉(zhuǎn)換命令子程序溫度轉(zhuǎn)換子程序主要是發(fā)溫度轉(zhuǎn)換開始命令,當(dāng)采用12位分辨率時轉(zhuǎn)換時間約為750ms,在本程序設(shè)計中采用1s顯示程序延時法等待轉(zhuǎn)換的完成。溫度轉(zhuǎn)換命令子程序流程圖如圖5.5所示。 
 
圖5.3 DS18B20溫度計主程序流程圖 圖5.4 讀出溫度子程序流程圖 5.3.4 計算溫度子程序計算溫度子程序?qū)AM中讀取值進(jìn)行BCD碼的轉(zhuǎn)換運算,并進(jìn)行溫度值正負(fù)的判定,其程序流程圖如圖5.6所示。 5.3.5顯示數(shù)據(jù)刷新子程序顯示數(shù)據(jù)刷新子程序主要是對顯示緩沖器中的顯示數(shù)據(jù)進(jìn)行刷新操作,當(dāng)最高顯示位為0時將符號顯示位移入下一位。程序流程圖如圖5.7所示。 
圖5.5 溫度轉(zhuǎn)換命令子程序流程圖

圖5.6 計算溫度子程序流程圖 圖5.7 顯示數(shù)據(jù)刷新子程序流程圖
6 調(diào)試及性能分析6.1 調(diào)試步驟系統(tǒng)的調(diào)試分為硬件調(diào)試和軟件調(diào)試。其中硬件調(diào)試主要是檢測硬件電路是否有短路、斷路、虛焊現(xiàn)象。時鐘和測溫部分的硬件電路很簡單,DS1302通過3根線、DS18B20只通過1根線與單片機相連接,很容易檢測,主要是檢測引腳晶振和電源是否接好。另外可以通過軟件來調(diào)試硬件,如編寫一個簡單的顯示程序來測試顯示電路連接是否正確。接下來可進(jìn)行軟件調(diào)試,可以編寫只含DS1302的計時和讀寫程序、顯示程序,測試DS1302是否正常工作。最后調(diào)試日歷、時間、鬧鐘、報警和溫度程序。 6.2 性能分析 計時器最關(guān)鍵的是計時的精度。電子萬年歷中DS1302上最好使用專用的晶振。經(jīng)測試制作的電子萬年歷,誤差較大,設(shè)計可以通過換用標(biāo)準(zhǔn)晶振或用軟件進(jìn)行修正。 7 總結(jié)此次設(shè)計立足于電子技術(shù)的實際運用,不斷實踐,開拓了思維,設(shè)計以考查、調(diào)研、搜集資料、擬訂方案、進(jìn)行系統(tǒng)規(guī)劃、編程、仿真、調(diào)試的流程,使我深刻的體會到了在學(xué)習(xí)我們專業(yè)的過程中理論與實踐相結(jié)合的重要性,同時也解決了以前學(xué)習(xí)比較模糊的專業(yè)知識點,使自己掌握的專業(yè)知識更加結(jié)構(gòu)化、系統(tǒng)化。 總之,本次設(shè)計在各位的精心安排與大力支持下;在指導(dǎo)老師的耐心指導(dǎo)下;在各位同學(xué)和朋友的貼心幫助下解決了許多設(shè)計中的實際困難,我以最低的成本和最簡單的方案設(shè)計出了功能強大的電子萬年歷。
完整的Word格式文檔51黑下載地址:
基于51單片機的電子萬年歷的設(shè)計資料.doc
(274.5 KB, 下載次數(shù): 126)
2018-11-23 21:27 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|