電子萬年歷課程設計報告_第1頁
電子萬年歷課程設計報告_第2頁
電子萬年歷課程設計報告_第3頁
電子萬年歷課程設計報告_第4頁
電子萬年歷課程設計報告_第5頁
已閱讀5頁,還剩28頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、贛南師院物理與電子信息學院課程設計報告書姓名: 張華賓 班級: 13電氣工程及其自動化 學號: 130806058 時間: 2015.10.30 目錄1設計任務和要求22方案論證22.1 方案比較22.1.1 方案一22.1.2 方案二32.2 方案選擇33系統硬件設計33.1 主控電路的設計33.1.1 關于AT89C51單片機33.1.2 振蕩器電路的設計63.1.3 復位電路的設計73.2 DS1302時鐘電路93.3 LCD1602液晶顯示的設計114 軟件設計124.1 主控程序的設計124.2 DS1302時鐘電路流程設計134.3 LCD顯示電路和按鍵流程設計145 系統測試結果

2、及分析155.1測試方法155.2 測試結果及分析156 結束語與心得體會15參考文獻16附錄116附錄230設計題目電子萬年歷的設計設計要求 基本要求:(1)具有顯示年、月、日、星期、時、分、秒等功能;(2)萬年歷具有閏月識別顯示功能;(3)具備年、月、日、星期、時、分、秒校準功能;設計過程 摘要: 本次課程設計以實現電子萬年歷,即在利用LCD電路進行顯示年、月、日、星期、時、分、秒等功能。本設計要求利用AT89C51作為主控芯片完成主控電路的設計,輔助電路要求包括顯示電路、時鐘電路、按鍵電路等。本系統使用了專門的時鐘芯片DS1302,讀出其時間在LCD1602上顯示,并能通過按鍵對其進行調

3、時和校準。關鍵字:AT89C51單片機、DS1302,LCD1602,電子萬年歷1.設計任務和要求(1) 應用AT89S52單片機設計單片機實現對DS1302的控制(2) . 選用LCD1602顯示,實時顯示年、月、日、星期、時、分、秒,采用按鍵式實現時鐘對表和快慢調整;(3) 硬件設計部分,根據設計的任務選定合適的單片機,根據控制對象設計接口電路。設計的單元電路必須有工作原理,器件的作用,分析和計算過程;(4) 軟件設計部分,根據電路工作過程,畫出軟件流程圖,根據流程圖編寫相應的程序,進行調試并打印程序清單;(5) 原理圖設計部分,根據所確定的設計電路,利用Protel99se和Protue

4、s工具軟件繪制電路原理圖。2.方案論證2.1 方案比較2.1.1 方案一電子萬年歷的設計,硬件控制電路主要用了AT89C51芯片處理器、數碼管顯示器。根據各自芯片的功能互相連接成電子萬年歷的控制電路。軟件控制程序主要有主控程序、電子萬年歷的時間控制程序等組成。原理框圖如圖2.1所示。 AT89C51單片機最小系統模塊 按鍵模塊數碼管顯示模塊圖2.1 方案1原理框圖(1)控制按鍵:用于手動控制、手動調整、預置值的輸入等(2)輸出顯示:數碼管顯示。2.1.2 方案二硬件控制電路主要用了AT89C51芯片處理器、LCD1602顯示器、DS1302實時時鐘。根據各自芯片的功能互相連接成電子萬年歷的控制

5、電路。軟件控制程序主要有主控程序、電子萬年歷的時間控制程序等組成。原理圖框圖如圖2.2所示。 AT89C51單片機最小系統模塊 按鍵模塊1602液晶顯示模塊DS1302模塊 圖2.2方案二原理框圖本系統使用8052作為CPU,由CPU來控制時鐘芯片DS1302,DS1302芯片是一種高性能的時鐘芯片,可自動對秒、分、時、日、周、月、年以及閏年補償的年進行計數,而且精度高,工作電壓2.5V5.5V范圍內。液晶顯示方式顯示功能強,效果直觀。2.2 方案選擇將方案一與方案二進行比較:LED數碼管動態掃描。相對于液晶顯示比較經濟實惠,但液晶顯示比數碼管顯示美觀,LED數碼管在操作上比較繁瑣。液晶顯示方

