《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于單片機的多功能電子萬年歷設計
基于單片機的多功能電子萬年歷設計
中電網(wǎng)
錢超,,王福明
摘要: 隨著生活節(jié)奏的日益加快,,人們的時間觀也越來越重,同時對電子鐘表,、日歷的需求也隨之提高。因此,,研究實用電子時鐘及其擴展應用,,有著非常現(xiàn)實的意義,,具有很大的實用價值,。
關鍵詞: 51單片機 單片機
Abstract:
Key words :

中北大學,信息與通信工程學院

 

引言

 

隨著生活節(jié)奏的日益加快,,人們的時間觀也越來越重,,同時對電子鐘表,、日歷的需求也隨之提高。因此,,研究實用電子時鐘及其擴展應用,,有著非常現(xiàn)實的意義,,具有很大的實用價值,。

本系統(tǒng)程序由主程序、中斷服務函數(shù)和多個子函數(shù)構成,。主函數(shù)主要完成各子函數(shù)和中斷函數(shù)的初始化,。定時中斷函數(shù)主要完成時鐘芯片的定時掃描及鍵盤掃描。時鐘芯片的讀寫函數(shù)主要是將時間,、日歷信息讀出來,,并把要修改具體值寫入時鐘芯片內(nèi)部。

系統(tǒng)的硬件設計與電路原理

電路設計框圖

系統(tǒng)硬件概述

本電路是由AT89S52單片機為控制核心,,具有在線編程功能,、低功耗、能在3V的超低壓工作,。時鐘電路由DS1302提供,,它是一種高性能、低功耗,、帶RAM的實時時鐘電路,,它可以對年、月,、日,、周日、時,、分,、秒進行計時,工作電壓為2.5V~5.5V,。采用三線接口與CPU進行同步通信,,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。DS1302內(nèi)部有一個31×8的用于臨時性存放數(shù)據(jù)的RAM寄存器,??僧a(chǎn)生年、月,、日,、周日、時、分,、秒,,具有使用壽命長、精度高和低功耗等特點,,同時具有掉電自動保存功能,。

主控制模塊

單片機主控制模塊的設計

AT89S52單片機為40引腳雙列直插芯片,有四個I/O口P0,,P1,,P2,P3,,MCS-51單片機共有4個8位的I/O口(P0,、P1、P2,、P3),,每一條I/O線都能獨立地作輸出或輸入。

時鐘電路模塊

時鐘電路模塊的設計

DS1302的引腳排列如圖3所示,,其中Vcc1為后備電源,,Vcc2為主電源。在主電源關閉的情況下,,也能保持時鐘的連續(xù)運行,。DS1302由Vcc1或Vcc2兩者中的較大者供電。當Vcc2大于Vcc1+0.2V時,,Vcc2給DS1302供電,;當Vcc2小于Vcc1時,DS1302由Vcc1供電,。X1和X2是振蕩源,,外接32.768KHz晶振。RST是復位/片選線,,通過把RST輸入驅動置高電平來啟動所有的數(shù)據(jù)傳送,。RST輸入有兩種功能:首先,RST接通控制邏輯,,允許地址/命令序列送入移位寄存器;其次,,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段,。

圖1 整體電路框圖


圖2 主控制系統(tǒng)

圖3 時鐘控制系統(tǒng)

時鐘電路模塊工作原理

DS1302在每次進行讀、寫程序前都必須初始化,,先把SCLK端置“0”,,接著把RST端置“1”,最后才給予SCLK脈沖;讀/寫時序如圖4所示,。表1為DS1302的控制字,,此控制字的位7必須置1,若為0則不能對DS1302進行讀寫數(shù)據(jù),。對于位6,,若對程序進行讀/寫時RAM=1,對時間進行讀/寫時,,CK=0,。位1至位5指操作單元的地址。位0是讀/寫操作位,,進行讀操作時,,該位為1;該位為0則表示進行的是寫操作,??刂谱止?jié)總是從最低位開始輸入/輸出的。表2為DS1302的日歷,、時間寄存器內(nèi)容:“CH”是時鐘暫停標志位,,當該位為1時,時鐘振蕩器停止,,DS1302處于低功耗狀態(tài),;當該位為0時,時鐘開始運行,。“WP”是寫保護位,,在任何的對時鐘和RAM的寫操作之前,WP必須為0,。當“WP”為1時,,寫保護位防止對任一寄存器的寫操作。

DS1302的控制字節(jié)

