智能時鐘課程設計說明書_第1頁
智能時鐘課程設計說明書_第2頁
智能時鐘課程設計說明書_第3頁
智能時鐘課程設計說明書_第4頁
智能時鐘課程設計說明書_第5頁
已閱讀5頁,還剩34頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、課程設計說明書課程名稱:2011級機電專業(yè)課程設計題 目 智能電子鐘(LCD顯示)學 院:機電工程學院系:機電專業(yè):機械設計制造及其自動化班級:機制XXX班學號:XXXXXXXXX學生姓名: XXXXX起訖日期:指導教師: xxxxxx 職稱: 系分管主任:審核日期:摘要電子時鐘主要是利用電子技術將時鐘電子化、數(shù)字化,擁有時鐘精確、體積小、 界面友好、可擴展性能強等特點,被廣泛應用于生活和工作當中。另外,在生活和 工農(nóng)業(yè)生產(chǎn)中,也常常需要溫度,這就需要電子時鐘具有多功能性。本設計主要為 實現(xiàn)一款可正常顯示時鐘 / 日歷、帶有定時鬧鈴的多功能電子時鐘。本文對當前電子鐘開發(fā)手段進行了比較和分析,最

2、終確定了采用單片機技術實現(xiàn) 多功能電子時鐘。本設計應用 AT89C51芯片作為核心,使用 DS1302實時時鐘日歷 芯片完成時鐘 / 日歷的基本功能。這種實現(xiàn)方法的優(yōu)點是電路簡單,性能可靠,實時 性好,時間精確,操作簡單,編程容易。該電子時鐘可以應用于一般的生活和工作中,也可通過改裝,提高性能,增加 新功能,從而給人們的生活和工作帶來更多的方便。關鍵詞:電子時鐘;多功能; AT89C51;DS1302第 1章 總體設計方案1.1 方案設計實時時鐘芯片具備年、月、日、時、分、秒計時功能和多點計時功能,計時數(shù)據(jù)的更 新每秒自動進行一次,不需程序干預。計算機可通過中斷或查詢方式讀取計時數(shù)據(jù)進行顯 示

3、,因此計時功能的實現(xiàn)無需占用 CPU 的時間,程序簡單。此外,實時時鐘芯片多數(shù)帶有 鋰電池做后備電源,具備永不停止的計時功能;具有可編程方波輸出功能,可用做實時測 控系統(tǒng)的采樣信號等;有的實時時鐘芯片內(nèi)部還帶有非易失性 RAM ,可用來存放需長期 保存但有時也需變更的數(shù)據(jù),由于功能完善,精度高,軟件程序設計相對簡單,且計時不 占用 CPU 時間,因此,在工業(yè)實時測控系統(tǒng)中多采用這一類專用芯片來實現(xiàn)實時時鐘功能。利用單片機內(nèi)部的定時 / 計數(shù)器進行中斷定時,配合軟件延時實現(xiàn)時、分、秒的計時 及秒表計時。 該方案節(jié)省硬件成本, 且能使設計者對單片機的指令系統(tǒng)能有更深入的了解, 從而掌握單片機應用技

4、術 MCS-51 匯編語言程序設計方法,因此,本系統(tǒng)設計采用此種軟 件控制方法來實現(xiàn)計時。 而由于 Atmel 公司的 AT89C51 是一種自帶 4KB Flash 存儲器的 低電壓、高性能的 CMOS 8 位微處理器。該器件采用 Atmel 高密度非易失存儲器制造 技術制造,與工業(yè)標準的 MCS-51 指令集和輸出引腳相兼容。它的功能強大,而且也比 較容易購買,故本設計中所選的單片機為 AT89C51 單片機。1.2 系統(tǒng)框圖按照系統(tǒng)設計功能的要求,初步確定系統(tǒng)由主控模塊、時控模塊、及顯示模塊和鍵盤 接口模塊共 4 個模塊組成。主控芯片使用 51 系列 AT89C51 單片機,時鐘芯片使用

