




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、基于 51 單片機的萬年歷設計單片機經過幾十年的發展, 已經廣泛應用于生活中的各個領域。 單片機以其體 積小、功能全、性價比高等諸多優點,在許多行業都得到了廣泛應用。在工業控 制、家用電器、通信設備、信息處理、尖端武器等各種測控領域的應用中獨占鰲 頭,單片機開發技術已成為電子信息、電氣、通信、自動化、機電一體化等專業 技術人員必須掌握的技術?;趩纹瑱C的萬年歷作為設計的課題, 因為它有很好的開放性和可發揮性, 對 作者的要求比較高,不僅考察了對單片機的掌握能力而且強調了對單片機擴展的 應用。另外液晶顯示的萬年歷已經越來越流行,特別適合在家庭居室、辦公室、 大廳、會議室、車站和廣場等地方使用,它
2、具有顯示清晰直觀、走時準確、可以 進行夜視等功能,并且還可以擴展出其它多種功能。所以,電子萬年歷作為設計 課題很有價值?,F在對于電子萬年歷的設計大多運用 51 單片機。主要是因為 51 單片機種類齊 全、結構體系完整、指令系統功能完善、性能優越、具有較高可靠性和高性價比 等特點。本篇論文主要介紹了運用單片機實現電子萬年歷的設計 , 萬年歷系統擬用STC89C5單片機控制,以DS1302時鐘芯片計時、1602液晶屏顯示。系統主要由單片機控制電路,顯示電路以及校正電路三個模塊組成。本文闡述了系統的硬件 工作原理,所應用的各個接口模塊的功能以及其工作過程,論證了設計方案理論 的可行性。目錄第一章 緒
3、論 11.1 本課題主要的研究工作 1第二章 系統的硬件設計與實現 22.1 電路設計框圖 22.2 系統硬件概述 22.3 主要單元電路的設計 22.3.1 單片機主控制模塊的設計 22.3.2 時鐘電路模塊的設計 32.3.3 獨立式鍵盤設計 42.3.4 顯示模塊的設計 4第三章 系統的軟件設計 63.1 程序流程圖 . 63.1.1 系統總流程圖 63.1.2 DS1302 時鐘程序流程圖 73.1.3 LCD 顯示程序流程圖 83.2 程序的設計 93.2.1 DS1302 讀寫程序 93.2.2 液晶顯示程序 11第四章 仿真與調試 134.1 KEIL 軟件調試流程 . 134.
4、2 PRoteu軟件運行流程 134.3 萬年歷的功能仿真 13致 謝 15參考文獻 16附錄:主程序 17第一章 緒論1.1 本課題主要的研究工作本項目是一種基于 AT89C51片機的萬年歷設計,本方案以AT89C51片機作為 主控核心,與時鐘芯片DS1302、按鍵、LCD1602液晶顯示器組成硬件系統。在硬 件系統中設有獨立按鍵和 LCD1602 顯示器,能顯示豐富的信息,根據使用者的需 要可以隨時對時間進行更改,讀取方便、顯示直觀。當程序執行后,LCD顯示即時時間、年月日、星期。設置 4個操作鍵:K1:選 擇鍵;K2:加鍵;K3:減鍵;K4:確定鍵。1 本設計的主要內容:(1)熟悉萬年歷
5、各模塊的工作原理;(2)選擇適當的芯片和元器件,確定系統電路,繪制電路原理圖,尤其 是各接口電路;(3)熟悉單片機使用方法和 C語言,編寫出相應模塊的應用程序;(4)分別在各自的模塊中調試出對應的功能,在 Proteus 軟件上進行仿 真,并實現各種功能。2 設計目標:萬年歷實現以下三個功能:(1)具有年、月、日、星期、時、分、秒等功能;(2)具備年、月、日、星期、時、分、秒校準功能,具備自動調節閏年 的功能;(3)具有與即時時間同步的功能。28第二章系統的硬件設計與實現2.1電路設計框圖根據設計方案給出了系統總體的設計框圖,如圖1所示:LCD液晶模塊DS1302模塊主控制殮塊TS鍵盤模塊圖1
6、為使時鐘走時與標準時間一致,校時電路是必不可少的,鍵盤模塊用來校正 液晶上顯示的時間;STC89C51單片機通過輸出各種電脈沖信號來驅動控制各部分 正常工作;而系統的時間、等數據則最終通過液晶模塊顯示出來。2.2系統硬件概述本電路是以STC89C5單片機為控制核心,該芯片具有在線編程功能,功耗低, 能在3.3V的超低壓下工作;時鐘芯片采用DS1302它是一款高性能、低功耗、自帶RAM勺實時時鐘芯片, 具有掉電自動保存功能??勺詣訉γ?、分、時、日、周、月、年進行計數,具有 閏年補償功能,而且精度高位的 RAM做為數據暫存區,工作電壓2.5V5.5V范圍 內,2.5V時耗電小于300nA。顯示模塊
7、采用1602顯示屏,它內置192種字符,可顯示32個符號或數字,清 晰可見,而且功率消耗小壽命長抗干擾能力強。其工作電壓為5v。2.3主要單元電路的設計2.3.1單片機主控制模塊的設計一個典型的單片機最小系統一般由時鐘電路、復位電路、電源指示燈和外部 擴展接口等部分組成。單片機的最小系統如下圖所示,單片機的XTAL0和XTAL1引腳用于連接晶振電 路。RESET為復位引腳,連接復位電路,用于初始化MCU232時鐘電路模塊的設計DS1302內含有一個實時時鐘/日歷和31字節靜態RAM通過簡單的串行接口 與單片機進行通信。圖中VCC偽后備電源,VCC2為主電源。DS1302由VCC1或VCC2 兩
8、者中的較大者供電。所以在主電源關閉的情況下,也能保持時鐘的連續運行。X1和X2是振蕩源,外接32.768KHZ晶振用來為芯片提供計時脈沖。RST是復位/ 片選線,通過把RST俞入驅動置高電平來啟動所有的數據傳送。DS1302的硬件接線圖如圖2所示:C2Header 2圖2時鐘芯片DS1302的工作原理:(1) DS1302的控制字節:DS1302控制字節的高有效位(位7)必須是邏輯1, 如果它為0,貝U不能把數據寫入 DS1302中,位6如果為0,則表示存取日歷時鐘 數據,為1表示存取RAM數據;位5至位1指示操作單元的地址;最低有效位(位 0)如為0表示要進行寫操作,為1表示進行讀操作,控制
9、字節總是從最低位開始 輸出(2) 數據輸入輸出(I/O ):在控制指令字輸入后的下一個 SCLK寸鐘的上升沿 時,數據被寫入DS1302數據輸入從低位即位0開始。同樣,在緊跟8位的控制 指令字后的下一個SCLK脈沖的下降沿讀出DS1302的數據,讀出數據時從低位 0 位到高位7。(3) DS1302的寄存器:DS1302有 12個寄存器,其中有7個寄存器與日歷、 時鐘相關,存放的數據位為BCD碼形式?!?CH是時鐘暫停標志位,當該位為1時, 時鐘振蕩器停止,DS1302處于低功耗狀態;當該位為0時,時鐘開始運行。“WP 是寫保護位,在任何的對時鐘和 RAM的寫操作之前,“WP必須為0。當“WP
10、為 1 時,寫保護位防止對任一寄存器的寫操作。2.3.3 獨立式鍵盤設計獨立式鍵盤每個鍵單獨占用一根 I/O 口線。鍵盤的工作方式可分為編程控制 方式和中斷控制方式。CPU在 一個工作周期內,利用完成其他任務的空余時間,調 用鍵盤掃描子程序,經程序查詢,若無鍵操作,則返回;若有鍵操作,則進而判 斷是哪個鍵,并執行相應的鍵處理程序。這種方式為編程掃描方式。由于單片機 在正常應用過程中,可能會經常進行鍵操作,因而編程控制方式使CPU經常處于工作狀態, 在進行本次設計中,只涉及到了選擇、加、減、確定四個功能。因此 采用獨立式鍵盤。2.3.4 顯示模塊的設計本設計中要對時間、溫度進行顯示,液晶顯示屏
11、1602模塊作為輸出。 1602字 符型LCD!常有14條引腳線或16條引腳線的LCD多出來的2條線是背光電源線。 它可以顯示兩行,每行16個字符,采用單+5V電源供電,外圍電路配置簡單。1602 液晶模塊內部的字符發生存儲器已經存儲了 160 個不同的點陣字符圖形,每一個 字符都有一個固定的代碼,比如大寫的英文字母“ A”的代碼是01000001B(41H), 顯示時模塊把地址 41H中的點陣字符圖形顯示出來,我們就能看到字母“A”。LCD1602引腳功能:1 VSS般接地2 VDD接 電源(+5V)3 V0 液晶顯示器對比度調整端。4 RS RS為寄存器選擇。5 R/WR/W為讀寫信號線。
12、6 E E(或EN)端為使能(enable)端,下降沿使能。1602主要管腳介紹:V0為液晶顯示器對比度調整端,接正電源時對比度最弱, 接地電源時對比度最高,對比度過高時會產生鬼影使用時可以通過一個 10K 的電 位器調整對比度。RS為寄存器選擇端,高電平時選擇數據寄存器,低電平時選擇指令寄存器。R/W為讀寫信號線端,高電平時進行讀操作,低電平時進行寫操作。 當RS和R/W共同為低電平時可以寫入指令或者顯示地址;當RS為高電平R/W為低電平時可以寫入數據。E為使能端,當E端由高電平跳變成低電平時,液晶模塊 執行命令。將L1602的RS端和P2.0,R/W端和P2.1, E 端和P2.2相連,當
13、RS=0 時,對LCD1602寫入指令;當RS=1時,對LCD1602寫入數據。當R/W端接高電平 時芯片處于讀數據狀態,反之處于寫數據狀態,E端為使能信號端。當R/W為高電 平,E端也為咼電平,RS為低電平時,液晶顯示屏顯示需要顯示的示數。顯示模塊電 路圖如圖3所示:VCCU1101112J1115 -i6上i7:18 i1920P1.0(T2) P1.1(T2EX) P1.2P1.3P1.4P1.5P1.6 P1.7 RESET (RXD)P3.0 (TXD)P3.1 P3.2(INT0) P3.3(INT1) P3.4(T0) P3.5(T1)P3.6(WR) P3.7(RD XTAL0
14、 XTAL1VSSVCCT10K3產4540I6VCCP0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7 ea/VppALE/PROGPSENP2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.039W373635262423222178910111213141516VSS VDD V0 RS RW EDB0DB1DB2DB3DB4DB5DB6DB7E1E2LCD1602VCCST8C9C52第三章系統的軟件設計3.1程序流程圖3.1.1系統總流程圖系統總流程圖分析:首先系統初始化,系統開始運行,當有設置鍵按下時進 入修改時間模式,無按鍵按下時讀取時間、溫度等數據送入液
15、晶屏顯示;在修改 時間模式下設置時間完成后再送數據到液晶屏顯示,如圖 4所示:圖43.1.2 DS1302時鐘程序流程圖入液晶屏顯示。這時若有設置鍵按下時,進行時間修改,完成后將數據送入 時鐘芯片;若沒有按鍵按下,則直接存入EPROM送入液晶屏顯示。時鐘程序S1302 開始計時時,首先進行初始化,當有中斷信號時,讀取時鐘芯片的數據,如圖5所示:圖53.1.3 LCD顯示程序流程圖顯示程序流程圖分析:首先對1602顯示屏進行初始化(初始化大約持續10ms號,左右),然后檢查忙信號,若BF=O,則獲得顯示RAM的地址,寫入相應的數據顯示;若BF=1,則代表模塊正在進行內部操作,不接受任何外部指令和
16、數據,直到BF=O為止,如圖6所示:J結束3.2程序的設計321 DS1302讀寫程序DS1302是 SPI總線驅動方式。它不僅要向寄存器寫入控制字,還需要讀取相應寄存器的數據。要想與 DS1302通信,首先要先了解 DS1302的控制字。DS1302的控制字如圖7:765432101RAMA4A3UKA2AlAORD控制字總是從最低位開始輸出。在控制字指令輸入后的下一個SCLK寸鐘的上升沿時,數據被寫入 DS1302數據輸入從最低位(0位)開始。同樣,在緊跟 8 位的控制字指令后的下一個 SCLK脈沖的下降沿,讀出DS1302的數據,讀出的 數據也是從最低位到最高位。依據讀寫時序如圖8和圖9
17、:一(尺帀 1畑 z 1盟 i 盟 |陽 |眈”-圖8單字節讀RST齪lk丄fLfmfLfunLrLfLfLfLfLTLfnLfnjn 0( R/訐 肌 剛 A2 | 陽 | 第1Di D2 D3 D4 D5 D6 3圖9 單字節寫在進行任何數據傳輸時,RST必須被置高電平,每個SCLK為上升沿時數據被 輸入,下降沿時數據被輸出。先把 RST置低,禁止數據傳輸,SCLK置低,清零時 鐘總線,RST再置高,允許數據傳輸。傳送完成后,RST置低,禁止字節的傳送。部分源程序如下:void write_byte(uchar dat) /寫一個字節ACC=dat;RST=1;for(a=8;a>0
18、;a-) IO=ACC0;SCLK=0;SCLK=1;ACC=ACC>>1;uchar read_byte() / 讀一個字節RST=1;for(a=8;a>0;a-)ACC7=IO;SCLK=1;SCLK=0;ACC=ACC>>1;return (ACC);void write_1302(uchar add,uchar dat) /向 1302 芯片寫函數,指定寫入地址,數據RST=0;SCLK=0;RST=1;write_byte(add);write_byte(dat);SCLK=1;RST=0;uchar read_1302(uchar add) / 從
19、1302 讀數據函數,指定讀取數據來源 地址uchar temp;RST=0;SCLK=0;RST=1;write_byte(add);temp=read_byte();SCLK=1;RST=0;return(temp);3.2.2 液晶顯示程序1602通過D0D7的8位數據端傳輸數據和指令,其模塊內的控制器有11條控 制指令。當液晶顯示屏的接口電路與單片機系統 I/O 按照并行數據傳輸方式連接 完成以后,即可以對STC89C5單片機進行編程。在液晶屏完成顯示之前首先要對 液晶進行初始化。部分源程序如下:lcdnit()/*液晶初始化函數*write_1602com(0x38); /設置液晶工
20、作模式, 16*2行顯示, 5*7點陣, 8位數據 write_1602com(0x0c);/開顯示不顯示光標write_1602com(0x06);/整屏不移動,光標自動右移write_1602com(0x01);/清顯示write_1602com(yh+1); /日歷顯示固定符號從第一行第 1 個位置之后開始顯示 for(a=0;a<14;a+)write_1602dat(tab1a); /向液晶屏寫日歷顯示的固定符號部分 /delay(3);write_1602com(er+2); /時間顯示固定符號寫入位置, 從第 2 個位置后開始顯示 for(a=0;a<8;a+)wri
21、te_1602dat(tab2a); /寫顯示時間固定符號,兩個冒號delay(3);第四章 仿真與調試4.1 Keil 軟件調試流程建立新工程并保存,保存后會彈出一個設備選擇對話框,選擇MCU后點確定返回主界面。新建文件并保存,以 .C 為后綴。接著選擇 Source Group1 ,右擊鼠 標彈出快捷菜單,選擇“ Add File to Group 'Source Groupl ",出現一個對話 框,加入文件后點 close 返回主界面。再打開工程屬性設置對話框,主要設置工 作包括在Target選項卡中設置晶振頻率、在Debug選項卡中設置生成hex文件等。 然后編寫程序
22、并調試。在模擬調試程序后,還須通過編程器將 .hex 目標文件寫入 單片機中才能觀察仿真的效果。4.2 Proteus 軟件運行流程運行Proteus程序后,進入軟件的主界面,過左側工具欄中的P(從庫中選擇元件命令 )命令,在 Pick Devices 左側窗口中選擇所需元件的關鍵字,然后放置 元件并調整方向和位置以及參數設置,最后進行連線。按 P 在庫中查找元器件, 將所需要的元器件放置好后,繪制成原理圖。4.3 萬年歷的功能仿真當電路搭建好之后,選中單片機 STC89C5,1 左鍵點擊 STC89C5,1 在出現的對 話框里點擊Program File按鈕,找到剛才Keil軟件編譯得到的H
23、EX文件,載入 然后點擊“0K按鈕就可以模擬了。點擊模擬調試按鈕的運行按鈕,進人調試狀 態。按相應的按鍵可調節分,時,星期,日期,月份,年份,并且可以自動閏年 調整。按鍵功能自上而下依次為:選擇鍵、加、減、確定。在 Protues 中仿真, 如圖 10,圖 11,圖 12所示: 1LCD +RTE l0-L2-2?riONTIFE lSi 2H 46:.: I AlC2 :=rr°:RF1 -1-, 總口 :VO %LK TOTWC2X1U2 DS133Z胡iH<7z- S'v4JTT il 1KTAjinKTKI2BSTPCL1M1 陽別畑 PgWPOL 4/04 卩
24、口敬修PEUkbSPH T/H iiTPSENPZ1TASP2.1M9 PZ2AC P ZA11AL£FZ.AH0P1 0PZAG PZJffAU 工T慣皆FlUKXbPl 1/T: pjiwinP1.1 PUM3 P-| 4,psaTim勺 mTOP-15P -I AFgjrriR1.T1S 3n qj 廣 o .-sr3"空衿/ Z ITW.?23 B 7w叫二.1.至di T31 n?-T3#OS 匚衛 d3Z orilDT N fl 3« - 4 I d3 612nSISTKI博毎腑囲庁申弗鼠:喜月日廳分):- IBej_zL-口O-0o o , oja.
25、10'AHIB *M3,"HTTT圖10電路圖仮復按"Fki選擇所調節的時象(年月目時分):.搖咼d dm .o ao o圖11鍵盤調節圖12調節鍵盤后致謝至此,關于畢業設計的所有內容就介紹完了,系統的仿真電路和程序設計合 理。在整個設計過程中,充分發揮了人的主觀能動性,自主學習,學到了許多沒 學到的知識。程序編寫中,由于思路不清晰,開始時遇到了很多的問題,經過靜 下心來思考查資料,和同學討論,理清了思路,完成對程序的編寫。通過設計提 高了對單片機的認識,進一步熟悉和掌握單片機的結構及工作原理。通過實際程 序設計和調試,逐步掌握模塊化程序設計方法和調試技術,提高軟件
26、設計、調試 能力;通過這次設計熟悉以單片機核心的應用系統開發的全過程,掌握硬件電路 設計的基本方法和技術,掌握相關電路參數的計算方法。最終較好的完成了設計, 達到了預期的目的,完了最初的設想。但是由于時間和個人暫時的能力的原因, 整個系統看起來還是顯得非常的簡單,只實現了一些最基本的功能,還有許多不 足和可以擴展的地方。畢業設計的完成,為我的大學學習生活畫下了最后一筆。應該感謝的人很多, 首先感謝學院給我們提供了一個展現自己的舞臺,在長江職業技術學院這個良好 的學習環境中,我們得到了很多鍛煉的機會,使得我們的動手能力和專業技能都 有了很大的提高。其次要感謝教單片機的鄧柳老師的悉心教導和全程負責
27、畢業報 告完成的陳卉老師,還有幫助我完成的學校電子競賽組的同學。是你們為我創造 了良好的學習和完成畢業設計的環境,你們的支持和鼓勵使我對這次的設計完成 有了信心和動力,使我能夠順利地完成課題的設計工作,在此向這些幫助我的人 致以誠摯的謝意。最后,還要特別感謝我的父母,養育之恩,無以回報,你們永 遠健康快樂是我最大的心愿。正是在爸媽身體和精神的養育下才讓我得以全身心 投入學習和研究中,順利完成學業。即將踏上社會了,在人生的又一個十字路口上,我將帶著你們的期望和關懷, 在將來的工作崗位上勤奮實干,積極進取,用優異的成績來回報大家對我的關心 和幫助!參考文獻1彭偉 單片機C語言程序設計實例100例
28、電子工業出版社2009年5月;2 王文杰 許文斌 主編 單片機應用技術 冶金工業出版社 2008 年 6 月; 3張福祥 C 語言程序設計 遼寧大學出版社 2007 年2月;4 郭天祥 十天學會單片機 哈爾濱工程大學出版社 2007 年 6月;附錄:主程序/ 名稱:用DS1302與1602LCC設計的可調式電子日歷與時鐘/ 說明:本例會自動調節合法日期時間,對于星期的調節會在/調整年月日時自動完成,閏年問題也會自動判斷。/#include <reg51.h>#include <string.h>#define uchar unsigned char#define uin
29、t unsigned intsbit SDA=P1A0; /DS1302 數據線sbit CLK=PM1; /DSB1302 時鐘線sbit RST=P1A2; /DS1302 復位線sbit RS=P2A0;/LCD寄存器選擇sbit RW=P2A1;/LCD讀/寫控制sbit EN=P2A2;/LCD啟用sbit K1=P3A4;/選擇sbit K2=P3A5;/加sbit K3=P3A6;/減sbit K4=P3A7;/確定uchar tCount=0;/ 一年中每個月的天數,二月的天數由年份決定uchar MonthsDays=0,31,0,31,30,31,30,31,31,30,3
30、1,30,31;/周日,周一到周六0,1-6讀取DS1302時分別是1-7uchar *WEEK="SUN","MON","TUS","WEN","THU","FRI","SAT";/LCD 顯示緩沖uchar LCD_DSY_BUFFER1="DATE 00-00-00 ";uchar LCD_DSY_BUFFER2="TIME 00:00:00 ";uchar DateTime7; / 所讀取的日期時間char
31、Adjust_Index=-1; / 當前調節的時間對象:秒,分,時,日,月,年(0,1,2,3,4,6)(不調節秒周)寫數據的程序uchar Change_Flag="-MHDM-Y" / (分,時,日,月,年)/延時,向DS1302寫、讀一字節以及從 DS1302旨定位置度、/延時void DelayMS(uint x)uchar i;while(x-) for(i=0;i<120;i+);/向DS1302寫入一個字節void Write_A_Byte_TO_DS1302(uchar x) uchar i;for(i=0;i<8;i+)SDA=x&1
32、; CLK=1; CLK=0; x>>=1;/從DA1302讀取一字節uchar Get_A_Byte_FROM_DS1302() uchar i,b,t;for(i=0;i<8;i+)b>>=1;t=SDA;b|=t<<7;CLK=1;CLK=0;/BCD 碼轉換return b/16*10+b%16;/從DS1302旨定的位置讀數據 uchar Read_Data(uchar addr) uchar dat;RST=0;CLK=0;RST=1;Write_A_Byte_TO_DS1302(addr);dat=Get_A_Byte_FROM_DS13
33、02();CLK=1;RST=0;return dat;/向DS1302某地址寫入數據 void Write_DS1302(uchar addr,uchar dat) CLK=0;RST=1;Write_A_Byte_TO_DS1302(addr);Write_A_Byte_TO_DS1302(dat);CLK=0;RST=0;/ 設置時間 void SET_DS1302()uchar i;Write_DS1302(0x8E,0x00);/ 寫控制字,取消寫保護 for(i=1;i<7;i+) / 分時日月年依次寫入/ 分的起始地址 10000010(0x82), 后面續依次是時,日,月
34、,周,年, 寫入地址每次遞增 2Write_DS1302(0x80+ 2*i,(DateTimei/10<<4)|(DateTimei%10);Write_DS1302(0x8E,0x80);/ 加保護/ 讀取當前日期時間/void GetTime()uchar i;for(i=0;i<7;i+)DateTimei=Read_Data(0x81+2*i);/1602LCD 的若干顯示控制代碼。/uchar Read_LCD_State()讀 LCD犬態uchar Read_LCD_State()uchar state;RS=0;RW=1;EN=1;DelayMS(1);sta
35、te=P0;EN=0;DelayMS(1);return state;/void LCD_Busy_Wait() 忙等待void LCD_Busy_Wait()while(Read_LCD_State()&0x80)=0x80);DelayMS(5);/void Write_LCD_Data(uchar dat) 向 LCD寫數據void Write_LCD_Data(uchar dat)LCD_Busy_Wait();RS=1;RW=0;EN=0;P0=dat;EN=1;DelayMS(1);EN=0; /void Write_LCD_Command(uchar cmd)寫 LCD旨
36、令void Write_LCD_Command(uchar cmd)LCD_Busy_Wait();RS=0;RW=0;EN=0;P0=cmd;EN=1;DelayMS(1);EN=0; /void Init_LCD()LCD 初始化void Init_LCD()Write_LCD_Command(0x38);DelayMS(1);Write_LCD_Command(0x01);DelayMS(1);Write_LCD_Command(0x06);DelayMS(1);Write_LCD_Command(0x0c);DelayMS(1); /void Set_LCD_POS(uchar P)
37、設置液晶顯示位置 void Set_LCD_POS(uchar p)Write_LCD_Command(p|0x80);/在LCD上顯示字符串void Display_LCD_String(uchar p,uchar *s)uchar i;Set_LCD_POS(p);for(i=0;i<16;i+)Write_LCD_Data(si); DelayMS(1);/ 日期與時間值轉換為數字字符void Format_DateTime(uchar d,uchar *a)a0=d/10+'0'a1=d%10+'0'/ 判斷是否為閏年uchar isLeapYea
38、r(uint y)return(y%4=0&&y%100!=0)|(y%400=0);/ 求自 2000.1.1 開始的任何一天是星期幾/ 函數沒有通過,求出總天數后再求星期幾,/ 因為求總天數可能會超越 uint 的范圍。 void RefreshWeekDay()uint i,d,w=5;/ 已知 1999.12.31 是周五 for(i=2000;i<2000+DateTime6;i+) d=isLeapYear(i)?366:365; w=(w+d)%7;d=0;for(i=1;i<DateTime4;i+) d+=MonthsDaysi; d+=DateT
39、ime3;/保存星期,06表示星期日至周六,為了與 DS1302的星期格式匹配,返回值需 要加 1DateTime5=(w+d)%7+1;/void DateTime_Adjust(char x)switch(Adjust_Index)case 6:/ 年 00-99 if(x=1&&DateTime6<99) DateTime6+; if(x=-1&&DateTime6>0) DateTime6-;/ 獲取 2 月天數 MonthsDays2=isLeapYear(2000+DateTime6)?29:28;/ 如果年份變化后當前月份的天數大于上限
40、則設為上限 if(DateTime3>MonthsDaysDateTime4)DateTime3=MonthsDaysDateTime4;RefreshWeekDay();/ 刷新星期 break;case 4:/ 月 01-12 if(x=1&&DateTime4<12) DateTime4+; if(x=-1&&DateTime4>1) DateTime4-;/ 獲取 2 月天數 MonthsDays2=isLeapYear(2000+DateTime6)?29:28;/ 如果月份變化后當前月份的天數大于上限則設為上限 if(DateTim
41、e3>MonthsDaysDateTime4)DateTime3=MonthsDaysDateTime4; RefreshWeekDay();/ 刷新星期 break;case 3:/ 日 00-28/29/30/31 ;調節之前首先根據年份得出該年中 2 月的 天數MonthsDays2=isLeapYear(2000+DateTime6)?29:28; / 根據當前月份決定調節日期的上限 if(x=1&&DateTime3<MonthsDaysDateTime4)DateTime3+;if(x=-1&&DateTime3>0) DateTime3-;RefreshWeekDay();/ 刷新星期break;case 2:/ 時if(x=1&&DateTime2<23) DateTime2+; if(x=-1&&DateTime2>0) DateTime2-; break;case 1:/ 分if(x=1&a
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 陜西省西安市某校2024-2025學年高一上學期期末考試物理試卷(解析版)
- 內蒙古杭錦后旗2024-2025學年高二下學期第一次月考物理試題(解析版)
- 山東省泰安市2024-2025學年高一上學期期末數學試題(解析版)
- 2025年普通高等學校招生全國統一考試語文試卷
- 數學 第十二章數據的收集、整L與描述復習練習 2024-2025學年人教版七年級數學下冊
- 數學 期末模擬綜合試題 2024-2025學年 人教版七年級數學下冊
- 保險公司月份活動方案
- 保險公司給客戶活動方案
- 保險公司送魚活動方案
- 保險服務活動方案
- 2025年北京豐臺區九年級中考二模英語試卷試題(含答案詳解)
- 【7歷期末】安徽省合肥市包河區2023-2024學年部編版七年級下學期期末歷史試卷
- 2024年河南省機關單位工勤技能人員培訓考核高級工技師《職業道德》題庫
- 2024年湖南省中考道德與法治試題卷(含答案解析)
- 國家開放大學本科《理工英語4》一平臺機考第五大題寫作題總題庫
- 三年級上冊第一單元習作課件
- 中醫藥膳學:中醫藥膳制作的基本技能課件
- 往來款項明細表-A4
- 甘肅省人力資源服務機構
- 飾面板安裝工程檢驗批質量驗收記錄
- 北京市科技計劃項目(課題)驗收(結題)管理細則(試行)
評論
0/150
提交評論