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