6、式顯示功能強,效果直觀。方案一:直接采用單片機定時計數器提供秒信號,使用程序實現年、月、日、星期、時、分、秒計數。采用此種方案雖然減少芯片的使用,節約成本,但是,實現的時間誤差較大。所以不采用此方案。方案二:采用DS1302時鐘芯片實現時鐘,DS1302芯片是一種高性能的時鐘芯片,可自動對秒、分、時、日、周、月、年以及閏年補償的年進行計數,而且精度高,工作電壓2.5V5.5V范圍內。綜上所述,在價格、功能、操作的難易程度方面選擇方案二。3.系統硬件設計公交車報站系統主要由四個部分組成,即主控電路、時鐘電路、LCD液晶顯示電路。各部分電路的設計在本章中做了詳細的說明。3.1 主控電路的設計3.1

7、.1 關于AT89C51單片機AT89C51單片機的結構框圖如圖3.1所示。它主要由下面幾個部分組成:1個8位中央處理單元(CPU)、片內Flash存儲器、片內RAM、4個8位的雙向可尋址I/O口、1個全雙工UART(通用異步接收發送器)的串行接口、2個16位的定時器/計數器、多個優先級的嵌套中斷結構,以及一個片內振蕩器和時鐘電路。在AT89C單片機結構中,最顯著的特點是內部含有Flash存儲器,而在其他方面的結構,則和Inter公司的8051的結構沒有太大的區別。CPU中斷控制振蕩器片內Flash存儲器總線控制片內RAM4I/O端口ETC定時器1定時器0串行端口外部中斷P0 P2 P1 P3

8、地址/數據TXD RXD計數器輸入圖3.1 AT89C51單片機的結構框圖(1)主要性能與MCS-51 兼容;4K字節可編程閃爍存儲器; 1000次寫/擦循環;數據保留時間10年;全靜態工作:0Hz-24Hz;三級程序存儲器鎖定;128*8位內部RAM;32可編程I/O線;兩個16位定時器/計數器; 6個中斷源;可編程串行通道;片內振蕩器和時鐘電路另外,AT89C51是用靜態邏輯來設計的,其工作頻率可下降到0Hz,并提供兩種可用軟件來選擇的省電方式空閑方式(Idle Mode)和掉電方式(Power Down Mode)。在空閑方式中,CPU停止工作,而RAM、定時器/計數器、串行口和中斷系統

9、都繼續工作。在掉電方式中,片內振蕩器停止工作,由于時鐘被“凍結”,使一切功能都暫停,故只保存片內RAM中的內容,直到下一個硬件復位為止。(2)引腳功能說明AT89C51引腳圖如圖3.2所示。圖3.2 AT89C51引腳圖VCC:供電電壓。VSS:接地。P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8個TTL門電流。當P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數據存儲器,它可以被定義為數據/地址的低八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。P1口:P1口是一個內部提供上拉電阻的8位雙向I/O口,

10、P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。P2口:P2口為一個內部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數據存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內部上拉優勢,當對外部八位地址數據存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內容。P2口在FLASH

11、編程和校驗時接收高八位地址信號和控制信號。 P3口:P3口管腳是8個帶內部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3口也可作為AT89C51的一些特殊功能口,口管腳備選功能:P3.0 RXD(串行輸入口);P3.1 TXD(串行輸出口);P3.2 /INT0(外部中斷0);P3.3 /INT1(外部中斷1);P3.4 T0(記時器0外部輸入); P3.5 T1(記時器1外部輸入); P3.6 /WR(外部數據存儲器寫選通);P3.7 /

12、RD(外部數據存儲器讀選通);P3口同時為閃爍編程和編程校驗接收一些控制信號。RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數據存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微

13、拉高。如果微處理器在外部執行狀態ALE禁止,置位無效。 /PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數據存儲器時,這兩次有效的/PSEN信號將不出現。/EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內部程序存儲器。注意加密方式1時,/EA將內部鎖定為RESET;當/EA端保持高電平時,此間內部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。.XTAL1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。XTAL2:來自反向振蕩器的輸出。3.1.

