基于AT89C51單片機的多功能電子萬年歷的設計論文_第1頁
基于AT89C51單片機的多功能電子萬年歷的設計論文_第2頁
基于AT89C51單片機的多功能電子萬年歷的設計論文_第3頁
基于AT89C51單片機的多功能電子萬年歷的設計論文_第4頁
基于AT89C51單片機的多功能電子萬年歷的設計論文_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 PAGE24 / NUMPAGES25基于AT89C51單片機的多功能電子萬年歷的設計AT89C51 SCM-BASED ELCTRONIC DESIGN CALENDAR 畢 業(yè) 論 文學院名稱瀘 州 職 業(yè) 技 術 學 院系部名稱 電 子 工 程 系 專業(yè)名稱應 用 電 子 技 術 2012年12月10日摘要本文介紹了基于AT89C51單片機的多功能電子萬年歷的硬件結構和軟硬件設計方法。系統(tǒng)以AT89C51單片機為控制器,以串行時鐘日歷芯片DS1302記錄日歷和時間,利用proteus仿真,它可以對年、月、日、時、分、秒進行計時,還具有閏年補償?shù)榷喾N功能。萬年歷采用直觀的數(shù)字顯示,可以在

2、1602上同時顯示年、月、日、周日、時、分、秒,還具有時間校準等功能。此萬年歷具有讀取方便、顯示直觀、功能多樣、電路簡潔、成本低廉等諸多優(yōu)點,具有廣闊的市場前景。關鍵字:AT89C51;電子萬年歷; DS1302;1602目 錄 TOC o 1-3 h z u HYPERLINK l _Toc343720633摘要01HYPERLINK l _Toc343720634第一章緒論03HYPERLINK l _Toc3437206351.1 課題研究的背景03HYPERLINK l _Toc3437206361.2課題解決的主要容03第二章HYPERLINK l _Toc343720637系統(tǒng)的總

3、體設計04HYPERLINK l _Toc3437206382.1系統(tǒng)硬件電路設計04HYPERLINK l _Toc3437206392.1.1系統(tǒng)硬件結構04HYPERLINK l _Toc3437206402.2單片機與其附屬電路05HYPERLINK l _Toc3437206412.2.1 MCS-51系列單片機05HYPERLINK l _Toc3437206422.1.2 MCS-51系列單片機的工作條件電路08HYPERLINK l _Toc3437206432.1.3 DS130209HYPERLINK l _Toc3437206442.1.4 LCD1602顯示電路10HY

4、PERLINK l _Toc3437206452.1.5調節(jié)電路12HYPERLINK l _Toc343720646第三章系統(tǒng)的軟件設計12HYPERLINK l _Toc3437206473.1主程序12HYPERLINK l _Toc3437206483.2 LCD1602的驅動程序13HYPERLINK l _Toc3437206493.3 DS1302的驅動程序14HYPERLINK l _Toc343720650第四章萬年歷的設計結論14HYPERLINK l _Toc3437206514.1 萬年歷工作原理14HYPERLINK l _Toc3437206524.2 萬年歷結構原

5、理圖15HYPERLINK l _Toc343720653致16HYPERLINK l _Toc343720654參考文獻16HYPERLINK l _Toc343720655附錄17HYPERLINK l _Toc343720656附錄1仿真圖片17HYPERLINK l _Toc343720657附錄2程序代碼17-25第一章 緒論1.1 課題研究的背景隨著科技的快速發(fā)展,時間的流逝,從觀太陽、擺鐘到現(xiàn)在電子鐘,人類不斷研究,不斷創(chuàng)新紀錄。它可以對年、月、日、時、分、秒進行計時,還具有閏年補償?shù)榷喾N功能,而且DS1302的使用壽命長,誤差小。對于數(shù)字電子萬年歷采用直觀的數(shù)字顯示,可以同時顯