5、美國 DALLAS公司推出的一種高性能、低功耗、帶 RAM的實時時鐘DS1302。采用DS1302作 為計時芯片,可以做到計時準確。更重要的是,DS1302可以在很小電流的后備電源(2.5 5.5V電源,再2.5V時耗電小于300nA),而且DS1302可以編程選擇多種充電電流來為后 備電源進行慢速充電,可以保證后備電源基本不耗電。顯示模塊采用普通的液晶顯示屏(LCD),設計框圖如圖1所示圖1 設計方案框圖第2章核心芯片簡介2.1 DS1302 簡介DS1302是美國DALLAS公司推出的一種高性能、低功耗、帶 RAM的實時時鐘芯片, 它可以對年、月、日、周日、時、分、秒進行計時,且具有閏年補

6、償功能,工作電壓寬達 2.55.5V。時鐘可工作在24小時格式或12小時(AM/PM )格式。DS1302與單片機的接口 使用同步串行通信,僅用3條線與之相連接。可采用一次傳送一個字節(jié)或突發(fā)方式一次傳 送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。DS1302內(nèi)部有一個31 8的用于臨時性存放數(shù)據(jù)的 RAM寄存器。DS1302是DS1202的升級產(chǎn)品,與DS1202兼容,但增加了主電源/后背電源 雙電源引腳,同時提供了對后背電源進行涓細電流充電的能力。2.1.1 DS1302引腳功能與內(nèi)部結構DS1302的引腳功能如表1所示,外形及內(nèi)部結構如圖2所示:表1 DS1302引腳功能表引腳號引腳名稱功能1VCC

7、2主電源2、3X1、X2振蕩源,外接32768Hz晶振4GND地線5RST復位/片選線6I/O串行數(shù)據(jù)輸入/輸出端(雙向)7SCLK串行時鐘輸入端8VCC1后備電源 M電源控制k 一VcVcG1/SCRSV18J VcCCX27 scX匚36J I/2G4532X2X1振蕩器與分頻器實時時鐘31x8RAMAD命令與控 制邏輯輸入移位寄 存器圖2 DS1302管腳圖及內(nèi)部結構圖2.1.2 DS1302 控制字DS1302的控制字節(jié)如表2所示:表2 DS1302控制字節(jié)的含義765432101ram/ CKA4A3A2A1A0控制字節(jié)的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入到

8、DS1302 中。位6如果為0,則表示存取日歷時鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操 作單元的地址;最低有效位(位0)如為0表示要進行寫操作,為1表示進行讀操作,控制 字節(jié)總是從最低位開始輸出。2.1.3 DS1302復位引腳通過把RST輸入驅動置高電平來啟動所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,Rst接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供了終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當RST為高電平時,所有的數(shù)據(jù)傳送被初始化,允許對DS1302 進行操作。如果在傳送過程中置 RST為低電平,則會終止此次數(shù)據(jù)傳送,并且I/O引腳變 為高阻態(tài)。上電運行時,在 V

9、cc2.5V之前,RST必須保持低電平。只有在 SCLK為低電 平時,才能將RST置為高電平。2.1.4 DS1302數(shù)據(jù)的輸入與輸出在控制指令字輸入后的下一個SCLK時鐘的上升沿時數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個SCLK脈沖的下降沿讀出DS1302 的數(shù)據(jù),讀出數(shù)據(jù)時從低位0位至高位7,數(shù)據(jù)讀寫時序如圖3所示:SCLKRSTI/Onnnnnnnnnnnnnntzz1101234567014567R/WA0A1A2A3A4R/C1DATA I/O BYTE1DATA I/O BYTE2圖3數(shù)據(jù)讀寫時序2.1.5 DS1302 寄存器DS1

10、302共有12個寄存器,其中有7個寄存器與日歷、時鐘相關,存放的數(shù)據(jù)位為BCD 碼形式。其日歷、時間寄存器及其控制字見表 3。此外,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 (讀)。表3 D