14、2 振蕩器電路的設計89系列單片機的內部振蕩器電路如圖3.3所示,由一個單級反相器組成。XTAL1為反相器的輸入,XTAL2為反相器的輸出。可以利用它內部的振蕩器產生時鐘,只要在XTAL1和XTAL2引腳上外接一個晶體及電容組成的并聯諧振電路,便構成一個完整的振蕩信號發生器,如圖3.5示,此方法稱為內部方式。XTAL2XTAL1內部定時/PD400D1D2Q1RfQ2VCCQ3Q4圖3.3 AT89C51單片機內部振蕩器電路另一種使用方法如圖3.4示,由外部時鐘源提供一個時鐘信號到XTAL1端輸入,而XTAL2端浮空。在組成一個單片機應用系統時,多數采用圖3.5所示的方法,這種方式的結構緊湊,

15、成本低廉,可靠性高。振蕩器的等效電路如圖3.5上部所示。在圖中給出了外接元件,即外接晶體及電容C1,C2,并組成并聯諧振電路。在電路中,對電容C1和C2的值要求不是很嚴格,如果用高質的晶振,則不管頻率為多少,C1,C2通常都選擇30pF。有時,在某些應用場合,為了降低成本,晶體振蕩器可用陶瓷振蕩器代替。如果使用陶瓷振蕩器,則電容C1,C2的值取47pF。XTAL2XTAL1GNDNCCMOS門外部振蕩信號圖3.4 外部時鐘接法 XTAL1XTAL289系列單片機GND內部定時VCC/PDRf石英晶體或陶瓷振蕩器C1C2圖3.5 片內振蕩器等效電路通常,在單片機中對所使用的振蕩晶體的參數要求:E

16、SR(等效串聯電阻):根據所需頻率按圖366選取。C0(并聯電容):最大7.0pF。CL(負載電容):30pF+3pF。其誤差及溫度變化的范圍要按系統的要求來確定。6005004003002001000 4 8 12 16圖3-6 ESR與頻率的關系曲線在本設計中,采用的是內部方式,即如圖3.5所示,在XTAL1和XTAL2引腳上外接一個12MHZ的晶振及兩個30pF的電容組成。3.1.3 復位電路的設計89系列單片機與其他微處理器一樣,在啟動的時候都需要復位,使CPU及系統各部件處于確定的初始狀態,并從初始狀態開始工作。89系列單片機的復位信號是從RST引腳輸入到芯片內的施密特觸發器中的。當

17、系統處于正常工作狀態時,且振蕩器穩定后,如RST引腳上有一個高電平并維持2個機器周期(24個振蕩周期),則CPU就可以響應并將系統復位。復位時序如圖3.7所示,因外部的復位信號是與內部時鐘異步的,所以在每個機器周期的S5P2都對RST引腳上的狀態采樣。當在RST端采樣到“1”信號且該信號維持19個振蕩周期以后,將ALE和/PSEN接成高電平 ,使器件復位。在RST端電壓變低后,經過1-2個機器周期后退出復位狀態,重新啟動時鐘,并恢復ALE和/PSEN的狀態。如果在系統復位期間將ALE和/PSEN引腳拉成低電平,則會引起芯片進入不定狀態。| S5 | S6 | S1 | S2 | S3 | S4

18、 | S5 | S6 | S1 | S2 | S3 | S4 | S5 | S6 | S1 | S2 | S3 |RST:INST ADDR INST ADDR INST ADDR INST ADDR INST ADDR INSTALE:/PSEN:P0:11振蕩周期19振蕩周期圖3.7 內部復位定時時序(1) 手動復位手動復位需要人為在復位輸入端RST上加入高電平。一般采用的辦法是在RST端和正電源VCC之間接一個按鈕。當人為按下按鈕時,則VCC的+5V電平就會直接加到RST端。由于人的動作很快也會使按鈕保持接通達數十毫秒,所以,保證能滿足復位的時間要求。手動復位的電路如圖3.8所示。Vcc

