基于51單片機(jī)和DS1302的萬年歷的方案設(shè)計(jì)書_第1頁
基于51單片機(jī)和DS1302的萬年歷的方案設(shè)計(jì)書_第2頁
基于51單片機(jī)和DS1302的萬年歷的方案設(shè)計(jì)書_第3頁
基于51單片機(jī)和DS1302的萬年歷的方案設(shè)計(jì)書_第4頁
基于51單片機(jī)和DS1302的萬年歷的方案設(shè)計(jì)書_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、 單片機(jī)和DS1302萬年歷的設(shè)計(jì) 題 目:基于51 作 者: 信息科學(xué)與工程學(xué)院所在學(xué)院: 專業(yè)年級: 號: 學(xué) 指導(dǎo)教師: 講 師 職 稱: 日 132013年 6月 :Proteus簡介工具軟件(該軟件中EDA軟件是英國Labcenter electronics公司出版的Proteus工具軟件的仿真功EDA國總代理為廣州風(fēng)標(biāo)電子技術(shù)有限公司)。它不僅具有其它能,還能仿真單片機(jī)及外圍器件。它是目前最好的仿真單片機(jī)及外圍器件的工具。雖然目前國內(nèi)推廣剛起步,但已受到單片機(jī)愛好者、從事單片機(jī)教案的教師、致力于單 片機(jī)開發(fā)應(yīng)用的科技工作者的青睞。 :簡介Keil2009年月發(fā)布Keil Visio

2、n4,Keil Vision4引入靈活的窗口管理系統(tǒng),使開發(fā)人員能夠使用多臺監(jiān)視器,并提供了視覺上的表面對窗口位置的完全控制的任何地方。新的用戶界面可以更好地利用屏幕空間和更有效地組織多個(gè)窗口,提供一個(gè)整潔,高效的環(huán)境來開發(fā)應(yīng)用程序。新版本支持更多最新的ARM芯片,還添加了一些其他新功能。2011年3月ARM公司發(fā)布最新集成開發(fā)環(huán)境RealView MDK開發(fā)工具中集成了最新版本的Keil 器件的最完美匹配。ARMuVision4,其編譯器、調(diào)試工具實(shí)現(xiàn)與 基本組成:硬件控制電路主要用了AT89C51芯片處理器、1602LCD顯示器、DS1302實(shí)時(shí)時(shí)鐘。根據(jù)各自芯片的功能互相連接成電子萬年歷

3、的控制電路。軟件控制程序主要有主控程序、電 子萬年歷的時(shí)間控制程序、時(shí)間顯示及溫度顯示程序等組成。 :單片機(jī)AT89C51本系統(tǒng)采用的是美國ATMEL公司生產(chǎn)的AT89C51單片機(jī),首先我們來熟悉一下 單片機(jī)的外部引腳和內(nèi)部結(jié)構(gòu)。AT89C51 單片機(jī)的引腳功能1. 個(gè)引腳。單片機(jī)有40AT89C51? +5VVcc:電源電壓? :接地GND? P0口:P0口是一組8位漏極開路型雙向I/O口,也即地址/數(shù)據(jù)總線復(fù)用口。作為輸出口用時(shí),每位能驅(qū)動8個(gè)TTL邏輯門電路,對端口寫“1”可作為高阻抗輸 入端用。在訪問外部數(shù)據(jù)存儲器或程序存儲器時(shí),這組口線分時(shí)轉(zhuǎn)換地址(低8位)和數(shù) 據(jù)總線服用,在訪問期

4、間激活內(nèi)部上拉電阻。在Flash編程時(shí),P0口接收指令字節(jié),而在程序校驗(yàn)時(shí),輸出指令字節(jié),校驗(yàn)時(shí) 要求外接上拉電阻。? P1口:P1口是一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O,P1的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個(gè)TTL邏輯門電路。對端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口。作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳 被外部信號拉低時(shí)會輸出一個(gè)電流。 位地址。接收低8 Flash 編程和程序校驗(yàn)期間,P1? P2口:P2口是一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O,P2的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個(gè)TTL邏輯門電路。對端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到