6、示年、月、日、時、分、秒和溫度等信息,還具有時間校準等功能。該電路采用AT89C51單片機作為核心,功耗小,能在3V的低壓工作,電壓可選用35V電壓供電。此萬年歷具有讀取方便、顯示直觀、功能多樣、電路簡潔、成本低廉等諸多優(yōu)點,符合電子儀器儀表的發(fā)展趨勢,具有廣闊的市場前景。1.2課題解決的主要容本課題所研究的電子萬年歷是單片機控制技術的一個具體應用,主要研究容包括以下幾個方面:(1)選用電子萬年歷芯片時,應重點考慮功能實在、使用方便、單片存儲、低功耗、抗斷電的器件。(2)根據選用的電子萬年歷芯片設計外圍電路和單片機的接口電路。(3)在硬件設計時,結構要盡量簡單實用、易于實現(xiàn),使系統(tǒng)電路盡量簡單

7、。(4)根據硬件電路圖,在開發(fā)板上完成器件的焊接。(5)根據設計的硬件電路,編寫控制AT89C51芯片的單片機程序。(6)通過編程、編譯、調試,把程序下載到單片機上運行,并實現(xiàn)本設計的功能。(7)在硬件電路和軟件程序設計時,主要考慮提高人機界面的友好性,方便用戶操作等因素。(8)軟件設計時必須要有完善的思路,要做到程序簡單,調試方便。第二章 系統(tǒng)的總體設計單片機電子萬年歷的制作有多種方法,可供選擇的器件和運用的技術也有很多種。所以,系統(tǒng)的總體設計方案應在滿足系統(tǒng)功能的前提下,充分考慮系統(tǒng)使用的環(huán)境,所選的結構要簡單使用、易于實現(xiàn),器件的選用著眼于合適的參數(shù)、穩(wěn)定的性能、較低的功耗以與低廉的成本

8、。2.1系統(tǒng)硬件電路設計2.1.1系統(tǒng)硬件結構此系統(tǒng)由單片機主體電路、單片機工作條件電路、1602顯示電路、時間條件電路、時鐘芯片DS1302等幾大部分組成,其中單片機工作條件電路又包含電源電路、時鐘電路、復位電路等幾大部分組成,單片機工作條件電路使單片機正常的工作,然后單片機通過程序設置,控制DS1302時鐘芯片,從DS1302芯片讀取數(shù)據處理后送1602顯示,其顯示的時間和日期可以通過時間條件按鍵電路來進行調整,此系統(tǒng)硬件結構框圖如圖2-1圖2-1 系統(tǒng)硬件框圖2.2單片機與其附屬電路2.2.1 MCS-51系列單片機MCS-51系列單片機主要是指Intel公司生產的以51位核的單片機芯片

9、,具有8位CPU、4K字節(jié)ROM、128字節(jié)RAM、可擴展外部64K字節(jié)RAM和ROM、2個16位的定時器/計數(shù)器、4個8位并行I/O口、1個全雙工串行I/O口、21字節(jié)的專用寄存器、5個中斷源、片自帶振蕩器、片單總線等功能部件。AT89C51單片機就是MCS-51系列單片機的一種,它的片有4K字節(jié)的在線編程Flash存儲器,可以擦寫1000次,具有掉電模式,而且具有掉電狀態(tài)下的中斷恢復功能,對設計開發(fā)非常實用。其引腳圖如圖2-2所示。圖2-2 AT89C51單片機的引腳圖其引腳功能和部結構如下:1.單片機的引腳功能AT89C51單片機有40個引腳。(1)、Vcc:電源電壓+5V(2)、GND

