版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 1 設(shè)計任務(wù)和方案</p><p><b> 1.1設(shè)計任務(wù)</b></p><p> (一)設(shè)計題目:萬年歷</p><p> ?。ǘ┰O(shè)計目的與任務(wù):</p><p> 學(xué)生通過理論設(shè)計和實物制作解決相應(yīng)的實際問題,鞏固和運用在《單片機技術(shù)》中所學(xué)的理論知識和實驗技能,掌握單片機應(yīng)用系統(tǒng)
2、的一般設(shè)計方法,提高設(shè)計能力和實踐動手能力,為以后從事電子電路設(shè)計、研發(fā)電子產(chǎn)品打下良好的基礎(chǔ)。</p><p> 本次設(shè)計要能夠顯示年、月、日、時、分、秒、星期;其次,能對年、月、日、時、分、秒、星期進行修改。</p><p><b> 1.2功能要求說明</b></p><p> 這次項目共設(shè)定了十五個功能鍵,其中S1GN鍵至S8GN
3、鍵分別進入相應(yīng)的功能模塊;S10GN鍵可以顯示此日是否有節(jié)日,是什么節(jié)日;S11GN鍵對選中的時間變量進行減一;S12GN鍵對選中的時間變量進行加一;S13GN鍵為退出鍵;S14GN鍵對所要修改的時間變量進行移位選擇;S15GN鍵按下,即可對要修改的時間變量進行修改,同時在要修改的地方用游標(biāo)顯示;S16GN鍵為確認(rèn)鍵。只有當(dāng)修改鍵按下時才能對時間進行修改,當(dāng)時間修改完成后,按下節(jié)日鍵即可顯示此日是什么節(jié)日,再按下確認(rèn)鍵即可以顯示時間。&
4、lt;/p><p> 1.3設(shè)計總體方案及工作原理說明</p><p> 1.3.1主控制器的選擇與比較</p><p> 方案(1):采用CPLD作為主控制器, 由于CPLD具有強大的資源,使用方便靈活,易于進行功能擴展,特別是結(jié)合了EDA,可以達(dá)到很高的效率。此方案邏輯電路復(fù)雜,且靈活性不高,不利于各種功能的擴展。</p><p>
5、方案(2):基于AT89S52單片機來實現(xiàn)系統(tǒng)的控制, 控制外圍電路進行時鐘顯示,鍵盤控制和液晶顯示,此系統(tǒng)控制靈活,能很好地滿足本題的基本要求。</p><p> 由于本學(xué)期我們開設(shè)了單片機這門課程,并且我在暑假期間參加單片機培訓(xùn)時使用的也是AT89S52單片機這塊芯片,因此對這塊芯片還是比較了解,故在此采用這塊芯片作為主控制器。</p><p> 1.3.2時鐘方案的選擇與比較&l
6、t;/p><p> 方案(1):AT89S52單片機內(nèi)部帶有定時/計數(shù)功能,此定時功能是通過對外部晶振的脈沖進行計數(shù),從而達(dá)到計時功能,只要使用11.0592的晶振就能實現(xiàn)零誤差的計時,因此可以利用此功能實現(xiàn)計時,但因為只有單一的計時功能要實現(xiàn)“萬年歷”的功能需要較復(fù)雜的程序,而且如果單片機掉電無法繼續(xù)進行計時,所以使用不便。</p><p> 方案(2):DS1302是美國DALLAS公
7、司推出的一種高性能、低功耗的實時時鐘芯片,附加31字節(jié)靜態(tài)RAM,采用SPI三線接口與CPU進行通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號和RAM數(shù)據(jù)。實時時鐘可提供秒、分、時、日、星期、月和年,一個月小與31天時可以自動調(diào)整,且具有閏年補償功能。工作電壓寬達(dá)2.5~5.5V。采用雙電源供電(主電源和備用電源),可設(shè)置備用電源充電方式,提供了對后備電源進行涓細(xì)電流充電的能力。利用單片機強大的控制功能就可實現(xiàn)實時計時的功能,而且消耗
8、的系統(tǒng)資源少,程序簡單。</p><p> 綜合上述兩種方案,宜采用方案(2)實現(xiàn)實時計時功能。</p><p> 1.3.3按鍵模塊方案的選擇與比較</p><p> 方案(1): 矩陣式鍵盤,行線的一端通過上拉電阻與單片機的P1口線的高四位相連,列線的一端也通過上拉電阻與單片機的P1口線低四位相連。矩陣式鍵盤結(jié)構(gòu)性好,使用于按鍵較多時的情況。</p&
9、gt;<p> 方案(2):獨立式鍵盤, 每個按鍵的電路是獨立的,都有單獨一根數(shù)據(jù)線輸出鍵的通斷狀態(tài)。單片機一條I / O口線對應(yīng)一個按鍵。獨立式鍵盤結(jié)構(gòu)簡單,易于編程,適用本實驗按鍵較少的情況。</p><p> 由于這次設(shè)計中,使用的功能鍵比較多,若采用獨立式鍵盤占有的I/O口比較多,所以在這里采用行列式鍵盤。</p><p> 1.3.4顯示模塊方案的選擇與比較&
10、lt;/p><p> 方案(1):采用液晶顯示,液晶顯示是一種被動式的顯示器,即液晶本身并不發(fā)光,而是利用液晶經(jīng)過處理后能改變光線通過的特性,而達(dá)到白底黑字的目的。液晶顯示功耗低,抗干擾能力強,顯示信息豐富等特點。</p><p> 方案(2):數(shù)碼管是利用發(fā)光二極管的特性組合而成數(shù)字顯示器件,通過控制相應(yīng)的二極管的狀態(tài)顯示相應(yīng)的數(shù)字。要使數(shù)碼管正常顯示就得有驅(qū)動電路驅(qū)動相應(yīng)的段碼,數(shù)碼管
11、的現(xiàn)實方式可分為靜態(tài)顯示和動態(tài)顯示,靜態(tài)顯示方式只適合顯示單個的數(shù)字,因此本設(shè)計應(yīng)采用動態(tài)顯示方式。由于動態(tài)顯示方式利用的是人眼視覺暫留的特性,掃描的時間應(yīng)不大于20毫秒,占用系統(tǒng)資源大,而且顯示的個數(shù)和字型有限,在本設(shè)計中不易采用。 </p><p> 由于此次要顯示的內(nèi)容比較多,故采用液晶作為顯示界面。</p><p> 總體的設(shè)計原理圖如圖1.1所示</p><
12、;p> 圖1.1 原理框圖</p><p> 萬年歷的硬件系統(tǒng)的設(shè)計</p><p> 2.1 硬件系統(tǒng)各模塊功能簡要介紹</p><p> 該萬年歷主要由單片機最小系統(tǒng)、行列式鍵盤模塊、液晶顯示電路模塊、DS1302時鐘電路模塊和LED指示燈電路模塊組成。各模塊的功能如下:</p><p> ?。?)單片機最小系統(tǒng)<
13、/p><p> 由AT89S52單片機、時鐘電路和復(fù)位電路構(gòu)成。AT89S52是一種低功耗、高性能CMOS8位微控制器,具有8K在系統(tǒng)可編程Flash存儲器。時鐘電路由一個12MHz的石英晶體振蕩器和兩個33pF的的電容組成振蕩電路和分頻電路。復(fù)位電路采用上電復(fù)位和按鍵復(fù)位結(jié)合的方式對電路進行復(fù)位,主要是通過RST引腳送入單片機。單片機最小系統(tǒng)為整個電路的核心。</p><p> ?。?)矩
14、陣式鍵盤模塊</p><p> 在鍵盤中按鍵數(shù)量較多時,為了減少I/O口的占用,通常將按鍵排列成矩陣形式,如圖1所示。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。這樣,一個端口(如P1口)就可以構(gòu)成4*4=16個按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見,在需要的鍵
15、數(shù)比較多時,采用矩陣法來做鍵盤是合理的。 </p><p> 矩陣式結(jié)構(gòu)的鍵盤顯然比直接法要復(fù)雜一些,識別也要復(fù)雜一些,上圖中,列線通過電阻接正電源,并將行線所接的單片機的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當(dāng)按鍵沒有按下時,所有的輸出端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態(tài)就可得知是否有鍵按下了。</p>&
16、lt;p> ?。?)液晶顯示電路模塊</p><p> 這次使用的是12864液晶芯片,接在單片機P0口。通常所說的12864LCD顯示塊是所說的點陣液晶顯示模塊,就是由128*64個液晶顯示點組成的一個128列*64行的陣列,所以也就叫成了12864。每個顯示點都對應(yīng)著有一位二進制數(shù),0表示滅,1表示亮。存儲這些點陣信息的RAM被稱為顯示數(shù)據(jù)存儲器。如果要顯示某個圖形或漢字就是將相應(yīng)的點陣信息寫入到對應(yīng)
17、的存儲單元中。圖形或漢字的點陣信息是由自己設(shè)計,這時候問題的關(guān)鍵是顯示點在液晶屏上的位置與其在存儲器中的地址之間的關(guān)系。</p><p> 顯示點在64*64液晶屏上的位置由列號(line,0~63)與行號(line,0~63)確定。512*8 bits RAM中某個存儲單元的地址由頁地址(Xpage,0~7)和列地址(Yaddress,0~63)確定。每個存儲單元存儲8個液晶點的顯示信息。</p>
18、<p> ?。?)DS1302電路模塊</p><p> DS1302是美國DALLAS公司推出的一種高性能、低功耗的實時時鐘芯片,附加31字節(jié)靜態(tài)RAM,采用SPI三線接口與CPU進行通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號和RAM數(shù)據(jù)。實時時鐘可提供秒、分、時、日、星期、月和年,一個月小與31天時可以自動調(diào)整,且具有閏年補償功能。工作電壓寬達(dá)2.5~5.5V。采用雙電源供電(主電源和備
19、用電源),可設(shè)置備用電源充電方式,提供了對后備電源進行涓細(xì)電流充電的能力。</p><p><b> 各引腳的功能為:</b></p><p> Vcc1:備用電池端;</p><p> Vcc2:5V電源。當(dāng)Vcc2>Vcc1+0.2V時,由Vcc2向DS1302供電,當(dāng)Vcc2< Vcc1時,由Vcc1向DS1302供電。
20、</p><p> SCLK:串行時鐘,輸入; </p><p> I/O:數(shù)據(jù)輸入輸出口;</p><p> CE/RST:復(fù)位腳</p><p> 、X1、X2 是外接晶振腳 (32.768KHz的晶振)</p><p><b> 地(GND)</b></p>
21、<p> 圖2.1DS1302引腳圖</p><p> ?。?)LED指示燈電路模塊</p><p> 單片機P3.2口線上經(jīng)過一個470Ω的電阻與LED燈的陰極相連接,LED燈的陽極接正五伏電壓。470Ω的電阻起限流的作用。LED指示燈電路模塊主要用來指示用違規(guī)操作發(fā)生。</p><p> 電路原理圖、PCB圖和元器件布局圖</p>
22、<p> Protel原理圖、PCB圖以及元器件布局圖分別見附錄1附錄2與附錄3。 </p><p><b> 元器件清單</b></p><p> 元器件清單見附錄4。</p><p> 3 萬年歷軟件系統(tǒng)的設(shè)計</p><p> 3.1 使用的單片機資源的情況</p>&l
23、t;p> 萬年歷用到了單片機的定時器的功能,定時器1采用工作方式1并以中斷方式工作;在數(shù)據(jù)的顯示時采用的是查表的方法,因此需要將表格、數(shù)據(jù)存到單片機的程序存儲器中去;用到了波特率發(fā)生器與DS1302相連</p><p> 本設(shè)計采用矩陣式鍵盤,鍵盤直接接在P1口上且按鍵的結(jié)果存貯在單片機的內(nèi)部數(shù)據(jù)存儲器里面。用到的液晶顯示器接到了單片機的P0口線上和P3口線上。DS1302接在單片機P3口線上。 <
24、;/p><p> 3.2 各模塊功能簡要介紹</p><p> 該搶答器所用的軟件模塊有定時器模塊、按鍵模塊、液晶顯示模塊、時鐘芯片模塊。</p><p><b> (1)定時器模塊</b></p><p> 選擇定時器1,設(shè)置定時器定時方式為方式1以中斷方式工作,設(shè)置定時時間為50mS。</p>&
25、lt;p><b> (2)按鍵模塊</b></p><p> 采用矩陣式鍵盤,共用15個按鍵對電路進行控制和操作,分別為S1GN至S8GN來控制選擇相應(yīng)功能模塊。S10GN顯示相應(yīng)的節(jié)日;S11GN、S12GN、分別對時間變量進行減與加法處理;S13GN退出鍵、S14GN為移動修改變量鍵、S15GN為修改鍵S16GN為退出鍵。</p><p><b&g
26、t; ?。?)液晶顯示模塊</b></p><p> 液晶初始時顯示{1.萬年歷2.點陣屏3.頻率計4.密碼鎖5.信號源6.電壓表7.溫度計8.計算器};進入萬年歷界面后顯示初始時間2008年2月19日12時20分10秒星期四。</p><p><b> ?。?)時鐘模塊</b></p><p> DS1302有自帶的時間且比較
27、精確。因此只要學(xué)會如何去讀取,以及如何向其寫入數(shù)據(jù),即可利用其內(nèi)部時鐘。</p><p> 3.3 程序的流程框圖</p><p> ?。?)主程序流程框圖</p><p><b> 如圖3.1所示。</b></p><p> 圖3.1 主程序流程框圖</p><p> ?。?)萬年歷功
28、能流程框圖</p><p> 萬年歷流程框圖如圖3.2所示。</p><p> 圖3.2 萬年歷功能流程框圖</p><p> ?。?)萬年歷修改函數(shù)程序流程框圖</p><p> 萬年歷修改程序流程框圖如圖3.3所示。</p><p> 圖3.3 修改函數(shù)程序流程框圖</p><p&g
29、t; (4)修改天數(shù)程序流程框圖</p><p> 修改天數(shù)程序流程框圖如圖3.4所示。</p><p> 圖3.4 修改天數(shù)程序流程框圖</p><p> ?。?)顯示節(jié)日程序流程框圖</p><p> 顯示節(jié)日程序流程框圖如圖3.5所示。</p><p> 圖3.5 顯示節(jié)日程序流程框圖</p&
30、gt;<p><b> 3.4程序清單</b></p><p><b> 見附錄5。</b></p><p> 4 萬年歷設(shè)計結(jié)論、仿真結(jié)果和教學(xué)建議</p><p><b> 設(shè)計結(jié)論和使用說明</b></p><p><b> ?。?)設(shè)計
31、結(jié)論</b></p><p> 通過對單片機進行外接鍵盤和液晶顯示器及DS1302時鐘芯片的操作以及加上硬件電路和軟件設(shè)計相結(jié)合,實現(xiàn)了對萬年歷的年、月、日、時、分、秒、星期的顯示,并能人為的對年、月、日、時、分、秒、星期進行修改,同時還可以顯示出相應(yīng)的節(jié)日。</p><p> 但其上電時顯示{ 湖南 工學(xué)院 , 自本0801 ,Made in China
32、 , 文 亮 },閃爍三次后顯示{1.萬年歷2.點陣屏3.頻率計4.密碼鎖5.信號源6.電壓表7.溫度計8.計算器};進入萬年歷界面后顯示初始時間2008年2月19日12時20分10秒星期四。</p><p><b> 仿真結(jié)果</b></p><p> 在仿真時用要兩個軟件,第一個是Keil,第二個是Proteus,本次仿真是將兩個軟件結(jié)合起
33、來進行的。運用Keil軟件用來編譯和調(diào)試程序,運用Ptoteus軟件來仿真。</p><p> 這次設(shè)計已在Keil中調(diào)試成功并運行無誤,但在Ptoteus仿真軟件中沒有找到合適的仿真模型,因此沒有仿真運行結(jié)果。但是在實物上運行結(jié)果完全正常無誤,特此用手機將運行結(jié)果拍攝下來,如下圖所示</p><p> 圖4.1 萬年歷界面圖</p><p> 圖4.2
34、萬年歷初始時間圖</p><p> 圖4.3 節(jié)日顯示結(jié)果圖</p><p> 圖4.4 節(jié)日顯示結(jié)果圖</p><p><b> 4.3設(shè)計體會</b></p><p> 本次我設(shè)計的萬年歷已經(jīng)能夠完成任務(wù),達(dá)到了設(shè)計要求。這次設(shè)計的巧妙之處就在于我編寫了許多函數(shù),把每一個功能分塊做成一個一個的子函數(shù),再去
35、調(diào)用這些子函數(shù),因此使讀者很容易讀懂,且為今后在做類似方面課程設(shè)計提供了方便之處。其次我編寫的顯示節(jié)日的功能也比較新穎,這個想法是我在網(wǎng)上查找如何將陽歷轉(zhuǎn)換為陰歷時無意中發(fā)現(xiàn)的,這是在一份C語言的課程設(shè)計中看到這個想法的,我在結(jié)合自己對硬件的了解成功的實現(xiàn)了這一功能,覺得無比的欣慰。</p><p> 我所用的實物板子的電路雖然不是自己設(shè)計的,是在暑假培訓(xùn)時按照老師給我的原理圖自己制作的PCB板,在暑期的兩個月
36、培訓(xùn)過程中我已經(jīng)基本掌握了其硬件設(shè)計原理,并懂得了如何去使用這些功能模塊,我的硬件設(shè)計與軟件設(shè)計能力也得到了一定程度的提高。</p><p> 在這次課程設(shè)計中我本來還想加上鬧鈴功能,但由于時間的關(guān)系未能完成,以后我會更加努力完善其功能。</p><p><b> 4.4教學(xué)建議</b></p><p> 在我的印象中王老師總是對我們嚴(yán)格
37、的要求,好像片刻也不能讓我們放下學(xué)習(xí)的腳步,雖然我們覺得很累,正是在您這種嚴(yán)格的要求下我們才能真正的學(xué)到知識。王老師你一直在向我們灌輸勤實踐的思想對我們的學(xué)習(xí)帶來了很大的幫助,我們用我們辛勤的奮斗學(xué)到了許多書本上沒有的但很實用的知識,我覺得王老師應(yīng)該繼續(xù)向下一屆學(xué)生灌輸這種思想</p><p><b> 參考文獻</b></p><p> [1]馬忠梅,籍順心,張
38、凱,馬巖.單片機的C語言應(yīng)用程序設(shè)計[M].北京:北京航空航天大學(xué)出版社,2006</p><p> Ma Zhongmei,J, Zhang Kai, MaYan. MCU C language program design [M] .beijing: Beijing aerospace university press, 2006</p><p> ?。?]李廣弟,朱月秀,冷祖祁.單
39、片機基礎(chǔ)[M].北京:北京航空航天大學(xué)出版社,2007</p><p> Li Guangdi, ZhuYuexiu, Leng Zuqi. Microcontroller [M] .beijing: Beijing university of aeronautics and press, 2007 </p><p><b> 致 謝</b></p>
40、<p> 在這里我要感謝XX老師這段時間對我的悉心教誨,這段時間我確實學(xué)到了很多實用的知識,同時經(jīng)過不斷的實踐操作,我也加深了對理論的理解。正是在這學(xué)期的單片機學(xué)習(xí)過程中我的硬件設(shè)計能力與軟件設(shè)計能力有了相當(dāng)大程度提高,在這里我感覺學(xué)到了正真的知識,我對今后就業(yè)也充滿了信心,真心的感謝王老師對我的幫助!</p><p><b> 附 錄1</b></p>&
41、lt;p><b> 圖1原理圖</b></p><p><b> 圖2矩陣式鍵盤</b></p><p><b> 附 錄2</b></p><p> 圖1加液晶最小系統(tǒng)PCB頂層圖</p><p> 圖2加液晶最小系統(tǒng)PCB底層圖</p>&l
42、t;p> 圖3矩陣式鍵盤PCB圖</p><p><b> 附 錄3</b></p><p><b> 圖1布局圖</b></p><p><b> 附 錄4</b></p><p> 表4.1 元器件清單</p><p>&l
43、t;b> 附 錄5</b></p><p> /*******************************************************************************</p><p> * 描述:
44、 *</p><p> * AT89S52液晶演示 數(shù)據(jù)p0,控制p1 *</p><p> * 功能: *</p><p> * 萬年歷 *</p><p> * 技術(shù)支持:
45、 *</p><p> * 湖南工學(xué)院 *</p><p> * *</p><p> * *
46、 *</p><p> ********************************************************************************/</p><p> #include <reg52.h></p><p> #include <intrins.h></p>
47、<p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> /******************引腳定義區(qū)********************/</p><p> #define LCD_data P0 /*數(shù)據(jù)口*/</
48、p><p> sbit LCD_RS = P3^0; /*寄存器選擇輸入*/ </p><p> sbit LCD_RW = P3^1; /*液晶讀/寫控制*/</p><p> sbit LCD_EN = P3^5; /*液晶使能控制*/</p><p> sbit LCD_PSB =
49、 P3^2; /*串/并方式控制*/</p><p> sbit LCD_RST = P3^7; /*液晶復(fù)位引腳*/</p><p> sbit LE=P3^6; /*373引腳*/</p><p> sbit L1 =P3^7;/*DS1302引腳*/</p><p> sb
50、it SCK=P3^2;/*DS1302引腳*/</p><p> sbit SCL= P3^3;/*DS1302引腳*/</p><p> sbit RST=P3^4; /*DS1302引腳*/</p><p> /******************變量定義區(qū)*********************/</p>&l
51、t;p> uchar key;</p><p> uchar keyy;</p><p> uchar keyx=0;</p><p> uchar q=0;</p><p><b> uchar i;</b></p><p> uchar f_50ms;</p>
52、<p> uchar f_x=0;</p><p> uchar tmp;</p><p> uchar tmp2;</p><p><b> char p;</b></p><p><b> uchar ar;</b></p><p> uchar a
53、r0;</p><p> uchar leap=1;</p><p> /**********************/</p><p> bit ReadRTC_Flag;</p><p> bit timer;</p><p> /*************************************
54、********************/</p><p> #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};</p><p> /*************************字符數(shù)組定義區(qū)********************************/</p><p> /********
55、* *開機界面顯示字符***********/</p><p> uchar code DIS1[] = {" 湖南 工學(xué)院 "};</p><p> uchar code DIS2[] = {" 自本0801 "};</p><p> uchar code DIS3[] = {"
56、Made in China "};</p><p> uchar code DIS4[] = {" 文 亮 "};</p><p> /**************菜單顯示字符**************/</p><p> uchar code DIS5[] = {"1.萬年歷2.點陣屏&quo
57、t;};</p><p> uchar code DIS6[] = {"3.頻率計4.密碼鎖"};</p><p> uchar code DIS7[] = {"5.信號源6.電壓表"};</p><p> uchar code DIS8[] = {"7.溫度計8.計算器"};</p>
58、;<p> /**********************************************/</p><p> uchar code DIS19[] = {" 今天無節(jié)日 "};</p><p> uchar code DIS20[] = {" 元旦快了 "};</p><
59、;p> uchar code DIS21[] = {" 世界麻風(fēng)日 "};</p><p> uchar code DIS22[] = {" 春節(jié)快樂 "};</p><p> uchar code DIS23[] = {" 元宵節(jié)快樂 "};</p><p>
60、 uchar code DIS24[] = {" 青龍節(jié) "};</p><p> uchar code DIS25[] = {" 世界濕地日 "};</p><p> uchar code DIS26[] = {" 明天情人節(jié)了 "};</p><p> ucha
61、r code DIS27[] = {" 情人節(jié)快樂了 "};</p><p> uchar code DIS28[] = {" 國際海豹日 "};</p><p> uchar code DIS29[] = {" 全國愛耳日 "};</p><p> uchar code
62、DIS30[] = {"明天是結(jié)婚紀(jì)念日"};</p><p> uchar code DIS31[] = {"3.8 結(jié)婚紀(jì)念日 "};</p><p> uchar code DIS32[] = {" 植樹節(jié) "};</p><p> uchar code DIS33[]
63、= {" 國際警察日 "};</p><p> uchar code DIS34[] = {" 消費者權(quán)益日 "};</p><p> uchar code DIS35[] = {" 國際航海日 "};</p><p> uchar code DIS36[] = {"
64、; 世界森林日 "};</p><p> uchar code DIS37[] = {" 世界水日 "};</p><p> uchar code DIS38[] = {" 世界氣象日 "};</p><p> uchar code DIS39[] = {"世界防治結(jié)
65、核病日"};</p><p> uchar code DIS40[] = {"愚人節(jié) 小心上當(dāng)"};</p><p> uchar code DIS41[] = {" 世界衛(wèi)生日 "};</p><p> uchar code DIS42[] = {" 復(fù)活節(jié) &quo
66、t;};</p><p> uchar code DIS43[] = {" 黑色星期五 "};</p><p> uchar code DIS44[] = {" 端午節(jié)快樂 "};</p><p> uchar code DIS45[] = {" 勞動節(jié)快了 "};<
67、;/p><p> uchar code DIS46[] = {" 五四青年節(jié) "};</p><p> uchar code DIS47[] = {" 世界紅十字日 "};</p><p> uchar code DIS48[] = {" 國際護士節(jié) "};</p>
68、<p> uchar code DIS49[] = {"近日注意母親節(jié) "};</p><p> uchar code DIS50[] = {" 國際家庭日 "};</p><p> uchar code DIS51[] = {" 世界無煙日 "};</p><p>
69、; uchar code DIS52[] = {" 國際兒童節(jié) "};</p><p> uchar code DIS53[] = {" 世界環(huán)境日 "};</p><p> uchar code DIS54[] = {" 國際禁毒日 "};</p><p> ucha
70、r code DIS55[] = {" 全國愛眼日 "};</p><p> uchar code DIS56[] = {"近日注意父親節(jié) "};</p><p> uchar code DIS57[] = {"近日注意父親節(jié) "};</p><p> uchar code DIS
71、58[] = {"乞巧節(jié)中國情人節(jié)"};</p><p> uchar code DIS59[] = {" 中元節(jié)快樂 "};</p><p> uchar code DIS60[] = {"香港回歸記念日 "};</p><p> uchar code DIS61[] = {&quo
72、t;抗日戰(zhàn)爭記念日 "};</p><p> uchar code DIS62[] = {" 世界人口日 "};</p><p> uchar code DIS63[] = {" 中秋節(jié)快樂 "};</p><p> uchar code DIS64[] = {" 八一建軍節(jié)
73、 "};</p><p> uchar code DIS65[] = {" 中國男子節(jié) "};</p><p> uchar code DIS66[] = {"抗戰(zhàn)勝利記念日 "};</p><p> uchar code DIS67[] = {" 今日重陽節(jié) "
74、;};</p><p> uchar code DIS68[] = {" 中國教師節(jié) "};</p><p> uchar code DIS69[] = {"九·一八事變記念"};</p><p> uchar code DIS70[] = {" 國際愛牙日 "};&l
75、t;/p><p> uchar code DIS71[] = {" 世界旅游日 "};</p><p> uchar code DIS72[] = {" 中國國慶節(jié) "};</p><p> uchar code DIS73[] = {" 世界動物日 "};</p>
76、;<p> uchar code DIS74[] = {" 聯(lián)合國日 "};</p><p> uchar code DIS75[] = {"明天國際教師節(jié) "};</p><p> uchar code DIS76[] = {" 國際教師節(jié) "};</p><p
77、> uchar code DIS77[] = {" 世界青年節(jié) "};</p><p> uchar code DIS78[] = {" 世界學(xué)生節(jié) "};</p><p> uchar code DIS79[] = {" 世界艾滋病日 "};</p><p> uc
78、har code DIS80[] = {" 明晚平安夜 "};</p><p> uchar code DIS81[] = {" 今晚平安夜 "};</p><p> uchar code DIS82[] = {" 圣誕快樂 "};</p><p> uchar co
79、de DIS83[] = {" 明日新年 "};</p><p> uchar code DIS84[] = {" ★★凌晨☆☆ "};</p><p> uchar code DIS85[] = {" ☆○早晨○● "};</p><p> uchar code DIS8
80、6[] = {" ○●上午●● "};</p><p> uchar code DIS87[] = {" ●●中午●● "};</p><p> uchar code DIS88[] = {" ●●下午●○ "};</p><p> uchar code DIS89[] = {&qu
81、ot; ○☆晚上☆★ "};</p><p> uchar code DIS90[] = {" ★☆夜晚★★ "};</p><p> uchar code DIS91[] = {" ★★深夜★★ "};</p><p> /**************************萬年歷顯示字符**
82、*******************************/</p><p> uchar code yejingtable[]</p><p> = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39/*,0x03,0x2d*/};//0--9</p><p> uchar l_tmpdate[7] =
83、{10, 20, 12, 19, 2, 4, 8};//秒分時日月周年08-05-15 12:00:00</p><p> // 0 1 2 3 4 5 6</p><p> // 秒,分,時,日,月 ,周, 年</p><p> uchar l_tmpdisplay[14];</p
84、><p> code uchar write_rtc_address[7] = {0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //秒分時日月周年 最低位讀寫位</p><p> code uchar read_rtc_address[7] = {0x81,0x83,0x85,0x87,0x89,0x8b,0x8d}; </p><p&g
85、t; uchar code DIS11[] = ("時分秒年月日星期");</p><p> uchar code DIS121[] = ("修改");</p><p> uchar code DIS12[] = ("一二三四五六七");</p><p> uchar code DIS
86、122[] = ("確認(rèn)");</p><p> uchar code DIS423[] = {"退出"};</p><p> uchar code DIS123[] = {"鬧鐘"};</p><p> uchar code DIS124[] = {"鬧鐘設(shè)定"};<
87、;/p><p> /*********************************************************************************/</p><p> uchar panduan(year)</p><p><b> {</b></p><p> if((l_tm
88、pdate[6]%4==0&l_tmpdate[6]%100!=0)||year%400==0)</p><p><b> {leap=1;}</b></p><p> else{leap=0;}</p><p> return(leap);</p><p><b> }</b>&l
89、t;/p><p> /*******************************************************************/</p><p> /* */</p><p> /* 延時函數(shù)
90、 */</p><p> /* */</p><p> /******************************************************
91、*************/</p><p> void delay(int ms)</p><p><b> {</b></p><p> while(ms--)</p><p><b> {</b></p><p><b> uchar i;</
92、b></p><p> for(i=0;i<150;i++) </p><p><b> {</b></p><p> _nop_(); </p><p><b> _nop_();</b></p><p><b> _nop_()
93、;</b></p><p><b> _nop_();</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> /*****
94、**************************************************************/</p><p> /* */</p><p> /*檢查LCD忙狀態(tài)
95、 */</p><p> /*lcd_busy為1時,忙,等待。lcd-busy為0時,閑,可寫指令與數(shù)據(jù)。 */</p><p> /* */</p><p> /**********
96、*********************************************************/</p><p> bit lcd_busy()</p><p><b> {</b></p><p> bit result=0;</p><p> LCD_RS =0;</p>
97、<p> LCD_RW =1; </p><p> LCD_EN =1; </p><p> delayNOP();</p><p> result = (bit)(P0&0x80);</p><p> LCD_EN = 0;</p><p> return(result); <
98、/p><p><b> }</b></p><p> /*******************************************************************/</p><p> /*
99、 */</p><p> /*寫指令數(shù)據(jù)到LCD */</p><p> /*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。 */</p><p> /*
100、 */</p><p> /*******************************************************************/</p><p> void writecommand(uchar cmd)/*寫指令數(shù)據(jù)到LCD*/</p><p>
101、; { </p><p> while(lcd_busy());/*只有不忙的時候才能寫指令*/</p><p> LCD_RS = 0;</p><p> LCD_RW = 0;</p><p> LCD_EN = 0;</p><p><b>
102、; _nop_();</b></p><p><b> _nop_(); </b></p><p> P0 = cmd;/*cmd代表指令*/</p><p> delayNOP();</p><p> LCD_EN = 1;</p><p> delayNOP()
103、;</p><p> LCD_EN = 0; </p><p><b> }</b></p><p> /*******************************************************************/</p><p> /*
104、 */</p><p> /*寫顯示數(shù)據(jù)到LCD */</p><p> /*RS=H,RW=L,E=高脈沖,D0-D7=數(shù)據(jù)。 */</p&
105、gt;<p> /* */</p><p> /*******************************************************************/</p><p> void writedata(uint
106、dat)/*寫顯示數(shù)據(jù)到LCD*/</p><p> { </p><p> while(lcd_busy());/*只有不忙的時候才能寫顯示數(shù)據(jù)*/</p><p> LCD_RS = 1;</p><p> LCD_RW = 0;</p><p>
107、LCD_EN = 1;</p><p><b> _nop_();</b></p><p><b> _nop_(); </b></p><p> P0 = dat;/*dat代表顯示數(shù)據(jù),是8位的二進制數(shù)*/</p><p><b> _nop_();</b>
108、</p><p><b> _nop_(); </b></p><p> LCD_EN = 0; </p><p><b> }</b></p><p> /*******************************************************************
109、/</p><p> /* */</p><p> /* LCD初始化設(shè)定 */</p><p> /*
110、 */</p><p> /*******************************************************************/</p><p> void lcd_init()</p><p><b> { <
111、/b></p><p> LCD_PSB = 1; //并口方式</p><p> LCD_RST = 0; //液晶復(fù)位</p><p> delay(3); </p><p> LCD_RST = 1; </p><p> // d
112、elay(3);</p><p><b> delay(5);</b></p><p> writecommand(0x30); //基本指令操作</p><p><b> delay(5);</b></p><p> writecommand(0x0C); //顯示開,
113、關(guān)光標(biāo)</p><p><b> delay(5);</b></p><p> writecommand(0x01); //清除LCD的顯示內(nèi)容</p><p><b> delay(5);</b></p><p><b> }</b></p>
114、<p> /*********************************************************/</p><p> /* */</p><p> /* 設(shè)定顯示位置
115、 */</p><p> /* */</p><p> /*********************************************************/</p><p> void lcd_pos(uchar X,ucha
116、r Y)</p><p> { </p><p> uchar pos;</p><p><b> if (X==1)</b></p><p><b> {X=0x80;}</b></p><p> else if
117、 (X==2)</p><p><b> {X=0x90;}</b></p><p> else if (X==3)</p><p><b> {X=0x88;}</b></p><p> else if (X==4)</p><p><b> {X=0x
118、98;}</b></p><p> pos = X+Y ; </p><p> writecommand(pos); //顯示地址</p><p><b> }</b></p><p> /****************************************************
119、*****</p><p> * *</p><p> * 閃爍函數(shù) *</p><p> *
120、 *</p><p> *********************************************************/</p><p> void lcdflag() </p><p><b> {</b></p><p> writecomman
121、d(0x08); </p><p> delay(300);</p><p> writecommand(0x0c); </p><p> delay(300);</p><p> writecommand(0x08); </p><p> delay(300);</p>&
122、lt;p> writecommand(0x0c); </p><p> delay(300);</p><p> writecommand(0x08); </p><p> delay(300); </p><p> writecommand(0x0c); </p><p> delay(
123、300);</p><p> writecommand(0x01); /*清屏*/</p><p><b> delay(5);</b></p><p><b> }</b></p><p> /*******************************************
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 萬年歷課程設(shè)計
- 萬年歷課程設(shè)計
- 萬年歷課程設(shè)計
- 萬年歷課程設(shè)計
- 萬年歷課程設(shè)計
- 萬年歷課程設(shè)計
- 萬年歷課程設(shè)計
- java萬年歷課程設(shè)計
- 萬年歷課程設(shè)計報告
- 數(shù)字萬年歷課程設(shè)計
- java課程設(shè)計--萬年歷
- 萬年歷課程設(shè)計論文
- 課程設(shè)計-萬年歷系統(tǒng)
- 萬年歷課程設(shè)計報告
- 數(shù)碼萬年歷課程設(shè)計
- 萬年歷課程設(shè)計.doc
- java課程設(shè)計--萬年歷設(shè)計
- dsp課程設(shè)計-萬年歷設(shè)計
- 編寫萬年歷系統(tǒng)課程設(shè)計
- c++萬年歷課程設(shè)計
評論
0/150
提交評論