11、S1302的日歷、時鐘寄存器及其控制字寄存器名命令字取值范圍各位內(nèi)容寫操作讀操作765432 1 0秒寄存器80H81H00-59CH10SECSEC分寄存器82H83H00-59010MINMIN時寄存器84H85H01-12 或00-2312/24010HRHR日寄存器86H87H01-28,29,30,310010DATEDATE月寄存器88H89H01-1200010MMONTH周寄存器8AH8BH01-0700000DAY年寄存器8CH8DH00-9910YEARYEAR2.2AT89C51 簡介AT89C51 是一種帶 4K 字節(jié) FLASH 存儲器(FPEROM Flash Pr

12、ogrammable andErasable Read Only Memory)的低電壓、高性能 CMOS 8位微處理器,俗稱單片機。AT89C2051是一種帶2K字節(jié)閃存可編程可擦除只讀存儲器的單片機。單片機的可擦除只 讀存儲器可以反復擦除1000次。該器件采用ATMEL高密度非易失存儲器制造技術制造, 與工業(yè)標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組 合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡 版本。AT89C51單片機為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。2.2.1 AT89C51芯片引

13、腳及特點AT89S51芯片的引腳結構如圖4所示:345678廠 910111213141516171819201P1.0VCCPL1POOP1.2P0.1P1.3P0.2P1.4P1 5P0.4P1.6P0.5P1.7P0.6RESAPDP0.7P3.0RXDEA-TODP3.1TXDALETROGP3.2 INTOPSENP3.3.NfTP2.7P2.6P3.5/TIP2,5P3.6WRP2.4P3.7.TOP2.3XTALlP2,2XTAL2P2.1GNDP2.0STCS9C?!393373635別3332j302726252423222140圖4 AT89C51芯片的引腳結構圖(1)功能

14、特性概括:AT89C51提供以下標準功能:40個引腳、4K Bytes Flash片內(nèi)程序存儲器、128 Bytes 的隨機存取數(shù)據(jù)存儲器(RAM )、32個外部雙向輸入/輸出(I/O ) 口、5個中斷優(yōu)先級2 層中斷嵌套中斷、2個數(shù)據(jù)指針、2個16位可編程定時/計數(shù)器、2個全雙工串行通信口、 看門狗(WDT)電路、片內(nèi)振蕩器及時鐘電路。此外, AT89C51可降至0Hz的靜態(tài)邏輯 操作,并支持兩種軟件可選的節(jié)電工作模式。空閑模式下,CPU暫停工作,而RAM、定時/計數(shù)器、串行通信口、外中斷系統(tǒng)可繼續(xù)工作。掉電模式凍結振蕩器而保存 RAM的數(shù)據(jù), 停止芯片其它功能直至外中斷激活或硬件復位。同時

15、該芯片還具有PDIP、TQFP和PLCC等三種封裝形式,以適應不同產(chǎn)品的需求。(2)管腳說明:VCC :供電電壓。GND :接地。P0 口: P0 口為一個8位漏級開路雙向I/O 口,也即地址/數(shù)據(jù)總線復用口。作為輸出 口用時,能驅動8個TTL邏輯門電路。對端口寫“ 1”時,被定義為高阻輸入在訪問外部數(shù)據(jù)存儲器或程序存儲器時,這組口線分時轉換地址(低8位)和數(shù)據(jù)總線復用,在訪問期間激活內(nèi)部上拉電阻。在Flash編程時,P0 口接收指令字節(jié),而在程序校驗時,輸出指令字節(jié),校驗時,要 求外接上拉電阻。P1 口 :P1 口是一個帶內(nèi)部上拉電阻的 8位雙向I/O 口 ,P1 口的輸出緩沖級可驅動(吸收

16、 或輸出電流)4個TTL邏輯門電路。對端口寫“T ,通過內(nèi)部的上拉電阻把端口拉到高電平, 此時可作輸入口。作輸入口使用時,因為內(nèi)部存在上拉電阻,某個引腳被外部信號拉低時會 輸出一個電流(I)。在Flash編程和程序校驗期間,P1接收低8位地址。部分端口還有第二功能,如表4所示表4 P1 口部分引腳第二功能端口引腳第二功能P1.5MOSI(用于ISP編程)P1.6MISO(用于ISP編程)P1.7SCK (用于ISP編程)P2 口 :P2 口是一個帶有內(nèi)部上拉電阻的8位雙向I/O 口 , P2 口的輸出緩沖級可驅動(吸 收或輸出電流)4個TTL邏輯門電路。對端口寫“ 1”,通過內(nèi)部的上拉電阻把端

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