10、:接地(3)、P0口:P0口是一組8位漏極開路型雙向I/O口,也即地址/數(shù)據總線復 用口。作為輸出口用時,每位能驅動8個TTL邏輯門電路,對端口寫“1”可作為高阻抗輸入端用。(4)、P1口:P1口是一個帶部上拉電阻的8位雙向I/O,P1的輸出緩沖級可驅動(吸收或輸出電流)4個TTL邏輯門電路。對端口寫“1”,通過部的上拉電阻把端口拉到高電平,此時可作輸入口。作輸入口使用時,因為部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流。(5)、P2口:P2口是一個帶部上拉電阻的8位雙向I/O,P2的輸出緩沖級可驅動(吸收或輸出電流)4個TTL邏輯門電路。對端口寫“1”,通過部的上拉電阻把端口拉到高

11、電平,此時可作輸入口。作輸入口使用時,因為部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流。(6)、P3口還接收一些用于Flash閃速存儲器編程和程序校驗的控制信號。表3-1 P3口的第二功能圖端口引腳第二功能P3.0RXD(串行輸入口)P3.1TXD(串行輸出口)P3.2INT0(外中斷0)P3.3INT1(外中斷1)P3.4T0(定時/計時器0外部輸入)P3.5T1(定時/計時器1外部輸入)P3.6WR(外部數(shù)據存儲器寫選通)P3.7RD(外部數(shù)據存儲器讀選通)(7)、RST:復位輸入。當振蕩器工作時,RST引腳出現(xiàn)兩個機器周期以上高電平將使單片機復位。WDT溢出將使引腳輸出高電平,

12、設置SFR AUXR的DISRT0(地址8EH)可打開或關閉該功能。DISRT0位缺省為RESET輸出高電平打開狀態(tài)。(8)、ALE/PROG:當訪問外部程序存儲器或數(shù)據存儲器時,ALE(地址鎖存器允許)輸出脈沖用于鎖存地址的低8位字節(jié)。即使不訪問外部存儲器,ALE仍以時鐘振蕩頻率的1/6輸出固定的正脈沖信號,因此它可對外輸出時鐘或用于定時目的。要注意的是:每當訪問外部數(shù)據存儲器時將跳過一個ALE脈沖。(9)、XTAL1:振蕩器反相放大器與部時鐘發(fā)生器的輸入端。(10)、XTAL2:振蕩器反相放大器的輸出端。2、AT89C51單片機部結構看門狗(WDT):WDT是一種需要軟件控制的復位方式。W

13、DT 由13位計數(shù)器和特殊功能寄存器中的看門狗定時器復位存儲器(WDTRST)構成。WDT 在默認情況下無法工作;為了激活WDT,用戶必須往WDTRST 寄存器(地址:0A6H)中依次寫入01EH 和0E1H。當WDT激活后,晶振工作,WDT在每個機器周期都會增加。WDT計時周期依賴于外部時鐘頻率。除了復位(硬件復位或WDT溢出復位),沒有辦法停止WDT工作。當WDT溢出,它將驅動RSR引腳輸出一個高電平??删幊檀冢║ART)在AT89C51中,UART 的操作與AT89C51 和AT89C52 一樣。AT89C51系列單片機的串行通信口可以工作于同步和異步通信方式。當工作于異步方式時,它具

14、有全雙工的操作功能,也就是說,它可以同時進行數(shù)據的發(fā)送和接收。串行口的接收器采用的是雙緩沖結構,能夠在接收到的第一個字節(jié)從接收寄存器讀走之前就開始接收第二個字節(jié)(當然,如果第二個字節(jié)接收完畢,而第一個字節(jié)仍然沒有被讀走,那將會丟掉一個字節(jié))。串行口的發(fā)送和接收操作都是通過特殊功能寄存器中的數(shù)據緩沖寄存器SBUF進行的,但在SBUF的部,接收寄存器和發(fā)送寄存器在物理結構上是完全獨立的。如果將數(shù)據寫入SBUF,數(shù)據會被送入發(fā)送寄存器準備發(fā)送。如果執(zhí)行SBUF指令,則讀出的數(shù)據一定來自接收緩存器。因此,CPU對SBUF的讀寫,實際上是分別訪問2個不同的寄存器。這2個寄存器的功能決不能混淆。振蕩電路:

15、AT89C51系列單片機的部振蕩器,由一個單極反相器組成。XTAL1反相器的輸入,XTAL2為反相器的輸出??梢岳盟康恼袷幤鳟a生時鐘,只要XTAL1和XTAL2引腳上一個晶體與電容組成的并聯(lián)諧振電路,便構成一個完整的振蕩信號發(fā)生器,此方式稱為部方式。另一種方式由外部時鐘源提供一個時鐘信號到XTAL1端輸入,而XTAL2端浮空。在組成一個單片機應用系統(tǒng)時,多數(shù)采用這種方式,這種方式結構緊湊,成本低廉,可靠性高。在電路中,對電容C1和C2的值要求不是很嚴格,如果使用高質的晶振,則不管頻率為多少,C1、C2通常都選擇30pF。定時/計數(shù)器:AT89C51單片機含有2個16位的定時器/計數(shù)器。當用

16、于定時器方式時,定時器的輸入來自部時鐘發(fā)生電路,每過一個機器周期,定時器加1,而一個機器周期包含有12個振蕩周期,所以,定時器的技術頻率為晶振頻率的1/12,而計數(shù)頻率最高為晶振頻率的1/24。為了實現(xiàn)定時和計數(shù)功能,定時器中含有3種基本的寄存器:控制寄存器、方式寄存器和定時器/計數(shù)器??刂萍拇嫫魇且粋€8位的寄存器,用于控制定時器的工作狀態(tài),方式寄存器是一個8位的寄存器,用于確定定時器的工作方式,定時器/計數(shù)器是16位的計數(shù)器,分為高字節(jié)和低字節(jié)兩部分。RAM:高于7FH部數(shù)據存儲器的地址是8位的,也就是說其地址空間只有256字節(jié),但部RAM的尋址方式實際上可提供384字節(jié)。的直接地址訪問同一

17、個存儲空間,高于7FH的間接地址訪問另一個存儲空間。這樣,雖然高128字節(jié)區(qū)分與專用寄器 ,即特殊功能寄存器區(qū)的地址是重合的,但實際上它們是分開的。究竟訪問哪一區(qū),存是通過不同的尋址方式加以區(qū)分的。SFR:SFR是具有特殊功能的所有寄存器的集合,共含有22個不同寄存器,它們的地址分配在80HFFH中。雖然如此,不是所有的單元都被特殊功能寄存器占用,未被占用的單元,其容是不確定的。如對這些單元進行讀操作,得到的是一些隨機數(shù),而寫入則無效,所以在編程時不應該將數(shù)據寫入這些未確定的地址單元中,特殊功能寄存器主要有累加器ACC、B寄存器、程序狀態(tài)字寄存器PSW、堆棧指針SP、數(shù)據指針DPTR、I/O端

18、口、串行口數(shù)據緩沖器SBUF、定時器寄存器、捕捉寄存器、控制寄存器。中斷系統(tǒng):AT89C51單片機有6個中斷源,中斷系統(tǒng)主要由中斷允許寄存器IE、中斷優(yōu)先級寄存器IP、優(yōu)先級結構和一些邏輯門組成。IE寄存器用于允許或禁止中斷;IP寄存器用于確定中斷源的優(yōu)先級別;優(yōu)先級結構用于執(zhí)行中斷源的優(yōu)先排序;有關邏輯門用于輸入中斷請求信號。在整個中斷響應過程中CPU所執(zhí)行的操作步驟如下:(1)完成當前指令的操作(2)將PC容壓入堆棧(3)保存當前的中斷狀態(tài)(4)阻止同級的中斷請求(5)將中斷程序入口地址送PC寄存器(6)執(zhí)行中斷服務程序(7)返回2.1.2 MCS-51系列單片機的工作條件電路MCS-51

