版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、<p> 本科畢業(yè)設計(論文)</p><p> 題目電子萬年歷的設計</p><p><b> 摘 要</b></p><p> 在當代繁忙的工作與生活中,時間與每一個人都有非常密切的關(guān)系,每個人都受到時間的影響,電子萬年歷的出現(xiàn)給人們的工作與生活帶來了福音。電子萬年歷是實現(xiàn)對陽歷的日期和時間以及陰歷的日期顯示的計時裝置。
2、隨著科技的發(fā)展,電子萬年歷也有了巨大的進步和發(fā)展,目前已經(jīng)廣泛應用于家庭、車站、碼頭、辦公室以及銀行等各種場所。已經(jīng)成為人們?nèi)粘I詈凸ぷ髦斜夭豢缮俚碾娮赢a(chǎn)品,具有廣闊的發(fā)展空間和市場前景。</p><p> 本文介紹了基于單片機AT89C52的電子萬年歷的設計,該設計結(jié)合時鐘芯片DS1302以及顯示器件LCD12864,能夠直觀的顯示陽歷年、月、日、星期、時、分、秒,以及通過程序算法轉(zhuǎn)換陽歷的日期,得到陰歷的
3、年、月、日。在顯示陰歷時間時,能標明是否為閏年、閏月,同時完成對它們的自動校正,全部信息均受單片機AT89C52的控制,并由液晶顯示器件LCD12864顯示。人機口由4個按鍵來實現(xiàn),通過這四個按鍵可對時間、日期進行人為的自由調(diào)整。</p><p> 本設計采用單片機為核心器件,軟硬件結(jié)合,使硬件部分大為簡化,提高了系統(tǒng)穩(wěn)定性,設計出的電子萬年歷可以顯示陽歷的日期和時間以及陰歷的日期。其軟硬件設計簡單,時間記錄準
4、確,有較強的實用性。</p><p> 關(guān)鍵詞:萬年歷;AT89C52;DS1302;LCD12864 </p><p><b> Abstract</b></p><p> In contemporary busy work and life, time and every one has a very close relationsh
5、ip, everyone is the influence of the time, the emergence of electronic calendar to people's work and life bring the Gospel. Electronic calendar is the realization of the solar calendar date and time and date of the d
6、isplay of the timing device. With the development of science and technology, electronic calendar also had great progress and development, now has been used widely in the family, station, wharf, office a</p><p&
7、gt; This paper introduces the AT89C52 single chip microcomputer based on the electronic calendar design, the design with the clock chip DS1302 and display devices LCD12864, can intuitive shows YangLiNian, month, day, we
8、ek, when, minutes and seconds, and through the process of converting solar calendar date algorithm, get the lunar calendar year, month, day. In the display lunar calendar time, can indicate whether for a leap year, inter
9、calary moon, finish at the same time to their automatic adjustmen</p><p> This design uses the MCU as the core, the hardware and software combination to make hardware part greatly simplified and improve the
10、 stability of the system, design of electronic calendar can display the solar calendar date and time, and the date of the lunar calendar. Its software and hardware design simple, time to record and accurate, with strong
11、practicability.</p><p> Keywords: electronic calendar;AT89C52;DS1302;LCD12864</p><p><b> 目 錄</b></p><p><b> 1.緒論1</b></p><p> 1.1 本設計的研究背景
12、和研究意義1</p><p> 1.2 設計任務及任務分析1</p><p> 2. 本設計總體設計方案2</p><p> 2.1 方案論證與比較2</p><p> 2.1.1 方案一:基于AT89C52的電子萬年歷的設計2</p><p> 2.1.2 方案二:基于PLD的電子萬年歷的設計2
13、</p><p> 2.1.3 方案三:基于凌陽單片機的電子萬年歷的設計3</p><p> 2.2 本設計方案選擇4</p><p> 3.硬件電路的設計與計算5</p><p> 3.1控制電路的設計與計算5</p><p> 3.1.1 電路選擇5</p><p>
14、3.1.2 元器件的選型及參數(shù)計算5</p><p> 3.2 時鐘電路的設計與計算8</p><p> 3.2.1電路選擇8</p><p> 3.2.2 元器件的選型及參數(shù)計算9</p><p> 3.3 顯示電路的設計與計算11</p><p> 3.3.1電路選擇11</p>
15、<p> 3.3.2 元器件的選型及參數(shù)計算11</p><p> 3.4 硬件總電路圖13</p><p> 4.軟件設計及編程14</p><p> 4.1 軟件設計功能圖14</p><p> 4.2 軟件設計流程圖14</p><p> 4.3 陽歷程序設計及功能實現(xiàn)15&l
16、t;/p><p> 4.4 時間調(diào)整程序設計及功能實現(xiàn)15</p><p> 4.5 陰歷程序設計及功能實現(xiàn)17</p><p> 5.系統(tǒng)調(diào)試及分析19</p><p> 5.1 硬件電路調(diào)試及結(jié)果分析19</p><p> 5.1.1 單片機最小系統(tǒng)電路的測試結(jié)果及其分析19</p>
17、<p> 5.1.2 DS1302時鐘電路的測試結(jié)果及其分析19</p><p> 5.1.3 LCD12864顯示電路的測試結(jié)果及其分析20</p><p> 5.2 軟件調(diào)試及功能分析20</p><p> 5.2.1 陽歷顯示程序功能實現(xiàn)及其分析20</p><p> 5.2.2時間調(diào)整程序功能實現(xiàn)及其分析
18、21</p><p> 5.2.3 陰歷顯示程序功能實現(xiàn)及其分析21</p><p> 6.結(jié)論與展望22</p><p><b> 6.1 結(jié)論22</b></p><p><b> 6.2 展望22</b></p><p><b> 謝 辭
19、23</b></p><p><b> 參考文獻24</b></p><p> 附錄一:系統(tǒng)整體電路圖25</p><p> 附錄二:PCB電路圖26</p><p> 附錄三:實物圖27</p><p> 附錄四:系統(tǒng)完整程序28</p><
20、p><b> 1.緒論</b></p><p> 1.1 本設計的研究背景和研究意義</p><p> 隨著電子技術(shù)的迅速發(fā)展,時間的流逝,從觀察太陽、擺鐘到現(xiàn)在的電子鐘,人類在不斷的研究、不斷的創(chuàng)新。電子萬年歷是實現(xiàn)對年、月、日、時、分、秒、農(nóng)歷等顯示的計時裝置,廣泛應用與家庭、車站、碼頭、辦公室、銀行等各種場所,成為人們?nèi)粘I钪械谋匦杵贰?shù)字集成電路
21、的發(fā)展和石英晶體振蕩器的廣泛應用,使得數(shù)字鐘的精度遠遠超過老式鐘表。鐘表的數(shù)字化給人們生活帶來了極大的方便,在此基礎上完成的電子萬年歷精度高,功能易于擴展,可擴展為諸如整點報時、定時自動報警、按時自動打鈴、自動啟閉路燈等等具有多種功能的產(chǎn)品。</p><p> 電子萬年歷的出現(xiàn)給人們的生活與工作帶來了諸多的方便,具有讀取方便、顯示直觀,功能多樣、電路簡潔、成本低廉等諸多優(yōu)點,具有廣闊的市場前景。</p&g
22、t;<p> 1.2 設計任務及任務分析</p><p><b> 設計任務:</b></p><p> 設計一個電子萬年歷,要求能顯示陽歷年、月、日、星期、<小>時、分<鐘>、秒和陰歷年、月、日,在顯示農(nóng)歷時間時,能標明是否為閏年。主控芯片使用AT89C52單片,時鐘芯片使用美國DALlAS公司推出的一種高性能、低功耗、帶
23、RAM的實時時鐘DS1302。</p><p><b> 任務分析:</b></p><p> 實現(xiàn)對陽歷時間、日期及陰歷日期的顯示,需要單片機的控制,并通過顯示模塊進行顯示。能對時間、日期進行調(diào)節(jié),就需要按鍵模塊。</p><p> 2. 本設計總體設計方案</p><p> 2.1 方案論證與比較</p
24、><p> 2.1.1 方案一:基于AT89C52的電子萬年歷的設計 </p><p> 采用AT89C52芯片作為硬件核心,采用Flash ROM,內(nèi)部具有4KB ROM 存儲空間,能于3V的超低壓工作,而且與MCS-51系列單片機完全兼容,編程也簡單,而且價格便宜,使整體的設計成本降低。</p><p> 采用LCD12864液晶顯示屏,液晶顯示屏的顯示功能強
25、大,可顯示大量文字,圖形,顯示多樣,清晰可見,顯示美觀,方便查看。</p><p> 采用DS1302時鐘芯片實現(xiàn)時鐘,DS1302芯片是一種高性能的時鐘芯片,可自動對秒、分、時、日、周、月、年以及閏年補償?shù)哪赀M行計數(shù),而且精度高, RAM做為數(shù)據(jù)暫存區(qū),工作電壓2.5V~5.5V范圍內(nèi),2.5V時耗電小于300nA。</p><p> 本方案的系統(tǒng)框圖如圖2.1所示。</p&g
26、t;<p> 圖2.1 方案一系統(tǒng)框圖</p><p> 2.1.2 方案二:基于PLD的電子萬年歷的設計</p><p> 采用ALTERA公司的FLEX10K系列PLD器件。設計起來結(jié)構(gòu)清晰,各個模塊,從硬件上設計起來相對簡單,控制與顯示的模塊間的連接比較方便。</p><p> 采用點陣式數(shù)碼管顯示,點陣式數(shù)碼管是由八行八列的發(fā)光二極管
27、組成,對于顯示文字比較適合。</p><p> 采用DS1302時鐘芯片實現(xiàn)時鐘,DS1302芯片是一種高性能的時鐘芯片,可自動對秒、分、時、日、周、月、年以及閏年補償?shù)哪赀M行計數(shù),而且精度高, RAM做為數(shù)據(jù)暫存區(qū),工作電壓2.5V~5.5V范圍內(nèi),2.5V時耗電小于300nA。</p><p> 本方案的系統(tǒng)框圖如圖2.2所示。</p><p> 圖2.2
28、 方案二系統(tǒng)框圖</p><p> 2.1.3 方案三:基于凌陽單片機的電子萬年歷的設計</p><p> 凌陽16位單片機有豐富的中斷源和時基。它的準確度相當高,并且C語言和匯編兼容的編程環(huán)境也很方便來實現(xiàn)一些遞歸調(diào)用。I/O口功能也比較強大,方便使用。用凌陽16位單片機做控制器最有特色的就是它的可編程音頻處理,可完成語音的錄制播放和識別。這些都方便對設計進行擴展,使設計更加完善,
29、成本也相對低一些。</p><p> 采用LED數(shù)碼管動態(tài)掃描,LED數(shù)碼管價格適中,對于顯示數(shù)字最合適,而且采用動態(tài)掃描法與單片機連接時,占用的單片機口線少。</p><p> 直接采用單片機定時計數(shù)器提供秒信號,使用程序?qū)崿F(xiàn)年、月、日、星期、時、分、秒計數(shù)。采用此種方案雖然減少芯片的使用,節(jié)約成本,但是實現(xiàn)的時間誤差較大。</p><p> 本方案的系統(tǒng)框
30、圖如圖2.3所示。</p><p> 圖2.3 方案三系統(tǒng)框圖</p><p> 2.2 本設計方案選擇</p><p> 在方案二中,但是考慮到本設計的特點,PLD在功能擴展上比較受局限,而且占用的資源也相對多一些。顯示模塊使用的點陣式數(shù)碼管的價格相對較高。</p><p> 在方案三中,凌陽單片機在控制與顯示的結(jié)合上有些復雜,顯
31、示模組資源相對有限,而且單片機的穩(wěn)定性不是很高。顯示模塊使用的數(shù)碼管編程繁瑣,操作比液晶顯示復雜,也不便于直觀的查看。</p><p> 綜上各所述,本次設計將選擇方案一:基于AT89C52的電子萬年歷的設計。采用AT89C52作為控制系統(tǒng); DS1302提供時鐘;LCD12864作為顯示。</p><p> 3.硬件電路的設計與計算</p><p> 3.1
32、控制電路的設計與計算</p><p> 3.1.1 電路選擇</p><p> 最小控制系統(tǒng)由單片機、晶振電路和復位電路組成。</p><p> 晶體振蕩器的兩端分別接兩個電容,來對晶振信號退耦。</p><p> 單片機復位采用的上電復位的方式。</p><p> 如圖3.1所示為控制系統(tǒng)電路圖。</
33、p><p> 圖 3.1 控制系統(tǒng)電路圖</p><p> 3.1.2 元器件的選型及參數(shù)計算</p><p> 1、單片機AT89C52</p><p> AT89C52 是一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Flash 存儲器。使用Atmel公司高密度非易失性存儲器技術(shù)制造。片上Flash允許程序存儲器在
34、系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使得AT89C52為眾多嵌入式控制應用系統(tǒng)提供高靈活、超有效的解決方案。AT89C52具有以下標準功能:8k字節(jié)Flash,256字節(jié)RAM,32位I/O口線,看門狗定時器,2個數(shù)據(jù)指針,三個16位定時器/計數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時鐘電路。另外,AT89C52 可降至0Hz靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式。空閑
35、模式下,CPU 停止工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機一切工作停止,直到下一個中斷或硬件復位為止。</p><p> AT89C52的引腳圖如圖3.2所示。</p><p> 圖3.2 AT89C52引腳圖</p><p> P0 口:P0口是一個8位漏極開路的雙向I/O口。作為輸出口
36、,每位能驅(qū)動8個TTL邏輯電平。對P0端口寫“1”時,引腳用作高阻抗輸入。 </p><p> 當訪問外部程序和數(shù)據(jù)存儲器時,P0口也被作為低8位地址/數(shù)據(jù)復用。在這種模式下,P0具有內(nèi)部上拉電阻。 </p><p> 在flash編程時,P0口也用來接收指令字節(jié);在程序校驗時,輸出指令字節(jié)。程序校驗時,需要外部上拉電阻。</p><p> 如圖3.3所示為P
37、0口的上拉電阻電路連接圖。</p><p> 圖3.3 P0口上拉電阻</p><p> P1 口:P1 口是一個具有內(nèi)部上拉電阻的8 位雙向I/O 口,p1 輸出緩沖器能驅(qū)動4 個 TTL 邏輯電平。對P1 端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。 </p><p&
38、gt; 此外,P1.0和P1.2分別作定時器/計數(shù)器2的外部計數(shù)輸入(P1.0/T2)和時器/計數(shù)器2 的觸發(fā)輸入(P1.1/T2EX),具體如下表所示。 </p><p> 在flash編程和校驗時,P1口接收低8位地址字節(jié)。 </p><p> RST——復位輸入。當振蕩器工作時,RST引腳出現(xiàn)兩個機器周期以上高電平將是單片機復位。</p><p> A
39、LE/PROG——當訪問外部程序存儲器或數(shù)據(jù)存儲器時,ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節(jié)。一般情況下,ALE仍以時鐘振蕩頻率的1/6輸出固定的脈沖信號,因此它可對外輸出時鐘或用于定時目的。要注意的是:每當訪問外部數(shù)據(jù)存儲器時將跳過一個ALE脈沖。</p><p> 對FLASH存儲器編程期間,該引腳還用于輸入編程脈沖(PROG)。</p><p> PSEN——程序
40、儲存允許(PSEN)輸出是外部程序存儲器的讀選通信號,當AT89C52由外部程序存儲器取指令(或數(shù)據(jù))時,每個機器周期兩次PSEN有效,即輸出兩個脈沖,在此期間,當訪問外部數(shù)據(jù)存儲器,將跳過兩次PSEN信號。</p><p> EA/VPP——外部訪問允許,欲使CPU僅訪問外部程序存儲器,EA端必須保持低電平。需注意的是:如果加密位LB1被編程,復位時內(nèi)部會鎖存EA端狀態(tài)。</p><p&g
41、t; 如EA端為高電平(接Vcc端),CPU則執(zhí)行內(nèi)部程序存儲器的指令。</p><p><b> 2、單片機晶振電路</b></p><p> 晶振電路采用的是頻率為12MHz的晶體振蕩器。在晶振的兩端接兩個電容值為30pF電容的目的是為晶振輸出信號濾波。如圖3.4所示為晶振電路連接圖。</p><p> 圖3.4 單片機晶振電路&
42、lt;/p><p><b> 3、單片機復位電路</b></p><p> 復位電路采用的復位方式為上電復位。復位電路中使用的電容C2的值為30pF,電阻R11的值為10K。上電瞬間,電容充電電流最大,電容相當于短路,RST端為高電平,自動復位;電容兩端的電壓達到電源電壓時,電容充電電流為零,電容相當于開路,RST端為低電平,程序正常運行。如圖3.5所示為復位電路圖。
43、</p><p> 圖3.5 單片機復位電路</p><p> 3.2 時鐘電路的設計與計算</p><p><b> 3.2.1電路選擇</b></p><p> 時鐘電路的晶體振蕩器與單片機的晶振一樣,兩端分別接兩個電容,來對晶振信號退耦。</p><p> 如圖3.6所示為時鐘電
44、路連接圖。</p><p> 圖3.6 時鐘芯片電路圖</p><p> 3.2.2 元器件的選型及參數(shù)計算</p><p> 1、時鐘芯片DS1302</p><p> DS1302 是美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實時時鐘電路,它可以對年、月、日、周日、時、分、秒進行計時,具有閏年補償功能,工作電壓為2
45、.5V~5.5V。采用三線接口與CPU進行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。DS1302內(nèi)部有一個31×8的用于臨時性存放數(shù)據(jù)的RAM寄存器。DS1302是DS1202的升級產(chǎn)品,與DS1202兼容,但增加了主電源/后背電源雙電源引腳,同時提供了對后背電源進行涓細電流充電的能力。</p><p> 如圖3.7所示為DS1302引腳圖,其中Vcc1為后備電源,Vcc2為主
46、電源。X1和X2是振蕩源,外接32.768KHz晶振。</p><p> 圖3.7 DS1302引腳圖</p><p> 控制字節(jié)的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入DS1302中,位6如果為0,則表示存取日歷時鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進行寫操作,為1表示進行讀操作,控制字節(jié)總是從最低位開始
47、輸出。 </p><p> 在控制指令字輸入后的下一個SCLK時鐘的上升沿時,數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時從低位0位到高位7。讀寫時序如下圖3.8所示。</p><p> 圖3.8 DS1302讀/寫時序圖</p><p> DS1302有12個
48、寄存器,其中有7個寄存器與日歷、時鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式,其日歷、時間寄存器及其控制字見表3-1。</p><p> 表3-1 DS1302的日歷、時間寄存器</p><p> 2、DS1302晶振電路</p><p> DS1302的晶振電路與單片機的晶振電路相似,唯一不同之處在晶振的頻率,DS1302所選晶振頻率為32.768KHz。如圖3.9
49、所示為DS1302的晶振電路。</p><p> 圖3.9 DS1302晶振電路</p><p> 3.3 顯示電路的設計與計算</p><p><b> 3.3.1電路選擇</b></p><p> 圖3.10 顯示電路連接圖</p><p> LCD12864的引腳直接接在單片機
50、的引腳上面,RE、RW、E、PSB依次接在單片機P1.0至P1.3口上,數(shù)據(jù)口D0-D7依次接在單片機P0口上。A引腳上接一個10K的滑動變阻器來調(diào)節(jié)顯示屏的亮度。顯示部分電路圖如圖3.10所示。</p><p> 3.3.2 元器件的選型及參數(shù)計算</p><p> 1、LCD12864液晶顯示</p><p> 12864是一種具有4位/8位并行、2線或3
51、線串行多種接口方式,內(nèi)部含有國標一級、二級簡體中文字庫的點陣圖形液晶顯示模塊;其顯示分辨率為128×64, 內(nèi)置8192個16*16點漢字,和128個16*8點ASCII字符集。利用該模塊靈活的接口方式和簡單、方便的操作指令,可構(gòu)成全中文人機交互圖形界面??梢燥@示8×4行16×16點陣的漢字。 也可完成圖形顯示.低電壓低功耗是其又一顯著特點。由該模塊構(gòu)成的液晶顯示方案與同類型的圖形點陣液晶顯示模塊相比,不論
52、硬件電路結(jié)構(gòu)或顯示程序都要簡潔得多,且該模塊的價格也略低于相同點陣的圖形液晶模塊。</p><p> 各管腳功能如表3—2所示。</p><p> 表3—2 12864管腳功能表</p><p> LCD12864的數(shù)據(jù)傳輸過程如圖圖3.11所示。</p><p> 圖3.11 寫數(shù)據(jù)(8位數(shù)據(jù)線模式)</p>&
53、lt;p> LCD12864讀數(shù)據(jù)的時序圖如圖3.12所示。</p><p> 圖3.12 讀數(shù)據(jù)(8位數(shù)據(jù)線模式)</p><p> 3.4 硬件總電路圖</p><p> 系統(tǒng)總電路圖見附錄一,PCB板見附錄二。</p><p><b> 4.軟件設計及編程</b></p><p
54、> 4.1 軟件設計功能圖</p><p> 軟件系統(tǒng)功能圖如圖4.1所示。</p><p> 圖4.1 軟件系統(tǒng)功能圖</p><p> 4.2 軟件設計流程圖</p><p> 軟件系統(tǒng)流程圖如圖4.2所示。</p><p> 圖4.2 軟件流程圖</p><p>
55、4.3 陽歷程序設計及功能實現(xiàn)</p><p> 因為使用了時鐘芯片DS1302,陽歷程序只需從DS1302各個寄存器中讀出年、月、日、星期、時、分、秒等數(shù)據(jù),在處理即可。在首次對DS1302進行操作前,必須對它進行初始化,然后從DS1302中讀出數(shù)據(jù),再經(jīng)過處理后,送給顯示模塊單元。陽歷程序設計系統(tǒng)流程圖如圖4.3所示。</p><p> 圖4.3 計算陽歷程序流程圖</p&
56、gt;<p> 4.4 時間調(diào)整程序設計及功能實現(xiàn)</p><p> 調(diào)整時間用4個按鈕調(diào)整,1個用于控制,1個用于移位,兩外2個作為加、減調(diào)節(jié)按鈕。在調(diào)節(jié)時間過程中,逃調(diào)整的位與其他的位應該有區(qū)別,所以增加了漢字顯示提示功能,即調(diào)整的位有相應的漢字提示。當按下一位按鈕時,即進入下一位的調(diào)整,并有相應漢字提示。時間調(diào)整程序流程圖如圖4.4所示。</p><p> 圖4.
57、4 時間調(diào)整程序流程圖</p><p> 4.5 陰歷程序設計及功能實現(xiàn)</p><p> 陰歷程序的實現(xiàn)是靠陽歷日期來推算。要根據(jù)陽歷日期來推算陰歷日期,首先要設計算法。推算方法是,根據(jù)陽歷當前日期在一年中的天數(shù)來計算陰歷日期。陽歷一個月不是30天就是31天(2月除外,閏年2月為29天,平年2月為28天)。陰歷一年有12個月或13個月(含閏月),一個月為29天或30天。如果把一個只
58、有29天的月稱為小月,用1標志,把30天的月稱為大月,用0標志,那么12位二進制就能表示一年12個月的大小。如果有閏月,則把閏月的月份作為一字節(jié)的高4位,低4位表示閏月大小,大月為0,小月為1。這樣一字節(jié)就包含了所有閏月信息。陰歷春節(jié)和陽歷元旦相差天數(shù)也用一字節(jié)表示??偣灿?字節(jié)就可以存儲一年中任何一天陽歷與陰歷對應關(guān)系的有關(guān)數(shù)據(jù),例如2004年的陰歷與陽歷對應關(guān)系如表4-1所示。</p><p> 表4-1
59、 2004年的陰歷與陽歷對應關(guān)系表</p><p> 2004年春節(jié)和元旦相差21天,這樣2004年的信息表示為:21,42H,52H,21H。其中表示12個月大小信息的字節(jié),第4位和第7位不用。第一字節(jié)位十進制,其他的都為十六進制。按此方法,100年的陽歷和陰歷對應關(guān)系表共使用400字節(jié)。</p><p> 先要根據(jù)當前陽歷的日期,算出陽歷為該年中的第幾天,計算出當前陽歷日期為該年的
60、第幾天后,再減去該年春節(jié)和元旦的日差,如果夠減,則相減的結(jié)果就是陰歷在該年中的總第幾天,根據(jù)該數(shù)據(jù)就可以推算出具體的當前陰歷日期;如果不夠減,則表示當前陰歷為陽歷的前一年,在這種情況下,根據(jù)實際,當前陰歷日期會處于陰歷的11月或12月,此時春節(jié)和元旦的日差減去前面計算出的當前陽歷日期在陽歷中的第幾天的數(shù)據(jù),其結(jié)果表示當前陰歷日期距離春節(jié)的天數(shù)。再根據(jù)查表所得的該年的陰歷的閏月和大小月信息,就可以推算出該天的陰歷日期。</p>
61、<p> 陰歷程序算法流程圖如圖4.5所示。</p><p> 圖4.5 陰歷程序流程圖</p><p><b> 5.系統(tǒng)調(diào)試及分析</b></p><p> 5.1 硬件電路調(diào)試及結(jié)果分析</p><p> 電子萬年歷的電路系統(tǒng)比較簡單,但對于焊接方面不可輕視,電路系統(tǒng)中只要出于一處的錯誤,就
62、會對檢測造成很大的不便,電路中的交線較多,對于各種鋒利的引腳要注意處理,否則會刺穿被帶有包皮的導線,對電路造成短路現(xiàn)象。硬件電路實物圖見附錄三。</p><p> 5.1.1 單片機最小系統(tǒng)電路的測試結(jié)果及其分析</p><p> 焊接好單片機最小系統(tǒng)電路后,測試是否有虛焊、短路等問題以及單片機是否正常工作。用萬用表的二極管檔測試,若有’吱吱吱’的響聲則表示有短路,這種方法也可以檢查線
63、路是否連接通。給單片機最小系統(tǒng)上電,用萬用表電壓檔測試單片機各引腳輸出電壓是否正常,電壓表的讀數(shù)如圖5.1所示。用示波器檢測單片機晶振是否起振,晶振的波形輸出如圖5.2所示。</p><p> 圖5.1 電壓表測試讀數(shù)</p><p> 5.1.2 DS1302時鐘電路的測試結(jié)果及其分析</p><p> 時鐘芯片DS1302與單片機的連接比較簡單,電路焊
64、接好后,檢測電路是否有虛焊、短路的問題,用萬用表測試時鐘芯片各腳電壓,用示波器檢測時鐘芯片的晶振是否起振。</p><p> 在測試時鐘電路的時候,發(fā)現(xiàn)時鐘電路的輸出波形不正常,經(jīng)過檢查和測試,發(fā)現(xiàn)晶振沒有添加去耦電容,在添加了電容之后,時鐘電路輸出波形工作正常了。如圖5.3所示為DS1302的實物連接圖。</p><p> 圖5.3 DS1302實物圖</p><
65、;p> 5.1.3 LCD12864顯示電路的測試結(jié)果及其分析</p><p> 液晶顯示電路的連接很簡單,很容易焊接。但需要需要注意的是,由于液晶屏是接在AT89S52的P0口,所以必須要接上拉電阻。焊接好后,檢測電路是否有虛焊、短路的問題,用萬用表測試各腳的電壓。測試滑動變阻器能否調(diào)節(jié)顯示屏亮度。在芯片中燒入一個簡單的液晶屏顯示程序,測試液晶屏能否顯示。</p><p>
66、如圖5.4所示為LCD12864的實物連接圖。</p><p> 圖5.4 LCD12864實物圖</p><p> 5.2 軟件調(diào)試及功能分析</p><p> 5.2.1 陽歷顯示程序功能實現(xiàn)及其分析</p><p> 陽歷程序的設計很簡單,編寫好DS1302讀寫程序和陽歷和時間顯示程序,在主函數(shù)中調(diào)用,很容易就能實現(xiàn)陽歷和時間
67、的顯示功能。</p><p> 在編寫程序時,由于沒有掌握好DS1302的讀寫時序,導致DS1302不能正常讀數(shù)。經(jīng)過認真分析時序,最后終于編寫出了DS1302的正確程序。如圖5.5所示為12864顯示出的時間日期。</p><p> 圖5.5 陽歷時間日期顯示</p><p> 5.2.2時間調(diào)整程序功能實現(xiàn)及其分析</p><p>
68、; 時間調(diào)整程序比較復雜,程序多了,就很容易出錯,所以在編寫過程中要很細心。</p><p> 將編寫好的程序燒入單片機中進行檢查。在寫這部分程序時,感覺不是很困難,只要認真按照邏輯順序編寫就行了。如圖5.6所示是時間日期的調(diào)節(jié)部分。</p><p> 圖5.6 月份的調(diào)節(jié)顯示</p><p> 5.2.3 陰歷顯示程序功能實現(xiàn)及其分析</p>
69、<p> 陰歷程序的編寫難點主要在算法上,在有了算法和陰歷與陽歷轉(zhuǎn)陰歷的關(guān)系表的情況下,陰歷程序也很容易編寫。</p><p> 編寫好程序,燒入開發(fā)板檢測。在程序加入了農(nóng)歷子程序后,農(nóng)歷不能正常顯示。在仔細查看程序,發(fā)現(xiàn)返回的農(nóng)歷是16進制數(shù)。而我把它當成了十進制數(shù),以至于不能正常顯示。修改后,顯示正常,如圖5.7所示。</p><p> 圖5.7 陽歷與陰歷顯示&
70、lt;/p><p><b> 6.結(jié)論與展望</b></p><p><b> 6.1 結(jié)論</b></p><p> 通過本次設計,本系統(tǒng)能完成以下功能:</p><p> ?。?)顯示公歷日期功能(年、月、日、時、分、秒以及星期)</p><p> ?。?)可通過按鍵調(diào)
71、節(jié)年、月、日、時、分、秒以及星期</p><p> (3)可動態(tài)完整顯示年</p><p> 本設計的亮點是在顯示陰歷日期時,使用漢字的顯示,顯示農(nóng)歷的年份采用的天干地支的表現(xiàn)方式。例如,在2012年的農(nóng)歷閏四月初一時,顯示格式為“壬辰年閏四月初一”,使顯示更為美觀。</p><p> 本設計硬件電路較簡單,所以器件較少,電路中使用了AT89C52單片機、DS
72、1302時鐘芯片和LCD12864液晶顯示器,實現(xiàn)了預計功能。</p><p><b> 6.2 展望</b></p><p> 在本次設計中仍然存在著不足之處。</p><p> 1、顯示的年限過短,只能顯示2000年—2100年之間的部分。</p><p> 2、通過按鍵調(diào)節(jié)年、月、日后,如果不調(diào)節(jié)星期,星期
73、的顯示就會出現(xiàn)與正常的星期不匹配,目前還沒辦法自動校正,只能通過手動調(diào)節(jié)星期,才能使所顯示的星期與正常星期匹配。由</p><p> 3、于未來的陰歷日期是不能準確預測出的,所以,所顯示的陰歷日期有可能與其他版本的電子萬年歷在未來的陰歷日期顯示上出現(xiàn)不匹配的情況。</p><p> 4、由于使用的是C語言進行的編程,所以整個程序顯得很臃腫,在現(xiàn)有的程序設計基礎上,還可以進行精簡。<
74、;/p><p> 5、本設計的功能還可以在現(xiàn)有基礎上再次擴展,還可以添加鬧鈴功能,跑馬表功能,以及整點報時功能等等,還有很大的擴展空間。</p><p><b> 謝 辭</b></p><p> 首先我必須感謝院領導對我們畢業(yè)生在畢業(yè)設計過程中的支持與關(guān)懷!</p><p> 其次我要特別感邱紅兵老師,不管在選題
75、階段,還是在設計階段、在制作階段,正是他給予我不斷的指導與幫助,導師淵博的學識、嚴謹?shù)闹螌W態(tài)度、求實創(chuàng)新的工作作風、對事業(yè)和科學的執(zhí)著追求,以及對我諄諄教誨給我留下了深刻的印象,使我受益終身。在課題的研究設計過程中,我不僅從邱老師那里學到許多專業(yè)知識,更重要的是學會了學習新知識并將其鞏固的方法,這無疑是一把開啟未來生活的鑰匙,特此向邱老師表示衷心的感謝!</p><p> 最后我要感謝我的同學們,在設計和焊接過
76、程遇到困難時,正是由于同學們的幫助我才能順利的克服困難,畢業(yè)設計的完成離不開同學們的幫助!</p><p> 在大學四年的學習生活中,還得到了許多領導和老師的熱情關(guān)心和幫助,在此,向所有關(guān)心和幫助過我的領導、老師、同學和朋友們表示由衷的謝意!</p><p> 衷心的感謝在百忙之中評閱論文和參加答辯的各位教授、老師!</p><p><b> 參考文
77、獻</b></p><p> ?。?]康光華.電子技術(shù)基礎(數(shù)字部分).北京:電子工業(yè)出版社,2006.02</p><p> ?。?]李建忠.《單片機原理及應用》.陜西:西安電子科技大學出版, 2006.02 [3]張俊謨.《單片機中級教程》.北京:北京航空航天大學出版, 2006.03</p><p
78、> ?。?]李飛光.《單片機課程設計實例指導》.北京:北京航空航天大學出版社, 2004[5]李振聲.《實驗電子技術(shù)》(P182~193).國防工業(yè)大學出版社,2001[6]何立民.《單片機應用技術(shù)選編》.北京:北京航空航天大學出版社, 2000.08[7]萬光毅.《單片機實驗與實踐教程》.北京:北京航空航天大學出版社, 2005.01[8]周航慈.《單片機程序設計基礎》.北京:北京航空航天大
79、學出版社, 1991.11[9]黃遵熹.《單片機原理接口與應用》.陜西:西北工業(yè)大學出版社, 1997.05</p><p> [10]Kuglanp,kriegerE,SantiagoE. The 8051 microcontronller.2009:P110—122</p><p> 附錄一:系統(tǒng)整體電路圖</p><p> 附錄二:
80、PCB電路圖</p><p><b> 附錄三:實物圖</b></p><p> 附錄四:系統(tǒng)完整程序</p><p><b> 顯示子程序:</b></p><p> #define data_bus P0</p><p> #define RS P1_1&
81、lt;/p><p> #define R_W P1_3</p><p> #define EP1_2</p><p> #define PSB P1_0</p><p> void delay(unsigned int cont)</p><p> {unsigned char j;</p>
82、<p> unsigned int i;</p><p> for(i=0;i<cont;i++)for(j=0;j<10;j++);}</p><p> void cheak_busy(void)</p><p><b> {</b></p><p> RS=0;R_W=1;E=1; w
83、hile(data_bus&0X80); E=0;</p><p><b> }</b></p><p> void write_order(unsigned char command)</p><p><b> {</b></p><p> cheak_busy();RS=0;R_
84、W=0;E=1; data_bus=command; delay(50);E=0;</p><p><b> }</b></p><p> void write_data(unsigned char datas)</p><p><b> {</b></p><p> cheak_busy(
85、);RS=1;R_W=0;E=1; data_bus=datas; delay(50); E=0;</p><p><b> }</b></p><p> void screen_int(void)</p><p><b> {</b></p><p> PSB=1; //--并行數(shù)據(jù)傳輸&
86、lt;/p><p> delay(50); write_order(0X30);//-- 8位數(shù)據(jù),基本指令</p><p> delay(50); write_order(0X02); //--地址歸位</p><p> delay(50); write_order(0X0C); //--整體顯示。關(guān)閉游標</p><p> delay
87、(50); write_order(0X80); //--設定起始顯示位置</p><p> delay(50); write_order(0X01); //--清屏</p><p> delay(50); write_order(0X06); //--進入設定點</p><p><b> }</b></p><p&
88、gt; void clear_screen(void)//--需要修改部分</p><p><b> {</b></p><p> write_order(0X01);delay(50); write_order(0X06); //--進入設定點</p><p> delay(50);delay(5000);</p>
89、<p><b> }</b></p><p> void puts_char(unsigned char row,unsigned char line,unsigned char *p)//--字符或者漢字輸出</p><p><b> {</b></p><p> unsigned char star_
90、site=0X80;</p><p> unsigned char *q=0;</p><p> unsigned char over_flag=0;</p><p> if(row<1||line<1)return ;</p><p> if(row==3)</p><p> {row=1;li
91、ne=line+8;}</p><p> else if(row==4)</p><p> {row=2;line=line+8;}</p><p> row=row-1;line=line-1;row=row<<4;</p><p> star_site=star_site|row;</p><p&g
92、t; star_site=star_site|line;</p><p> write_order(star_site);</p><p><b> while(1)</b></p><p><b> {</b></p><p> if(*p=='o')</p>
93、<p><b> {</b></p><p> *q=*(p+1);if(*q=='v')break;</p><p> else {write_data(*p);p++;}</p><p><b> }</b></p><p> else {write_d
94、ata(*p);p++;}</p><p> over_flag++;</p><p> if(over_flag>16)break;</p><p><b> }</b></p><p><b> }</b></p><p> void puts_data(
95、unsigned char row,unsigned char line,unsigned char cont,unsigned int number)//輸出數(shù)據(jù)(暫為四位)</p><p><b> {</b></p><p> code unsigned char *p="0123456789"; </p><p&g
96、t; unsigned char temp[4];</p><p> unsigned char *q;</p><p> unsigned char i;</p><p> unsigned char star_site=0X80;</p><p> if(cont>=5)return;</p><p&
97、gt; if(row<1||line<1)return;</p><p><b> else{</b></p><p> if(row==3)</p><p><b> {</b></p><p> row=1;line=line+8;</p><p>
98、<b> }</b></p><p> else if(row==4)</p><p><b> {</b></p><p> row=2;line=line+8;</p><p><b> }</b></p><p><b> }
99、</b></p><p> row=row-1;line=line-1;row=row<<4;</p><p> star_site=star_site|row;star_site=star_site|line;</p><p> temp[0]=number/1000;temp[1]=number%1000/100;</p>
100、;<p> temp[2]=number%100/10;temp[3]=number%10;</p><p> write_order(star_site);for(i=4-cont;i<4;i++)</p><p> {q=p+temp[i];write_data(*q); }</p><p><b> 整體程序:</b
101、></p><p> #include "AT89X51.H"</p><p> #include "lcddriver.h"</p><p> sbit RST=P1^4;</p><p> sbit SCL=P1^6;</p><p> sbit SDA=P1
102、^5;</p><p> sbit key1=P2^0;</p><p> sbit key2=P2^1;</p><p> sbit key3=P2^2;</p><p> sbit key4=P2^3;</p><p> unsigned char shuzu1[]={0,0,0,0,0,0,0,0,
103、0,0,0,0,0};</p><p> runnian[]={0,31,60,91,121,152,182,213,244,274,305,335,366};</p><p> pingnian[]={0,31,59,90,120,151,181,212,243,273,304,334,365};</p><p> //2000-----2050年
104、 </p><p> guanxibiao[101][4]={{35,0x15,0x51,0x00},{23,0x11,0x52,0x41},</p><p> {42,0x12,0x65,0x00},{31,0x11,0x32,0x00},{21,0x42,0x52,0x21},</p><p> {39,0x52,0x25,0x00},{2
105、8,0x25,0x04,0x71},{48,0x66,0x42,0x00},</p><p> {37,0x33,0x22,0x00},{25,0x15,0x24,0x51},{44,0x05,0x52,0x00},</p><p> {33,0x22,0x65,0x00},{22,0x21,0x25,0x41},{40,0x24,0x52,0x00},</p><
106、p> {30,0x52,0x42,0x91},{49,0x55,0x05,0x00},{38,0x26,0x44,0x00},</p><p> {27,0x53,0x50,0x60},{46,0x53,0x24,0x00},{35,0x25,0x54,0x00},</p><p> {24,0x41,0x52,0x41},{42,0x45,0x25,0x00},{31,0x2
107、4,0x52,0x00},</p><p> {21,0x51,0x12,0x21},{40,0x55,0x11,0x00},{28,0x26,0x21,0x61},</p><p> {47,0x26,0x61,0x00},{36,0x13,0x31,0x00},{25,0x05,0x31,0x51},</p><p> {43,0x12,0x54,0x00
108、},{33,0x51,0x25,0x00},{22,0x42,0x25,0x31},</p><p> {41,0x32,0x22,0x00},{30,0x55,0x02,0x71},{49,0x55,0x22,0x00},</p><p> {38,0x26,0x62,0x00},{27,0x13,0x64,0x60},{45,0x13,0x32,0x00},</p>
109、<p> {34,0x12,0x55,0x00},{23,0x10,0x53,0x51},{42,0x22,0x45,0x00},</p><p> {31,0x52,0x22,0x00},{21,0x52,0x44,0x21},{40,0x55,0x44,0x00},</p><p> {29,0x26,0x50,0x71},{47,0x26,0x64,0x00},{36
110、,0x25,0x32,0x00},</p><p> {25,0x23,0x32,0x50},{44,0x44,0x55,0x00},{32,0x24,0x45,0x00},</p><p> {22,0x55,0x11,0x30},{41,0x33,0x10,0x00},{31,0x55,0x40,0x80},</p><p> {49,0x55,0x50,
111、0x00},{38,0x46,0x64,0x00},{27,0x45,0x65,0x60},};</p><p> Extern char sec=50,min=59,hour=23,day=28,mon=5,week=2,yinli_year=0,</p><p> yinli_mon=0,yinli_day=0;</p><p> extern int
112、year=12,a=0,b=0;</p><p> void delay_ms(unsigned char xms)</p><p><b> {</b></p><p> unsigned char i;</p><p> while(xms--){for(i = 690; i > 0; i--);}&
113、lt;/p><p><b> }</b></p><p> ////////////////////////BCD碼轉(zhuǎn)十進制</p><p> unsigned char DS1302_BCD_to_DEC(unsigned char BCD)</p><p><b> {</b></p&
114、gt;<p> unsigned char temp;</p><p> temp = BCD / 16;temp *= 10;temp += BCD % 16;</p><p> return (temp); </p><p><b> }</b></p><p> //////////////
115、////////DS1302初始化</p><p> void DS1302_start()</p><p><b> {</b></p><p> RST = 1;SCL = 0;SDA = 0;</p><p><b> }</b></p><p>
116、 ///////////////////////DS1320結(jié)束</p><p> void DS1302_stop()</p><p><b> {</b></p><p> RST = 0;SCL = 0;SDA = 0;</p><p><b> }</b></p&g
117、t;<p> //////////////////////DS1602寫一個字節(jié)</p><p> void DS1302_writebyte(unsigned char da)</p><p><b> {</b></p><p> unsigned char i;</p><p> RST =
118、 1;delay(5);</p><p> for(i = 0; i < 8; i++)</p><p><b> {</b></p><p> SCL = 0;delay(18);da >>= 1;SDA = CY;delay(2);SCL = 1; </p><p> delay(8);S
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子萬年歷畢業(yè)設計
- 電子萬年歷畢業(yè)設計
- 畢業(yè)設計---電子萬年歷設計
- 電子萬年歷畢業(yè)設計稿
- 電子萬年歷畢業(yè)設計2
- 畢業(yè)設計----電子萬年歷論文設計
- 電子萬年歷設計
- 畢業(yè)設計---電子萬年歷的設計
- 畢業(yè)設計---電子萬年歷的設計
- 電子萬年歷
- 電子鐘萬年歷畢業(yè)設計
- 萬年歷課程設計--萬年歷電子時鐘
- 數(shù)字萬年歷畢業(yè)設計
- 萬年歷電子時鐘溫度畢業(yè)設計
- 電子萬年歷畢業(yè)論文
- 畢業(yè)論文——電子萬年歷設計
- 電子萬年歷設計-畢業(yè)論文
- 畢業(yè)論文——電子萬年歷設計
- 萬年歷畢業(yè)設計---基于stc89c52萬年歷的設計
- 數(shù)碼萬年歷的畢業(yè)設計
評論
0/150
提交評論