版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1 / 43職業(yè)技術學院畢畢業(yè)業(yè)設設計計論論文文基于 51 單片機的電子時鐘設計系 部: 信息系 專 業(yè): 電氣自動化班 級: 09 級一班學生: 瑞勇 學 號: 090723012 指導教師: 耿素軍 2012 年 5 月 6 日摘要隨著單片機技術的飛速發(fā)展,在其推動下,現(xiàn)代的電子產(chǎn)品幾乎滲透到了社會的各個領域,有力地推動了社會生產(chǎn)力的發(fā)展和社會信息化程度的提高,同時也使現(xiàn)代電子產(chǎn)品性能進一步提高。時間就是金錢、時間就是生命、時間就是勝利,準確的掌握時間和分配時間對人們來說至關重要,時鐘是我們生活中必不可少的工具。電子鐘的設計方法有很多種,但是基于單片機并通過 LCD 顯示的電子時鐘具有編程
2、靈活、精確度高、便于攜帶、顯示直觀等特點。 利用 STC89C52 單片機對 DS1302 時鐘芯片進行讀寫操作并通過 1602 字符液晶顯示實時時鐘信息,這樣便構成了一個單片機電子時鐘。關鍵詞:單片機,電子時鐘,STC89C52ABSTRACTWith the rapid development of microcomputer technology in its promotion, modern electronics into almost all areas of society, a strong impetus to the development of social produ
3、ctive forces and social improvement in the level of information, but also to further improve the performance of modern electronic products.Time is a money, time is life, time is victory Accurate grasp of time and allocation of time is crucial to people, The clock is necessary in our life tools . Clo
4、ck Design There are many ways, however, produced by single chip electronic clock is more flexible programming, and easy expansion of electronic capabilities, high accuracy, easy to carry, display visual and so on. In this paper, through the use of STC89C52 microcontroller by DS1302 clock chips for r
5、eading and writing operation and through 1602 character liquid crystal display real-time clock information so that forming a single chip electronic clock. KeyKey WordsWords: Microcontroller,STC89C52,Electronic clock,1 / 43目錄緒論 1概述 1研究目的 1第 1 章設計要求與方案論證 21.1 設計要求 21.2 系統(tǒng)基本方案選擇和論證 21.2.1 單片機芯片的選擇方案和論證
6、21.2.2 顯示模塊選擇方案和論證21.2.3 時鐘芯片的選擇方案和論證31.3 電路設計最終方案決定3第 2 章主要元件介紹 42.1 STC89C52 介紹 42.1.1 STC89C52 主要功能與 PDIP 封裝42.1.2 STC89C52 引腳介紹42.1.3 STC89C52 最小系統(tǒng)52.2 DS1302 時鐘芯片介紹 62.2.1 DS1302 概述62.2.2 DS1302 引腳介紹72.2.3 DS1302 使用方法72. 3 1602 字符液晶介紹 92.3.1 1602 液晶概述92.3.2 1602 引腳介紹102.3.3 1602 字符液晶使用方法10第 3 章
7、系統(tǒng)硬件設計 133.1 電路設計框圖 133.2 系統(tǒng)硬件概述 13第 4 章系統(tǒng)的軟件設計 144.1 程序概述 144.2 延時函數(shù) 152 / 434.3 對 DS1302 讀寫操作函數(shù) 154.3.1 向 DS1302 寫數(shù)據(jù)154.3.2 從 DS1302 讀數(shù)據(jù)164.4 顯示函數(shù) 174.4.1 向 1602 液晶中寫一個指令174.4.2 向液晶寫數(shù)據(jù)174.4.3 初使化 1602 液晶174.4.4 如何在液晶上顯示時間、日期與周184.5 按鍵函數(shù) 194.5.1 12/24 小時顯示模式切換鍵214.5.2 功能鍵函數(shù)234.5.3 調整鍵函數(shù)254.5.4 確定鍵3
8、14.6 主函數(shù) 32總結 34致 35參考文獻 36緒論概述時間,對人們來說是非常寶貴的,準確的掌握時間和分配時間對人們來說至關重要。因此自從時鐘發(fā)明的那刻起,就成為人類的好朋友。隨著時間的流逝,科學技術的不斷發(fā)展和提高,人們對時間計量的精度要求越來越高,應用越來越廣。怎樣讓時鐘更好、更方便、更精確的顯示時間,這就要求人們不斷設計研發(fā)出新型的時鐘。高精度的計時工具大多數(shù)都使用了石英晶體振蕩器,由于電子鐘,石英表,石英鐘都采用了石英技術,因此走時精度高,穩(wěn)定性好,使用方便,不需要經(jīng)常調校。數(shù)字式電子鐘用集成電路計時時,譯碼代替機械式傳動,用 LCD 顯示器代替指針進而顯示時間,減小了計時誤差,
9、這種表具有時,分,秒顯示時間的功能,還可以進行時和分的校對,片選的靈活性好。時鐘電路在計算機系統(tǒng)中起著非常重要的作用,是保證系統(tǒng)正常工作的基礎。在單片機的應用系統(tǒng)中,時鐘有兩個方面的含義:一是指為保障系統(tǒng)正常工作的基準振蕩定時信號,主要由晶振和外圍電路組成,晶振頻率的大小決定了單片機系統(tǒng)工作的快慢;二是指系統(tǒng)的標準定時時鐘,即定時時間,它通常有兩種實現(xiàn)方法:一是用軟件實現(xiàn),即用單片機部的可編程定時器/計數(shù)器來實現(xiàn);二是用專門的時鐘芯片實現(xiàn)。研究目的通過利用 STC89C52 單片機和 DS1302 芯片以與外圍的按鍵和 LCD 顯示器等部件,設計一個基于單片機的電子時鐘。設計的電子時鐘通過液晶
10、顯示器顯示,并能通過按鍵對時間進行設置。2 / 43第 1 章 設計要求與方案論證1.1 設計要求 具有年、月、日、星期、時、分、秒顯示功能 具備年、月、日、星期、時、分、秒校準功能 具有 12/24 小時切換顯示功能 1.2 系統(tǒng)基本方案選擇和論證1.2.1 單片機芯片的選擇方案和論證方案一: 采用 STC89C52 芯片作為硬件核心。STC89C52 部具有 8KB ROM 存儲空間,512字節(jié)數(shù)據(jù)存儲空間,帶有 2K 字節(jié)的 EEPROM 存儲空間,與 MCS-51 系列單片機完全兼容,STC89C52 可以通過串口下載。方案二:采用 AT89S52。AT89S52 片具有 8K 字節(jié)程
11、序存儲空間,256 字節(jié)的數(shù)據(jù)存儲空間沒有 EEPROM 存儲空間,也與 MCS-51 系列單片機完全兼容,具有在線編程可擦除技術。兩種單片機都完全能夠滿足設計需要,STC89C52 相對 ATS89C52 價格便宜,且抗干擾能力強??紤]到成本因素,因此選用 STC89C52。1.2.2 顯示模塊選擇方案和論證方案一:采用點陣式數(shù)碼管顯示。點陣式數(shù)碼管是由八行八列的發(fā)光二極管組成,可用來顯示數(shù)。但體積較大,且價格也相對較高,從便攜實用的角度出發(fā),不采用此種方案。方案二:采用 LED 數(shù)碼管動態(tài)掃描。LED 數(shù)碼管價格便宜,對于顯示數(shù)字最合適,但功耗較大,且顯示容量不夠,所以也不用此種方案。方案
12、三:采用 LCD 液晶顯示屏。液晶顯示屏的顯示功能強大,可顯示大量文字,顯示多樣,清晰可見,且價格適中,所以采用了 LCD 數(shù)碼管作為顯示。3 / 431.2.3 時鐘芯片的選擇方案和論證方案一: 直接采用單片機定時計數(shù)器提供秒信號,使用程序實現(xiàn)年、月、日、星期、時、分、秒計數(shù)。采用此種方案雖然減少芯片的使用,節(jié)約成本,但是,實現(xiàn)的時間誤差較大。所以不采用此方案。方案二: 采用 DS1302 時鐘芯片實現(xiàn)時鐘,DS1302 芯片是一種高性能的時鐘芯片,可自動對秒、分、時、日、周、月、年以與閏年補償?shù)哪赀M行計數(shù),而且精度高,工作電壓 2.5V5.5V 圍,2.5V 時耗電小于 300nA.1.3
13、 電路設計最終方案決定綜上各方案所述,對此次作品的方案選定: 采用 STC89C52 單片機作為主控制系統(tǒng);采用 DS1302 作為時鐘芯片;采用 1602 LCD 液晶作為顯示器件。4 / 43第 2 章 主要元件介紹2.1STC89C52 介紹2.1.1 STC89C52 主要功能與 PDIP 封裝STC89C52 是由宏晶科技公司生產(chǎn)的與工業(yè)標準 MCS-51 指令集和輸出管腳相兼容的單片機。STC89C52 主要功能如表 2.1 所示,其 PDIP 封裝如圖 2.1 所示主要功能特性兼容 MCS51 指令系統(tǒng)8K 可反復擦寫 Flash ROM32 個雙向 I/O 口256x8bit
14、部 RAM3 個 16 位可編程定時/計數(shù)器中斷時鐘頻率 0-24MHz2 個串行中斷可編程 UART 串行通道2 個外部中斷源共 6 個中斷源2 個讀寫中斷口線3 級加密位低功耗空閑和掉電模式軟件設置睡眠和喚醒功能表 2.1 STC89C52 主要功能2.1.2 STC89C52 引腳介紹主電源引腳(2 根)VCC(Pin40):電源輸入,接5V 電源GND(Pin20):接地線外接晶振引腳(2 根)XTAL1(Pin19):片振蕩電路的輸入端XTAL2(Pin20):片振蕩電路的輸出端控制引腳(4 根)RST/VPP(Pin9):復位引腳,引腳上出現(xiàn) 2 個機器周期的高電平將使單片機復位。
15、ALE/PROG(Pin30):地址鎖存允許信號PSEN(Pin29):外部存儲器讀選通信號EA/VPP(Pin31):程序存儲器的外部選通,接低電平從外部程序存儲器讀指令,如果接高電平則從部程序存儲器讀指令。可編程輸入/輸出引腳(32 根)STC89C52 單片機有 4 組 8 位的可編程 I/O 口,分別位 P0、P1、P2、P3 口,每個口有 8 位(8 根引腳),共 32 根。5 / 43P0 口(Pin39Pin32):8 位雙向 I/O 口線,名稱為 P0.0P0.7P1 口(Pin1Pin8):8 位準雙向 I/O 口線,名稱為 P1.0P1.7 P2 口(Pin21Pin28)
16、:8 位準雙向 I/O 口線,名稱為 P2.0P2.7 P3 口(Pin10Pin17):8 位準雙向 I/O 口線,名稱為 P3.0P3.7STC89C524039383435363727282930313233232425262221P1.01232019181716151413121110987654T0/P3.4INTO/P3.2RXD/P3.0RSTVccSCK/P1.7MISO/P1.6MOSI/P1.5P1.4P1.3P1.2P1.1TXD/P3.1INTI/P3.3T1/P3.5WR/P3.6RD/P3.7XTAL2XTAL1GNDP0.0(AD0)PSENALE/PROGEA
17、/VppP0.1(AD1)P0.7(AD7)P0.6(AD6)P0.5(AD5)P0.4(AD4)P0.3(AD3)P0.2(AD2)P2.7(AD15)P2.6(AD14)P2.1(AD9)P2.2(AD10)P2.3(AD11)P2.4(AD12)P2.5(AD13)P2.0(AD8)圖 2.1 STC89C52 PDIP 封裝圖2.1.3 STC89C52 最小系統(tǒng)最小系統(tǒng)是指能進行正常工作的最簡單電路。STC89C52 最小應用系統(tǒng)電路如圖 2.2 所示。它包含五個電路部分:電源電路、時鐘電路、復位電路、片外程序存儲器選擇電路、輸入/輸出接口電路。其中電源電路、時鐘電路、復位電路是 保
18、證單片機系統(tǒng)能夠正常工作的最基本的三部分電路,缺一不可。電源電路 芯片引腳 VCC 一般接上直流穩(wěn)壓電源+5V,引腳 GND 接電源+5V的負極,電源電壓圍在 45.5 之間,可保證單片機系統(tǒng)能正常工作。為提高電路的抗干擾性能,通常在引角 Vcc 與 GND 之間接上一個 10uF 的電解電容和一個0.1uF 片電容,這樣可抑制雜波串擾,從而有效確保電路穩(wěn)定性。時鐘電路 單片機引腳 18 和引腳 19 外接晶振與電容, STC89C52 芯片的工作頻率可在 233MHz 圍之間選,單片機工作頻率取決于晶振 XT 的頻率,通常選用 11.0592MHz 晶振。兩個小電容通常取值 3pF,以保證振
19、蕩器電路的穩(wěn)定性與6 / 43快速性。復位電路 一般若在引腳 RST 上保持 24 個工作主頻周期的高電平,單片機就可以完成復位,但為了保證系統(tǒng)可靠地復位,復位電路應使引腳 RST 保持10ms 以上的高電平。如圖復位電路帶有上電自動復位功能,當電路上電時,由于C1 電容兩端電壓值不能突變,電源+5V 會通過電容向 RST 提供充電電流,因此在RST 引腳上產(chǎn)生一高電平,使單片機進入復位狀態(tài)。隨著電容 C1 充電,它兩端電壓上升使得 RST 電位下降,最終使單片機退出復位狀態(tài)。正常運行時,可按復位按鈕對單片機復位E A/V P31X 119X 218R ES ET9R D17W R16IN T
20、 012IN T 113T 014T 115P10/T1P11/T2P123P134P145P156P167P178T XD11P0039R XD10P0138P0237P0336V cc40P0435A LE /P30P0534PSE N29P0633P2728P0732P2627P2021P2526P2122P2425P2223P2324G ND2080 52R 120 0R 210 K位位位位C 110 uFC 230 uFC 330 uFC 410 uFC 50.1u FX TG NDG NDV CC+5VV CC+5VG ND圖 2.2 STC89C52 最小系統(tǒng)2.2 DS1302
21、 時鐘芯片介紹2.2.1 DS1302 概述DS1302 是美國 DALLAS 公司推出的一種高性能、低功耗、帶 RAM 的實時時鐘芯片,它可以對年、月、日、周日、時、分、秒進行計時,具有閏年補償功能,工作電壓為 2.5V5.5V。采用雙電源供電(主電源和備用電源),同時提供了對后背電源進行涓細電流充電的能力。采用三線接口與 CPU 進行同步通信圖 2.3 DS1302 封裝圖7 / 432.2.2 DS1302 引腳介紹各引腳功能為:Vcc: 主電源;Vcc2:備用電源。當 Vcc2Vcc1+0.2V 時,由 Vcc2 向DS1302 供電;當 Vcc2Vcc1 時,由 Vcc1 向 DS1
22、302 供電。SCLK:串行時鐘輸入端,控制數(shù)據(jù)的輸入與輸出I/O: 三線接口時的雙向數(shù)據(jù)線 CE: 輸入信號,在讀、寫數(shù)據(jù)期間必須為高2.2.3 DS1302 使用方法(1) 時鐘芯片 DS1302 的工作原理: DS1302 在每次進行讀、寫程序前都必須初始化,先把 SCLK 端置 “0”,接著把 RST 端置“1”,最后才給予 SCLK 脈沖;讀/寫時序如圖 5 所示。表 2 為DS1302 的控制字,此控制字的位 7 必須置 1,若為 0 則不能把對 DS1302 進行讀寫數(shù)據(jù)。對于位 6,若對程序進行讀/寫時 RAM=1,對時間進行讀/寫時,CK=0。位 1 至位 5 指操作單元的地
23、址。位 0 是讀/寫操作位,進行讀操作時,該位為 1;該位為 0 則表示進行的是寫操作??刂谱止?jié)總是從最低位開始輸入/輸出的。表6 為 DS1302 的日歷、時間寄存器容:“CH”是時鐘暫停標志位,當該位為 1 時,時鐘振蕩器停止,DS1302 處于低功耗狀態(tài);當該位為 0 時,時鐘開始運行?!癢P”是寫保護位,在任何的對時鐘和 RAM 的寫操作之前,WP 必須為 0。當“WP”為 1時,寫保護位防止對任一寄存器的寫操作。(2) DS1302 的控制字節(jié)DS1302 的控制字如表所示。控制字節(jié)最高有效位(位 7)必須是邏輯 1,如果它為 0,則不能把數(shù)據(jù)寫入 DS1302 中,位 6 為 0,
24、表示存取日歷時鐘數(shù)據(jù),為1 表示存取 RAM 數(shù)據(jù);位 5 至位 1 指示操作單元的地址;最低有效位(位 0)如為 0 表示要進行寫操作,為 1 表示進行讀操作,控制字節(jié)總是從最低位開始傳輸RAMRD1CKA4A3A2A1A0WR表 2.2 DS1302 控制字(3) 數(shù)據(jù)輸入輸出(I/O)在控制指令字輸入后的下一個 SCLK 時鐘的上升沿時,數(shù)據(jù)被寫入 DS1302,數(shù)據(jù)輸入從低位即位 0 開始。同樣,在緊跟 8 位的控制指令字后的下一個 SCLK脈沖的下降沿讀出 DS1302 的數(shù)據(jù),讀出數(shù)據(jù)時從低位 0 位到高位 7。其讀寫時序如圖示8 / 43圖 2.4 DS1302 讀寫時序(4)D
25、S1302 寄存器DS1302 中與時間、日期有關的寄存器共有 12 個,其中 7 個存放數(shù)據(jù)的格式為 BCD 碼格式,其讀寫地址如下表所示讀寄存器寫寄存器Bit7Bit7Bit7Bit7Bit7Bit7Bit7Bit7圍81H80HCH10 秒秒00-5983H82H10 分分00-5912100-2385H84H240AM/PM時時1-1287H86H10 日日1-3189H88H10 月月1-128BH8AH00000周1-78DH8CH10 年年00-998FH8EHWP0000000表 2.3 DS1302 時鐘寄存器第一行秒寄存器,CH 為時鐘暫停標志位,該位為 1 時時鐘停止,該
26、位為 0 時時鐘運行第二行分寄存器,bit0bit6 表示分鐘數(shù),因采用 BCD 編碼,所以低四位最大能表示的數(shù)字為 9,計數(shù)滿向高三位進 1。第三行時寄存器,12/24 用來定義 DS1302 小時的運行模式,12 小時模式下9 / 43bit5 為 1 表示 PM 下午,bit5 為 0 表示 AM 上午第八行控制寄存器,bit7 是寫保護位 WP,當 WP 為 1 時,寫保護位可防止對任一寄存器的寫操作,在任何的對時鐘和 RAM 的寫操作之前,WP 位必須為 0 此外,DS1302 還有年份寄存器、控制寄存器、充電寄存器、時鐘突發(fā)寄存器與與 RAM 相關的寄存器等。時鐘突發(fā)寄存器可一次性
27、順序讀寫除充電寄存器外的所有寄存器容。 DS1302 與 RAM 相關的寄存器分為兩類:一類是單個 RAM 單元,共 31 個,每個單元組態(tài)為一個 8 位的字節(jié),其命令控制字為 C0HFDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的 RAM 寄存器,此方式下可一次性讀寫所有的 RAM 的 31 個字節(jié),命令控制字為 FEH(寫)、FFH(讀)。2. 31602 字符液晶介紹2.3.1 1602 液晶概述工業(yè)字符型液晶,1602 是指顯示的容為 16*2,能同時顯示兩行,每行 16 個字符。常見的 1602 字符液晶有兩種,一種顯示綠色背光黑色字體,另一種顯示藍色背光白色字體,目前市
28、面上絕大多數(shù)基于 HD44780 液晶芯片控制,原理是完全一樣的。本課題所用 1602 液晶模塊,顯示屏是藍色背光白色字體。如圖 2.5所示12310987654111213141516GNDVCCVOD1D0ER/WRSD2D3D4D5D6D7BLABLKLCD1602圖 2.5 1602 字符液晶2.3.2 1602 引腳介紹編號符號引腳說明編號符號引腳說明1GND電源地2VCC電源正極3VO液晶顯示對比度調節(jié)端4RS數(shù)據(jù)/命令選擇端10 / 435R/W讀寫選擇6E使能信號7D0數(shù)據(jù)口8D1數(shù)據(jù)口9D2數(shù)據(jù)口10D3數(shù)據(jù)口11D4數(shù)據(jù)口12D5數(shù)據(jù)口13D6數(shù)據(jù)口14D7數(shù)據(jù)口15BLA
29、背光電源正16BLK背光電源負表 2.4 1602 字符液晶引腳說明各個引腳具體功能說明:第 1 腳:GND 為地電源。第 2 腳:VCC 接 5V 正電源。第 3 腳:VO 為液晶顯示器對比度調整端,接正電源時對比度最弱,接地電源時對比度最高,對比度過高時會產(chǎn)生重影,使用一個 1K 的電位器調整對比度。第 4 腳:RS 為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器,低電平時選擇指令寄存器。第 5 腳:R/W 為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。第 6 腳:E 端為使能端,當 E 端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。第 714 腳:DB0DB7 為 8 位雙向數(shù)據(jù)線。第 15
30、16 腳:背光燈電源。2.3.3 1602 字符液晶使用方法(1)基本操作時序操作輸入輸出讀狀態(tài)RSL,RWH,EHD0D7狀態(tài)字寫指令RSL,RWL,D0D7指令碼,E高脈沖無讀數(shù)據(jù)RSH,RWH,EHD0D7數(shù)據(jù)寫數(shù)據(jù)RSH,RWL,D0D7數(shù)據(jù),E高脈沖無表 2.5 1602 字符液晶讀寫狀態(tài)表11 / 43圖 2.6 1602 液晶寫時序圖圖 2.7 1602 液晶讀時序圖(2)RAM1602 液晶控制器芯片部帶有 80 個 8 位的 RAM 緩沖區(qū),其地址和屏幕的對應關系如圖 2.8 示12 / 43圖 2.8(3)1602 字符液晶字庫 1602 液晶模塊部的字符發(fā)生存儲器(CGR
31、OM)已經(jīng)存儲了 160 個不同的點陣字符圖形,如下表所示,這些字符有:阿拉伯數(shù)字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼,比如大寫的英文字母“A”的代碼是 01000001B(41H),顯示時模塊把地址 41H 中的點陣字符圖形顯示出來,我們就能看到字母“A” 。 高位低位0000000 00010010 00010011 10100100 00100101 10110110 00110111 11011010 01011011 11101100 01101101 11111110 01111111 1XXXX0000XXXX00000 0P P p p-
32、-P PXXXX0001XXXX0001! !1 1A AQ Qa aq qq qXXXX0010XXXX0010“2 2B BR Rb br rXXXX0011XXXX0011# #3 3C CS Sc cs sXXXX0100XXXX0100$ $4 4D DT Td dt t XXXX0101XXXX0101% %5 5E EU Ue eu uo oXXXX0110XXXX0110& &6 6F FV Vf fv vXXXX0111XXXX01117 7G GW Wg gw wXXXX1000XXXX1000( (8 8H HX Xh hx xf fX XXXXX1001
33、XXXX1001) )9 9I IY Yi iy y-1-1y yXXXX1010XXXX1010* *:J JZ Zj jz z 千千XXXX1011XXXX1011+ +;K K k k 萬萬XXXX1100XXXX1100, , N N n nXXXX1111XXXX1111/ /? ?O O- -o o表 2.6 1602 字符液晶字庫表13 / 43第 3 章 系統(tǒng)硬件設計3.1 電路設計框圖STC89C52鍵盤模塊LCD顯示模塊DS1302時鐘模塊圖 3.1 硬件框圖3.2 系統(tǒng)硬件概述本電路以 STC89C52 單片機為控制核心,以 STC89C52 最小系統(tǒng)為基礎。時鐘電路由高
34、精度低功耗的 DS1302 提供,采用三線接口與 CPU 進行同步通信,輸入部分采用四個獨立式按鍵 S1、S2、S3、S4。1602 液晶顯示部分,D0D7 口與單片機 P0 口相連。具體線路連接,詳見附錄 114 / 43第 4 章 系統(tǒng)的軟件設計4.1 程序概述DS1302 時鐘芯片具有通電自動計時的功能。向 DS1302 中寫入一個初值,如寫入 20110501 00:00:00 星期日,在通電時,時間就會自動走:過60 秒分加 1;過 60 分時加 1;過 24 小時天加 1,星期日變成星期一;一周有 7天,芯片的周信息每 7 天一循環(huán);芯片能夠自動判斷每月有多少天,5 月有 31 天
35、,31 天后,月加 1。采用 DS1302 時鐘芯片的單片機時鐘,其實質就是讀取時鐘芯片的時鐘信息并把它顯示出來。只要時間初值正確,時鐘就能一直精準的走下去。調整時間日期,實質就是向 DS1302 時鐘芯片重新寫入初值。電子時鐘的主程序框圖如圖 10 所示開始初始化LCD及DS1302判斷設置鍵是否按下讀取DS1302中時間、日期顯示時間、日期進入調節(jié)模式將時間、日期寫入DS1302Y 調時 完成N圖 4.1 主程序框圖15 / 434.2 延時函數(shù)void delay(uint z) uint x,y;for(x=z;x0;x-)for(y=110;y0;y-); 由 for 循環(huán)構成的延時
36、函數(shù),z 的取值為這個函數(shù)的延時 ms 數(shù),如 delay(200);大約延時 200ms. delay(500);大約延時 500ms。因下文多次用到,固在此先作說明。4.3 對 DS1302 讀寫操作函數(shù)在對 DS1302 時鐘芯片操作前,應對其操作時序有所了解,參看前文 DS1302介紹。DS1302 采用串行方式與單片機進行通信,一個機器周期只能讀寫一個字節(jié)的一位,因此,在單片機與 DS1302 芯片間傳輸一字節(jié)(8 位)數(shù)據(jù),要分 8 次進行,且先從低位開始傳輸。4.3.1 向 DS1302 寫數(shù)據(jù)/*寫數(shù)據(jù)字節(jié)子函數(shù)*/void write_1302_byte(uchar temp
37、)/用來發(fā)送 8 位數(shù)據(jù)信息uchar i;for(i=0;i=1;/右移一位sck=1;/在 SCK 上升沿的時候字節(jié)寫入 DS1302/*1302 寫數(shù)據(jù)子函數(shù)*/void write_1302(uchar addd,uchar dat)16 / 43rst=0;_nop_();sck=0;_nop_();rst=1;_nop_();write_1302_byte(addd);/發(fā)送地址write_1302_byte(dat);/發(fā)送數(shù)據(jù)rst=0;4.3.2 從 DS1302 讀數(shù)據(jù)/*讀 DS1302 數(shù)據(jù)函數(shù)*/uchar read_1302(uchar add)/輸入地址 add,
38、返回讀取的數(shù)據(jù)uchar i,temp=0 x00;rst=0;sck=0;rst=1;write_1302_byte(add);for(i=0;i=1;/右移一位sck=1; /sck 被置高,在其下一次變?yōu)?0 時,數(shù)據(jù)被寫入rst=0;/以下為 DS1302 復位的穩(wěn)定時間sck=0;sck=1;17 / 43sda=0;sda=1;return(temp);/將 temp 值返回4.4 顯示函數(shù)對 1602 進行操作前要對其進行初使化,初使化完成后它才能正常顯示。如果想在 1602 液晶的某一個位置顯示一個容,要先對其寫入一個指令:在什么地方顯示。然后再對其寫入一個數(shù)據(jù):要顯示什么容。
39、對 1602 的液晶初使化,需要用寫入指令的方式完成。4.4.1 向 1602 2 液晶中寫一個指令void write_(uchar )lcdwr=0;/lcdwr 為讀寫控制端,lcdwr=0,這里可不寫lcdrs=0; /液晶 rs 接口為 0 時,寫指令,rs 為 1 時寫數(shù)據(jù)P0=; /將要寫的指令賦給 P0 口,delay(5); /由 1602 讀寫操作時序圖,先將指令賦給 P0 口,延時后將使能lcden=1; 端 lcden 置高,再延時一段時間,然后將 lcden 置低,這樣指令delay(5); 就寫入到 LCD 了lcden=0;4.4.2 向液晶寫數(shù)據(jù)void wri
40、te_data(uchar date),與寫指令類似,這里 lcdrs 設為 1lcdrs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0;18 / 434.4.3 初使化 1602 液晶此函數(shù)首先對液晶進行初使化,使其處于待命狀態(tài),然后將時鐘框架顯示出來:年月日之間的“” ,時分秒之間的“:” ,還有世紀年的高兩位。void init_1602()uchar num;lcdwr=0;lcden=0;write_(0 x38);/設置 LCD 為 16*2 顯示、5*7 點陣、8 位數(shù)據(jù)接口模式write_(0 x0c);/開顯示、不顯示光標write_
41、(0 x06);/寫一個字符后,地址指針加 1write_(0 x01);/顯示清 0write_(0 x80);/將指針指向初始位置for(num=0;num14;num+)/循環(huán)函數(shù),用于將 20 - - 寫入液晶write_data(tablenum);write_(0 x80+0 x40+4);/將指針指向 1602 液晶的第二行,第四個字段for(num=0;num8;num+)/功能與上同,用于將 : : 寫入write_data(table1num);4.4.4 如何在液晶上顯示時間、日期與周DS1302 中的時間、日期等信息是以 BCD 碼的形式存放的,要先將從 1302 中讀
42、取的數(shù)據(jù)轉化成 10 進制,然后顯示在液晶上相應的位置。/*顯示時間、日期子函數(shù)*/void write_sfm(uchar add,uchar time)/用于在 1602 上顯示年、月、日、時、分、秒。Add 為顯示位置,time 為要顯示的容uchar shi,ge;shi=time/16; /將從 DS1302 中讀取的 BCD 碼數(shù)據(jù)轉化成 10 進制個位和10 ge=time%16; 進制十位19 / 43write_(add+0 x80);/定義顯示在液晶的什么位置write_data(0 x30+shi);/由 1602 液晶字庫可知,09 的數(shù)據(jù)碼分別對應0 x300 x39
43、write_data(0 x30+ge); /初使化中設定了寫一個字符后,地址指針加 1,因此這里 不用重標定位/*顯示周子函數(shù)*/void write_zhou(uchar time1),用于在 1602 上顯示周信息,與顯示 時間日期子函數(shù)類似uchar ge;ge=time1%16;/一周七天,因此只需個位write_(0 x80+13);write_data(0 x30+ge);4.5 按鍵函數(shù)此電子時鐘共有 4 個按鍵,S1、S2、S3 與調時有關圖按鍵程序如圖 11,S4為 12 小時切換鍵S1 功能鍵:在 24 小時顯示模式下,該鍵被第一次按下后進入秒調整,液晶顯示器上的時間停止
44、走動。模式,再次按下后進入分調整模式,接著是調時模式、調年模式、調月模式、調日模式、調周模式,當?shù)诎舜伟聪略撴I后退出S2 調整鍵:在調整模式下,該鍵每按一次,相應時間或日期加 1S3 確定鍵:在調整模式下,該鍵被按下后,退出調整模式,并將調整后的時間、日期寫入 DS1302S4 顯示模式調整鍵 用于對時間的 12/24 小時模式的切換20 / 43S1按鍵秒閃爍S1按鍵S1按鍵S1按鍵S1按鍵S1按鍵分閃爍時閃爍秒數(shù)據(jù)寫入DS1302周閃爍日閃爍月閃爍年閃爍S1按鍵S2按鍵秒調節(jié)分數(shù)據(jù)寫入DS1302時數(shù)據(jù)寫入DS1302年數(shù)據(jù)寫入DS1302月數(shù)據(jù)寫入DS1302日數(shù)據(jù)寫入DS1302S2按
45、鍵分調節(jié)S2按鍵時調節(jié)S2按鍵年調節(jié)S2按鍵月調節(jié)S2按鍵日調節(jié)S1按鍵周數(shù)據(jù)寫入DS1302S2按鍵周調節(jié)進入主程序S3 鍵 按 下時間、日期寫入DS1302圖 4.2 按鍵程序圖21 / 434.5.1 12/24 小時顯示模式切換鍵時鐘默認在 24 小時模式下運行,定義一個標志位 flag1。第一次按下切換鍵,把瞬時時間轉化成 12 小時制,令 flag1=1。并寫入 DS1302 芯片,此后 DS1302 芯片在 12 小時模式下運行。第二次按下切換鍵,即返回 24 小時顯示模式,令flag1=0,把瞬時時間轉化成 24 小時模式并寫入 DS1302 芯片。有關 DS1302 的時間寄
46、存器存放形式參閱前文。如 24 小時模式下的 22:00,存放的形式為 00100010。12 小時模式下的 22 點,也就是 10:00PM,存放形式為10110000,在切換的一瞬間,我們只需要把小時數(shù)據(jù) 0 xb0 寫入到 DS1302,這樣就能讓時鐘芯片在 12 小時模式下運行了。需要注意的是,12 小時模式下,只用到后 5 位來表示時間,第 6 位用來表示 AM 或 PM 信息,如果真接用 24 小時模式下的顯示方法是會出錯的,這里我們需要對時進行轉化。首先提取 AM/PM 信息,讓其顯示。然后提取其后 5 位時間,顯示時間。在主函數(shù)部分如果檢測到flag1=1,就進行轉換。12 轉
47、 24 小進模式與其類似,不再贅述。if(s1num=0&s4=0)/ 設置鍵沒被按下,且 12/24 小時模式切換鍵被按下后delay(5);if(s4=0)s2num+;while(!s4);if(s2num=1)/24 小時切換成 12 小時int ge,shi;flag1=1;hour=read_1302(0 x85);ge=hour%16;shi=hour/16;if(shi=1&ge=1&ge=3&ge=6)x2=0;miao=x1+x2*16;write_sfm(10+0 x40,miao);write_(0 x80+0 x40+11);if(s1
48、num=2)int x3,x4;x3=fen%16;x4=fen/16;x3+;if(x3=10)x3=0;x4+;if(x4=6)x4=0;fen=x3+x4*16;write_sfm(7+0 x40,fen);write_(0 x80+0 x40+8);if(s1num=3)int x5,x6;x5=hour%16;x6=hour/16;x5+; if(x6=2&x5=4)x5=0;x6=0;hour=0;28 / 43if(x5=10)x5=0;x6+;hour=x5+x6*16;write_sfm(4+0 x40,hour);write_(0 x80+0 x40+5);if(s
49、1num=4)int x7,x8;x7=nian%16;x8=nian/16;x7+;if(x7=10)x7=0;x8+;if(x8=8)x8=1;nian=x7+x8*16;write_sfm(3,nian);write_(0 x80+4);if(s1num=5)int x5,x6;x5=yue%16;x6=yue/16;x5+;if(x6=1&x5=3)29 / 43x5=1;x6=0;if(x5=10)x5=0;x6+;yue=x5+x6*16;write_sfm(6,yue);write_(0 x80+7);if(s1num=6)/此條判斷每月天數(shù),包括平年閏年int x5,x
50、6,ge2,shi2,mon,ge1,shi1,year,leap;x5=ri%16;x6=ri/16;x5+; nian=read_1302(0 x8d);/讀取年數(shù)據(jù)ge1=nian%16;shi1=nian/16;year=ge1+shi1*10;if(year%4=0)/判斷是否為閏年leap=1;else leap=0;yue=read_1302(0 x89); /讀取月數(shù)據(jù)ge2=yue%16;shi2=yue/16;mon=ge2+shi2*10;if(mon=2&leap=0)/平年 2 月,28 天 if(x6=2&x5=9)30 / 43x5=1;x6=0;
51、if(x5=10)x5=0;x6+; if(mon=2&leap=1)/閏年 2 月,29 天if(x5=10)x5=0;x6+;if(x6=3)x5=1;x6=0;if(mon=4|mon=6|mon=9|mon=11)/4、6、9、11 月 30天 if(x6=3&x5=1)x5=1;x6=0;if(x5=10)x5=0;x6+; else /1、3、5、7、8、10、12 月 31 天31 / 43 if(x6=3&x5=2)x5=1;x6=0;if(x5=10)x5=0;x6+; ri=x5+x6*16;write_sfm(9,ri);write_(0 x80+
52、10);if(s1num=7)zhou+;if(zhou=8)zhou=1;write_zhou(zhou);write_(0 x80+13);4.5.4 確定鍵在調時模式下,按下確寫鍵后,把調好的時間寫入 DS1302 時鐘芯片并退出調整模式,時鐘顯示暫停標志位清 0,時鐘繼續(xù)計時。32 / 43if(s3= =0)/如果確定鍵按下delay(5);if(s3=0) /延時并重新檢測 S3 是否按下,用于差小誤差while(!s3);/在松手時將調整后的時間、日期與周信息寫入write_1302(0 x8e,0 x00);/ DS1302,退出調整模式,按鍵數(shù)清 0 write_1302(0 x80,miao); write_1302(0 x84,hour);write_1302(0 x82,fen);write_1302(0 x8a,zhou);write_1302(0 x8c,nian);/年write_1302(0 x88,yue);/月write_1302(0 x86,ri);write_1302(0 x8e,0 x80)flag=0; write_(0 x0c);s1num=0;4.6 主函數(shù)void main()int ap;init_1602();/inital_1302();while(1)keyscan();if(flag=0)33 / 43mia
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度高校兼職教師教育質量評估聘用合同3篇
- 二零二五年度旅游服務公司之間勞務合作與市場營銷合同3篇
- 二零二五年度環(huán)保節(jié)能照明設備供貨合同2篇
- 2025年度醫(yī)療設備擔保合同解除與醫(yī)療機構運營管理協(xié)議3篇
- 初中暑假計劃作文怎么寫
- 禁毒培訓課件
- 中藥在治療免疫介導性視網(wǎng)膜病變中的應用探索
- 廣西北海市(2024年-2025年小學六年級語文)統(tǒng)編版競賽題((上下)學期)試卷及答案
- 2024年跨國銷售合同具體條款和條件
- 2024員工車輛租賃專項合同及風險管理協(xié)議2篇
- 漢語拼音字母表
- 中天項目管理標準化講義(文明施工、CIS、防護設施)
- IT運維服務項目技術外包合同
- 調味料生產(chǎn)工藝流程圖
- 2023北師大版六年級上冊數(shù)學期末試卷(共8套)
- 企業(yè)的涉稅風險
- 武漢大學抬頭信簽紙
- 新人教版七年級下冊生物每課知識點總結
- 印刷作業(yè)指導書
- 2022年農業(yè)示范基地建設工作總結
- 硬筆書法比賽方案精選
評論
0/150
提交評論