版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 單片機(jī)課程設(shè)計(jì)報(bào)告</b></p><p><b> 電子萬(wàn)年歷設(shè)計(jì)</b></p><p> 姓 名: </p><p> 學(xué) 號(hào): </p><p> 專業(yè)班級(jí): 05電氣
2、(6)班 </p><p> 指導(dǎo)老師: </p><p> 所在學(xué)院: </p><p><b> 摘要</b></p><p> 隨著科技的快速發(fā)展,時(shí)間的流逝,至從觀太陽(yáng)、擺鐘到現(xiàn)在電子鐘,人類不斷研究,不斷創(chuàng)新紀(jì)錄。美國(guó)DALLAS公司推
3、出的具有涓細(xì)電流充電能的低功耗實(shí)時(shí)時(shí)鐘電路DS1302。它可以對(duì)年、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí),還具有閏年補(bǔ)償?shù)榷喾N功能,而且DS1302的使用壽命長(zhǎng),誤差小。對(duì)于數(shù)字電子萬(wàn)年歷采用直觀的數(shù)字顯示,可以同時(shí)顯示年、月、日、周日、時(shí)、分、秒和溫度等信息,還具有時(shí)間校準(zhǔn)等功能。該電路采用AT89S52單片機(jī)作為核心,功耗小,能在3V的低壓工作,電壓可選用3~5V電壓供電。</p><p> 綜上所述此萬(wàn)年歷具
4、有讀取方便、顯示直觀、功能多樣、電路簡(jiǎn)潔、成本低廉等諸多優(yōu)點(diǎn),符合電子儀器儀表的發(fā)展趨勢(shì),具有廣闊的市場(chǎng)前景。</p><p> 本設(shè)計(jì)是基于51系列的單片機(jī)進(jìn)行的電子萬(wàn)年歷設(shè)計(jì),可以顯示年月日時(shí)分秒及周信息,具有可調(diào)整日期和時(shí)間功能。在設(shè)計(jì)的同時(shí)對(duì)單片機(jī)的理論基礎(chǔ)和外圍擴(kuò)展知識(shí)進(jìn)行了比較全面準(zhǔn)備。在硬件與軟件設(shè)計(jì)時(shí),沒有良好的基礎(chǔ)知識(shí)和實(shí)踐經(jīng)驗(yàn)會(huì)受到很大限制,每項(xiàng)功能實(shí)現(xiàn)時(shí)需要那種硬件,程序該如何編寫,算法如
5、何實(shí)現(xiàn)等,沒有一定的基礎(chǔ)就不可能很好的實(shí)現(xiàn)。</p><p><b> 具體實(shí)現(xiàn)功能:</b></p><p> 顯示年月日時(shí)分秒及星期信息</p><p> 具有可調(diào)整日期和時(shí)間功能</p><p><b> 與即時(shí)時(shí)間同步</b></p><p><b>
6、; 目 錄</b></p><p> 1方案論證..........................................................3</p><p> 1.1單片機(jī)芯片的選擇方案和論證...................................3</p><p> 1.2顯示模塊選擇方案和論證....
7、...................................3</p><p> 1.3時(shí)鐘芯片的選擇方案和論證.....................................3</p><p> 1.4電路設(shè)計(jì)最終方案決定.........................................4</p><p> 2系統(tǒng)的硬件設(shè)
8、計(jì)與實(shí)現(xiàn)..............................................5</p><p> 2.1電路設(shè)計(jì)框圖.................................................5</p><p> 2.2系統(tǒng)硬件概述.................................................5</
9、p><p> 2.3主要單元電路的設(shè)計(jì)...........................................5</p><p> 2.3.1單片機(jī)主控制模塊的設(shè)計(jì).....................................5</p><p> 2.3.2時(shí)鐘電路模塊的設(shè)計(jì)................................
10、........ 6</p><p> 2.3.3電路原理及說(shuō)明.............................................7</p><p> 2.3.4顯示模塊的設(shè)計(jì).............................................8</p><p> 3系統(tǒng)的軟件設(shè)計(jì).................
11、...................................9</p><p> 3.1程序流程框圖.................................................9</p><p> 4測(cè)試與結(jié)果分析...................................................11</p><p&
12、gt; 4.1硬件測(cè)試....................................................11</p><p> 4.2軟件測(cè)試....................................................11</p><p> 4.3測(cè)試結(jié)果分析與結(jié)論...................................
13、.......11</p><p> 4.3.1 測(cè)試結(jié)果分析..............................................11</p><p> 4.3.2 測(cè)試結(jié)論..................................................11</p><p> 5prodeus軟件仿真........
14、................................ ..........12</p><p> 5.1Proteus ISIS簡(jiǎn)介.............................................12</p><p> 5.2Proteus運(yùn)行流程..............................................13<
15、;/p><p> 5.3Proteus功能仿真..............................................13</p><p> 6課程設(shè)計(jì)總結(jié)與體會(huì).......................................... .....16</p><p> 參考文獻(xiàn)............................
16、...............................17</p><p> 附錄一:系統(tǒng)電路圖.................................................18</p><p> 附錄二:系統(tǒng)程序...................................................19</p><p>
17、;<b> 1 方案論證</b></p><p> 1.1 單片機(jī)芯片的選擇方案和論證</p><p><b> 方案一: </b></p><p> 采用89C51芯片作為硬件核心,采用Flash ROM,內(nèi)部具有4KB ROM 存儲(chǔ)空間,能于3V的超低壓工作,而且與MCS-51系列單片機(jī)完全兼容,但是運(yùn)用于電路
18、設(shè)計(jì)中時(shí)由于不具備ISP在線編程技術(shù), 當(dāng)在對(duì)電路進(jìn)行調(diào)試時(shí),由于程序的錯(cuò)誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r(shí),對(duì)芯片的多次拔插會(huì)對(duì)芯片造成一定的損壞。</p><p><b> 方案二:</b></p><p> 采用AT89S52,片內(nèi)ROM全都采用Flash ROM;能以3V的超底壓工作;同時(shí)也與MCS-51系列單片機(jī)完全該芯片內(nèi)部存儲(chǔ)器為8KB ROM
19、存儲(chǔ)空間,同樣具有89C51的功能,且具有在線編程可擦除技術(shù),當(dāng)在對(duì)電路進(jìn)行調(diào)試時(shí),由于程序的錯(cuò)誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r(shí),不需要對(duì)芯片多次拔插,所以不會(huì)對(duì)芯片造成損壞,所以選擇采用AT89S52作為主控制系統(tǒng)。</p><p> 1.2 顯示模塊選擇方案和論證</p><p><b> 方案一:</b></p><p> 采
20、用LED數(shù)碼管動(dòng)態(tài)掃描,LED數(shù)碼管價(jià)格適中,對(duì)于顯示數(shù)字合適,采用動(dòng)態(tài)掃描法與單片機(jī)連接時(shí),雖然占用的單片機(jī)口線少,但連線還需要花費(fèi)一點(diǎn)時(shí)間,所以也不用此種作為顯示。</p><p><b> 方案二:</b></p><p> 采用點(diǎn)陣式數(shù)碼管顯示,點(diǎn)陣式數(shù)碼管是由八行八列的發(fā)光二極管組成,對(duì)于顯示文字比較適合,如采用在顯示數(shù)字顯得太浪費(fèi),且價(jià)格也相對(duì)較高,所
21、以也不用此種作為顯示。</p><p><b> 方案三:</b></p><p> 采用LCD液晶顯示屏,液晶顯示屏的顯示功能強(qiáng)大,可顯示大量文字,圖形,顯示多樣,清晰可見,并且我做的最小系統(tǒng)上帶一個(gè)TS1620-1,和AT89S52已經(jīng)接好,省了很多麻煩,所以在此設(shè)計(jì)中采用LCD液晶顯示屏。</p><p> 1.3 時(shí)鐘芯片的選擇方
22、案和論證</p><p><b> 方案一:</b></p><p> 直接采用單片機(jī)定時(shí)計(jì)數(shù)器提供秒信號(hào),使用程序?qū)崿F(xiàn)年、月、日、星期、時(shí)、分、秒計(jì)數(shù)。采用此種方案雖然減少芯片的使用,節(jié)約成本,但是,實(shí)現(xiàn)的時(shí)間誤差較大,所以不采用此方案。</p><p><b> 方案二:</b></p><p
23、> 采用DS1302時(shí)鐘芯片實(shí)現(xiàn)時(shí)鐘,DS1302芯片是一種高性能的時(shí)鐘芯片,可自動(dòng)對(duì)秒、分、時(shí)、日、周、月、年進(jìn)行計(jì)數(shù),而且精度高,位的RAM做為數(shù)據(jù)暫存區(qū),工作電壓2.5V~5.5V范圍內(nèi),2.5V時(shí)耗電小于300nA。</p><p> 1.4 電路設(shè)計(jì)最終方案決定</p><p> 綜上各方案所述,對(duì)此次作品的方案選定: 采用AT89S52作為主控制系統(tǒng); DS1302
24、提供時(shí)鐘;LCD液晶顯示屏作為顯示。</p><p> 2 系統(tǒng)的硬件設(shè)計(jì)與實(shí)現(xiàn)</p><p> 2.1 電路設(shè)計(jì)框圖</p><p><b> 圖1系統(tǒng)原理圖</b></p><p> 2.2 系統(tǒng)硬件概述</p><p> 本電路是由AT89S52單片機(jī)為控制核心,具有在線編程功能
25、,低功耗,能在3V超低壓工作;時(shí)鐘電路由DS1302提供,它是一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘電路,它可以對(duì)年、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能,工作電壓為2.5V~5.5V。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)或RAM數(shù)據(jù)。DS1302內(nèi)部有一個(gè)31*8的用于臨時(shí)性存放數(shù)據(jù)的RAM寄存器??僧a(chǎn)生年、月、日、周日、時(shí)、分、秒,具有使用壽命長(zhǎng),精度高和低功耗等特點(diǎn),同時(shí)具有掉
26、電自動(dòng)保存功能;溫度的采集由DS18B20構(gòu)成;顯示部份由LCD液晶顯示屏顯示。</p><p> 2.3 主要單元電路的設(shè)計(jì)</p><p> 2.3.1 單片機(jī)主控制模塊的設(shè)計(jì)</p><p> AT89S52單片機(jī)為40引腳雙列直插芯片,有四個(gè)I/O口P0,P1,P2,P3, MCS-51單片機(jī)共有4個(gè)8位的I/O口(P0、P1、P2、P3),每一條I/
27、O線都能獨(dú)立地作輸出或輸入。</p><p> 單片機(jī)的最小系統(tǒng)如下圖所示,18引腳和19引腳接時(shí)鐘電路,XTAL1接外部晶振和微調(diào)電容的一端,在片內(nèi)它是振蕩器倒相放大器的輸入,XTAL2接外部晶振和微調(diào)電容的另一端,在片內(nèi)它是振蕩器倒相放大器的輸出。第9引腳為復(fù)位輸入端,接上電容,電阻及開關(guān)后夠上電復(fù)位電路,20引腳為接地端,40引腳為電源端。 如圖2 所示:</p><p><
28、;b> 圖2 主控制系統(tǒng) </b></p><p> 2.3.2 時(shí)鐘電路模塊的設(shè)計(jì)</p><p> 圖.3示出DS1302的引腳排列,其中Vcc1為后備電源,Vcc2為主電源。在主電源關(guān)閉的情況下,也能保持時(shí)鐘的連續(xù)運(yùn)行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當(dāng)Vcc2大于Vcc1+0.2V時(shí),Vcc2給DS1302供電。當(dāng)Vcc2小于Vcc1時(shí),
29、DS1302由Vcc1供電。X1和X2是振蕩源,外接32.768KHz晶振。RST是復(fù)位/片選線,通過(guò)把RST輸入驅(qū)動(dòng)置高電平來(lái)啟動(dòng)所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當(dāng)RST為高電平時(shí),所有的數(shù)據(jù)傳送被初始化,允許對(duì)DS1302進(jìn)行操作。如果在傳送過(guò)程中RSTS置為低電平,則會(huì)終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電動(dòng)行
30、時(shí),在Vcc大于等于2.5V之前,RST必須保持低電平。中有在SCLK 為低電平時(shí),才能將RST置為高電平,I/O為串行數(shù)據(jù)輸入端(雙向)。SCLK始終是輸入端。</p><p> 圖3 DS1302的引腳圖</p><p> 2.3.3 電路原理及說(shuō)明</p><p> (1) 時(shí)鐘芯片DS1302的工作原理:</p><p> D
31、S1302在每次進(jìn)行讀、寫程序前都必須初始化,先把SCLK端置 “0”,接著把RST端置“1”,最后才給予SCLK脈沖;讀/寫時(shí)序如下圖4所示。DS1302的控制字的位7必須置1,若為0則不能把對(duì)DS1302進(jìn)行讀寫數(shù)據(jù)。對(duì)于位6,若對(duì)程序進(jìn)行讀/寫時(shí)RAM=1,對(duì)時(shí)間進(jìn)行讀/寫時(shí),CK=0,位1至位5指操作單元的地址。位0是讀/寫操作位,進(jìn)行讀操作時(shí),該位為1;該位為0則表示進(jìn)行的是寫操作??刂谱止?jié)總是從最低位開始輸入/輸出的。表.2
32、為DS1302的日歷、時(shí)間寄存器內(nèi)容:“CH”是時(shí)鐘暫停標(biāo)志位,當(dāng)該位為1時(shí),時(shí)鐘振蕩器停止,DS1302處于低功耗狀態(tài);當(dāng)該位為0時(shí),時(shí)鐘開始運(yùn)行?!癢P”是寫保護(hù)位,在任何的對(duì)時(shí)鐘和RAM的寫操作之前,WP必須為0。當(dāng)“WP”為1時(shí),寫保護(hù)位防止對(duì)任一寄存器的寫操作。</p><p> (2) DS1302的控制字節(jié):</p><p> DS1302控制字節(jié)的高有效位(位7)必須是
33、邏輯1,如果它為0,則不能把數(shù)據(jù)寫入DS1302中,位6如果0,則表示存取日歷時(shí)鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進(jìn)行寫操作,為1表示進(jìn)行讀操作,控制字節(jié)總是從最低位開始輸出</p><p> (3) 數(shù)據(jù)輸入輸出(I/O)</p><p> 在控制指令字輸入后的下一個(gè)SCLK時(shí)鐘的上升沿時(shí),數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從低
34、位即位0開始。同樣,在緊跟8位的控制指令字后的下一個(gè)SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時(shí)從低位0位到高位7。</p><p> (4) DS1302的寄存器</p><p> DS1302有12個(gè)寄存器,其中有7個(gè)寄存器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式。</p><p> 此外,DS1302 還有年份寄存器、控制寄存器、充電寄存器
35、、時(shí)鐘突發(fā)寄存器及與RAM相關(guān)的寄存器等。時(shí)鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內(nèi)容。 DS1302與RAM相關(guān)的寄存器分為兩類:一類是單個(gè)RAM單元,共31個(gè),每個(gè)單元組態(tài)為一個(gè)8位的字節(jié),其命令控制字為C0H~FDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的RAM寄存器,此方式下可一次性讀寫所有的RAM的31個(gè)字節(jié),命令控制字為FEH(寫)、FFH(讀)。 </p><p>
36、2.3.4 顯示模塊的設(shè)計(jì)</p><p> 如圖.4為L(zhǎng)CD顯示模塊,和最小系統(tǒng)上的連線一樣,無(wú)需修改。</p><p> 圖4 LCD液晶顯示屏顯示模塊</p><p><b> 3 系統(tǒng)的軟件設(shè)計(jì)</b></p><p> 3.1 程序流程框圖</p><p><b>
37、圖5主程序流程圖</b></p><p> 圖6 時(shí)間調(diào)整程序流程圖</p><p><b> 4 測(cè)試與結(jié)果分析</b></p><p><b> 4.1 硬件測(cè)試</b></p><p> 電子萬(wàn)年歷的電路系統(tǒng)較大,對(duì)于焊接方面更是不可輕視,龐大的電路系統(tǒng)中只要出于一處的錯(cuò)誤
38、,則會(huì)對(duì)檢測(cè)造成很大的不便,而且電路的交線較多,對(duì)于各種鋒利的引腳要注意處理,否則會(huì)刺被帶有包皮的導(dǎo)線,則會(huì)對(duì)電路造成短路現(xiàn)象。</p><p> 在本成電子萬(wàn)年歷的設(shè)計(jì)調(diào)試中遇到了很多的問題?;叵脒@些問題只要認(rèn)真多思考都是可以避免的,以下為主要的問題:</p><p> (1)LCD液晶顯示屏顯示部分已經(jīng)連在最小系統(tǒng)上,節(jié)省了不少時(shí)間和精力。</p><p>
39、 ?。?)對(duì)萬(wàn)年歷修改時(shí)間或日期時(shí),有時(shí)LCD液晶顯示屏被屏蔽掉,造成不亮現(xiàn)象。</p><p> 解決:根據(jù)儀器的測(cè)試,發(fā)現(xiàn)電路的驅(qū)動(dòng)能力不足,最后在DS1302時(shí)鐘芯片的/CS、SCLK、RET端接入5.1K的上拉電阻后,電路的驅(qū)動(dòng)能力才能滿足,即可解決不亮現(xiàn)象。</p><p><b> 4.2 軟件測(cè)試</b></p><p>
40、電子成年歷是多功能的數(shù)字型,可以看當(dāng)前日期,時(shí)間。電子成年歷功能很多,所以對(duì)于它的程序也較為復(fù)雜,所以在編寫程序和調(diào)試時(shí)出現(xiàn)了相對(duì)較多的問題。最后經(jīng)過(guò)多次的模塊子程序的修改,一步一步的完成,最終解決了軟件。在軟件的調(diào)試過(guò)程中遇到的主要問題是:</p><p> 燒入程序后,LCD液晶顯示屏顯示亮度不好。</p><p> 解決:一遍旋轉(zhuǎn)10K歐的滑動(dòng)變阻器,一遍觀看LCD顯示屏,知道看
41、到合適的亮度為止。</p><p> 4.3 測(cè)試結(jié)果分析與結(jié)論</p><p> 4.3.1 測(cè)試結(jié)果分析</p><p> 1.在測(cè)試中遇到LCD液晶顯示屏為不顯示時(shí),首先使用試測(cè)儀對(duì)電路進(jìn)行測(cè)試,觀察是否存在漏焊,虛焊,或者元件損壞,滑動(dòng)變阻器器沒有調(diào)好:查看燒寫的程序是否正確無(wú)誤,對(duì)程序進(jìn)行認(rèn)真修改。</p><p> 4.3
42、.2 測(cè)試結(jié)論</p><p> 經(jīng)過(guò)多次的反復(fù)測(cè)試與分析,可以對(duì)電路的原理及功能更加熟悉,同時(shí)提高了設(shè)計(jì)能力與及對(duì)電路的分析能力。同時(shí)在軟件的編程方面得到更到的提高,對(duì)編程能力得到加強(qiáng),同時(shí)對(duì)所學(xué)的知識(shí)得到很大的提高與鞏固。</p><p> 5 Proteus軟件仿真</p><p> 5.1Proteus ISIS簡(jiǎn)介</p><p&
43、gt; Proteus ISIS是英國(guó)Labcenter公司開發(fā)的電路分析與實(shí)物仿真軟件。它運(yùn)行于Windows操作系統(tǒng)上,可以仿真、分析(SPICE)各種模擬器件和集成電路。</p><p><b> 該軟件的特點(diǎn)是:</b></p><p> ?。?)全部滿足我們提出的單片機(jī)軟件仿真系統(tǒng)的標(biāo)準(zhǔn),并在同類產(chǎn)品中具有明顯的優(yōu)勢(shì)。</p><p&
44、gt; ?。?)具有模擬電路仿真、數(shù)字電路仿真、單片機(jī)及其外圍電路組成的系統(tǒng)的仿真、RS-232動(dòng)態(tài)仿真、I2 C調(diào)試器、SPI調(diào)試器、鍵盤和LCD系統(tǒng)仿真的功能;有各種虛擬儀器,如示波器、邏輯分析儀、信號(hào)發(fā)生器等。</p><p> ?。?)目前支持的單片機(jī)類型有:ARM7系列、68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各種外圍芯片。&
45、lt;/p><p> ?。?)支持大量的存儲(chǔ)器和外圍芯片。</p><p> 總之,該軟件是一款集單片機(jī)和SPICE分析于一身的仿真軟件,功能極其強(qiáng)大 ,可仿真ARM、51、AVR、PIC。</p><p> Proteus啟動(dòng)畫面:</p><p> 圖7 Proteus啟動(dòng)畫面</p><p> 5.2Prot
46、eus運(yùn)行流程</p><p> Proteus ISIS的工作界面是一種標(biāo)準(zhǔn)的Windows界面,如圖所示。</p><p> 包括:標(biāo)題欄、主菜單、標(biāo)準(zhǔn)工具欄、繪圖工具欄、狀態(tài)欄、對(duì)象選擇按鈕、預(yù)覽對(duì)象方位控制按鈕、仿真進(jìn)程控制按鈕、預(yù)覽窗口、對(duì)象選擇器窗口、圖形編輯窗口。</p><p> 運(yùn)行Proteus程序后,進(jìn)入軟件的主界面。通過(guò)左側(cè)工具欄中的P
47、(從庫(kù)中選擇元件命令)命令,在Pick Devices 左側(cè)窗口中選擇所需元件的關(guān)鍵字,然后放置元件并調(diào)整方向和位置以及參數(shù)設(shè)置,最后進(jìn)行連線。</p><p> Proteus ISIS的工作界面:</p><p> 圖8 Proteus ISIS的工作界面</p><p> 5.3Proteus功能仿真</p><p> Prot
48、eus仿真效果</p><p> 最后載入hex文件后可以進(jìn)行模擬仿真,可以全速運(yùn)行也可以單步調(diào)試運(yùn)行。</p><p><b> 圖9運(yùn)行按鍵</b></p><p> 上電后后LED顯示:</p><p><b> 圖10</b></p><p><b>
49、; 調(diào)節(jié)秒鐘:</b></p><p><b> 圖11</b></p><p><b> 調(diào)節(jié)分鐘:</b></p><p><b> 圖12</b></p><p><b> 調(diào)節(jié)時(shí)鐘:</b></p><p&
50、gt;<b> 圖13</b></p><p><b> 調(diào)節(jié)星期:</b></p><p><b> 圖14</b></p><p><b> 調(diào)節(jié)日期:</b></p><p><b> 圖15</b></p>
51、;<p><b> 調(diào)節(jié)月份:</b></p><p><b> 圖16</b></p><p><b> 調(diào)節(jié)年份:</b></p><p><b> 圖17</b></p><p><b> 點(diǎn)擊確定鍵顯示:</
52、b></p><p><b> 圖18</b></p><p> 按鍵功能自上而下依次為:選擇修改項(xiàng)鍵、增大鍵、減小鍵、確定鍵。</p><p><b> 圖19</b></p><p> 6課程設(shè)計(jì)總結(jié)與體會(huì)</p><p> 制作這次課程設(shè)計(jì)一切都是從零開
53、始,從最簡(jiǎn)單的畫流程圖起步,這次課程設(shè)計(jì)可以圓滿完成,跟單片機(jī)課程里面的課外作業(yè)是離不開的。這次課程設(shè)計(jì)從開始到制作成功前后超過(guò)了一個(gè)星期。當(dāng)電子萬(wàn)年歷可以成功實(shí)現(xiàn)時(shí),那種激動(dòng)和喜悅只有自己可以體會(huì)。</p><p> 在整個(gè)設(shè)計(jì)過(guò)程中,充分發(fā)揮人的主觀能動(dòng)性,自主學(xué)習(xí),學(xué)到了許多沒學(xué)到的知識(shí)。較好的完成了設(shè)計(jì),達(dá)到了預(yù)期的目的,完了最初的設(shè)想。對(duì)電路的設(shè)計(jì)、布局要先有一個(gè)好的構(gòu)思,才顯得電路板美觀、大方。程序
54、編寫中,由于思路不清晰,開始時(shí)遇到了很多的問題,經(jīng)過(guò)靜下心來(lái)思考,和同學(xué)討論,理清了思路,反而得心應(yīng)手。在此次設(shè)計(jì)中,知道了做凡事要有一顆平常的心,不要想著走捷徑,一步一腳印。也練就了我的耐心,做什么事都在有耐心。此次課程設(shè)計(jì)中學(xué)到了很多很多東西,這是最重要的??傊?,此次課設(shè)使我的能力得到了全方位的提高,使得我的操作能力和專業(yè)技能都有了很大的提高。</p><p> 在做課程設(shè)計(jì)的日子里得到了xx老師的悉心指導(dǎo)
55、和同學(xué)的幫助,在此向他們致以誠(chéng)摯的謝意。感謝提供相關(guān)技術(shù)幫助的老師和同學(xué),你們的支持和鼓勵(lì)使我對(duì)這次的設(shè)計(jì)完成有了信心和動(dòng)力,我在此深表謝意。</p><p><b> 參考文獻(xiàn)</b></p><p> [1]劉勇 編 數(shù)字電路 電子工業(yè)出版社 2004</p><p> [2]陳正振 編 電子電路設(shè)計(jì)與制作 廣西交通職業(yè)技術(shù)學(xué)院信息工
56、程系 2007</p><p> [3]楊子文 編 單片機(jī)原理及應(yīng)用 西安電子科技大學(xué)出版社 2006</p><p> [4]王法能 編 單片機(jī)原理及應(yīng)用 科學(xué)出版社 2004</p><p><b> 附錄一:系統(tǒng)電路圖</b></p><p><b> 附錄二:系統(tǒng)程序</b><
57、/p><p> #include <REG51.H></p><p> #include <intrins.h></p><p> //#include "LCD1602.h"</p><p> //#include "DS1302.h"</p><p&g
58、t; #define uint unsigned int</p><p> #define uchar unsigned char</p><p> sbit DS1302_CLK = P1^7; //實(shí)時(shí)時(shí)鐘時(shí)鐘線引腳 </p><p> sbit DS1302_IO = P1^6; //實(shí)時(shí)時(shí)鐘數(shù)
59、據(jù)線引腳 </p><p> sbit DS1302_RST = P1^5; //實(shí)時(shí)時(shí)鐘復(fù)位線引腳</p><p> sbit ACC0 = ACC^0;</p><p> sbit ACC7 = ACC^7;</p><p> char hide_sec,hide_min,hide_hour,hid
60、e_day,hide_week,hide_month,hide_year; //秒,分,時(shí)到日,月,年位閃的計(jì)數(shù)</p><p> sbit Set = P2^0; //模式切換鍵</p><p> sbit Up = P2^1; //加法按鈕</p><p> sbit Down = P2^2; //減法按鈕</p&
61、gt;<p> sbit out = P2^3; //立刻跳出調(diào)整模式按鈕</p><p> char done,count,temp,flag,up_flag,down_flag;</p><p> uchar TempBuffer[5],week_value[2];</p><p> void show_time(); //
62、液晶顯示程序</p><p> /***********1602液晶顯示部分子程序****************/</p><p> //Port Definitions**********************************************************</p><p> sbit LcdRs= P2^5;</p&g
63、t;<p> sbit LcdRw= P2^6;</p><p> sbit LcdEn = P2^7;</p><p> sfr DBPort = 0x80;//P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.數(shù)據(jù)端口</p><p><b> //內(nèi)部等待函數(shù)</b></p>
64、;<p> **************************************************************************</p><p> unsigned char LCD_Wait(void)</p><p> {LcdRs=0;LcdRw=1;_nop_();LcdEn=1;_nop_();LcdEn=0;return
65、 DBPort;}</p><p> //向LCD寫入命令或數(shù)據(jù)</p><p> ************************************************************</p><p> #define LCD_COMMAND0 // Command</p><p> #defin
66、e LCD_DATA1 // Data</p><p> #define LCD_CLEAR_SCREEN0x01 // 清屏</p><p> #define LCD_HOMING 0x02 // 光標(biāo)返回原點(diǎn)</p><p> void LCD_Write(bit style, unsigned char inp
67、ut)</p><p> {LcdEn=0;LcdRs=style;LcdRw=0;_nop_();DBPort=input;_nop_();//注意順序</p><p> LcdEn=1;_nop_();//注意順序</p><p> LcdEn=0;_nop_();LCD_Wait();</p><p><b&
68、gt; }</b></p><p> //設(shè)置顯示模式************************************************************</p><p> #define LCD_SHOW0x04 //顯示開</p><p> #define LCD_HIDE0x00 //顯示關(guān)
69、</p><p> #define LCD_CURSOR0x02 //顯示光標(biāo)</p><p> #define LCD_NO_CURSOR0x00 //無(wú)光標(biāo) </p><p> #define LCD_FLASH0x01 //光標(biāo)閃動(dòng)</p><p> #define LCD_NO_FLA
70、SH0x00 //光標(biāo)不閃動(dòng)</p><p> void LCD_SetDisplay(unsigned char DisplayMode)</p><p> {LCD_Write(LCD_COMMAND, 0x08|DisplayMode);}</p><p> //設(shè)置輸入模式**********************************
71、**************************</p><p> #define LCD_AC_UP0x02</p><p> #define LCD_AC_DOWN0x00 // default</p><p> #define LCD_MOVE0x01 // 畫面可平移</p><p>
72、 #define LCD_NO_MOVE0x00 //default</p><p> void LCD_SetInput(unsigned char InputMode)</p><p> {LCD_Write(LCD_COMMAND, 0x04|InputMode);}</p><p> //初始化LCD******************
73、******************************************</p><p> void LCD_Initial()</p><p><b> {LcdEn=0;</b></p><p> LCD_Write(LCD_COMMAND,0x38); //8位數(shù)據(jù)端口,2行顯示,5*7點(diǎn)陣</
74、p><p> LCD_Write(LCD_COMMAND,0x38);</p><p> LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //開啟顯示, 無(wú)光標(biāo)</p><p> LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏</p><p> LCD_
75、SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC遞增, 畫面不動(dòng)}</p><p> //液晶字符輸入的位置************************</p><p> void GotoXY(unsigned char x, unsigned char y)</p><p> {if(y==0)LCD_Write(
76、LCD_COMMAND,0x80|x);</p><p> if(y==1)LCD_Write(LCD_COMMAND,0x80|(x-0x40));}</p><p> //將字符輸出到液晶顯示</p><p> void Print(unsigned char *str)</p><p> {while(*str!='\0
77、')</p><p> {LCD_Write(LCD_DATA,*str);str++;}}</p><p> /***********DS1302時(shí)鐘部分子程序******************/</p><p> typedef struct __SYSTEMTIME__</p><p><b> {</
78、b></p><p> unsigned char Second;</p><p> unsigned char Minute;</p><p> unsigned char Hour;</p><p> unsigned char Week;</p><p> unsigned char Day;&l
79、t;/p><p> unsigned char Month;</p><p> unsigned char Year;</p><p> unsigned char DateString[11];</p><p> unsigned char TimeString[9];</p><p> }SYSTEMTIM
80、E;//定義的時(shí)間類型</p><p> SYSTEMTIME CurrentTime;</p><p> #define AM(X)X</p><p> #define PM(X)(X+12) // 轉(zhuǎn)成24小時(shí)制</p><p> #define DS1302_SECOND0x80
81、 //時(shí)鐘芯片的寄存器位置,存放時(shí)間</p><p> #define DS1302_MINUTE0x82</p><p> #define DS1302_HOUR0x84 </p><p> #define DS1302_WEEK0x8A</p><p> #define DS1302_DAY0x86</p&
82、gt;<p> #define DS1302_MONTH0x88</p><p> #define DS1302_YEAR0x8C </p><p> void DS1302InputByte(unsigned char d) //實(shí)時(shí)時(shí)鐘寫入一字節(jié)(內(nèi)部函數(shù))</p><p> { unsigned char i;ACC = d; f
83、or(i=8; i>0; i--)</p><p> {DS1302_IO = ACC0; //相當(dāng)于匯編中的 RRC</p><p> DS1302_CLK = 1; DS1302_CLK = 0; ACC = ACC >> 1; } }</p><p> unsigned char DS1302OutputByte(
84、void) //實(shí)時(shí)時(shí)鐘讀取一字節(jié)(內(nèi)部函數(shù))</p><p> { unsigned char i; for(i=8; i>0; i--)</p><p> { ACC = ACC >>1; //相當(dāng)于匯編中的 RRC </p><p> ACC7 = DS1302_IO; DS1302_CLK = 1;DS130
85、2_CLK = 0; } </p><p> return(ACC); }</p><p> void Write1302(unsigned char ucAddr, unsigned char ucDa)//ucAddr: DS1302地址, ucData: 要寫的數(shù)據(jù)</p><p> { DS1302_RST = 0;</p><p
86、> DS1302_CLK = 0;</p><p> DS1302_RST = 1;</p><p> DS1302InputByte(ucAddr); // 地址,命令 </p><p> DS1302InputByte(ucDa); // 寫1Byte數(shù)據(jù)</p><p> DS1302_CLK
87、 = 1;</p><p> DS1302_RST = 0;</p><p> } unsigned char Read1302(unsigned char ucAddr)//讀取DS1302某地址的數(shù)據(jù)</p><p> { unsigned char ucData;</p><p> DS1302_RST = 0;</p&
88、gt;<p> DS1302_CLK = 0;</p><p> DS1302_RST = 1;</p><p> DS1302InputByte(ucAddr|0x01); // 地址,命令 </p><p> ucData = DS1302OutputByte(); // 讀1Byte數(shù)據(jù)</p>
89、<p> DS1302_CLK = 1;</p><p> DS1302_RST = 0;</p><p> return(ucData);}</p><p> void DS1302_GetTime(SYSTEMTIME *Time) //獲取時(shí)鐘芯片的時(shí)鐘數(shù)據(jù)到自定義的結(jié)構(gòu)型數(shù)組</p><p> {unsigne
90、d char ReadValue;</p><p> ReadValue = Read1302(DS1302_SECOND);</p><p> Time->Second = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);</p><p> ReadValue = Read1302(D
91、S1302_MINUTE);</p><p> Time->Minute = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);</p><p> ReadValue = Read1302(DS1302_HOUR);</p><p> Time->Hour = ((ReadValue
92、&0x70)>>4)*10 + (ReadValue&0x0F);</p><p> ReadValue = Read1302(DS1302_DAY);</p><p> Time->Day = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);</p><p>
93、; ReadValue = Read1302(DS1302_WEEK);</p><p> Time->Week = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);</p><p> ReadValue = Read1302(DS1302_MONTH);</p><p> Time-
94、>Month = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);</p><p> ReadValue = Read1302(DS1302_YEAR);</p><p> Time->Year = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x
95、0F);}</p><p> void DateToStr(SYSTEMTIME *Time) //將時(shí)間年,月,日,星期數(shù)據(jù)轉(zhuǎn)換成液晶顯示字符串,放到數(shù)組里DateString[]</p><p> { if(hide_year<2) //這里的if,else語(yǔ)句都是判斷位閃爍,<2顯示數(shù)據(jù),>2就不顯示,輸出字符串為 2
96、007/07/22</p><p> { Time->DateString[0] = '2';</p><p> Time->DateString[1] = '0'; </p><p> Time->DateString[2] = Time->Year/10 + '0';</p
97、><p> Time->DateString[3] = Time->Year%10 + '0';}</p><p> else{ Time->DateString[0] = ' '; Time->DateString[1] = ' '; </p><p> Time->DateSt
98、ring[2] = ' '; Time->DateString[3] = ' ';}</p><p> Time->DateString[4] = '/';</p><p> if(hide_month<2)</p><p> {Time->DateString[5] = Time->
99、;Month/10 + '0';</p><p> Time->DateString[6] = Time->Month%10 + '0';}</p><p> else{ Time->DateString[5] = ' '; Time->DateString[6] = ' ';}</p>
100、<p> Time->DateString[7] = '/';</p><p> if(hide_day<2)</p><p> {Time->DateString[8] = Time->Day/10 + '0';</p><p> Time->DateString[9] = Tim
101、e->Day%10 + '0';}</p><p> else{Time->DateString[8] = ' ';Time->DateString[9] = ' '; }</p><p> if(hide_week<2){</p><p> week_value[0] = Tim
102、e->Week%10 + '0'; //星期的數(shù)據(jù)另外放到 week_value[]數(shù)組里,跟年,月,日的分開存放,因?yàn)榈纫幌乱谧詈箫@示}</p><p> else { week_value[0] = ' ';}</p><p> week_value[1] = '\0';</p><p> Time
103、->DateString[10] = '\0'; //字符串末尾加 '\0' ,判斷結(jié)束字符}</p><p> void TimeToStr(SYSTEMTIME *Time) //將時(shí),分,秒數(shù)據(jù)轉(zhuǎn)換成液晶顯示字符放到數(shù)組 TimeString[];</p><p> { if(hide_hour<2)</p><
104、;p> { Time->TimeString[0] = Time->Hour/10 + '0';</p><p> Time->TimeString[1] = Time->Hour%10 + '0';}</p><p> else{ Time->TimeString[0] = ' ';Time->
105、;TimeString[1] = ' ';}</p><p> Time->TimeString[2] = ':';</p><p> if(hide_min<2){ Time->TimeString[3] = Time->Minute/10 + '0';</p><p> Time-&g
106、t;TimeString[4] = Time->Minute%10 + '0';}</p><p> else {Time->TimeString[3] = ' ';Time->TimeString[4] = ' '; }</p><p> Time->TimeString[5] = ':';<
107、;/p><p> if(hide_sec<2)</p><p> {Time->TimeString[6] = Time->Second/10 + '0';</p><p> Time->TimeString[7] = Time->Second%10 + '0';}</p><p&g
108、t; else{Time->TimeString[6] = ' ';Time->TimeString[7] = ' '; }</p><p> Time->DateString[8] = '\0';}</p><p> void Initial_DS1302(void) //時(shí)鐘芯片初始化</p>&
109、lt;p> { unsigned char Second=Read1302(DS1302_SECOND);</p><p> if(Second&0x80) //判斷時(shí)鐘芯片是否關(guān)閉 </p><p> {Write1302(0x8e,0x00); //寫入允許</p><p> Write1302(0x8c,0x07);
110、//以下寫入初始化時(shí)間 日期:07/07/25.星期: 3. 時(shí)間: 23:59:55</p><p> Write1302(0x88,0x07);Write1302(0x86,0x25);</p><p> Write1302(0x8a,0x07);Write1302(0x84,0x23);Write1302(0x82,0x59);</p><p> Wri
111、te1302(0x80,0x55);Write1302(0x8e,0x80); //禁止寫入}}</p><p> void Delay1ms(unsigned int count)</p><p> {unsigned int i,j;for(i=0;i<count;i++)for(j=0;j<120;j++);}</p><p><b>
112、; /*延時(shí)子程序*/</b></p><p> void mdelay(uint delay)</p><p> {uint i;for(;delay>0;delay--){for(i=0;i<62;i++) //1ms延時(shí).</p><p><b> {;}}}</b></p><p&g
113、t; void outkey() //跳出調(diào)整模式,返回默認(rèn)顯示</p><p> { uchar Second;if(out==0) { mdelay(8); count=0;</p><p> hide_sec=0,hide_min=0,hide_hour=0,hide_day=0,hide_week=0,hide_month
114、=0,hide_year=0;</p><p> Second=Read1302(DS1302_SECOND);</p><p> Write1302(0x8e,0x00); //寫入允許</p><p> Write1302(0x80,Second&0x7f);</p><p> Write1302(0x8E,0x80);
115、 //禁止寫入</p><p> done=0; while(out==0); }}</p><p> ///////////////////////////////////////////////////////////////////////////////</p><p> void Upkey()//升序按鍵<
116、/p><p> { Up=1;if(Up==0)</p><p><b> {</b></p><p> mdelay(8);</p><p> switch(count)</p><p><b> {case 1:</b></p><p>
117、; temp=Read1302(DS1302_SECOND); //讀取秒數(shù)</p><p> temp=temp+1; //秒數(shù)加1</p><p> up_flag=1; //數(shù)據(jù)調(diào)整后更新標(biāo)志</p><p> if((temp&0x7f)>0x59) //超過(guò)59秒,清零</p><p> tem
118、p=0; break;</p><p><b> case 2:</b></p><p> temp=Read1302(DS1302_MINUTE); //讀取分?jǐn)?shù)</p><p> temp=temp+1; //分?jǐn)?shù)加1</p><p> up_flag=1;</p>&l
119、t;p> if(temp>0x59) //超過(guò)59分,清零</p><p> temp=0;break;</p><p><b> case 3:</b></p><p> temp=Read1302(DS1302_HOUR); //讀取小時(shí)數(shù)</p><p> temp=tem
120、p+1; //小時(shí)數(shù)加1</p><p> up_flag=1;</p><p> if(temp>0x23) //超過(guò)23小時(shí),清零</p><p> temp=0; break;</p><p><b> case 4:</b></p><p> temp=Read130
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【畢業(yè)設(shè)計(jì)】基于51單片機(jī)的電子萬(wàn)年歷設(shè)計(jì)
- 基于51單片機(jī)的電子萬(wàn)年歷畢業(yè)設(shè)計(jì)論文
- 基于51單片機(jī)的萬(wàn)年歷畢業(yè)設(shè)計(jì)
- 基于51單片機(jī)的電子萬(wàn)年歷設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---基于51單片機(jī)的電子萬(wàn)年歷的設(shè)計(jì)
- 51單片機(jī)萬(wàn)年歷畢業(yè)設(shè)計(jì)論文
- 畢業(yè)設(shè)計(jì)---基于51單片機(jī)的萬(wàn)年歷設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---基于51單片機(jī)的萬(wàn)年歷設(shè)計(jì)
- 基于51單片機(jī)的液晶萬(wàn)年歷畢業(yè)設(shè)計(jì)
- 基于51單片機(jī)的電子萬(wàn)年歷的設(shè)計(jì)
- 基于單片機(jī)的電子萬(wàn)年歷畢業(yè)設(shè)計(jì)
- 基于51單片機(jī)電子萬(wàn)年歷
- 基于單片機(jī)的電子萬(wàn)年歷設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 基于51單片機(jī)的電子萬(wàn)年歷畢業(yè)論文設(shè)計(jì)
- 基于51單片機(jī)的電子萬(wàn)年歷設(shè)計(jì)畢業(yè)論文
- 基于單片機(jī)的萬(wàn)年歷畢業(yè)設(shè)計(jì)
- 基于51單片機(jī)的電子萬(wàn)年歷的設(shè)計(jì)資料
- 畢業(yè)設(shè)計(jì)----基于單片機(jī)的電子萬(wàn)年歷的設(shè)計(jì)
- 基于單片機(jī)的電子萬(wàn)年歷的設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 基于單片機(jī)的電子萬(wàn)年歷
評(píng)論
0/150
提交評(píng)論