5、高電平,此時(shí)可作輸入口。作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳 被外部信號拉低時(shí)會輸出一個(gè)電流。在訪問外部程序存儲器或16位地址的外部數(shù)據(jù)存儲器(例如執(zhí)行MOVXDPTR指令)時(shí),P2口送出高8位地址數(shù)據(jù)。在訪問8位地址的外部數(shù)據(jù)存儲器(MOVX Ri指令)時(shí),P2口線上的內(nèi)容(也即特殊功能寄存器(SFR)區(qū)中P2寄存器的內(nèi) 容),在整個(gè)訪問期間不改變。 亦接收低高位地址和其他控制信號。P2編程和程序校驗(yàn)期間,F(xiàn)lash ? P3口:P3口是一組帶內(nèi)部上拉電阻的8位雙向I/O,P3的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個(gè)TTL邏輯門電路。對P3口寫入“1”時(shí),它們被內(nèi)部的上拉電阻拉高并

6、可作為輸入端口。作輸入端時(shí),被外部拉低的P3口將用上拉電阻輸出電流。 所示:3-1I/O口線外,更重要的用途是它的第二功能,見表P3口除了作為一般的 閃速存儲器編程和程序校驗(yàn)的控制信號。FlashP3口還接收一些用于 口的第二功能圖3-1 P3表 第二功能端口引腳 (串行輸入口)P3.0RXD (串行輸出口)P3.1TXD )(外中斷P3.20INT0 )P3.3(外中斷1INT1 外部輸入)0(定時(shí)P3.4/計(jì)時(shí)器T0 外部輸入)1(定時(shí)P3.5/計(jì)時(shí)器T1 (外部數(shù)據(jù)存儲器寫選通)P3.6WR (外部數(shù)據(jù)存儲器讀選通)RDP3.7? RST:復(fù)位輸入。當(dāng)振蕩器工作時(shí),RST引腳出現(xiàn)兩個(gè)機(jī)器

7、周期以上高電平將使單片機(jī)復(fù)位。WDT溢出將使引腳輸出高電平,設(shè)置SFR AUXR的DISRT0(地址 輸出高電平打開狀態(tài)。位缺省為RESET8EH)可打開或關(guān)閉該功能。DISRT0? ALE/PROG:當(dāng)訪問外部程序存儲器或數(shù)據(jù)存儲器時(shí),ALE(地址鎖存器允許)輸出脈沖用于鎖存地址的低8位字節(jié)。即使不訪問外部存儲器,ALE仍以時(shí)鐘振蕩頻率的1/6輸出固定的正脈沖信號,因此它可對外輸出時(shí)鐘或用于定時(shí)目的。要注意的 脈沖。ALE是:每當(dāng)訪問外部數(shù)據(jù)存儲器時(shí)將跳過一個(gè) )。PROGFlash存儲器編程期間,該引腳還用于輸入編程脈沖(對如有必要,可通過多特殊功能寄存器(SFR)區(qū)中的8EH單元的D0位

8、置,可禁止ALE操作。該位置后,只有一條MOVX和MOVC指令A(yù)LE才會被激活。另外,該 無效。引腳會被微弱拉高,單片機(jī)執(zhí)行外部程序時(shí),應(yīng)設(shè)置ALE? PSEN:程序存儲允許(PSEN)輸出是外部程序存儲器的讀選通信號,當(dāng)有效,即PSEN由外部程序存儲器取指令(或數(shù)據(jù))時(shí),每個(gè)機(jī)器周期兩次AT89C51 信號。PSEN輸出兩個(gè)脈沖。當(dāng)訪問外部數(shù)據(jù)存儲器,沒有兩次有效的? EA/VPP:外部訪問允許。欲使CPU僅訪問外部程序存儲器(地址為0000HFFFFH),EA端必須保持低電平(接地)。需要注意的是:如果加密位LB1被編程, 端狀態(tài)。復(fù)位時(shí)內(nèi)部會鎖存EA 則執(zhí)行內(nèi)部程序存儲器中的指令。CPU

9、Vcc端),如EA端為高電平(接 Vpp.的變成電壓存儲器編程時(shí),該引腳加上+12VFlash? :振蕩器反相放大器及內(nèi)部時(shí)鐘發(fā)生器的輸入端。XTAL1? :振蕩器反相放大器的輸出端。XTAL2 單片機(jī)內(nèi)部結(jié)構(gòu)AT89C51 MCS-51完全兼容2.AT89C51單片機(jī)與? 看門狗(WDT):WDT是一種需要軟件控制的復(fù)位方式。WDT 由13位計(jì)數(shù)器和特殊功能寄存器中的看門狗定時(shí)器復(fù)位存儲器(WDTRST)構(gòu)成。WDT 在默認(rèn)情況下無法工作;為了激活WDT,用戶必須往WDTRST 寄存器(地址:0A6H)中依次寫入01EH 和0E1H。當(dāng)WDT激活后,晶振工作,WDT在每個(gè)機(jī)器周期都會增加。W

10、DT計(jì)時(shí)周期依賴于外部時(shí)鐘頻率。除了復(fù)位(硬件復(fù)位或WDT溢出復(fù)位),沒有辦法停止 引腳輸出一個(gè)高電平。RSRWDT溢出,它將驅(qū)動WDT工作。當(dāng)? 可編程串口(UART)在AT89C51中,UART 的操作與AT89C51 和AT89C52 一樣。AT89C51系列單片機(jī)的串行通信口可以工作于同步和異步通信方式。當(dāng)工作于異步方式時(shí),它具有全雙工的操作功能,也就是說,它可以同時(shí)進(jìn)行數(shù)據(jù)的發(fā)送和接收。串行口內(nèi)的接收器采用的是雙緩沖結(jié)構(gòu),能夠在接收到的第一個(gè)字節(jié)從接收寄存器讀走之前就開始接收第二個(gè)字節(jié)(當(dāng)然,如果第二個(gè)字節(jié)接收完畢,而第一個(gè)字節(jié)仍然沒有被讀走,那將會丟掉一個(gè)字節(jié))。串行口的發(fā)送和接收

11、操作都是通過特殊功能寄存器中的數(shù)據(jù)緩沖寄存器SBUF進(jìn)行的,但在SBUF的內(nèi)部,接收寄存器和發(fā)送寄存器在物理結(jié)構(gòu)上是完全獨(dú)立的。如果將數(shù)據(jù)寫入SBUF,數(shù)據(jù)會被送入發(fā)送寄存器準(zhǔn)備發(fā)送。如果執(zhí)行SBUF指令,則讀出的數(shù)據(jù)一定來自接收緩存器。因此,CPU對SBUF的 個(gè)寄存器的功能決不能混淆。個(gè)不同的寄存器。這2讀寫,實(shí)際上是分別訪問2? 振蕩電路:AT89C51系列單片機(jī)的內(nèi)部振蕩器,由一個(gè)單極反相器組成。XTAL1反相器的輸入,XTAL2為反相器的輸出。可以利用它內(nèi)部的振蕩器產(chǎn)生時(shí)鐘,只要XTAL1和XTAL2引腳上一個(gè)晶體及電容組成的并聯(lián)諧振電路,便構(gòu)成一個(gè)完整的振蕩信號發(fā)生器,此方式稱為內(nèi)

12、部方式。另一種方式由外部時(shí)鐘源提供一個(gè)時(shí)鐘信號到XTAL1端輸入,而XTAL2端浮空。在組成一個(gè)單片機(jī)應(yīng)用系統(tǒng)時(shí),多數(shù)采用這種方的值要求不C2和C1式,這種方式結(jié)構(gòu)緊湊,成本低廉,可靠性高。在電路中,對電容 。30pFC2通常都選擇是很嚴(yán)格,如果使用高質(zhì)的晶振,則不管頻率為多少,C1、? 定時(shí)/計(jì)數(shù)器:AT89C51單片機(jī)內(nèi)含有2個(gè)16位的定時(shí)器/計(jì)數(shù)器。當(dāng)用于定時(shí)器方式時(shí),定時(shí)器的輸入來自內(nèi)部時(shí)鐘發(fā)生電路,每過一個(gè)機(jī)器周期,定時(shí)器加1,而一個(gè)機(jī)器周期包含有12個(gè)振蕩周期,所以,定時(shí)器的技術(shù)頻率為晶振頻率的1/12,而計(jì)數(shù)頻率最高為晶振頻率的1/24。為了實(shí)現(xiàn)定時(shí)和計(jì)數(shù)功能,定時(shí)器中含有3種基

13、本的寄存器:控制寄存器、方式寄存器和定時(shí)器/計(jì)數(shù)器??刂萍拇嫫魇且粋€(gè)8位的寄存器,用于控制定時(shí)器的工作狀態(tài),方式寄存器是一個(gè)8位的寄存器,用于確定定時(shí)器的 位的計(jì)數(shù)器,分為高字節(jié)和低字節(jié)兩部分。計(jì)數(shù)器是16工作方式,定時(shí)器/? RAM:高于7FH內(nèi)部數(shù)據(jù)存儲器的地址是8位的,也就是說其地址空間只有256字節(jié),但內(nèi)部RAM的尋址方式實(shí)際上可提供384字節(jié)。的直接地址訪問同一個(gè)存儲空間,高于7FH的間接地址訪問另一個(gè)存儲空間。這樣,雖然高128字節(jié)區(qū)分與專用寄器 ,即特殊功能寄存器區(qū)的地址是重合的,但實(shí)際上它們是分開的。究竟訪問哪一 區(qū),存是通過不同的尋址方式加以區(qū)分的。? SFR:SFR是具有特

14、殊功能的所有寄存器的集合,共含有22個(gè)不同寄存器,它們的地址分配在80HFFH中。雖然如此,不是所有的單元都被特殊功能寄存器占用,未被占用的單元,其內(nèi)容是不確定的。如對這些單元進(jìn)行讀操作,得到的是一些隨機(jī)數(shù),而寫入則無效,所以在編程時(shí)不應(yīng)該將數(shù)據(jù)寫入這些未確定的地址單元中,特殊功能寄存器主要有累加器ACC、B寄存器、程序狀態(tài)字寄存器PSW、堆棧指針SP、數(shù)據(jù)指針DPTR、I/O端口、串行口數(shù)據(jù)緩沖器SBUF、定時(shí)器寄存器、捕捉寄存器、控制寄 存器。? 中斷系統(tǒng):AT89C51單片機(jī)有6個(gè)中斷源,中斷系統(tǒng)主要由中斷允許寄存器IE、中斷優(yōu)先級寄存器IP、優(yōu)先級結(jié)構(gòu)和一些邏輯門組成。IE寄存器用于允

15、許或禁止中斷;IP寄存器用于確定中斷源的優(yōu)先級別;優(yōu)先級結(jié)構(gòu)用于執(zhí)行中斷源的優(yōu)先排序;有關(guān)邏輯門用于輸入中斷請求信號。在整個(gè)中斷響應(yīng)過程中CPU所執(zhí)行的操作步 驟如下: )完成當(dāng)前指令的操作(1 內(nèi)容壓入堆棧PC(2)將 )保存當(dāng)前的中斷狀態(tài)3( )阻止同級的中斷請求(4 寄存器)將中斷程序入口地址送PC5( )執(zhí)行中斷服務(wù)程序6( 實(shí)時(shí)時(shí)鐘:DS1302在每次進(jìn)行讀、寫程序前都必須初始化,先DS1302DS1302的工作原理:1 時(shí)鐘芯片寫時(shí)序如下圖所/SCLK脈沖;讀RST端置“1”,最后才給予,接著把把SCLK端置 “0”進(jìn)則不能把對DS130207必須置1,若為示。為DS1302的控制

16、字,此控制字的位。寫時(shí),CK=0寫時(shí)RAM=1,對時(shí)間進(jìn)行讀/行讀寫數(shù)據(jù)。對于位6,若對程序進(jìn)行讀/;該位寫操作位,進(jìn)行讀操作時(shí),該位為10是讀/1位至位5指操作單元的地址。位為輸出的。表60則表示進(jìn)行的是寫操作??刂谱止?jié)總是從最低位開始輸入/為時(shí),時(shí)鐘振1的日歷、時(shí)間寄存器內(nèi)容:“CH”是時(shí)鐘暫停標(biāo)志位,當(dāng)該位為DS1302是寫保護(hù)“WP”處于低功耗狀態(tài);當(dāng)該位為0時(shí),時(shí)鐘開始運(yùn)行。蕩器停止,DS1302時(shí),寫保護(hù)位1“WP”為的寫操作之前,RAMWP必須為0。當(dāng)位,在任何的對時(shí)鐘和所示。-1DS1302的控制字如表防止對任一寄存器的寫操作。2 DS1302的控制字節(jié):DS13020,則不能