18、P3 口寫“ 1”時,它們被內(nèi)部的上拉電阻拉高并可 作為輸入端口。作輸入口使用時,被外部信號拉低的P3 口將用上拉電阻輸出電流(I)。P3 口除了作為一般的I/O 口線外,更重要的用途是它的第二功能,如表5所示: P3 口還接收一些用于Flash閃速存儲器編程和程序校驗的控制信號。表5 P3 口引腳第二功能端口引腳第二功能P3.0RXD(串行輸入口)P3.1TXD(串行輸出口)P3.2INT 0(外中斷0)P3.3INT 1(外中斷1)P3.4T0(定時/計數(shù)器0)P3.5T1(定時/計數(shù)器1)P3.6WR (外部數(shù)據(jù)存儲器寫選通)P3.7RD (外部數(shù)據(jù)存儲器讀選通)RST:復位輸入。當振蕩

19、器工作時,RST引腳出現(xiàn)兩個機器周期以上的高電平時間將 使單片機復位。WDT溢出將使該引腳輸出高電平,設置SFR AUXR的DISRTO位(地址8EH) 可打開或關閉該功能。DISRTO位缺省為RESET輸出高電平打開狀態(tài)。ALE/ PROG :當訪問外部存儲器或數(shù)據(jù)存儲器時,ALE(地址鎖存允許)輸出脈沖用于鎖 存地址的低8位字節(jié)。即使不訪問外部寄存器,ALE仍以時鐘振蕩頻率的1/6輸出固定的正 脈沖信號,因此它可對外輸出時鐘或用于定時目的。值得注意的是:每當訪問外部數(shù)據(jù)存儲器時將跳過一個ALE脈沖。對Flash存儲器編程期間,該引腳還用于輸入編程脈沖 (PROG)o如有必要,可通過對特殊功

20、能寄存器(SFR)區(qū)中的8EH單元的DO位置位,可禁止ALE 操作。該位置位后,只要一條MOVX和MOVC指令才會激活ALE。此外,該引腳會被微弱 拉高,單片機執(zhí)行外部程序時,應設置ALE無效。PSEN :程序存儲允許(PSEN)輸出是外部程序存儲器的讀選通信號,當AT89S51由外 部程序存儲器取指令(或數(shù)據(jù))時,每個機器周期兩次PSEN有效,即輸出兩個脈沖。當訪問外 部數(shù)據(jù)存儲器時,沒有兩次有效的PSEN信號。EA/VPP:外部訪問允許。欲使CPU僅訪問外部程序存儲器(地址為0000H-FFFFH), EA端必須保持低電平(接地)。需要注意的是:如果加密位LB1被編程,復位時內(nèi)部會鎖存EA

21、 端狀態(tài)。如EA端保持高電平(接VCC端),CPU則執(zhí)行內(nèi)部程序存儲器中的指令。Flash存儲器編程期間,該引腳用于施加 +12V編程電壓(VPP)。XTAL1 :反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入端。XTAL2 :反向振蕩放大器器的輸出端。(3)晶體振蕩器特性:AT89C51中有一個用于構成內(nèi)部振蕩器的高增益反相放大器,引腳XTAL1和XTAL2分別為該反向放大器的輸入端和輸出端。這個反向放大器與作為反饋元件的片外石英晶體或 陶瓷諧振器一起構成自激振蕩器。外接石英晶體(或陶瓷諧振器)及電容C1、C2接在放大器的反饋回路中構成并聯(lián)振蕩電 路。對外接電容C1、C2雖然沒有十分嚴格的要求

22、,但電容容量的大小會輕微影響振蕩頻率 的高低、振蕩器工作的穩(wěn)定性、起振的難易程度及溫度穩(wěn)定性。如果使用石英晶體,電容應該使用 30pF_10pF。還可以使用外部時鐘。這種情況下,外部時鐘脈沖接XTAL1端,即內(nèi)部時鐘發(fā)生器的輸 入端,XTAL2應懸空。由于外部時鐘信號是通過一個2分頻觸發(fā)器后作為內(nèi)部時鐘信號的,所以外部時鐘信號 的占空比沒有特殊要求,但最小高電平持續(xù)時間和最大低電平持續(xù)時間應符合產(chǎn)品技術條 件的要求。2.2.2 AT89C51的主要性能參數(shù):(1)與MCS-51產(chǎn)品指令系統(tǒng)完全兼容。(2)4K字節(jié)在系統(tǒng)可編程(ISP)Flash閃速存儲器。(3)1000次擦寫周期。(4)4.0