19、系列單片機的工作條件電路包括電源電路、時鐘電路、復位電路;1、電源電路:其目的是為單片機提供電源電壓,MCS-51系列單片機的電源引腳為Vcc在單片機的第40腳,本課題只采用仿真,直接用proteus自帶的電源即可,在這里就不在多說。2、時鐘電路: 此電路的作用是為單片機提供12MHz時鐘信號,是單片機有節(jié)奏的工作,它由兩個諧振電容、一個晶振、和單片機部的振蕩電路構成,其電路如圖2-3所示圖2-3 時鐘電路3、復位電路: 其作用是使單片機回到初始狀態(tài),它由一個開關和一個上拉電阻構成,其電路如圖2-4所示圖2-4復位電路2.1.3 DS1302DS1302 是美國DALLAS公司推出的一種高性能

20、、低功耗、帶RAM的實時時鐘電路,它可以對年、月、日、周日、時、分、秒進行計時,具有閏年補償功能,工作電壓為2.5V5.5V。采用三線接口與CPU進行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據。DS1302部有一個318的用于臨時性存放數(shù)據的RAM寄存器。DS1302是DS1202的升級產品,與DS1202兼容,但增加了主電源/后背電源雙電源引腳,同時提供了對后背電源進行涓細電流充電的能力。 DS1302的引腳如圖2-5所示圖2-5 DS1302與單片機的連接圖Vcc2:芯片主電源,其作用是為芯片提供電源電壓。Vcc1:后備電源,其作用是在主電源關閉的情況下,也能保持時鐘

21、的連續(xù)運行。X1和X2:振蕩源,外接32.768kHz晶振。I/O:串行數(shù)據輸出端;RST:是復位/片選線,其作用有兩個,(1)RST接通控制邏輯,允許地址/命令序列送入移位寄存器;(2)RST提供終止單字節(jié)或多字節(jié)數(shù)據的傳送手段。當RST為高電平時,所有的數(shù)據傳送被初始化,允許對DS1302進行操作。如果在傳送過程中RST置為低電平,則會終止此次數(shù)據傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電運行時,在Vcc2.5V之前,RST必須保持低電平。只有在SCLK為低電平時,才能將RST置為高電平。I/O為串行數(shù)據輸入輸出端(雙向),后面有詳細說明。SCLK:時鐘是輸入端,其作用是為芯片提供時鐘信號。2.1.

22、4 LCD1602顯示電路在此設計中其結果在1602液晶屏上顯示出來,1602能顯示16x2個字符,它的液晶芯片是HD44780,其芯片的引腳圖如圖2-6所示:圖2-6 LCD1602的引腳圖1、各引腳的功能如下:VSS:電源地,即電源接地端; VDD:芯片電源端,為芯片提供電源電壓,其工作電壓可在4.5v5.5v之間,通常為5v; VEE:背光燈電源,為1602液晶屏的背光燈提供電源,其電壓與芯片的電源一樣,可在4.5v5.5v之間,通常為5v; RS:數(shù)據/指令選擇端(H/L),通過控制該腳的電平,可選擇是向芯片寫入指令,還是向芯片寫入數(shù)據; RW:讀/寫選擇端(H/L), 通過控制該腳的

23、電平,可選擇是向芯片傳入指令數(shù)據或指令,還是從芯片中讀取指令數(shù)據或指令;E:使能信號端,它的作用是為芯片提供使能信號;D0D7:并行數(shù)據傳送端;2、LCD1602各引腳與單片機的連接如圖2-7所示圖2-7 LCD1602與單片機的連接D0D7數(shù)據端口連接在單片機的P0口,由于單片機的P0口是一組8位漏極開路型雙向I/O口,所以需要在數(shù)據端口上接上拉電阻。2.1.5調節(jié)電路在該設計電路中,時間和日期的調節(jié)采用四個獨立鍵盤構成,其原理和結構都非常簡單在這里就不多做介紹,本系統(tǒng)它與單片機的連接如圖2-8所示。2-8 獨立按鍵與單片機的連接圖中K1為調節(jié)的“選擇”即是調節(jié)時間、日期、還是星期;K2為選