19、 AT89C51RST GND8.2k10uF+Vcc圖3.8 手動復位電路(2) 上電復位AT89C51的上電復位電路如圖3.9所示,只要在RST復位輸入引腳上接一電容至VCC端,下接一個電阻到地即可。對于CMOS型單片機,由于在RST端內部有一個下拉電阻,故可將外部電阻去掉,而將外接電容減至1uF。上電復位的過程是在加電時,復位電路通過電容加給RST端一個短暫的高電平信號,此高電平信號隨著Vcc對電容的充電過程而逐漸回落,即RST端的高電平信號必須維持足夠長的時間。上電時,Vcc的上升時間約為10ms,而振蕩器的起振時間取決于振蕩頻率,如晶振頻率為10MHz,起振時間為1ms;晶振頻率為1

20、MHz,起振時間則為10ms。在圖3.8的復位電路中,當Vcc掉電時,必然會使RST端電壓迅速下降到0V以下,但是,由于內部電路的限制作用,這個負電壓將不會對器件產生損害。另外,在復位期間,端口引腳處于隨機狀態,復位后,系統將端口置為全“1”態。如果系統在上電時得不到有效的復位,則在程序計數器PC中將得不到一個合適的初值,因此,CPU可能會從一個未被定義的位置開始執行程序。VccAT89C51RST8.2k10uF+VccGND 圖3.9 上電復位電路3.2 DS1302時鐘電路DS1302是美國DALLAS公司推出的一種高性能、低功耗的實時時鐘芯片,附加31字節靜態RAM,采用SPI三線接口

21、與CPU進行同步通信,并可采用突發方式一次傳送多個字節的時鐘信號和RAM數據。實時時鐘可提供秒、分、時、日、星期、月和年,一個月小與31天時可以自動調整,且具有閏年補償功能。工作電壓寬達2.55.5V。采用雙電源供電(主電源和備用電源),可設置備用電源充電方式,提供了對后背電源進行小電流充電的能力。DS1302的外部引腳分配如圖3.3所示。DS1302用于數據記錄,特別是對某些具有特殊意義的數據點的記錄上,能實現數據與出現該數據的時間同時記錄,因此廣泛應用于測量系統中。圖3.10DS1302的外部引腳分配各引腳的功能為: Vcc1:主電源;Vcc2:備份電源。當Vcc2>Vcc1+0.2

22、V時,由Vcc2向DS1302供電,當Vcc2< Vcc1時,由Vcc1向DS1302供電。 SCLK:串行時鐘,輸入,控制數據的輸入與輸出; I/O:三線接口時的雙向數據線; :輸入信號,在讀、寫數據期間,必須為高。該引腳有兩個功能:一、開始控制字訪問移位寄存器的控制邏輯;二、提供結束單字節或多字節數據傳輸的方法。 (1)DS1302的工作原理 DS1302工作時為了對任何數據傳送進行初始化,需要將復位腳(RST)置為高電平且將8位地址和命令信息裝入移位寄存器。數據在時鐘(SCLK)的上升沿串行輸入,前8位指定訪問地址,命令字裝入移位寄存器后,在之后的時鐘周期,讀操作時輸出數據,寫操作

23、時輸出數據。時鐘脈沖的個數在單字節方式下為8+8(8位地址+8位數據),在多字節方式下最多可達248的數據。 (2)DS1302的寄存器和控制命令 DS1302有關日歷、時間的寄存器共有12個,其中有7個寄存器(讀時81h8Dh,寫時80h8Ch),存放的數據格式為BCD碼形式,如表3.3所示。 表3.3 DS1302有關日歷、時間的寄存器讀寄存器寫寄存器BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0范圍81h80hCH10秒秒00-5983h82h10秒分00-5985h84h12/24010時時1-12/0-23AM/PM87h86h0010日日1-3189h88h000