23、 5.5V的工作電壓范圍。(5)全靜態(tài)工作模式:0Hz-33Hz。(6)三級程序加密。(7)128x8字節(jié)的內(nèi)部RAM。(8)32個雙向可編程I/O 口線。(9)2個16位可編程定時/計數(shù)器。(10)6個中斷源。(11)全雙工UART串行通道。(12)低功耗空閑和掉電模式。(13)中斷可從空閑模式喚醒系統(tǒng)。(14)看門狗(WDT )及雙數(shù)據(jù)指針。15)掉電標識和快速編程特性。(16)靈活的在系統(tǒng)編程(ISP-字節(jié)或頁寫模式)第3章 智能電子鐘軟硬件電路的設計3.1 時鐘電路使用串行接口時鐘芯片DS1302設計時鐘電路。該設計方案以單片機 AT89S51為主控芯 片,以串行時鐘芯片DS1302為

24、核心計時芯片,組成數(shù)字時鐘電路。該電路不但能準確地計 時、附加其它功能,而且,其三線接口可以節(jié)省接口資源,在斷電后不丟失時間和數(shù)據(jù)信 息。該設計方案的接口電路如圖5所示:21I-GXD圖5DS1302接口電路3.2硬件設計該設計的硬件電路由主控部分(單片機AT89C51)、計時部分(實時時鐘芯片DS1302)、D1602LCD、電源部分(三端穩(wěn)壓器7805)4個部分組成。各部分之間相互協(xié)作,構成一個統(tǒng)一的有機整體,實現(xiàn)數(shù)字時鐘的功能。各部分的硬件電路設計如下。設計總電路圖見附3.2.1 單片機AT89C51外圍電路設計單片機AT89S51作為主控芯片,控制整個電路的運行。單片機外圍需要一個復位

25、電路, 復位電路的功能是:系統(tǒng)上電時提供復位信號,直至系統(tǒng)電源穩(wěn)定后,撤消復位信號。為 可靠起見,電源穩(wěn)定后還要經(jīng)一定的延時才撤銷復位信號,以防電源開關或電源插頭分 合過程中引起的抖動而影響復位。該設計采用含有二極管的復位電路,復位電路可以有效 的解決電源毛刺和電源緩慢下降(電池電壓不足)等引起的問題,在電源電壓瞬間下降時 可以使電容迅速放電,一定寬度的電源毛刺也可令系統(tǒng)可靠復位。復位電路的設計圖如圖 6所示:VCC0ChOKM-“Sm414SR110K圖6單片機復位電路圖AT89S51具有在系統(tǒng)可編程功能,可以很方便的改寫單片機存儲器內(nèi)的程序不需要把 芯片中從工作環(huán)境中剝離,把AT89S I

26、SP下載口接入電路,可使電路實現(xiàn)該功能。AT89S51 需要接入一個普通12MHz晶振,為其提供穩(wěn)定的時鐘脈沖。該設計中有6個八段數(shù)碼顯示管LED,所以,在單片機AT89S51外圍需要接入6個三極管來驅動數(shù)碼顯示管。此外, 單片機外圍需要接入3個開關,用來調(diào)整時鐘。單片機外圍電路的設計圖如圖7示:3.2.2 DS1302 與單片機的接口設計時鐘芯片DS1302與單片機AT89S51的接口是由3條線來完成的,單片機 AT89S51 的P1.0與時鐘芯片的數(shù)據(jù)傳輸端相連,P1.1用來作為DS1302輸入時鐘SCLK控制端,P1.2 控制DS1302的復位輸入端。DS1302接標準32.768KHZ

27、石英晶振。DS1302與單片機的接 口電路如圖8所示:vcc|*DS1302 與 AT89C51 連接圖EC1R3円円plAT89S53.2.4電源設計VCCl VCC2XSCLKX2I/OGNDRSTDS 202時鐘芯片DS1302有很寬的工作電壓范圍,其工作電壓為 2.55.5V。單片機AT89S51 的工作電壓范圍相對較窄,為4.05.5V,所以本設計中,給電路接入三端穩(wěn)壓器 7805,禾U 用它的穩(wěn)壓功能給電路提供穩(wěn)定的+5V電壓,使電路的工作保持很高的可靠性。在電路中 接入一個發(fā)光二極管作為指示燈,可以很方便地指示電源與電路是否接通。該設計的電源 部分如圖10所示:QiJ1尹2+刃|