24、擇項目的“加”動作K3為選擇項目的“減”動作K4為選擇項目的“確定”動作和做加減動作的“確認”。(K1接2.3口、K2接2.4口、K3接2.5口、K4接2.6口)第三章 系統(tǒng)的軟件設計該設計的軟件采用模塊化的設計方案,與各個硬件模塊都對應相應的子程序,通過主函數(shù)調用各子函數(shù)和子函數(shù)之間的相互調用來完成電子萬年歷的功能。3.1主程序主程序主要完成獨立鍵盤的掃描、液晶的初始化、1602送顯等功能,其程序流程圖如圖3-1所示: 3-1 主程序流程圖3.2 LCD1602的驅動程序1602分為兩行顯示,第一行顯示DATE字符和當前的日期(年、月、日),第二行顯示TIME字符和當前時間(時、分、秒)。其

25、程序流程圖如圖3-2所示:圖3-2 LCD1602的驅動程序流程圖3.3 DS1302的驅動程序DS1302工作時為了對任何數(shù)據傳送進行初始化,需要將復位腳(RST)置為高電平且將8位地址和命令信息裝入移位寄存器。數(shù)據在時鐘(SCLK)的上升沿串行輸入,前8位指定訪問地址,命令字裝入移位寄存器后,在之后的時鐘周期,讀操作時輸出數(shù)據,寫操作時輸出數(shù)據。時鐘脈沖的個數(shù)在單字節(jié)方式下為8+8(8位地址+8位數(shù)據),在多字節(jié)方式下為8加最多可達248的數(shù)據。圖3-3 DS1302的驅動程序流程圖第四章 萬年歷的設計結論本課題從理論到實際應用,用AT89C51單片機、DS1302、1602等一些電路的組

26、合,成功的設計出了一個電子萬年歷。而且所設計的電子萬年歷設計也按當初要求的能夠在PROTEUS中進行仿真,并且能夠很精確的顯示年歷??梢哉f該電子萬年歷具有很高的實用價值。4.1 萬年歷工作原理此系統(tǒng)由單片機主體電路、單片機工作條件電路、1602顯示電路、時間條件電路、時鐘芯片DS1302等幾大部分組成,它具有年、月、日、星期、時、分、秒的顯示功能,它的工作是是靠實時時鐘DS1302這個芯片的強大功能來完成的,首先單片機通過程序設置,控制DS1302時鐘芯片,從DS1302芯片讀取數(shù)據處理后送1602顯示,其顯示的時間和日期可以通過按鍵來進行調整,這樣可以使時間和日期更加的準確。4.2 萬年歷結

27、構原理圖在軟件設計的過程中,利用了Keil這個軟件在程序錄入和調試的時候的優(yōu)越性,讓我能夠在編寫軟件的時候很方便的發(fā)現(xiàn)軟件中的錯誤,現(xiàn)在已經能夠使用Keil對所設計的程序進行調試。對于PROTEUS這款軟件,也能熟練掌握電路設計仿真。由于平時沒有接觸過這兩個軟件,加上畢業(yè)設計的時間有限,對于他們的連接調試程序,未能熟練掌握,但以后有機會的話會再好好學習的。本次設計的電子萬年歷也存在的不足的地方,有待于以后的改進。致 經過三個多月的時間,畢業(yè)設計按照預期完成了,由于本人的知識水平有限,論文和設計中有遺漏和缺陷的地方懇請指正。感我的導師龍艦涵老師給了我莫大的幫助,在他悉心的指導和嚴格的要求下,作品

