摘? 要:本文介紹了基于STC89C52單片機(jī)的多功能電子萬年歷的硬件結(jié)構(gòu)和軟硬件設(shè)計方法。本設(shè)計由數(shù)據(jù)顯示模塊、溫度采集模塊、時間處理模塊和調(diào)整設(shè)置模塊四個模塊組成。系統(tǒng)以STC89C52單片機(jī)為控制器,以串行時鐘日歷芯片DS1302記錄日歷和時間,它可以對年、月、日、時、分、秒進(jìn)行計時,還具有閏年補(bǔ)償?shù)榷喾N功能。溫度采集選用DS18B20芯片,萬年歷采用直觀的數(shù)字顯示,數(shù)據(jù)顯示采用1602液晶顯示模塊,可以在LCD1602上同時顯示年、月、日、周日、時、分、秒,還具有時間校準(zhǔn)等功能。此萬年歷具有讀取方便、顯示直觀、功能多樣、電路簡潔、成本低廉等諸多優(yōu)點,具有廣闊的市場前景。
關(guān)鍵字:單片機(jī),時鐘芯片, 溫度傳感器, 1602液晶顯示器
前言
隨著科技的快速發(fā)展,時間的流逝,從觀太陽、擺鐘到現(xiàn)在電子鐘,人類不斷研究,不斷創(chuàng)新紀(jì)錄。目前,單片機(jī)技術(shù)的應(yīng)用產(chǎn)品已經(jīng)走進(jìn)了千家萬戶。電子萬年歷的出現(xiàn)給人們的生活帶來了諸多方便。隨著微電子技術(shù)的高速發(fā)展,單片機(jī)在國民經(jīng)濟(jì)的個人領(lǐng)域得到了廣泛的運用。單片機(jī)以體積小、功能全、性價比高等諸多優(yōu)點,在工業(yè)控制、家用電器、通信設(shè)備、信息處理、尖端武器等各種測控領(lǐng)域的應(yīng)用中獨占鰲頭,單片機(jī)開發(fā)技術(shù)已成為電子信息、電氣、通信、自動化、機(jī)電一體化等專業(yè)技術(shù)人員必須掌握的技術(shù)。
單片機(jī)單芯片的微小體積和低的成本,可廣泛地嵌入到如玩具、家用電器、機(jī)器人、儀器儀表、汽車電子系統(tǒng)、工業(yè)控制單元、辦公自動化設(shè)備、金融電子系統(tǒng)、艦船、個人信息終端及通訊產(chǎn)品中,成為現(xiàn)代電子系統(tǒng)中最重要的智能化工具,于是基于單片機(jī)的醒目而時尚的電子版萬年歷順應(yīng)而生?;趩纹瑱C(jī)的電子萬年歷結(jié)合了時鐘和日歷的功能,將其二者融為一體,在顯示時間的同時還能顯示日期和年、月,它主要是通過單片機(jī)來讀取時鐘芯片的時間、日期,然后送給顯示設(shè)備顯示出來。而電子萬年歷作為電子類小設(shè)計不僅是市場上的寵兒,也是是單片機(jī)實驗中一個很常用的題目。因為它的有很好的開放性和可發(fā)揮性,因此對作者的要求比較高,不僅考察了對單片機(jī)的掌握能力更加強(qiáng)調(diào)了對單片機(jī)擴(kuò)展的應(yīng)用。而且在操作的設(shè)計上要力求簡潔,功能上盡量齊全,顯示界面也要出色。日歷鐘顯示清晰直觀、走時準(zhǔn)確、可以進(jìn)行夜視,并且還可以擴(kuò)展出多種功能。
1 緒論
?1.1 課題研究的背景
隨著科技的快速發(fā)展,時間的流逝,從觀太陽、擺鐘到現(xiàn)在電子鐘,人類不斷研究,不斷創(chuàng)新紀(jì)錄。它可以對年、月、日、時、分、秒進(jìn)行計時,還具有閏年補(bǔ)償?shù)榷喾N功能,而且DS1302的使用壽命長,誤差小。對于數(shù)字電子萬年歷采用直觀的數(shù)字顯示,可以同時顯示年、月、日、周日、時、分、秒和溫度等信息,還具有時間校準(zhǔn)等功能。該電路采用STC89C52單片機(jī)作為核心,功耗小,能在5V的低壓工作,電壓可選用4.5~5.5V電壓供電。
此萬年歷具有讀取方便、顯示直觀、功能多樣、電路簡潔、成本低廉等諸多優(yōu)點,符合電子儀器儀表的發(fā)展趨勢,具有廣闊的市場前景。
1.2課題的研究目的與意義
二十一世紀(jì)是數(shù)字化技術(shù)高速發(fā)展的時代,而單片機(jī)在數(shù)字化高速發(fā)展的時代扮演著極為重要的角色。電子萬年歷的開發(fā)與研究在信息化時代的今天亦是當(dāng)務(wù)之急,因為它應(yīng)用在學(xué)校、機(jī)關(guān)、企業(yè)、部隊等單位禮堂、訓(xùn)練場地、教學(xué)室、公共場地等場合,可以說遍及人們生活的每一個角落。所以說電子萬年歷的開發(fā)是國家之所需,社會之所需,人民之所需。
由于社會對信息交換不斷提高的要求及高新技術(shù)的逐步發(fā)展,促使電子萬年歷發(fā)展并且投入市場得到廣泛應(yīng)用。
1.3課題解決的主要內(nèi)容
本課題所研究的電子萬年歷是單片機(jī)控制技術(shù)的一個具體應(yīng)用,主要研究內(nèi)容包括以下幾個方面:
(1)選用電子萬年歷芯片時,應(yīng)重點考慮功能實在、使用方便、單片存儲、低功耗、抗斷電的器件。
(2)根據(jù)選用的電子萬年歷芯片設(shè)計外圍電路和單片機(jī)的接口電路。
(3)在硬件設(shè)計時,結(jié)構(gòu)要盡量簡單實用、易于實現(xiàn),使系統(tǒng)電路盡量簡單。
(4)根據(jù)硬件電路圖,在開發(fā)板上完成器件的焊接。
(5)根據(jù)設(shè)計的硬件電路,編寫控制STC89C52芯片的單片機(jī)程序。
(6)通過編程、編譯、調(diào)試,把程序下載到單片機(jī)上運行,并實現(xiàn)本設(shè)計的功能。
(7)在硬件電路和軟件程序設(shè)計時,主要考慮提高人機(jī)界面的友好性,方便用戶操作等因素。
2 系統(tǒng)的方案設(shè)計與論證
單片機(jī)電子萬年歷的制作有多種方法,可供選擇的器件和運用的技術(shù)也有很多種。所以,系統(tǒng)的總體設(shè)計方案應(yīng)在滿足系統(tǒng)功能的前提下,充分考慮系統(tǒng)使用的環(huán)境,所選的結(jié)構(gòu)要簡單使用、易于實現(xiàn),器件的選用著眼于合適的參數(shù)、穩(wěn)定的性能、較低的功耗以及低廉的成本。
按照系統(tǒng)設(shè)計的要求,初步確定系統(tǒng)由電源模塊、時鐘模塊、顯示模塊、鍵盤接口模塊、溫度測量模塊和鬧鐘模塊共六個模塊組成,電路系統(tǒng)構(gòu)成框圖如圖1所示。
圖1 硬件電路框圖
2.1單片機(jī)芯片設(shè)計與論證
方案一:
方案1:采用51系列單片機(jī)作為系統(tǒng)控制器
單片機(jī)算術(shù)運算功能強(qiáng),軟件編程靈活、自由度大,可用軟件編程實現(xiàn)各種算法和邏輯控制。由于其功耗低、體積較小、技術(shù)成熟和成本低等優(yōu)點,在各個領(lǐng)域應(yīng)用廣泛。而且抗干擾性能好。
方案2:采用凌陽系列單片機(jī)作為系統(tǒng)的控制器
凌陽系列單片機(jī)可以實現(xiàn)各種復(fù)雜的邏輯功能,模塊大,密度高,它將所有器件集成在一塊芯片上,減少了體積,提高了穩(wěn)定性。凌陽系列單片機(jī)提高了系統(tǒng)的處理速度,適合作為大規(guī)模實時系統(tǒng)的控制核心。
因51單片機(jī)價格比凌陽系列低得多,且本設(shè)計不需要很高的處理速度,從經(jīng)濟(jì)和方便使用角度考慮,本設(shè)計選擇了方案1。
2.2按鍵控制模塊設(shè)計與論證
方案一:采用矩陣鍵盤,由于按鍵多可實現(xiàn)數(shù)值的直接鍵入,但在系統(tǒng)中需要CPU不間斷的對其端口掃描。
方案二:采用獨立按鍵,查詢簡單,程序處理簡單,可節(jié)省CPU資源。
因系統(tǒng)中所需按鍵不多,為了釋放更多的CPU占有時間,操作方便,故采用方案二。
2.3時鐘模塊設(shè)計與論證
方案一:直接采用單片機(jī)定時計數(shù)器提供秒信號,使用程序?qū)崿F(xiàn)年、月、日、星期、時、分、秒計數(shù)。采用此種方案雖然減少芯片的使用,節(jié)約成本,但是,實現(xiàn)的時間誤差較大。
方案二:采用DS1302為計時時鐘芯片
該芯片是串行電路,與單片機(jī)接口簡單,但需另備電池和32.768kHz晶振,因焊接工藝和晶振質(zhì)量等原因會導(dǎo)致精度降低。
方案三:采用DS12C887為計時時鐘芯片
該芯片與單片機(jī)采用8位并口通信,傳遞信息速度快。自帶有鋰電池和晶振,外部掉電后,其內(nèi)部時間信息還能夠保持10年之久,因電路被封裝在一起,可以保證很高的精度和抗干擾能力。而且芯片功能豐富,可以通過內(nèi)部寄存器設(shè)置鬧鐘,并產(chǎn)生鬧鐘中斷。
由于DS1302時鐘芯片計數(shù)時間精度高,而且具有閏年補(bǔ)償功能且價格經(jīng)濟(jì)實惠等優(yōu)點,故采用方案二。
2.4溫度采集模塊設(shè)計與論證
方案一:采用溫度傳感器(如熱敏電阻或AD590),再經(jīng)AD轉(zhuǎn)換得到數(shù)字信號,精度較準(zhǔn),但價格昂貴,電路較復(fù)雜。
方案二:采用數(shù)字式溫度傳感器DS18B20,它能直接讀出被測溫度,并且可根據(jù)實際要求通過簡單的編程實現(xiàn)9-12位的數(shù)字值讀數(shù)方式,但準(zhǔn)確度不高,誤差最大達(dá)2度。
因為用DS18B20溫度芯片,采用單總線訪問,降低成本、降低制作難度且可節(jié)省單片機(jī)資源,故采用方案二。
2.5顯示模塊模塊設(shè)計與論證
方案一:采用靜態(tài)顯示方法,靜態(tài)顯示模塊的硬件制作較復(fù)雜及功耗大,要用到多個移位寄存器,但不占用端口,只需兩根串口線輸出。
方案二:采用動態(tài)顯示方法,動態(tài)顯示模塊的硬件制作簡單,段掃描和位掃描各占用一個端口,總需占用單片機(jī)14個端口,采用間斷掃描法功耗小、硬件成本低及整個硬件系統(tǒng)體積相對減小。
方案三:采用LCD的方法,具有硬件制作簡單可直接與單片機(jī)接口,顯示內(nèi)容多,功耗小,成本低等優(yōu)點,LCM1602可顯示32個字符,采用LCD的缺點是亮度不夠。
比較以上三種方案:方案一硬件復(fù)雜體積大、功耗大;方案二硬件簡單、功耗小;方案三硬件簡單,顯示內(nèi)容多,功耗小,成本低等。本系統(tǒng)設(shè)計要求達(dá)到功耗小、體積小、成本低,顯示信息多等要求,權(quán)衡三種方案,選擇方案三。
3 系統(tǒng)硬件的設(shè)計
根據(jù)上述所確定的系統(tǒng)方案構(gòu)想,下面進(jìn)行系統(tǒng)硬件電路的具體設(shè)計,系統(tǒng)的具體設(shè)計在下面會詳細(xì)介紹。
3.1 STC89C52單片機(jī)
單片微型計算機(jī)是隨著微型計算機(jī)的發(fā)展而產(chǎn)生和發(fā)展的。自從1975 年美國德克薩斯儀器公司的第一臺單片微型計算機(jī)( 簡稱單片機(jī))TMS-1000 問世以來,迄今為止,單片機(jī)技術(shù)已成為計算機(jī)技術(shù)的一個獨特分支,單片機(jī)的應(yīng)用領(lǐng)域也越來越廣泛,特別是在工業(yè)控制中經(jīng)常遇到對某些物理量進(jìn)行定時采樣與控制的問題,在儀器儀表智能化中也扮演著極其重要的角色。
如果將8位單片機(jī)的推出作為起點,那么單片機(jī)的發(fā)展歷史大致可以分為以下幾個階段:
第一階段(1976—1978):單片機(jī)的探索階段。以Intel公司的MCS-48為代表。MCS-48的推出是在工控領(lǐng)域的探索,參與這一探索的公司還有Motorola、Zilog等。都取得了滿意的效果。這就是SCM的誕生年代,“單片機(jī)”一詞即由此而來。
第二階段(1978—1982):單片機(jī)的完善階段。Intel公司在MCS-48基礎(chǔ)上推出了完善的、典型的單片機(jī)系列MCS-51。它在以下幾個方面奠定了典型的通用總線型單片機(jī)體系結(jié)構(gòu)。
(1)完善的外部總線。MCS-51設(shè)置了經(jīng)典的8位單片機(jī)的總線結(jié)構(gòu),包括8位數(shù)據(jù)總線、16位地址總線、控制總線及具有多機(jī)通信功能的串行通信接口。
(2)CPU外圍功能單元的集中管理模式。
(3)體現(xiàn)工控特性的地址空間及位操作方式。
(4)指令系統(tǒng)趨于豐富和完善,并且增加了許多突出控制功能的指令。
第三階段(1982—1990):8位單片機(jī)的鞏固發(fā)展及16位單片機(jī)的推出階段,也是單片機(jī)向微控制器發(fā)展的階段。Intel公司推出的MCS-96系列單片機(jī),將一些用于測控系統(tǒng)的模數(shù)轉(zhuǎn)換器、程序運行監(jiān)視器、脈寬調(diào)制器等納入片中,體現(xiàn)了單片機(jī)的微控制器特征。
第四階段(1990—):微控制器的全面發(fā)展階段。隨著單片機(jī)在各個領(lǐng)域全面、深入地發(fā)展和應(yīng)用,出現(xiàn)了高速、大尋址范圍、強(qiáng)運算能力的8位/16位/32位通用型單片機(jī),以及小型廉價的專用型單片機(jī)。
單片機(jī)是在集成電路芯片上集成了各種元件的微型計算機(jī),這些元件包括中央處理器CPU、數(shù)據(jù)存儲器RAM、程序存儲器ROM、定時/計數(shù)器、中斷系統(tǒng)、時鐘部件的集成和I/O接口電路。由于單片機(jī)具有體積小、價格低、可靠性高、開發(fā)應(yīng)用方便等特點,因此在現(xiàn)代電子技術(shù)和工業(yè)領(lǐng)域應(yīng)用較為廣泛,在智能儀表中單片機(jī)是應(yīng)用最多、最活躍的領(lǐng)域之一。在控制領(lǐng)域中,現(xiàn)如今人們更注意計算機(jī)的底成本、小體積、運行的可靠性和控制的靈活性。在各類儀器、儀表中引入單片機(jī),使儀器儀表智能化,提高測試的自動化程度和精度,提高計算機(jī)的運算速度,簡化儀器儀表的硬件結(jié)構(gòu),提高其性能價格比。
單片機(jī)主要特點:
(1)有優(yōu)異的性能價格比。
(2)集成度高、體積小、有很高的可靠性。單片機(jī)把各功能部件集成在一塊芯片上,內(nèi)部采用總線結(jié)構(gòu),減少了各芯片之間的連線,大大提高了單片機(jī)的可靠性和抗干擾能力。另外,其體積小,對于強(qiáng)磁場環(huán)境易于采取屏蔽措施,適合在惡劣環(huán)境下工作。
(3)控制功能強(qiáng)。為了滿足工業(yè)控制的要求,一般單片機(jī)的指令系統(tǒng)中均有極豐富的轉(zhuǎn)移指令、I/O口的邏輯操作以及位處理功能。單片機(jī)的邏輯控制功能及運行速度均高于同一檔次的微機(jī)。
(4)低功耗、低電壓,便于生產(chǎn)便攜式產(chǎn)品。
(5)外部總線增加了I2C(Inter-Integrated Circuit)及SPI(Serial Peripheral Interface)等串行總線方式,進(jìn)一步縮小了體積,簡化了結(jié)構(gòu)。
(6)單片機(jī)的系統(tǒng)擴(kuò)展和系統(tǒng)配置較典型、規(guī)范,容易構(gòu)成各種規(guī)模的應(yīng)用系統(tǒng)。
優(yōu)異的性能價格比。
1)集成度高、體積小、有很高的可靠性。
單片機(jī)把各功能部件集成在一塊芯片上,內(nèi)部采用總線結(jié)構(gòu),減少了各芯片之間的連線,大大提高了單片機(jī)的可靠性與抗干擾能力。另外,其體積小,對于強(qiáng)磁場環(huán)境易于采取屏蔽措施,適合于在惡劣環(huán)境下工作。
此外,程序多采取固化形式也可以提高可靠性。
2)控制功能強(qiáng)。
為了滿足工業(yè)控制要求,一般單片機(jī)的指令系統(tǒng)中均有極豐富的轉(zhuǎn)移指令、I/O口的邏輯操作以及位處理功能。單片機(jī)的邏輯控制功能及運行速度均高于同一檔次的微機(jī)。
單片機(jī)的系統(tǒng)擴(kuò)展、系統(tǒng)配置較典型、規(guī)范,容易構(gòu)成各種規(guī)模的應(yīng)用系統(tǒng)。
VCC:STC89C52電源正端輸入,接+5V。
GND:電源地端。
XTAL1:? 單芯片系統(tǒng)時鐘的反相放大器輸入端。
XTAL2: 系統(tǒng)時鐘的反相放大器輸出端,一般在設(shè)計上只要在 XTAL1 和 XTAL2 上接上一只石英振蕩晶體系統(tǒng)就可以動作了,此外可以在兩引腳與地之間加入一 20PF 的小電容,可以使系統(tǒng)更穩(wěn)定,避免噪聲干擾而死機(jī)。
RESET:STC89C52的重置引腳,高電平動作,當(dāng)要對晶片重置時,只要對此引腳電平提升至高電平并保持兩個機(jī)器周期以上的時間,AT89S51便能完成系統(tǒng)重置的各項動作,使得內(nèi)部特殊功能寄存器之內(nèi)容均被設(shè)成已知狀態(tài),并且至地址0000H處開始讀入程序代碼而執(zhí)行程序。
EA/Vpp:"EA"為英文"External Access"的縮寫,表示存取外部程序代碼之意,低電平動作,也就是說當(dāng)此引腳接低電平后,系統(tǒng)會取用外部的程序代碼(存于外部EPROM中)來執(zhí)行程序。因此在8031及8032中,EA引腳必須接低電平,因為其內(nèi)部無程序存儲器空間。如果是使用 8751 內(nèi)部程序空間時,此引腳要接成高電平。此外,在將程序代碼燒錄至8751內(nèi)部EPROM時,可以利用此引腳來輸入21V的燒錄高壓(Vpp)。
ALE/PROG:ALE是英文"Address Latch Enable"的縮寫,表示地址鎖存器啟用信號。STC89C52可以利用這支引腳來觸發(fā)外部的8位鎖存器(如74LS373),將端口0的地址總線(A0~A7)鎖進(jìn)鎖存器中,因為STC89C52是以多工的方式送出地址及數(shù)據(jù)。平時在程序執(zhí)行時ALE引腳的輸出頻率約是系統(tǒng)工作頻率的1/6,因此可以用來驅(qū)動其他周邊晶片的時基輸入。此外在燒錄8751程序代碼時,此引腳會被當(dāng)成程序規(guī)劃的特殊功能來使用。
PSEN:此為"Program Store Enable"的縮寫,其意為程序儲存啟用,當(dāng)8051被設(shè)成為讀取外部程序代碼工作模式時(EA=0),會送出此信號以便取得程序代碼,通常這支腳是接到EPROM的OE腳。STC89C52可以利用PSEN及RD引腳分別啟用存在外部的RAM與EPROM,使得數(shù)據(jù)存儲器與程序存儲器可以合并在一起而共用64K的定址范圍。
PORT0(P0.0~P0.7):端口0是一個8位寬的開路汲極(Open Drain)雙向輸出入端口,共有8個位,P0.0表示位0,P0.1表示位1,依此類推。其他三個I/O端口(P1、P2、P3)則不具有此電路組態(tài),而是內(nèi)部有一提升電路,P0在當(dāng)做I/O用時可以推動8個LS的TTL負(fù)載。
PORT2(P2.0~P2.7):端口2是具有內(nèi)部提升電路的雙向I/O端口,每一個引腳可以推動4個LS的TTL負(fù)載,若將端口2的輸出設(shè)為高電平時,此端口便能當(dāng)成輸入端口來使用。P2除了當(dāng)做一般I/O端口使用外,若是在STC89C52擴(kuò)充外接程序存儲器或數(shù)據(jù)存儲器時,也提供地址總線的高字節(jié)A8~A15,這個時候P2便不能當(dāng)做I/O來使用了。
PORT1(P1.0~P1.7):端口1也是具有內(nèi)部提升電路的雙向I/O端口,其輸出緩沖器可以推動4個LS TTL負(fù)載,同樣地若將端口1的輸出設(shè)為高電平,便是由此端口來輸入數(shù)據(jù)。如果是使用8052或是8032的話,P1.0又當(dāng)做定時器2的外部脈沖輸入腳,而P1.1可以有T2EX功能,可以做外部中斷輸入的觸發(fā)腳位。
PORT3(P3.0~P3.7):端口3也具有內(nèi)部提升電路的雙向I/O端口,其輸出緩沖器可以推動4個TTL負(fù)載,同時還多工具有其他的額外特殊功能,包括串行通信、外部中斷控制、計時計數(shù)控制及外部數(shù)據(jù)存儲器內(nèi)容的讀取或?qū)懭肟刂频裙δ堋?/p>
其引腳分配如下:
P3.0:RXD,串行通信輸入。
P3.1:TXD,串行通信輸出。
P3.2:INT0,外部中斷0輸入。
P3.3:INT1,外部中斷1輸入。
P3.4:T0,計時計數(shù)器0輸入。
P3.5:T1,計時計數(shù)器1輸入。
P3.6:WR:外部數(shù)據(jù)存儲器的寫入信號。
P3.7:RD,外部數(shù)據(jù)存儲器的讀取信號。
RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時,要保持RST腳兩個機(jī)器周期的高電平時間。
ALE/PROG:當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。
PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機(jī)器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。
EA/VPP:當(dāng)/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時,/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時,此間內(nèi)部程序存儲器。
圖2 STC89C52單片機(jī)引腳圖
3.1.1 最小系統(tǒng)設(shè)計
最小系統(tǒng)包括單片機(jī)及其所需的必要的電源、時鐘、復(fù)位等部件,能使單片機(jī)始終處于正常的運行狀態(tài)。電源、時鐘等電路是使單片機(jī)能運行的必備條件,可以將最小系統(tǒng)作為應(yīng)用系統(tǒng)的核心部分,通過對其進(jìn)行存儲器擴(kuò)展、A/D擴(kuò)展等,使單片機(jī)完成較復(fù)雜的功能。
STC89C52是片內(nèi)有ROM/EPROM的單片機(jī),因此,這種芯片構(gòu)成的最小系統(tǒng)簡單﹑可靠。用STC89C52單片機(jī)構(gòu)成最小應(yīng)用系統(tǒng)時,只要將單片機(jī)接上時鐘電路和復(fù)位電路即可,結(jié)構(gòu)如圖2所示,由于集成度的限制,最小應(yīng)用系統(tǒng)只能用作一些小型的控制單元。
圖3 單片機(jī)最小系統(tǒng)原理框圖
3.1.2 時鐘電路
STC89C52單片機(jī)的時鐘信號通常有兩種方式產(chǎn)生:一是內(nèi)部時鐘方式,二是外部時鐘方式。內(nèi)部時鐘方式如圖3所示。在STC89C52單片機(jī)內(nèi)部有一振蕩電路,只要在單片機(jī)的XTAL1(18)和XTAL2(19)引腳外接石英晶體(簡稱晶振),就構(gòu)成了自激振蕩器并在單片機(jī)內(nèi)部產(chǎn)生時鐘脈沖信號。圖中電容C1和C2的作用是穩(wěn)定頻率和快速起振,電容值在5~30pF,典型值為30pF。晶振CYS的振蕩頻率范圍在1.2~12MHz間選擇,典型值為12MHz和6MHz。
圖4 STC89C52內(nèi)部時鐘電路
3.1.3 復(fù)位電路
當(dāng)在STC89C52單片機(jī)的RST引腳引入高電平并保持2個機(jī)器周期時,單片機(jī)內(nèi)部就執(zhí)行復(fù)位操作(若該引腳持續(xù)保持高電平,單片機(jī)就處于循環(huán)復(fù)位狀態(tài))。
復(fù)位電路通常采用上電自動復(fù)位和按鈕復(fù)位兩種方式。
最簡單的上電自動復(fù)位電路中上電自動復(fù)位是通過外部復(fù)位電路的電容充放電來實現(xiàn)的。只要Vcc的上升時間不超過1ms,就可以實現(xiàn)自動上電復(fù)位。
除了上電復(fù)位外,有時還需要按鍵手動復(fù)位。本設(shè)計就是用的按鍵手動復(fù)位。按鍵手動復(fù)位有電平方式和脈沖方式兩種。其中電平復(fù)位是通過RST(9)端與電源Vcc接通而實現(xiàn)的。按鍵手動復(fù)位電路見圖4。時鐘頻率用11.0592MHZ時C取10uF,R取10kΩ。
圖5 STC89C52 復(fù)位電路
3.2時鐘芯片DS1302接口設(shè)計與性能分析
3.2.1 DS1302性能簡介
DS1302是Dallas公司生產(chǎn)的一種實時時鐘芯片。它通過串行方式與單片機(jī)進(jìn)行數(shù)據(jù)傳送,能夠向單片機(jī)提供包括秒、分、時、日、月、年等在內(nèi)的實時時間信息,并可對月末日期、閏年天數(shù)自動進(jìn)行調(diào)整;它還擁有用于主電源和備份電源的雙電源引腳,在主電源關(guān)閉的情況下,也能保持時鐘的連續(xù)運行。另外,它還能提供31字節(jié)的用于高速數(shù)據(jù)暫存的RAM。
DS1302時鐘芯片內(nèi)主要包括移位寄存器、控制邏輯電路、振蕩器。DS1302與單片機(jī)系統(tǒng)的數(shù)據(jù)傳送依靠RST,I/O,SCLK三根端線即可完成。其工作過程可概括為:首先系統(tǒng)RST引腳驅(qū)動至高電平,然后在SCLK時鐘脈沖的作用下,通過I/O引腳向DS1302輸入地址/命令字節(jié),隨后再在SCLK時鐘脈沖的配合下,從I/O引腳寫入或讀出相應(yīng)的數(shù)據(jù)字節(jié)。因此,其與單片機(jī)之間的數(shù)據(jù)傳送是十分容易實現(xiàn)的,DS1302的引腳排列及內(nèi)部結(jié)構(gòu)圖如圖2:
DS1302引腳說明:
X1,X2???????? 32.768kHz晶振引腳
GND???????? ???地線
RST??????????? 復(fù)位端
I/O??????????? 數(shù)據(jù)輸入/輸出端口
SCLK?????????? 串行時鐘端口
VCC1?????????? 慢速充電引腳
VCC2?????????? 電源引腳
圖5 DS1302管腳圖
3.2.2 DS1302接口電路設(shè)計
1時鐘芯片DS1302的接口電路及工作原理:
圖6 DS1302與MCU接口電路
圖6為DS1302的接口電路,其中Vcc1為后備電源,Vcc2為主電源。VCC1在單電源與電池供電的系統(tǒng)中提供低電源并提供低功率的電池備份。VCC2在雙電源系統(tǒng)中提供主電源,在這種運用方式中VCC1連接到備份電源,以便在沒有主電源的情況下能保存時間信息以及數(shù)據(jù)。
DS1302由VCC1或VCC2 兩者中較大者供電。當(dāng)VCC2大于VCC1+0.2V時,VCC2給DS1302供電。當(dāng)VCC2小于VCC1時,DS1302由VCC1供電。
DS1302在每次進(jìn)行讀、寫程序前都必須初始化,先把SCLK端置 “0”,接著把RST端置“1”,最后才給予SCLK脈沖;讀/寫時序如下圖5所示。表-1為DS1302的控制字,此控制字的位7必須置1,若為0則不能對DS1302進(jìn)行讀寫數(shù)據(jù)。對于位6,若對時間進(jìn)行讀/寫時,CK=0,對程序進(jìn)行讀/寫時RAM=1。位1至位5指操作單元的地址。位0是讀/寫操作位,進(jìn)行讀操作時,該位為1;進(jìn)行寫操作時,該位為0??刂谱止?jié)總是從最低位開始輸入/輸出的。表-2為DS1302的日歷、時間寄存器內(nèi)容:“CH”是時鐘暫停標(biāo)志位,當(dāng)該位為1時,時鐘振蕩器停止,DS1302處于低功耗狀態(tài);當(dāng)該位為0時,時鐘開始運行?!癢P”是寫保護(hù)位,在任何的對時鐘和RAM的寫操作之前,“WP”必須為0。當(dāng)“WP”為1時,寫保護(hù)位防止對任一寄存器的寫操作。
2、DS1302的控制字
DS1302的控制字如表2所示??刂谱止?jié)的高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入DS1302中,位6如果0,則表示存取日歷時鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為1表
示進(jìn)行讀操作,為0表示進(jìn)行寫操作??刂谱止?jié)總是從最低位開始輸出。
表1 DS1302的控制字格式
?1 | RAM/CK | A4 | A3 | A2 | A1 | A0 | RD/WR |
3、數(shù)據(jù)輸入輸出(I/O)
在控制指令字輸入后的下一個SCLK時鐘的上升沿時,數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個SCLK脈沖的下
降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時從低位0位到高位7。如下圖7所示。
圖7 DS1302讀/寫時序圖
4、DS1302的寄存器AM(———)
DS1302有12個寄存器,其中有7個寄存器與日歷、時鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式,其日歷、時間寄存器及其控制字見表2。
表2 DS1302的日歷、時間寄存器
寫寄存器 | 讀寄存器 | Bit7 | Bit6 | Bit5 | Bit7 | Bit3 | Bit2 | Bit1 | Bit0 |
80H | 81H | CH | 10秒 | 秒 | |||||
82H | 83H | 10分 | 分 | ||||||
84H | 85H | 12/24(——) | 0 | 10 | 時 | 時 | |||
AM(——)/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 還有年份寄存器、控制寄存器、充電寄存器、時鐘突發(fā)寄存器及
與RAM相關(guān)的寄存器等。時鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內(nèi)容。 DS1302與RAM相關(guān)的寄存器分為兩類:一類是單個RAM單元,共31個,每個單元組態(tài)為一個8位的字節(jié),其命令控制字為C0H~FDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的RAM寄存器,此方式下可一次性讀寫所有的RAM的31個字節(jié),命令控制字為FEH(寫)、FFH(讀)。
3.3溫度芯片DS18B20接口設(shè)計與性能分析
3.3.1 DS18B20性能簡介
1.DS18B20的主要特性
DS18B20溫度傳感器是美國DALLAS半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度
傳感器,與傳統(tǒng)的熱敏電阻等元件相比,它能直接讀出被測溫度,并且可根據(jù)實際要求通過簡單的編程實現(xiàn)9-12位的數(shù)字值讀數(shù)方式?,F(xiàn)場溫度直接以"一線總線"的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場溫度測量,如:環(huán)境控制、設(shè)備或過程控制、測溫類消費電子產(chǎn)品等。與前一代產(chǎn)品不同,新的產(chǎn)品支持3V~5.5V的電壓范圍,使系統(tǒng)設(shè)計更靈活、方便。其性能特點可歸納如下:
1.獨特的單線接口僅需要一個端口引腳進(jìn)行通信;
2.測溫范圍在-55℃到125℃,分辨率最大可達(dá)0.0625℃;
3.采用了3線制與單片機(jī)相連,減少了外部硬件電路;
4.零待機(jī)功耗;
5.可通過數(shù)據(jù)線供電,電壓范圍在3.0V-5.5V;
6.用戶可定義的非易失性溫度報警設(shè)置;
7.報警搜索命令識別并標(biāo)志超過程序限定溫度(溫度報警條件)的器件;
8.負(fù)電壓特性,電源極性接反時,溫度計不會因發(fā)熱燒毀,只是不能正常工作。
2.DS18B20工作原理
DS18B20的讀寫時序和測溫原理與DS1820相同,只是得到的溫度值的位數(shù)因分辨率不同而不同,且溫度轉(zhuǎn)換時的延時時間由2s減為750ms。 DS18B20測溫原理如圖5所示。圖中低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用于產(chǎn)生固定頻率的脈沖信號送給計數(shù)器1。高溫度系數(shù)晶振隨溫度變化其振蕩率明顯改變,所產(chǎn)生的信號作為計數(shù)器2的脈沖輸入。計數(shù)器1和溫度寄存器被預(yù)置在-55℃所對應(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ù)值即為所測溫度。圖5中的斜率累加器用于補(bǔ)償和修正測溫過程中的非線性,其輸出用于修正計數(shù)器1的預(yù)置值。
圖8 DS18B20測溫原
3.3.2 DS18B20接口電路設(shè)計
如6圖所示,該系統(tǒng)中采用數(shù)字式溫度傳感器DS18B20,具有測量精度高,電路連接簡單特點,此類傳感器僅需要一條數(shù)據(jù)線進(jìn)行數(shù)據(jù)傳輸,用P3.7與DS18B20的DQ口連接,Vcc接電源,GND接地。DS18B20的工作電流約為1mA,VCC一般為5V,則電阻R=5V/1mA=5KΩ,目前用的電阻一般不是可調(diào)電阻,只是固定阻值,市場上有的就那么幾個型號。其中DS18B20接有電源,則需要一個上拉即可穩(wěn)定的工作。這個電阻通常比較大,我們選擇10K電阻的來起到上拉作用,使之為高電平,使后續(xù)電路保護(hù)。
? 圖9 溫度傳感器DS18B20接口
4 系統(tǒng)軟件的設(shè)計
電子萬年歷的功能是在程序控制下實現(xiàn)的。該系統(tǒng)的軟件設(shè)計方法與硬件設(shè)計相對應(yīng),按整體功能分成多個不同的程序模塊,分別進(jìn)行設(shè)計、編程和調(diào)試,最后通過主程序將各程序模塊連接起來。這樣有利于程序修改和調(diào)試,增強(qiáng)了程序的可移植性。
本系統(tǒng)的軟件部分主要要進(jìn)行公歷計算程序設(shè)計,溫度測量程序設(shè)計,按鍵的掃描輸入等。程序開始運行后首先要進(jìn)行初始化,把單片機(jī)的各引腳的狀態(tài)按程序里面的初始化命令進(jìn)行初始化,初始化完成后運行溫度測量程序,讀取出溫度傳感器測量出來的溫度,然后運行公歷計算程序,得到公歷的時間、日期信息,再運行按鍵掃描程序,檢測有無按鍵按下,如果沒有按鍵按下則直接調(diào)用節(jié)日計算程序,根據(jù)得到的公歷日期信息計算出節(jié)日,如果有按鍵按下則更新按鍵修改后的變量后送給節(jié)日計算程序,由節(jié)日計算程序根據(jù)修改后的變量計算出對應(yīng)的節(jié)假日,計算完成后運行顯示程序,顯示程序?qū)⒌玫降臏囟葦?shù)據(jù)、公歷信息、節(jié)假日信息送給對應(yīng)的數(shù)碼管讓其顯示。
4.1主程序流程圖的設(shè)計
主程序流程圖如圖20
圖20 主程序流程圖
4.2 程序設(shè)計
4.2.1 DS1302讀寫程序設(shè)計
本系統(tǒng)的時間讀取主要來源于單片機(jī)對DS1302的操作,在硬件上時鐘芯片DS1302與單片機(jī)的連接需要三條線,即SCLK(7)、I/O(6)、RST(5),具體連接圖見系統(tǒng)硬件設(shè)計原理圖。讀取寫程序設(shè)計如下:
函 數(shù) 名:RTInputByte()
功??? 能:實時時鐘寫入一字節(jié)
說??? 明:往DS1302寫入1Byte數(shù)據(jù) (內(nèi)部函數(shù))
入口參數(shù):d 寫入的數(shù)據(jù)
返 回 值:無
void RTInputByte(uchar d)
{
uchar i;
ACC = d;
for(i=8; i>0; i--)
{
T_IO = ACC0;?????????? /*相當(dāng)于匯編中的 RRC */
T_CLK = 1;
T_CLK = 0;
ACC = ACC >> 1;
}
函 數(shù) 名:RTOutputByte()
功??? 能:實時時鐘讀取一字節(jié)
說??? 明:從DS1302讀取1Byte數(shù)據(jù) (內(nèi)部函數(shù))
入口參數(shù):無
返 回 值:ACC
uchar RTOutputByte(void)
{
uchar i;
for(i=8; i>0; i--)
{
ACC = ACC >>1;???????? /*相當(dāng)于匯編中的 RRC */
ACC7 = T_IO;
T_CLK = 1;
T_CLK = 0;
}
return(ACC);
}
函 數(shù) 名:W1302()
功??? 能:往DS1302寫入數(shù)據(jù)
說??? 明:先寫地址,后寫命令/數(shù)據(jù) (內(nèi)部函數(shù))
調(diào)??? 用:RTInputByte() , RTOutputByte()
入口參數(shù):ucAddr: DS1302地址, ucData: 要寫的數(shù)據(jù)
返 回 值:無
void W1302(uchar ucAddr, uchar ucDa)
{
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(ucAddr);?????? /* 地址,命令 */
RTInputByte(ucDa);?????? /* 寫1Byte數(shù)據(jù)*/
T_CLK = 1;
T_RST = 0;
}
函 數(shù) 名:R1302()
功??? 能:讀取DS1302某地址的數(shù)據(jù)
說??? 明:先寫地址,后讀命令/數(shù)據(jù) (內(nèi)部函數(shù))
調(diào)??? 用:RTInputByte() , RTOutputByte()
入口參數(shù):ucAddr: DS1302地址
?返 回 值:ucData :讀取的數(shù)據(jù)
uchar R1302(uchar ucAddr)
{
uchar ucData;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(ucAddr);???????????? /* 地址,命令 */
ucData = RTOutputByte();???????? /* 讀1Byte數(shù)據(jù) */
T_CLK = 1;
T_RST = 0;
return(ucData);
}
DS1302與微處理器進(jìn)行數(shù)據(jù)交換時,首先由微處理器向電路發(fā)送命令字節(jié),命令字節(jié)最高位MSB(D7)必須為邏輯 1,如果D7=0,則禁止寫DS1302,即寫保護(hù);D6=0,指定時鐘數(shù)據(jù),D6=1,指定RAM數(shù)據(jù);D5~D1指定輸入或輸出的特定寄存器;最低位LSB(D0)為邏輯0,指定寫操作(輸入),D0=1,指定讀操作(輸出) 。
4.2.2 溫度程序設(shè)計
單總線上最基本的操作有初始化、寫和讀3種,所有其它的操作都由這3種基本操作組合而成,初始化用于對總線上的器件進(jìn)行狀態(tài)復(fù)位,寫用于主節(jié)點向總線上寫入一位數(shù)據(jù),讀用于主節(jié)點從總線上讀取一位數(shù)據(jù)。在這3種操作中,只有寫操作是單向的,初始化操作和讀操作都是雙向的。具體程序設(shè)計如下:
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 總線上讀取一個字節(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 總線上寫一個字節(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);
}
5 系統(tǒng)的機(jī)體設(shè)計及調(diào)試
5.1系統(tǒng)的模塊組成
本設(shè)計由數(shù)據(jù)顯示模塊、溫度采集模塊、時間處理模塊和調(diào)整設(shè)置模塊四個模塊組成。系統(tǒng)的核心采用的是STC89C52單片機(jī);數(shù)據(jù)顯示模塊采用的是LCD液晶顯示;
溫度采集模塊用的是DS18B20溫度傳感器,該傳感器所采用的是單總線傳輸,內(nèi)部帶有A/D轉(zhuǎn)換,用起來非常方便;時間處理模塊用的是DS1302時鐘芯片,可以對年、月、日、周日、時、分、秒進(jìn)行計時,還具有閏年補(bǔ)償?shù)榷喾N功能;調(diào)整設(shè)置模塊共包括四個按鍵:模式選擇鍵、功能選擇鍵、調(diào)整加按鍵、調(diào)整減按鍵。電路實際效果如圖21
圖21 實際效果圖
5.2系統(tǒng)軟件調(diào)試與仿真
通過編寫出程序,然后在仿真原理圖中檢查單片機(jī)和液晶屏等器件是否能夠正常顯示。通過Keil uVision4軟件的使用來編譯程序的,確保了程序的正確性及程序所設(shè)計的功能能夠順利的實現(xiàn)。如圖22程序運行圖
通過軟件的調(diào)試,接著在Proteus仿真軟件里進(jìn)行仿真。按原理圖的設(shè)計在ISIS軟件中連接好電路。接好后裝入HEX文件后,單擊仿真運行工具欄上的“運行”,在ISIS的編輯窗口中可以看到單片機(jī)應(yīng)用系統(tǒng)的仿真運行效果。其中,紅色方塊代表高電平,藍(lán)色方塊代表低電平。如圖21仿真效果圖
5.3系統(tǒng)硬件調(diào)試
①次電路主要是檢測格其引腳電壓是否正常,晶振和電源是否接好,檢測硬件電路是否有短路、斷路、虛焊等,以確保設(shè)計的可靠性和電器元件的性能。而電路中的電源電路、晶體振蕩電路、按鍵接口電路及復(fù)位電路、鬧鐘電路等都是采用基礎(chǔ)的電路設(shè)計,除了基礎(chǔ)電路硬件調(diào)試外我們還可以通過軟件來測試硬件,如通過下載口寫入其它一個比較簡單的程序,以便測試。
②首先由USB電源插口接入5V的直流電壓供給系統(tǒng)使用。在這里接上一個發(fā)光二級管作為指示,單輸入電壓正常時,二極管亮,LCD同時顯示正常。系統(tǒng)在正常工作時,LCD液晶上第一行顯示時分秒和溫度,第二行顯示年月日和星期,如果想要對時間進(jìn)行調(diào)整,可以通過調(diào)整設(shè)置模塊來實現(xiàn)。當(dāng)按下設(shè)置鍵P3.0鍵時可調(diào)節(jié)主頁面的時分秒、年月日的調(diào)節(jié),P3.1為調(diào)整加按鍵,P3.2為調(diào)整減按鍵,P3.3按下時可進(jìn)入另一種模式。第二種模式可顯示閏年,第三種模式可設(shè)置鬧鐘時間。如果想要退出該模式就在按一下P3.3即可。
③在硬件調(diào)試過程中,當(dāng)接通電源的時候,我們發(fā)現(xiàn)液晶顯示器沒有工作,背光燈有亮但沒有數(shù)據(jù)出來。但電源指示燈已亮,說明電源輸入正常,待我們用萬用表測
電路中各電壓時發(fā)現(xiàn),單片機(jī)各引腳電壓也正常,顯示器的各引腳也正常。經(jīng)過同學(xué)與老師的幫助,發(fā)現(xiàn)程序出錯,改后再接電源,電路一切正常。
系統(tǒng)原理圖如圖24:
圖24 系統(tǒng)原理圖
資料內(nèi)容
需要完整的資料可在我的資源里下載,也可以加入我的紛傳圈子,里面有資源壓縮包的百度網(wǎng)盤下載地址及提取碼。
紛傳點擊用微信打開即可,過程有點繁瑣請見諒。