24、10月月1-128Bh8Ah00000周日1-78Dh8Ch10年年00-998Fh8EhWP0000000DS1302內部的RAM分為兩類,一類是單個RAM單元,共31個,每個單元為一個8位的字節,其命令控制字為COHFDH,其中奇數為讀操作,偶數為寫操作;再一類為突發方式下的RAM,此方式下可一次性讀寫所有的RAM的31個字節,命令控制字為FEH(寫)、FFH(讀)。 (3)與單片機接口電路原理圖 電路原理圖如圖3.4所示,DS1302與單片機的連接也僅需要3條線:CE引腳、SCLK串行時鐘引腳、I/O串行數據引腳,Vcc2為備用電源,外接32.768kHz晶振,為芯片提供計時脈沖。圖3.

25、11 DS1302與單片機的連接電路原理圖3.3 LCD1602液晶顯示的設計1602液晶也叫1602字符型液晶,它是一種專門用來顯示字母、數字、符號等的點陣型液晶模塊。它由若干個5X7或者5X11等點陣字符位組成,每個點陣字符位都可以顯示一個字符,每位之間有一個點距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因為如此所以它不能很好地顯示圖形。602LCD是指顯示的內容為16X2,即可以顯示兩行,每行16個字符液晶模塊(顯示字符和數字)。管腳功能:第1腳:GND為電源地;第2腳:VCC接5V電源正極;第3腳:V0為液晶顯示器對比度調整端,接正電源時對比度最弱,接地電源時對比度最高

26、(對比度過高時會 產生“鬼影”,使用時可以通過一個10K的電位器調整對比度)。第4腳:RS為寄存器選擇,高電平1時選擇數據寄存器、低電平0時選擇指令寄存器。第5腳:RW為讀寫信號線,高電平(1)時進行讀操作,低電平(0)時進行寫操作。第6腳:E(或EN)端為使能(enable)端,高電平(1)時讀取信息,負跳變時執行指令。第714腳:D0D7為8位雙向數據端。第1516腳:空腳或背燈電源。15腳背光正極,16腳背光負極。特性3.3V或5V工作電壓,對比度可調內含復位電路提供各種控制命令,如:清屏、字符閃爍、光標閃爍、顯示移位等多種功能有80字節顯示數據存儲器DDRAM內建有192個5X7點陣的

27、字型的字符發生器CGROM8個可由用戶自定義的5X7的字符發生器CGRAM特征應用微功耗、體積小、顯示內容豐富、超薄輕巧,常用在袖珍式儀表和低功耗應用系統中。電路原理圖如圖3.5所示,圖3.12LCD1602與單片機的連接電路原理圖4 軟件設計4.1 主控程序的設計系統總體流程圖如圖4.1所示,系統流程圖設計分析如下:首先,設備上電以后,程序開始運行。進入主函數后,開始對系統的一些初始化。當有設置鍵按下時進入時間修改模式,無按鍵按下時讀取時間等數據送入顯示器顯示。在時間修改模式下設置時間完成后再將時間送入時鐘芯片之后再送如顯示器顯示。圖4.1 整體流程圖4.2DS1302時鐘電路流程設計 時鐘

28、流程圖如圖4.2所示,流程圖分析:DS1302開始計時時,首先進行初始化,當有中斷信號時,讀取時鐘芯片的時間數據送入液晶顯示。這時若有設置鍵按下,進行時間修改,完成后將時間數據送入1302芯片,若沒有按鍵按下,直接送入EPROM中,送入液晶顯示。 4.2 DS1302時鐘電路程序流程圖 圖4.3 LCD顯示程序流程圖4.3LCD顯示電路和按鍵流程設計顯示流程圖如圖4.3,4.4所示,流程圖分析如下:首先對1602顯示屏進行初始化(初始化大約持續10ms),然后檢查忙信號,若BF=0,則獲得顯示RAM地址,寫入相應的數據顯示。若BF=1,則代表模塊正在進行內部操作,不接受任何外部指令和數據,直到

29、BF=0為止。 從圖4.4可知,調整年月日星期的流程,主要是要注意年月日星期的范圍大小。如果我們按下了調整鍵,當我們按下時間加一鍵時,相應的位置上時間將會加一,同樣的當我們按下減一鍵時,相應位置上的時間也會減一。比如我們時間調整正好在星期的位置上,當我們按下S1鍵時,我們可以看到星期加一,當我們按下S2鍵的時候,我們可以看到星期減一。同樣的,對于年月日也是同樣的調整,當我們按下復位鍵時,所以的時間將復位。 整個系統的主要程序的流程如上述程序流程圖所示,而程序的清單見附錄1。 圖4.4 時間調整流程二 5 系統測試結果及分析5.1測試方法 首先準備好一個5v的直流電源,為本系統加上電源。一上電,