28、和論文順利完成了。論文從選題和最終完成,凝結著導師的辛勤的汗水,他不辭勞苦的教導、嚴謹?shù)淖黠L使我終生受益。在此畢業(yè)設計完成之際,謹向導師和所有幫助過我的老師致以崇高的敬意和衷心的感。還有感家人、朋友還有宿舍里所有的室友,是他們給我創(chuàng)造了良好的學習氛圍,在學習和生活中給了我支持和幫助。在以后的學習生活中我會時時敦促自己更加努力,不辜負師長、親人、朋友對我的期望。參考文獻1 長德.微型計算機原理與接口技術M.:機械工業(yè),1999:98-350.2 平.單片機的原理與接口技術M.:電子工業(yè),2006:1-113.3 王忠民.微型計算機原理M.:科技大學,2003:15-55.4 胡戴明.計算機組成原

29、理M.:經濟科學,2005:43-56.5 紀宗南.單片機外圍器件使用手冊M.:航空航天大學,622-655.6 周雪.模擬電子技術M: 電子科技大學,2005:81-95.7 左金生.電子與模擬電子技術M.:電子工業(yè),2004:105-131.8 勇.單片機開發(fā)環(huán)境Vision2的開發(fā)指南M. :航空航天大學,2004:173-199.9 斌武.單片機系統(tǒng)Proteus設計與仿真M. :電子工業(yè),2005:52-89.附錄附錄1仿真圖片附錄2程序代碼#include #include #define uchar unsigned char#define uint unsigned intsb

30、it SDA=P10; /DS1302數(shù)據線sbit CLK=P11; /DSB1302時鐘線sbit RST=P12; /DS1302復位線sbit RS=P20; /LCD寄存器選擇sbit RW=P21; /LCD讀/寫控制sbit EN=P22; /LCD啟用sbit K1=P23; /選擇sbit K2=P24; /加sbit K3=P25; /減sbit K4=P26; /確定uchar tCount=0;/一年中每個月的天數(shù),二月的天數(shù)由年份決定uchar MonthsDays=0,31,0,31,30,31,30,31,31,30,31,30,31;/周日,周一到周六0,1-6

31、 讀取DS1302時分別是1-7uchar *WEEK=SUN,MON,TUS,WEN,THU,FRI,SAT;/LCD顯示緩沖uchar LCD_DSY_BUFFER1=DATE 00-00-00 ;uchar LCD_DSY_BUFFER2=TIME 00:00:00 ;uchar DateTime7; /所讀取的日期時間char Adjust_Index=-1; /當前調節(jié)的時間對象:秒,分,時,日,月,年(0,1,2,3,4,6)uchar Change_Flag=-MHDM-Y; /(分,時,日,月,年)(不調節(jié)秒周)/延時,向DS1302寫、讀一字節(jié)以與從DS1302指定位置度、寫