28、 VinVoul+ ci個m1000*1041000104104圖10電源電路圖IK325按鍵開關去抖設計前誥畀動定岸沿再動b) 捷動按鍵開關在電路中的連接如圖所示。 按鍵未按下時,A點電位為高電平5V;按鍵按下 時,A點電位為低電平。A點電位就用于向CPU傳遞按鍵的開關狀態(tài)。但是由于按鍵的結 構為機械彈性開關,在按鍵按下和斷開時,觸點在閉合和斷開瞬間還會接觸不穩(wěn)定,引起 A點電平不穩(wěn)定,如圖11所示,鍵盤的抖動時間一般為 510ms,抖動現(xiàn)象會引起CPU 對一次鍵操作進行多次處理,從而可能產(chǎn)生錯誤。因此必須設法消除抖動的不良后果。+5V RPo I I 才%圖11鍵操作和鍵抖動消除抖動的不良

29、后果的方法有硬、軟件兩種。為了節(jié)省硬件,通常在單片機系統(tǒng)中,一般不采用硬件方法消除鍵的抖動,而是用軟 件消除抖動的方法。根據(jù)抖動特性,在第一次檢測到按鍵按下后,執(zhí)行一段延時510ms讓前延抖動消失后再一次檢測鍵的狀態(tài),如果仍保持閉合狀態(tài)電平,則確認真正有鍵按下。當檢測到按鍵釋放后,也要給 510ms的延時,待后延抖動消失后才轉入該鍵處理程序。3.3軟件設計電子時鐘的程序主要包括3個方面的內(nèi)容:一是DS1302從單片機中讀取數(shù)據(jù)進行計 數(shù),二是利用按鍵進行時間的調(diào)整, 三是單片機中讀取DS1302中的數(shù)據(jù)驅動LED數(shù)碼管 顯示時間。STC89C52RC單片機主要I/O 口的分配:P10、P11、

30、P12分別接時鐘芯片的 SCLK、 I/O、RST引腳,P13、P14接兩個獨立按鍵。圖12時間調(diào)整程序流程圖4.1總原理圖第4章protues仿真與調(diào)試利用keil軟件編寫源程序。在protues中畫好其電路圖如下圖14所示:C1I1U1G 1Q18丄 C6-C2卜10kC3DIlOuC7|xivcci VCC2JystalrstSCLK X21/D&S13027J76a6RP1St1D*XTAL1PO.CWAM ro.1/A01A A Lirwru.O/jR.KJnjIP2.0/P2.2M10PS EHP2.3JA11ALEP2.4I加2FTP2.5dfAl3EJM1IP2.&/A14P2

31、.7/A15尸T .P1.1rj.Q/lMAlJrJ.l/| AUP1.2P3 SHINTOP1.3rj.JrllN 11Pl.4F1.SP34/T0F3.4/T1r 1 it?P1.7rjiWllVnP3.7/RF1213AT購國XICRYSTAL圖13 電路板的原理圖4.2電路板的仿真Time: 17-03-37Date? 29-12-14DSliO? Clock-U1回XTAL1XTAL2PO.O/ADOR0.1/AD1R0.2/AD2R0.3/AD3PQ.4/AD4P0.5/AD5PQ.EWADBFiO.7/AD7LMD1BL2914/12/29 Meek2趕善m SZSS1SRSTF

32、SEN ALE EA亦3B范22RP1XI VCC1VCC2824B57JSe8fSTALR$T SCLK X2 1/D門.0P1.1P1J:P1.3P1.4P1j5P-1.0PI.7F2.Q/A0P2.1WP2.2/A10P2.3/A11P2.4/A12P2.5/A13P2JB/A.14F27/A15P3.CMRXD P3.1/IXD P3.2/HT0 P3.3/IMT1F34T0P3.5TT1 PG.BjWR- P3.7/RLTZ1茁二.2728 10211*13個追ATS0C5-1RES PACK-6源程序#include #include #include lcd.h#include