30、可以看到LCD1602液晶上會顯示年,月,日,星期,時,分,秒。同時也可以看到時鐘在走。這個時候我們按下時鐘調整鍵,進行時鐘的調整。5.2 測試結果及分析系統加上電源,我們可以看到了LCD602液晶上會顯示年,月,日,星期,時,分,秒以。同時也可以看到時鐘在走。這個時候我們按下時鐘調整鍵,進行時鐘的調整。測試后可以正確的調整時鐘。6 結束語與心得體會本次設計中在最初的設計中,對于51 單片機進行了充分的了解。程序編寫中,由于思路不清晰,開始時遇到了很多的問題,通過和老師及同學的討論,以及對大量書籍資料和論壇中成功的品進行借鑒,明白了編程中的的主要算法和實現,從而解決問題。對于液晶屏幕,開始并不

31、是很了解,在運用時查看了大量的手冊資料,并閱讀了網友對于1602和DS1302驅動編寫代碼,從而掌握了1602和DS1302用法。 通過本次設計,使我對單片機的了解有了更加深一步,我發現只有動手做才會孰能技巧,還有對材料的整理和理解。這次設計運用到的知識很多方面,尤其是單片機,像AT89C51,引腳多,硬件內部線路接通,所以用起來很方便,還有DS1302芯片與單片機之間的連接以及如何使用它們。當然也要對這些元器件作相應調查。主要就是電路原理圖,還有對引腳的作用熟悉。對于軟件方面則是靈活運用單片機有關的程序語言,還有很多擴展功能,由于知識匱乏,但是理論知識還是比較詳細的。我們最大的成功之處是在這

32、整個過程,動腦尋求解決一個一個問題的辦法,對程序是不斷思索,把復雜的程序一點一點的分解開,從而使的程序不再顯得很難寫了,使得本系統能成功。參考文獻1 馮建華,趙亮單片機應用系統設計與產品開發M北京:人民郵電出版社,20042 何立民單片機高級教程(第一版)M北京:北京航空航天大學出版社,20013 張志良單片機原理及控制技術(第2版)北京:機械工業出版社,2005 4 譚浩強著程序設計與開發技術M北京:清華大學出版社,1991.5 趙海霞,李艷. 單片機應用項目化教程 北京:清華大學出版社,20136余西存,曹國華單片機原理及接口技術M西安電子科技大學出版,2000附錄1#include<

33、;reg51.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned char/時鐘芯片控制接口/sbit sck=P11;sbit io=P12;sbit rst=P13;/1602液晶控制接口/sbit rs=P26;sbit en=P27;/按鍵/sbit key1=P35;sbit key2=P36;sbit key3=P37;/uchar writetime7;uchar code table="0123456789"/?/時鐘讀寫地址/uchar code wri

34、teadd7=0x8c,0x8a,0x88,0x86,0x84,0x82,0x80;uchar code readadd7=0x8d,0x8b,0x89,0x87,0x85,0x83,0x81;uchar nian,zhou,yue,ri,shi,fen,miao;/時間暫存變量uchar date_flag;/調整年月日時分秒int code monthTotal13 = 0,31,59,90,120,151,181,212,243,273,304,334,365;int NM=0,ND=0;NY=0;unsigned long code lunar200y199 = 0x04AE53,0x

35、0A5748,0x5526BD,0x0D2650,0x0D9544,0x46AAB9,0x056A4D,0x09AD42,0x24AEB6,0x04AE4A,/*1901-1910*/ 0x6A4DBE,0x0A4D52,0x0D2546,0x5D52BA,0x0B544E,0x0D6A43,0x296D37,0x095B4B,0x749BC1,0x049754,/*1911-1920*/ 0x0A4B48,0x5B25BC,0x06A550,0x06D445,0x4ADAB8,0x02B64D,0x095742,0x2497B7,0x04974A,0x664B3E,/*1921-1930*/

