項目12簡易萬年歷分析_第1頁
項目12簡易萬年歷分析_第2頁
項目12簡易萬年歷分析_第3頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、工程12簡易萬年歷學習目標1、 通過對萬年歷的設計,進一步熟練掌握單片機編程的方法和思想;2、 通過對萬年歷的設計,掌握時鐘芯片DS1302的使用方法;3、 通過對萬年歷的設計,增強對單片機的興趣及動手能力, 并在此過程中學會對程序的 逐步調試;工程導入t:Stc89c51圖1總體框架圖8位8段數碼管作為顯利用DS1302芯片進行計時,并且可以與單片機進行數據交換;示局部。相關知識DS1302是DALLAS公司推出的涓流充電時鐘芯片,內含有一個實時時鐘、日歷和 31字 節(jié)靜態(tài)RAM,通過簡單的串行接口與單片機進行通信實時時鐘/日歷電路。提供秒分時日日,僅需用期?月年的信息,每月的天數和閏年的天

2、數可自動調整時鐘操作可通過AM/PM指示決定采用 24或12小時格式。DS1302與單片機之間能簡單地米用同步串行的方式進行通信到三個口線:1-RES復位,2-I/O數據線,3-SCLK串行時鐘。時鐘/RAM的讀/寫數據以一 個字節(jié)或多 達31個字節(jié)的字符組方式通信。DS1302應用原理圖如圖2所示:GNDvccS1 mAI I1%ll 1Il J 節(jié)Y1If7 pdJ扌of P3.64* PJRST圖2DS1302原理圖各引腳功能如下:Vcc1 :主電源;Vcc2 :備份電源。當 Vcc2Vcc1+0.2V 時,由 Vcc2 向 DS1302 供電,當 Vcc2 Vcc1 時,由Vcc1向D

3、S1302供電;SCLK :串行時鐘,輸入,控制數據的輸入與輸出;I/O:三線接口時的雙向數據線;CE :輸入信號,在讀、寫數據期間,必須為高。該引腳有兩個功能:第一,CE開始控制字訪問移位存放器的控制邏輯;其次,CE提供結束單字節(jié)或多字節(jié)數據傳輸的方法。表-1 DS1302管腳X1 X232.758KHZ晶振管腳GND地RST復位I/O數據輸入/輸出引腳SCLK串行時鐘Vcc1 Vcc2電源供電管腳(1)時鐘芯片DS1302的工作原理:DS1302在每次進行讀、寫程序前都必須初始化,先把SCLK端置 “ C接著把RST端置“1最后才給予SCLK脈沖;讀/寫時序如下列圖所示。為DS1302的控

4、制字,此控制字的位7必須置1,假設為0那么不能把對DS1302進行讀寫數據。對于位 6,假設對程序進行讀/寫時RAM=1 ,對時間進行讀/ 寫時,CK=0。位1至位5指操作單元的地址。位 0是讀/寫操作位, 進行讀操作時,該位為 1;該位為0 那么表示進行的是寫操作??刂谱止?jié)總是從最低位開始輸入/輸出的。表6為DS1302的日歷、時間存放器內容:“ CH是時鐘暫停標志位,當該位為1時,時鐘振蕩器停止,DS1302處于低功耗狀態(tài);當該位為0時,時鐘開始運行?!?WP是寫保護位,在任何的對時鐘和 RAM的寫操作之前, WP必須為0。當“ WP為1時,寫保護位防止對任一存放器的寫操作。DS1302的

5、控制字節(jié)DS1302的控制字如表-1所示??刂谱止?jié)的高有效位位7必須是邏輯1 ,如果它為0,那么不能把數據寫入 DS1302中,位6如果0,那么表示存取日歷時鐘數據,為1表示存取RAM數據;位5至位1指示操作單元的地址;最低有效位位0如為0表示要進行寫操作,為3數據輸入輸出I/O在控制指令字輸入后的下一個SCLK時鐘的上升沿時,數據被寫入DS1302,數據輸入1表示進行讀操作,控制字節(jié)總是從最低位開始輸出8位的控制指令字后的下一個SCLK脈沖的下降沿讀出從低位即位0開始。同樣,在緊跟DS1302的數據,讀出數據時從低位0位到高位7。如下列圖1所示単字節(jié)諛d5CJUE.小TLrJ bJJTLTL