DS1302的控制字如表1所示,??刂谱止?jié)的高有效位(位7)必須是邏輯1,如果它為0,,則不能把數(shù)據(jù)寫入DS1302中,,位6如果為0,則表示存取日歷時鐘數(shù)據(jù),,為1表示存取RAM數(shù)據(jù),;位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進行寫操作,,為1表示進行讀操作,,控制字節(jié)總是從最低位開始輸出,。

數(shù)據(jù)輸入輸出(I/O)

在控制指令字輸入后的下一個SCLK時鐘的上升沿時,數(shù)據(jù)被寫入DS1302,,數(shù)據(jù)輸入從低位即位0開始,。同樣,在緊跟8位的控制指令字后的下一個SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),,讀出數(shù)據(jù)時從低位0位到高位7,。如圖4所示。

表1 DS1302的控制字格式



圖4 DS1302讀/寫時序圖

DS1302的寄存器

DS1302有12個寄存器,,其中有7個寄存器與日歷,、時鐘相關,存放的數(shù)據(jù)位為BCD碼形式,,其日歷,、時間寄存器及其控制字見表2。

此外,,DS1302還有年份寄存器,、控制寄存器、充電寄存器,、時鐘突發(fā)寄存器及與RAM相關的寄存器等,。時鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內(nèi)容。DS1302與RAM相關的寄存器分為兩類:一類是單個RAM單元,,共31個,,每個單元組態(tài)為一個8位的字節(jié),其命令控制字為C0H~FDH,,其中奇數(shù)為讀操作,,偶數(shù)為寫操作;另一類為突發(fā)方式下的RAM寄存器,,此方式下可一次性讀寫所有的RAM的31個字節(jié),,命令控制字為FEH(寫)、FFH(讀),。

時鐘模塊實現(xiàn)功能

該模塊為系統(tǒng)提供精準的秒,、分、時,、日,、月、年等實時時間信息,,星期則由編程計算得到,。

溫度采集模塊

溫度采集模塊設計

如圖5所示。采用數(shù)字式溫度傳感器DS18B20,,它具有測量精度高,,電路連接簡單特點,此類傳感器僅需要一條數(shù)據(jù)線進行數(shù)據(jù)傳輸,,使用P1.7與DS18B20的I/O口連接加一個上拉電阻,,Vcc1接電源,Vcc2接地,。

DS18B20的測溫原理

低溫度系數(shù)晶振的振蕩頻率受溫度的影響很小,,用于產(chǎn)生固定頻率的脈沖信號送給減法計數(shù)器1,高溫度系數(shù)晶振隨溫度變化其震蕩頻率明顯改變,,所產(chǎn)生的信號作為減法計數(shù)器2的脈沖輸入,,當計數(shù)門打開時,DS18B20就對低溫度系數(shù)振蕩器產(chǎn)生的時鐘脈沖后進行計數(shù),,進而完成溫度測量,。計數(shù)門的開啟時間由高溫度系數(shù)振蕩器來決定,每次測量前,,首先將-55℃所對應的基數(shù)分別置入減法計數(shù)器1和溫度寄存器中,,減法計數(shù)器1和溫度寄存器被預置在-55℃所對應的一個基數(shù)值。減法計數(shù)器1對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進行減法計數(shù),,當減法計數(shù)器1的預置值減到0時溫度寄存器的值將加1,,減法計數(shù)器1的預置將重新被裝入,減法計數(shù)器1重新開始對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進行計數(shù),,如此循環(huán)直到減法計數(shù)器2計數(shù)到0時,,停止溫度寄存器值的累加,此時溫度寄存器中的數(shù)值即為所測溫度,。斜率累加器用于補償和修正測溫過程中的非線性,,其輸出用于修正減法計數(shù)器的預置值,只要計數(shù)門仍未關閉就重復上述過程,,直至溫度寄存器值達到被測溫度值,。

表2 DS1302的日歷、時間寄存器


圖5 DS18B20溫度采集

顯示模塊的設計

本次設計采用的是LED動態(tài)顯示方式,,由于PROTEUS內(nèi)沒有LED,,故用LCD代替LED進行仿真,與主控制芯片AT89C52相連,。如圖6所示,。

系統(tǒng)的軟件設計

圖6 LED動態(tài)掃描顯示

圖7 主程序流程圖

主程序流程框圖

Keil C與Proteus的聯(lián)調與測試結果

Proteus7.6是目前最好的模擬單片機外圍器件的工具,可以仿真51系列,、AVR,、PIC等常用的MCU及其外圍電路(如LCD,RAM,,ROM,,鍵盤,,馬達,LED,,AD/DA,,部分SPI器件,部分IIC器件等),,使用Proteus7.6和Keil C可以像使用仿真器一樣調試程序,。