36、 0x0D4A51,0x0EA546,0x56D4BA,0x05AD4E,0x02B644,0x393738,0x092E4B,0x7C96BF,0x0C9553,0x0D4A48,/*1931-1940*/ 0x6DA53B,0x0B554F,0x056A45,0x4AADB9,0x025D4D,0x092D42,0x2C95B6,0x0A954A,0x7B4ABD,0x06CA51,/*1941-1950*/ 0x0B5546,0x555ABB,0x04DA4E,0x0A5B43,0x352BB8,0x052B4C,0x8A953F,0x0E9552,0x06AA48,0x6AD53C,/

37、*1951-1960*/ 0x0AB54F,0x04B645,0x4A5739,0x0A574D,0x052642,0x3E9335,0x0D9549,0x75AABE,0x056A51,0x096D46,/*1961-1970*/ 0x54AEBB,0x04AD4F,0x0A4D43,0x4D26B7,0x0D254B,0x8D52BF,0x0B5452,0x0B6A47,0x696D3C,0x095B50,/*1971-1980*/ 0x049B45,0x4A4BB9,0x0A4B4D,0xAB25C2,0x06A554,0x06D449,0x6ADA3D,0x0AB651,0x09374

38、6,0x5497BB,/*1981-1990*/ 0x04974F,0x064B44,0x36A537,0x0EA54A,0x86B2BF,0x05AC53,0x0AB647,0x5936BC,0x092E50,0x0C9645,/*1991-2000*/ 0x4D4AB8,0x0D4A4C,0x0DA541,0x25AAB6,0x056A49,0x7AADBD,0x025D52,0x092D47,0x5C95BA,0x0A954E,/*2001-2010*/ 0x0B4A43,0x4B5537,0x0AD54A,0x955ABF,0x04BA53,0x0A5B48,0x652BBC,0x05

39、2B50,0x0A9345,0x474AB9,/*2011-2020*/ 0x06AA4C,0x0AD541,0x24DAB6,0x04B64A,0x69573D,0x0A4E51,0x0D2646,0x5E933A,0x0D534D,0x05AA43,/*2021-2030*/ 0x36B537,0x096D4B,0xB4AEBF,0x04AD53,0x0A4D48,0x6D25BC,0x0D254F,0x0D5244,0x5DAA38,0x0B5A4C,/*2031-2040*/ 0x056D41,0x24ADB6,0x049B4A,0x7A4BBE,0x0A4B51,0x0AA546,0

40、x5B52BA,0x06D24E,0x0ADA42,0x355B37,/*2041-2050*/ 0x09374B,0x8497C1,0x049753,0x064B48,0x66A53C,0x0EA54F,0x06B244,0x4AB638,0x0AAE4C,0x092E42,/*2051-2060*/ 0x3C9735,0x0C9649,0x7D4ABD,0x0D4A51,0x0DA545,0x55AABA,0x056A4E,0x0A6D43,0x452EB7,0x052D4B,/*2061-2070*/ 0x8A95BF,0x0A9553,0x0B4A47,0x6B553B,0x0AD54

41、F,0x055A45,0x4A5D38,0x0A5B4C,0x052B42,0x3A93B6,/*2071-2080*/ 0x069349,0x7729BD,0x06AA51,0x0AD546,0x54DABA,0x04B64E,0x0A5743,0x452738,0x0D264A,0x8E933E,/*2081-2090*/ 0x0D5252,0x0DAA47,0x66B53B,0x056D4F,0x04AE45,0x4A4EB9,0x0A4D4C,0x0D1541,0x2D92B5 /*2091-2099*/;void toLunar(int year,int month,int day)