17、把數(shù)據(jù)寫入7)必須是邏輯1,如果它為控制字節(jié)的高有效位(位1至位數(shù)據(jù);位表示存取RAM5中,位6如果0,則表示存取日歷時(shí)鐘數(shù)據(jù),為1表示進(jìn)行1)如為0表示要進(jìn)行寫操作,為指示操作單元的地址;最低有效位(位0 讀操作,控制字節(jié)總是從最低位開始輸出。 的控制字格式-1 DS1302表 RAM RD 1 A4 A3 A2 A1 A0 / CK /WR 3 數(shù)據(jù)輸入輸出(I/O):在控制指令字輸入后的下一個(gè)SCLK時(shí)鐘的上升沿時(shí),數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個(gè)SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時(shí)從低位0位到高位7。如 下圖所示

18、: 寫時(shí)序圖讀/ 圖1 DS13024 DS1302的寄存器:DS1302有12個(gè)寄存器,其中有7個(gè)寄存器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式,其日歷、時(shí)間寄存器及其控制字。此外,DS1302 還有年份寄存器、控制寄存器、充電寄存器、時(shí)鐘突發(fā)寄存器及與RAM相關(guān)的寄存器等。時(shí)鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內(nèi)容。 DS1302與RAM相關(guān)的寄存器分為兩類:一類是單個(gè)RAM單元,共31個(gè),每個(gè)單元組態(tài)為一個(gè)8位的字節(jié),其命令控制字為C0HFDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的RAM寄存器,此方式下可一次性讀寫所有的RAM的31個(gè)字 。)FFH(

19、)、讀節(jié),命令控制字為FEH(寫 實(shí)時(shí)時(shí)鐘電路設(shè)計(jì):DS1302與單片機(jī)的連接,其中Vcc1為后備電源,Vcc2為主電源。在主電源關(guān)閉的情況下,也能保持時(shí)鐘的連續(xù)運(yùn)行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當(dāng)Vcc2大于Vcc1+0.2V時(shí),Vcc2給DS1302供電。當(dāng)Vcc2小于Vcc1時(shí), 晶振。是振蕩源,外接32.768KHzX2X1Vcc1DS1302由供電。和 時(shí)鐘程序流程:DS1302流程圖分析:DS1302開始計(jì)時(shí)時(shí),首先進(jìn)行初始化,當(dāng)有中斷信號時(shí),讀取時(shí)鐘芯片的時(shí)間數(shù)據(jù)送入液晶顯示。這時(shí)若有設(shè)置鍵按下,進(jìn)行時(shí)間修改,完成后將時(shí)間 中,送入液晶顯示。EPROM數(shù)據(jù)

20、送入1302芯片,若沒有按鍵按下,直接送入 顯示程序流程:LCD流程圖分析如下:首先對1602顯示屏進(jìn)行初始化(初始化大約持續(xù)10ms),然,則BF=1地址,寫入相應(yīng)的數(shù)據(jù)顯示。若RAM,則獲得顯示BF=0后檢查忙信號,若 為止。BF=0代表模塊正在進(jìn)行內(nèi)部操作,不接受任何外部指令和數(shù)據(jù),直到 電路圖:Proteus :運(yùn)行圖Proteus 源程序: #include<reg51.h> #define uint unsigned int #define uchar unsigned char uchar a,miao,shi,fen,ri,yue,nian,week,key1n,t

21、emp。 #define yh 0x80 #define er 0x80+0x40 sbit rs=P26。 sbit en=P27。 。sbit rw=P25 。sbit IO=P34 sbit SCLK=P36。 。sbit RST=P35 。sbit ACC0=ACC0 。sbit ACC7=ACC7 sbit key1=P20。 。sbit key2=P21 sbit key3=P22。 。uchar code tab1=_x0010_ - - 。uchar code tab2= : : void delay(uint xms) 。uint x,y for(x=xms。x>0。x

22、-) for(y=120。y>0。y-)。 void write_1602com(uchar com) rs=0。 rw=0。 。P0=com 。delay(1) 。en=1 delay(1)。 en=0。 void write_1602dat(uchar dat) rs=1。 rw=0。 。P0=dat 。delay(1) en=1。 delay(1)。 en=0。 void lcd_init() write_1602com(0x38)。 。write_1602com(0x0c) 。write_1602com(0x06) 。write_1602com(0x01) 。write_1602