Proteus的工作過程

運行Proteus的ISIS程序后,進入該仿真軟件的主界面如圖8所示,。在工作前,,要設置view菜單下的捕捉對齊和system下的顏色、圖形界面大小等項目,。通過工具欄中的p(從庫中選擇元件命令)命令,,在pick devices窗口中選擇電路所需的元件,放置元件并調整其相對位置,、元件參數(shù)設置,、元器件間連線、編寫程序,;在source菜單的Define code generation tools菜單命令下,,選擇程序編譯的工具、路徑,、擴展名等項目,;在source菜單的Add/remove source files命令下,加入單片機硬件電路的對應程序,;通過debug菜單的相應命令仿真程序和電路的運行情況,。

圖8 Proteus的啟動界面

Proteus軟件所提供的調試手段

Proteus提供了比較豐富的測試信號用于電路的測試。這些測試信號包括模擬信號和數(shù)字信號,。對于單片機硬件電路和軟件的調試,,Proteus提供了兩種方法:一種是系統(tǒng)總體執(zhí)行效果,一種是對軟件的分步調試以看具體的執(zhí)行情況,。

軟件和硬件結合的應用系統(tǒng)

軟件和硬件的結合,,就是一個單片機的應用系統(tǒng)了。在這一階段,,硬件電路的設計已經(jīng)不是最為關鍵的了,,而軟件系統(tǒng)的設計、調試和運行才是實驗的主要內(nèi)容,。因此可以以建議性的意見給出具體的硬件電路,,并提出該電路所需要完成的具體工作,進行軟件的設計和調試,。

Keil C的介紹

keil C的運行界面

運行Keil C后的運行界面如圖9所示,。

圖9 keil C的運行界面

Keil C與proteus聯(lián)調測試

1,、安裝keil與proteus7.6,;

2,、打開proteus,,畫出相應電路,。在proteus的tools菜單中選中use remote debug monitor,;

3,、在keil中編寫MCU的程序,;

4,、進入keil的project菜單option for target '工程名',。在DEBUG選項中右欄上部的下拉菜選中Proteus VSM Monitor-51 Driver;

5,、在keil中進行debug,,同時在proteus中查看直觀的結果,LCD顯示,;

6,、把keil里的文件編譯后輸出hex的文件,在proteus中把單片機的加載程序文件換成keil中的hex文件,,然后運行,。

運行結果

結果顯示

由圖1整體電路框圖可知,LED顯示結果,,如圖10所示,。

圖10 結果顯示

調節(jié)顯示

日期和時間的修改由4個按鍵構成。鍵P0為調節(jié),;P2^0,,模式切換鍵(向左移)向左移;鍵P2^1,,加法按鈕,;鍵P2^2,減法按鈕,;鍵P2^3,,立刻跳出調整模式按鈕。

按動PO時秒閃爍進入調節(jié)系統(tǒng),,如圖11所示,。

按動P2^0向左移,對分進行調節(jié),,如圖12所示,。

按動P2^1向左移,對時進行加調節(jié),,如圖13所示,。

圖11 秒調節(jié)

圖12 分調節(jié)

圖13 時加調節(jié)

圖14所示,,是未調之前的顯示,按動P2^2向左移,,對年進行減調節(jié),,如圖15所示

按動P2^3向左移,退出調節(jié)恢復如圖16所示,。

圖14 未調之前顯示

圖15 年減調節(jié)

圖16 退出調節(jié)系統(tǒng)

 

總結

本文設計了一個多功能的電子萬年歷,。電路是由AT89S52單片機為控制核心,與時鐘芯片DS1302,、溫度芯片DS18B20,、按鍵、LED顯示等模塊組成硬件系統(tǒng),。在硬件系統(tǒng)中設有3個獨立按鍵,,根據(jù)使用者的需要可以隨時對時間進行校準、選擇時間,、溫度顯示等,,綜上所述此萬年歷具有讀取方便、顯示直觀,、功能多樣,、電路簡潔、成本低廉等諸多優(yōu)點,,符合電子儀器儀表的發(fā)展趨勢,,具有廣闊的市場前景。

在整個設計過程中,,充分發(fā)揮個人的主觀能動性,,自主學習,學到了許多沒學到的知識,,增加了動手能力的考驗,,達到了預期的目的??傊?,這次設計使我的能力得到了全方位的提高。

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權禁止轉載,。