33、1302.h#define uint unsigned int #define uchar unsigned charsbit Set = P3A0;sbit Up =卩3人3;sbit Down = P3A6;sbit out = P3A1;/模式切換鍵/加法按鈕/減法按鈕/立刻跳出調(diào)整模式按鈕char done,count,temp,flag,up_flag,down_flag; void show_time();/液晶顯示程序void Delay1ms(unsigned int count)unsigned int i,j;for(i=0;icount;i+) for(j=0;j0;de

34、lay-) for(i=0;i0x59)up_flag=1; / 數(shù)據(jù)調(diào)整后更新標志 /超過 59 秒 ,清零temp=0;break;case 2:temp=temp+1;/分數(shù)加if(temp0x59)temp=0; break;case 3:temp=Read1302(DS1302_MINUTE);1up_flag=1;/超過 59 分,清零/讀取分數(shù)temp=temp+1;if(temp0x23)temp=0; break;case 4:temp=Read1302(DS1302_HOUR);/小時數(shù)加 1up_flag=1;/超過 23小時 ,清零/讀取小時數(shù)temp=temp+1;/

35、星期數(shù)加temp=Read1302(DS1302_WEEK);1/讀取星期數(shù)up_flag=1;if(temp0x7)temp=1; break;case 5:temp=Read1302(DS1302_DAY);/讀取日數(shù)temp=temp+1;/日數(shù)加 1up_flag=1;if(temp0x31)temp=1; break;case 6:temp=Read1302(DS1302_MONTH); / 讀取月數(shù)temp=temp+1;/月數(shù)加 1up_flag=1;if(temp0x12)temp=1;break;case 7: temp=Read1302(DS1302_YEAR); / 讀取

36、年數(shù) temp=temp+1; /年數(shù)加 1up_flag=1;if(temp0x85)temp=0;break; default:break;while(Up=0);/void Downkey()/ 降序按鍵Down=1;if(Down=0)mdelay(8); switch(count)case 1: temp=Read1302(DS1302_SECOND); / 讀取秒數(shù) temp=temp-1;/ 秒數(shù)減 1down_flag=1; /數(shù)據(jù)調(diào)整后更新標志 if(temp=0x7f)/小于 0 秒,返回 59 秒temp=0x59;break;case 2: temp=Read1302(

37、DS1302_MINUTE); / 讀取分數(shù) temp=temp-1; /分數(shù)減 1down_flag=1;if(temp=-1)temp=0x59;/小于 0 秒 ,返回 59 秒break;case 3: temp=Read1302(DS1302_HOUR); / 讀取小時數(shù) temp=temp-1; /小時數(shù)減 1down_flag=1;if(temp=-1) temp=0x23;break;case 4:temp=Read1302(DS1302_WEEK); / 讀取星期數(shù) temp=temp-1; /星期數(shù)減 1down_flag=1;if(temp=0)temp=0x7;break

38、;case 5:temp=Read1302(DS1302_DAY); / 讀取日數(shù)temp=temp-1; /日數(shù)減 1 down_flag=1;if(temp=0)temp=31;break;case 6:temp=Read1302(DS1302_MONTH); / 讀取月數(shù)temp=temp-1; /月數(shù)減 1 down_flag=1;if(temp=0)temp=12;break;case 7:temp=Read1302(DS1302_YEAR); / 讀取年數(shù)temp=temp-1; /年數(shù)減 1 down_flag=1;if(temp=-1)temp=0x85;break; defa

39、ult:break;while(Down=0);void Setkey()/ 模式選擇按鍵Set=1;if(Set=0) mdelay(8);count=count+1; /Setkey 按一次 ,count 就加 1 done=1;/進入調(diào)整模式while(Set=0);void keydone()/ 按鍵功能執(zhí)行 uchar Second;if(flag=0)/關閉時鐘 ,停止計時 Write1302(0x8e,0x00); / 寫入允許 temp=Read1302(0x80); Write1302(0x80,temp|0x80);Write1302(0x8e,0x80); / 禁止寫入f