42、 long bySpring,bySolar,daysPerMonth; int index,flag; if( (lunar200yyear-1901 & 0x0060) >> 5) = 1) bySpring = (lunar200yyear-1901 & 0x001F) - 1; else bySpring = (lunar200yyear-1901 & 0x001F) - 1 + 31; bySolar = monthTotalmonth-1 + day - 1; if( (!(year % 4) && (month > 2)

43、bySolar+; if (bySolar >= bySpring) / bySolar -= bySpring; month = 1; index = 1; flag = 0; if( ( lunar200yyear - 1901 & (0x80000 >> (index-1) ) =0) daysPerMonth = 29; else daysPerMonth = 30; while(bySolar >= daysPerMonth) bySolar -= daysPerMonth; index+; if(month = (lunar200yyear - 19

44、01 & 0xF00000) >> 20) ) flag=!flag; if(flag = 0) month+; else month+; if( ( lunar200yyear - 1901 & (0x80000 >> (index-1) ) =0) daysPerMonth=29; else daysPerMonth=30; day = bySolar + 1; else /? bySpring -= bySolar; year-; month = 12; if ( (lunar200yyear - 1901 & 0xF00000) >

45、> 20) = 0) index = 12; else index = 13; flag = 0; if( ( lunar200yyear - 1901 & (0x80000 >> (index-1) ) =0) daysPerMonth = 29; else daysPerMonth = 30; while(bySpring > daysPerMonth) bySpring -= daysPerMonth; index-; if(flag = 0) month-; if(month = (lunar200yyear - 1901 & 0xF00000)

46、 >> 20) flag =!flag; if( ( lunar200yyear - 1901 & (0x80000 >> (index-1) ) =0) daysPerMonth = 29; else daysPerMonth = 30; day = daysPerMonth - bySpring + 1; ND = day; /農歷日 NM = month; /農歷月 NY = year; /農歷年void delay(uchar ms)/延時uchar x,y;for(x=ms;x>0;x-)for(y=110;y>0;y-);/void ds

47、1302_write_byte(uchar date)/ds1302寫字節uchar i;for(i=0;i<8;i+)sck=0;io=date&0x01;date=date>>1;sck=1;void ds1302_write(uchar add,uchar date)/向ds1302的地址里面寫數據rst=0;_nop_();sck=0;_nop_();rst=1;_nop_();ds1302_write_byte(add);ds1302_write_byte(date);rst=0;_nop_();sck=0;_nop_();io=1;sck=1;uchar

48、ds1302_read(uchar add) /從ds1302的地址里面讀出數據uchar i,date;rst=0;_nop_();sck=0;_nop_();rst=1;_nop_();ds1302_write_byte(add);for(i=0;i<8;i+)date=date>>1;sck=0;if(io)date=date|0x80;sck=1;rst=0;_nop_();sck=0;_nop_();io=1;sck=1;return date;void yj1602_write_com(uchar com) /液晶寫地址en=0;delay(1);en=1;del

49、ay(1);rs=0;delay(1);P0=com;en=0;delay(1);void yj1602_write_date(uchar date) /液晶寫數據en=0;delay(1);en=1;delay(1);rs=1;delay(1);P0=date;en=0;delay(1);void yj1602_init() /液晶初始化yj1602_write_com(0x38);yj1602_write_com(0x0c);yj1602_write_com(0x06);yj1602_write_com(0x01);void display() /顯示年月日星期時分秒溫度uint yy;u

50、char j,k;writetime0=ds1302_read(readadd0);writetime2=ds1302_read(readadd2);writetime3=ds1302_read(readadd3);writetime1=ds1302_read(readadd1);writetime4=ds1302_read(readadd4);writetime5=ds1302_read(readadd5);writetime6=ds1302_read(readadd6);yj1602_write_com(0x80);yj1602_write_date('2');yj1602

51、_write_date('0');yj1602_write_date(tablewritetime0/16);yj1602_write_date(tablewritetime0%16);yj1602_write_date('-');yj1602_write_date(tablewritetime2/16);yj1602_write_date(tablewritetime2%16);yj1602_write_date('-');yj1602_write_date(tablewritetime3/16);yj1602_write_date(tablewritetime3%16);if(writetime1=1)yj1602_write_com(0x80+12);yj1602_write_date('M');yj1602_write_date('O');yj1602_write_date('N');if(writetime1=2)yj1602_write_com(0x80+12);yj1602_write_

溫馨提示

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

評論

0/150

提交評論