23、com(yh+1) a+)a<14for(a=0。 。write_1602dat(tab1a) 。/delay(3) write_1602com(er+2)。 for(a=0。a<8。a+) write_1602dat(tab2a)。 /delay(3)。 void write_byte(uchar dat) ACC=dat。 RST=1。 for(a=8。a>0。a-) 。 IO=ACC0 SCLK=0。 。 SCLK=1 。 ACC=ACC>>1 uchar read_byte() RST=1。 for(a=8。a>0。a-) ACC7=IO。 SCLK

24、=1。 。 SCLK=0 。 ACC=ACC>>1 return (ACC)。 void write_1302(uchar add,uchar dat) RST=0。 。SCLK=0 。RST=1 write_byte(add)。 。 write_byte(dat) 。SCLK=1 。RST=0 uchar read_1302(uchar add) 。 uchar temp RST=0 。 。 SCLK=0 。RST=1 write_byte(add)。 。 temp=read_byte() 。 SCLK=1 。RST=0 。 return(temp) uchar BCD_Deci

25、mal(uchar bcd) uchar Decimal。 。Decimal=bcd>>4 。return(Decimal=Decimal*10+(bcd&=0x0F) void ds1302_init() 。RST=0 。SCLK=0 。 write_1302(0x8e,0x00) 。 write_1302(0x80,0x00) 。 write_1302(0x82,0x00) 。 write_1302(0x84,0x12) 。write_1302(0x8a,0x02) write_1302(0x86,0x11)。 。 write_1302(0x88,0x06) 。 wri

26、te_1302(0x8c,0x13) 。 write_1302(0x8e,0x80) void write_sfm(uchar add,uchar dat) 。 uchar gw,sw gw=dat_x0010_。 。sw=dat/10 write_1602com(er+add)。 。write_1602dat(0x30+sw) 。 write_1602dat(0x30+gw) void write_nyr(uchar add,uchar dat) 。 uchar gw,sw gw=dat_x0010_ 。 。 sw=dat/10 write_1602com(yh+add) 。 。write_

27、1602dat(0x30+sw) 。 write_1602dat(0x30+gw) void write_week(uchar week) write_1602com(yh+0x0c)。 switch(week) case 1:write_1602dat('M')。 write_1602dat('O')。 。 write_1602dat('N') 。 break 。 case 2:write_1602dat('T') write_1602dat('U')。 。 write_1602dat('E')

28、。 break 。 case 3:write_1602dat('W') write_1602dat('E')。 。 write_1602dat('D') 。 break 。 case 4:write_1602dat('T') write_1602dat('H')。 。 write_1602dat('U') 。 break 。 case 5:write_1602dat('F') write_1602dat('R')。 。 write_1602dat('I'

29、;) 。 break 。 case 6:write_1602dat('S') write_1602dat('T')。 。 write_1602dat('A') 。 break 。 case 7:write_1602dat('S') write_1602dat('U')。 。 write_1602dat('N') 。 break void keyscan() if(key1=0) delay(9)。 if(key1=0) 。while(!key1) 。key1n+ if(key1n=9) 。 key1

30、n=1 switch(key1n) 。case 1: TR0=0 。 /TR1=0 write_1602com(er+0x09)。 write_1602com(0x0f)。 temp=(miao)/10*16+(miao)_x0010_。 write_1302(0x8e,0x00)。 write_1302(0x80,0x80|temp)。 write_1302(0x8e,0x80)。 。 break case 2: write_1602com(er+6)。/按2次fen 位置顯示光標(biāo) /write_1602com(0x0f)。 。 break case 3: write_1602com(er+

31、3)。/按動3 次,shi /write_1602com(0x0f)。 。 break case 4: write_1602com(yh+0x0e)。/ 按動4次,week /write_1602com(0x0f)。 。 break case 5: write_1602com(yh+0x0a)。/按動5次,ri /write_1602com(0x0f)。 。 break case 6: yue次,6按動/。 write_1602com(yh+0x07) 。 /write_1602com(0x0f) 。 break case 7: write_1602com(yh+0x04)。/按動7 次,ni

32、an /write_1602com(0x0f)。 。 break case 8: write_1602com(0x0c)。/按動到第8次,設(shè)置光標(biāo)不閃爍 TR0=1。/打開定時(shí)器 temp=(miao)/10*16+(miao)_x0010_。 write_1302(0x8e,0x00)。 write_1302(0x80,0x00|temp)。/miao數(shù)據(jù)寫入DS1302 write_1302(0x8e,0x80)。 break。 if(key1n!=0) if(key2=0) 。delay(10) if(key2=0) while(!key2)。 switch(key1n) 。case 1

33、:miao+ if(miao=60) 。 miao=0 。 write_sfm(0x08,miao) temp=(miao)/10*16+(miao)_x0010_。 write_1302(0x8e,0x00)。 write_1302(0x80,temp)。 。 write_1302(0x8e,0x80) 。 write_1602com(er+0x09) 。 /write_1602com(0x0b) 。 break 。case 2:fen+ if(fen=60) 。 fen=0 。 write_sfm(0x05,fen) 。 temp=(fen)/10*16+(fen)_x0010_ 。 wr

34、ite_1302(0x8e,0x00) 。 write_1302(0x82,temp) 。 write_1302(0x8e,0x80) 。 write_1602com(er+6) 。 break 。case 3:shi+ if(shi=24) 。 shi=0 write_sfm(2,shi)。 temp=(shi)/10*16+(shi)_x0010_。 write_1302(0x8e,0x00)。 。 write_1302(0x84,temp) 。 write_1302(0x8e,0x80) 。 write_1602com(er+3) 。 break 。case 4:week+ if(wee

35、k=8) 。 week=1 。 write_1602com(yh+0x0C) 。 write_week(week) temp=(week)/10*16+(week)_x0010_。 。 write_1302(0x8e,0x00) 。 write_1302(0x8a,temp) 。 write_1302(0x8e,0x80) 。 write_1602com(yh+0x0e) 。 break 。case 5:ri+ if(ri=32) 。 ri=1 。 write_nyr(9,ri) 。 temp=(ri)/10*16+(ri)_x0010_ 。 write_1302(0x8e,0x00) wri

36、te_1302(0x86,temp)。 。 write_1302(0x8e,0x80) 。 write_1602com(yh+10) 。 break 。case 6:yue+ if(yue=13) 。 yue=1 。 write_nyr(6,yue) 。 temp=(yue)/10*16+(yue)_x0010_ write_1302(0x8e,0x00)。 。 write_1302(0x88,temp) 。 write_1302(0x8e,0x80) 。 write_1602com(yh+7) 。 break 。case 7:nian+ if(nian=100) 。 nian=0 。 wri

37、te_nyr(3,nian) 。 temp=(nian)/10*16+(nian)_x0010_ 。 write_1302(0x8e,0x00) 。 write_1302(0x8c,temp) 。 write_1302(0x8e,0x80) 。 write_1602com(yh+4) 。 break if(key3=0) delay(10)。/調(diào)延時(shí),消抖動 if(key3=0) while(!key3)。 switch(key1n) 。 case 1:miao- if(miao=-1) 。 miao=59 write_sfm(0x08,miao)。 temp=(miao)/10*16+(mi

38、ao)_x0010_。 write_1302(0x8e,0x00)。 write_1302(0x80,temp)。 。 write_1302(0x8e,0x80) 。 write_1602com(er+0x09) 。 break case 2:fen-。 if(fen=-1) 。 fen=59 。 write_sfm(5,fen) 。 temp=(fen)/10*16+(fen)_x0010_ write_1302(0x8e,0x00)。 。 write_1302(0x82,temp) 。 write_1302(0x8e,0x80) 。 write_1602com(er+6) 。 break

39、。 case 3:shi- if(shi=-1) 。 shi=23 write_sfm(2,shi)。 temp=(shi)/10*16+(shi)_x0010_。 。 write_1302(0x8e,0x00) write_1302(0x84,temp)。 。 write_1302(0x8e,0x80) 。 write_1602com(er+3) 。 break case 4:week-。 if(week=0) week=7。 。 write_1602com(yh+0x0C) 。 write_week(week) temp=(week)/10*16+(week)_x0010_。 。 writ

40、e_1302(0x8e,0x00) 。 write_1302(0x8a,temp) 。 write_1302(0x8e,0x80) 。 write_1602com(yh+0x0e) 。 break case 5:ri-。 if(ri=0) 。 ri=31 write_nyr(9,ri)。 temp=(ri)/10*16+(ri)_x0010_。 write_1302(0x8e,0x00)。 。 write_1302(0x86,temp) 。 write_1302(0x8e,0x80) 。 write_1602com(yh+10) 。 break 。 case 6:yue- if(yue=0)

41、。 yue=12 。 write_nyr(6,yue) 。 temp=(yue)/10*16+(yue)_x0010_ 。 write_1302(0x8e,0x00) 。 write_1302(0x88,temp) 。 write_1302(0x8e,0x80) 。 write_1602com(yh+7) break。 。 case 7:nian- if(nian=-1) 。 nian=99 。 write_nyr(3,nian) 。 temp=(nian)/10*16+(nian)_x0010_ write_1302(0x8e,0x00)。 。 write_1302(0x8c,temp) 。 write_1302(0x8e,0x80) 。 write_1602com(yh+4) 。 break void init() TMOD=0x11。 TH0=0。 TL0=0。 。 EA=1 ET0=1 。 TR0=1。 void main() 。lcd_init() ds1302_init()。 。init() while(1) keyscan()。 void timer0() interrupt 1 miao =

溫馨提示

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

評論

0/150

提交評論