40、lag=1;Setkey();/掃描模式切換按鍵switch(count)case 1:do /count=1, 調(diào)整秒outkey();/掃描跳出按鈕Upkey();/掃描加按鈕Downkey();/掃描減按鈕if(up_flag=1|down_flag=1) / 數(shù)據(jù)更新,重新寫入新的數(shù)據(jù) Write1302(0x8e,0x00); / 寫入允許 Write1302(0x80,temp|0x80); / 寫入新的秒數(shù) Write1302(0x8e,0x80); / 禁止寫入 up_flag=0;down_flag=0; hide_sec+;/位閃計數(shù)if(hide_sec3)hide_se

41、c=0; show_time(); /液晶顯示數(shù)據(jù) while(count=2);break;case 2:do /count=2, 調(diào)整分 hide_sec=0; outkey(); Upkey(); Downkey(); if(temp0x60) temp=0;if(up_flag=1|down_flag=1)Write1302(0x8e,0x00); / 寫入允許Write1302(0x82,temp); / 寫入新的分數(shù)Write1302(0x8e,0x80); / 禁止寫入 up_flag=0;down_flag=0;hide_min+;if(hide_min3)hide_min=0

42、;show_time();while(count=3);break;case 3:do/count=3, 調(diào)整小時hide_min=0;outkey();Upkey();Downkey();if(up_flag=1|down_flag=1)Write1302(0x8e,0x00); / 寫入允許Write1302(0x84,temp); / 寫入新的小時數(shù)Write1302(0x8e,0x80); / 禁止寫入 up_flag=0;down_flag=0;hide_hour+;if(hide_hour3)hide_hour=0;show_time();while(count=4);break;

43、case 4:do/count=4, 調(diào)整星期hide_hour=0;outkey();Upkey();Downkey();if(up_flag=1|down_flag=1)Write1302(0x8e,0x00); / 寫入允許Write1302(0x8a,temp); / 寫入新的星期數(shù)Write1302(0x8e,0x80); / 禁止寫入 up_flag=0;down_flag=0;hide_week+;if(hide_week3)hide_week=0;show_time();while(count=5);break;case 5:do/count=5, 調(diào)整日hide_week=0

44、;outkey();Upkey();Downkey(); if(up_flag=1|down_flag=1) Write1302(0x8e,0x00); / 寫入允許Write1302(0x86,temp); / 寫入新的日數(shù)Write1302(0x8e,0x80); / 禁止寫入 up_flag=0;down_flag=0;hide_day+;if(hide_day3)hide_day=0;show_time();while(count=6);break;case 6:do/count=6, 調(diào)整月hide_day=0;outkey();Upkey();Downkey(); if(up_fl

45、ag=1|down_flag=1) Write1302(0x8e,0x00); / 寫入允許Write1302(0x88,temp); / 寫入新的月數(shù)Write1302(0x8e,0x80); / 禁止寫入 up_flag=0;down_flag=0;hide_month+;if(hide_month3)hide_month=0;show_time();while(count=7);break;case 7:do/count=7, 調(diào)整年hide_month=0;outkey();Upkey();Downkey();if(up_flag=1|down_flag=1)Write1302(0x8

46、e,0x00); / 寫入允許Write1302(0x8c,temp); / 寫入新的年數(shù)Write1302(0x8e,0x80); / 禁止寫入up_flag=0;down_flag=0;hide_year+;if(hide_year3)hide_year=0;show_time();while(count=8);break;case 8: count=0;hide_year=0; /count8, 跳出調(diào)整模式 ,返回默認顯示狀態(tài)Second=Read1302(DS1302_SECOND);Write1302(0x8e,0x00); / 寫入允許Write1302(0x80,Second&

47、0x7f);Write1302(0x8E,0x80);/ 禁止寫入done=0;break; /count=7, 開啟中斷 ,標志位置 0 并退出default:break;void show_time()/ 液晶顯示程序DS1302_GetTime(&CurrentTime); /獲取時鐘芯片的時間數(shù)據(jù)TimeToStr(&CurrentTime);/ 時間數(shù)據(jù)轉換液晶字符DateToStr(&CurrentTime);/ 日期數(shù)據(jù)轉換液晶字符GotoXY(0,1);Print(CurrentTime.TimeString); / 顯示時間GotoXY(0,0);Print(CurrentTime.DateString); / 顯示日期GotoXY(15,0);Print(week_value);/顯示星期GotoXY(1

溫馨提示

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

評論

0/150

提交評論