6、T VI/OAO-A2A3MDID2年字節(jié)寫h.i b| “ u I m_rJ1/3/MJALA2A3A4丄乂。ClDZ圖3DS1302讀/寫時序圖DS1302的存放器BCDDS1302有12個存放器,其中有 7個存放器與日歷、時鐘相關,存放的數據位為碼形式,其日歷、時間存放器及其控制字見表-3。表-3 DS1302的日歷、時間存放器寫寄存器讀寄存器Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit080H81HCH10秒秒82H83H10分分84H85H12 / 24010時時AM /PM86H87H0010日日88H89H00010月月8AH8BH00000星期8CH8DH10

7、年年8EH8FHWP0000000此外,DS1302還有年份存放器、控制存放器、充電存放器、時鐘突發(fā)存放器及與RAM相關的存放器等。時鐘突發(fā)存放器可一次性順序讀寫除充電存放器外的所有存放器內容。DS1302與RAM相關的存放器分為兩類:一類是單個RAM單元,共31個,每個單元組態(tài)為一個8位的字節(jié),其命令控制字為COH- FDH其中奇數為讀操作,偶數為寫操作;另一類為突發(fā)方式下的RAM存放器,此方式下可一次性讀寫所有的RAM的31個字節(jié),命令控制字為FEH 寫、FFH 讀。任務實施1硬件設計工作原理最根本局部是利用DS1302芯片的時鐘功能,單片機只需要給DS1302初值,然后不斷的從DS130

8、2中讀取數據并在數碼管中顯示,減少了單片機內部資源的占用卜narkTT圖4系統(tǒng)硬件原理圖(2)軟件設計程序文件1 : / 1)-DS1302.H#ifndef DS1302 H #define DS1302 H/-包含頭文件-/#in clude#in clude/-重定義關鍵詞-/#if ndef uchar#defi ne uchar un sig ned char#en dif#if ndef uint#defi ne uint un sig ned int#en dif/-定義 ds1302 使用的 10 口 -/sbit DSIO=P3 A4;sbit RST=P3A5;sbit S

9、CLK=P3A6;/- 定義全局函數 -/void Ds1302Write(uchar addr, uchar dat); uchar Ds1302Read(uchar addr);void Ds1302Init();void Ds1302ReadTime();/- 參加全局變量 -/ extern uchar TIME7; / 參加全局變量#endif程序文件 2 :/ 2)-DS1302.c#includeds1302.h/-DS1302 寫入和讀取時分秒的地址命令-/- 秒分時日月周年 最低位讀寫位 ; /uchar codeuchar code READ_RTC_ADDR7 = 0x8

10、1, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d; WRITE_RTC_ADDR7 = 0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c;-/-DS1302 時鐘初始化 2021 年 1 月 1 日星期二 12 點 00 分 00 秒。 - - 存儲順序是秒分時日月周年 ,存儲格式是用 BCD 碼 -/ uchar TIME7 = 0, 0, 0x12, 0x01, 0x01, 0x02, 0x13;* 函 數 名: Ds1302Write* 函數功能: 向 DS1302 命令地址 +數據* 輸 入: addr , dat* 輸 出:

11、無*void Ds1302Write(uchar addr , uchar dat) uchar n;RST = 0;_nop_();SCLK = 0;/先將SCLK置低電平 _nop_();RST = 1; /然后將RST(CE置高電平 _nop_();for (n=0; n= 1;SCLK = 1;/數據在上升沿時,DS1302讀取數據_nop_(); SCLK = 0;_nop_();for (n=0; *8; n+)/ 寫入 8 位數據DSIO = dat & 0x01;dat = 1;SCLK = 1;/數據在上升沿時,DS1302讀取數據_nop_();SCLK = 0;_nop_

12、();RST = 0;/傳送數據結束_nop_();* 函數名:Ds1302Read*函數功能:讀取一個地址的數據*輸入:addr*輸出:dat* /uchar Ds1302Read(uchar addr)uchar n ,dat,dat1;RST = 0;_nop_();SCLK = 0;/先將SCLK置低電平。_nop_();RST = 1;/然后將RST(CE置高電平。_nop_();for(n=0; *8; n+)/ 開始傳送八位地址命令DSIO = addr & 0x01 ;/數據從低位開始傳送 addr = 1; SCLK = 1;/數據在上升沿時,DS 1 302讀取數據_nop

13、_();SCLK = 0;/DS1302 下降沿時,放置數據_nop_();_nop_();for(n=0; *8; n+) 讀取 8 位數據datl = DSIO;/從最低位開始接收dat = (dat1) | (dat17);SCLK = 1;_nop_();SCLK = 0;/DS1302 下降沿時,放置數據 _nop_();RST = 0;_nop_(); /以下為DS1302復位的穩(wěn)定時間,必須的SCLK = 1;_nop_();DSIO = 0;_nop_();DSIO = 1;_nop_();return dat;*函數名Ds1302l nit函數功能初始化DS1302*void

14、 Ds1302l nit()uchar n;Ds1302Write(0x8E,0X00);/禁止寫保護,就是關閉寫保護功能for (n=0; *7; n+) 寫入7個字節(jié)的時鐘信號:分秒時日月周年Ds1302Write(WRITE_RTC_ADDR n,TIME n );/翻開寫保護功能Ds1302Write(0x8E,0x80);*函數名函Ds1302ReadTime數功能輸讀取時鐘信息*/void Ds1302ReadTime()uchar n;for (n=0; *7; n+) 讀取7個字節(jié)的時鐘信號:分秒時日月周年TIME n = Ds1302Read(READ_RTC_ADDR n)

15、;程序文件3 :/ 2)-mai n.c*實驗名:DS1302時鐘顯示試驗*實驗說明:數碼管顯示時鐘信息*連接方式:見連接圖*注意:*#in clude#i ncludeds1302.h/-定義使用的10-/#defi ne GPI0_DIG P0 sbit LSA=P2 A2;sbit LSB=P2A3;sbit LSC=P2A4;/-定義全局變量 -/un sig ned char code DIG_CODE17= 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71; 0、1、2、3

16、、4、5、6、7、8、9、A b、C、d、E、F 的顯示碼 unsigned char DisplayData8;/用來存放要顯示的8位數的值 /-聲明全局變量-/ void DigDisplay();*函數名:mai n*函數功能:主函數*輸入:無*輸出:無*void mai n()Ds1302I ni t(); while(1)Ds1302ReadTime();DisplayData0DIG_CODETIME2/16;/時= DisplayData1DIG_CODETIME2&0x0f;= DisplayData20x40;= DisplayData3DIG_CODETIME1/16;/分

17、= DisplayData4DIG_CODETIME1&0x0f;DisplayData5 = 0x40;DisplayData6 = DIG_CODETIME0/16;/ 秒DisplayData7 = DIG_CODETIME0&0x0f;DigDisplay();* 函 數 名* 函數功能* 輸入* 輸出: DigDisplay: 使用數碼管顯示: 無: 無*void DigDisplay()unsigned char i;unsigned int j; for(i=0;i8;i+)switch(i) / 位選,選擇點亮的數碼管,case(0):LSA=O;LSB=O;LSC=O; br

18、eak; 顯示第 0 位 case(1):LSA=1;LSB=0;LSC=0; break;顯示第1 位case(2):LSA=0;LSB=1;LSC=0; break;顯示第2 位case(3):LSA=1;LSB=1;LSC=0; break;顯示第3 位case(4):LSA=0;LSB=0;LSC=1; break;顯示第4 位case(5):LSA=1;LSB=0;LSC=1; break;顯示第5 位case(6):LSA=0;LSB=1;LSC=1; break;顯示第6 位case(7):LSA=1;LSB=1;LSC=1; break;顯示第7 位GPIO_DIG=Displ

19、ayDatai; 發(fā)送段碼j=50;/ 掃描間隔時間設定while(j-);GPIO_DIG=0x00; 消隱知識拓展DS12887 是美國達拉斯半導體公司推出的并行時鐘芯片,采用 片所需的晶振和外部鋰電池相關電路集于芯片內部,同時它與目前 鐘芯片 MC146818B 和 DS1287 管腳兼容,可直接替換。采用CMOS 技術制成,把時鐘芯IBM AT 計算機常用的時DS12887 芯片設計的時鐘電路勿需任何外圍電路并具有良好的微機接口DS12887 芯片具有微功耗、外圍接口簡單、精度高、工作穩(wěn)定可靠等優(yōu)點,可廣泛用于各種需要較高精度的實時時鐘場合中。其主要功能如下:(1) 內含一個鋰電池,斷電情況

溫馨提示

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

評論

0/150

提交評論