32、數(shù)據的程序/延時void DelayMS(uint x)uchar i;while(x-) for(i=0;i120;i+);/向DS1302寫入一個字節(jié)void Write_A_Byte_TO_DS1302(uchar x)uchar i;for(i=0;i=1;/從DA1302讀取一字節(jié)uchar Get_A_Byte_FROM_DS1302()uchar i,b,t;for(i=0;i=1;t=SDA;b|=t7;CLK=1;CLK=0;/BCD碼轉換return b/16*10+b%16;/從DS1302指定的位置讀數(shù)據uchar Read_Data(uchar addr)uchar

33、dat;RST=0;CLK=0;RST=1;Write_A_Byte_TO_DS1302(addr);dat=Get_A_Byte_FROM_DS1302();CLK=1;RST=0;return dat;/向DS1302某地址寫入數(shù)據void Write_DS1302(uchar addr,uchar dat)CLK=0;RST=1;Write_A_Byte_TO_DS1302(addr);Write_A_Byte_TO_DS1302(dat);CLK=0;RST=0;/設置時間void SET_DS1302()uchar i;Write_DS1302(0 x8E,0 x00);/寫控制字,

34、取消寫保護for(i=1;i7;i+) /分時日月年依次寫入/分的起始地址10000010(0 x82),后面續(xù)依次是時,日,月,周,年,寫入地址每次遞增2 Write_DS1302(0 x80+ 2*i,(DateTimei/104)|(DateTimei%10); Write_DS1302(0 x8E,0 x80);/加保護/讀取當前日期時間/void GetTime()uchar i;for(i=0;i7;i+)DateTimei=Read_Data(0 x81+2*i);/ /1602LCD的若干顯示控制代碼。/uchar Read_LCD_State() 讀LCD狀態(tài)uchar Re

35、ad_LCD_State()uchar state;RS=0;RW=1;EN=1;DelayMS(1);state=P0;EN=0;DelayMS(1);return state;/void LCD_Busy_Wait() 忙等待void LCD_Busy_Wait()while(Read_LCD_State()&0 x80)=0 x80);DelayMS(5);/void Write_LCD_Data(uchar dat) 向LCD寫數(shù)據void Write_LCD_Data(uchar dat) LCD_Busy_Wait(); RS=1;RW=0;EN=0;P0=dat;EN=1;Del

36、ayMS(1);EN=0;/void Write_LCD_Command(uchar cmd) 寫LCD指令void Write_LCD_Command(uchar cmd)LCD_Busy_Wait();RS=0;RW=0;EN=0;P0=cmd;EN=1;DelayMS(1);EN=0;/void Init_LCD() LCD初始化void Init_LCD()Write_LCD_Command(0 x38);DelayMS(1);Write_LCD_Command(0 x01);DelayMS(1);Write_LCD_Command(0 x06);DelayMS(1);Write_LC

37、D_Command(0 x0c);DelayMS(1);/void Set_LCD_POS(uchar P) 設置液晶顯示位置void Set_LCD_POS(uchar p)Write_LCD_Command(p|0 x80);/在LCD上顯示字符串void Display_LCD_String(uchar p,uchar *s)uchar i;Set_LCD_POS(p);for(i=0;i16;i+)Write_LCD_Data(si); DelayMS(1);/日期與時間值轉換為數(shù)字字符void Format_DateTime(uchar d,uchar *a)a0=d/10+0;a1

38、=d%10+0;/判斷是否為閏年uchar isLeapYear(uint y)return(y%4=0&y%100!=0)|(y%400=0);/求自2000.1.1開始的任何一天是星期幾/函數(shù)沒有通過,求出總天數(shù)后再求星期幾,/因為求總天數(shù)可能會超越uint的圍。void RefreshWeekDay()uint i,d,w=5;/已知1999.12.31是周五for(i=2000;i2000+DateTime6;i+)d=isLeapYear(i)?366:365;w=(w+d)%7;d=0;for(i=1;iDateTime4;i+) d+=MonthsDaysi;d+=DateTim

39、e3;/保存星期,06表示星期日至周六,為了與DS1302的星期格式匹配,返回值需要加1DateTime5=(w+d)%7+1;/void DateTime_Adjust(char x)switch(Adjust_Index)case 6:/年00-99 if(x=1&DateTime60) DateTime6-; /獲取2月天數(shù) MonthsDays2=isLeapYear(2000+DateTime6)?29:28; /如果年份變化后當前月份的天數(shù)大于上限則設為上限 if(DateTime3MonthsDaysDateTime4) DateTime3=MonthsDaysDateTime4

40、; RefreshWeekDay();/刷新星期 break;case 4:/月01-12 if(x=1&DateTime41)DateTime4-; /獲取2月天數(shù) MonthsDays2=isLeapYear(2000+DateTime6)?29:28; /如果月份變化后當前月份的天數(shù)大于上限則設為上限 if(DateTime3MonthsDaysDateTime4) DateTime3=MonthsDaysDateTime4; RefreshWeekDay();/刷新星期 break; case 3:/日00-28/29/30/31;調節(jié)之前首先根據年份得出該年中2月的天數(shù) MonthsDays2=isLeapYear(2000+DateTime6)?29:28; /根據當前月份決定調節(jié)日期的上限 if(x=1&DateTime30) DateTime3-; RefreshW

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論