版權(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></p><p><b> 設(shè)計(jì)題目:</b></p><p> 基于單片機(jī)的秒表設(shè)計(jì)</p><p><b> 學(xué) 號(hào): </b></p><p><b> 姓 名: </b></
2、p><p> 班 級(jí) : 電氣 </p><p> 提交日期 : </p><p><b> 信息與電氣工程學(xué)院</b></p><p><b> 目錄</b></p><p>&
3、lt;b> 1 概述5</b></p><p> 1.1 基本要求:5</p><p> 2 系統(tǒng)總體方案及硬件設(shè)計(jì)6</p><p> 2.1系統(tǒng)總體方案6</p><p> 2.2硬件電路設(shè)計(jì)7</p><p> ?。?)單片機(jī)簡(jiǎn)介7</p><p>
4、;<b> ?。?)電源電路8</b></p><p> ?。?)晶體振蕩電路8</p><p><b> (4)復(fù)位電路8</b></p><p><b> ?。?)顯示電路9</b></p><p> (6)鍵盤(pán)電路10</p><p>
5、;<b> 3 軟件設(shè)計(jì)11</b></p><p> 3.1軟件設(shè)計(jì)概述11</p><p> 3.2程序流程圖12</p><p> Proteus軟件仿真14</p><p> 4.1軟件功能簡(jiǎn)介15</p><p> 4.2 Proteus運(yùn)行流程16</p&
6、gt;<p> 5課程設(shè)計(jì)體會(huì)18</p><p><b> 課程小結(jié)19</b></p><p> 附1 源程序代碼21</p><p><b> 摘要</b></p><p> 本設(shè)計(jì)是一個(gè)利用單片機(jī)控制的多功能秒表系統(tǒng),它是基于51系列的單片機(jī)進(jìn)行的系統(tǒng)設(shè)計(jì)。它
7、采用STC12C52A60S2單片機(jī)為中心器件,利用其定時(shí)器/計(jì)數(shù)器定時(shí)和記數(shù)的原理,結(jié)合顯示電路、電源電路、LED數(shù)碼管以及鍵盤(pán)電路來(lái)設(shè)計(jì)計(jì)時(shí)器。將軟、硬件有機(jī)地結(jié)合起來(lái),使得系統(tǒng)能夠?qū)崿F(xiàn)四位LED顯示,最大顯示時(shí)間為9分59.9秒,每毫秒自動(dòng)加1,一個(gè)開(kāi)始暫停按鍵、一個(gè)復(fù)位按鍵。其突出的優(yōu)點(diǎn):體積小、場(chǎng)外作業(yè)、功耗最低、宜用電池作為電源、硬件結(jié)構(gòu)緊湊、簡(jiǎn)單和軟件設(shè)計(jì)靈活.</p><p> 當(dāng)今時(shí)代,是一個(gè)
8、新技術(shù)層出不窮的時(shí)代。在電子領(lǐng)域,尤其是自動(dòng)化智能控制領(lǐng)域,傳統(tǒng)的分立元件或數(shù)字邏輯電路構(gòu)成的控制系統(tǒng)正以前所未見(jiàn)的速度被單片機(jī)智能控制系統(tǒng)所取代。單片機(jī)具有體積小、功能強(qiáng)、成本低、應(yīng)用面廣等優(yōu)點(diǎn),可以說(shuō),智能控制與自動(dòng)控制的核心就是單片機(jī)。單片機(jī)的出現(xiàn)是現(xiàn)代科技發(fā)展的一個(gè)重要的里程碑。由于單片機(jī)的集成度高、功能強(qiáng),通用性好,特別是它具有體積下、重量輕、能耗低、價(jià)格便宜等優(yōu)點(diǎn),使單片機(jī)迅速得到推廣應(yīng)用,目前已成為測(cè)量控制應(yīng)用系統(tǒng)中的優(yōu)選
9、機(jī)種和新電子產(chǎn)品的關(guān)鍵部件。</p><p> 關(guān)鍵字:?jiǎn)纹瑱C(jī),多功能秒表 </p><p><b> 一、概述</b></p><p> 1.1 基本要求:</p><p> 設(shè)計(jì)一個(gè)秒表,用4位的LED數(shù)碼管顯示時(shí)間,從00:00秒到59:59秒,然后利用2個(gè)按鍵來(lái)控制:按鍵1開(kāi)始/暫停,按鍵2 歸零。
10、</p><p><b> 發(fā)揮部分:</b></p><p> 1、利用8位LED數(shù)碼管,顯示年月日時(shí)分秒,要求單片機(jī)掉電重啟時(shí),不影響時(shí)間計(jì)時(shí)??蛇x用RTC芯片配合鈕扣電池,簡(jiǎn)化設(shè)計(jì)。</p><p> 2、將時(shí)間轉(zhuǎn)換為ASCII碼,以9600 bps輸出,與/由PC機(jī)進(jìn)行同步。</p><p> 二、系統(tǒng)總
11、體方案及硬件設(shè)計(jì)</p><p><b> 2.1系統(tǒng)總體方案</b></p><p> 本系統(tǒng)采用STC12C52A60S2單片機(jī)為中心器件,利用其定時(shí)器/計(jì)數(shù)器定時(shí)和記數(shù)的原理,結(jié)合硬件電路如電源電路,晶振電路,復(fù)位電路,顯示電路,以及一些按鍵電路等來(lái)設(shè)計(jì)計(jì)時(shí)器,將軟、硬件有機(jī)地結(jié)合起來(lái)。其中軟件系統(tǒng)采用匯編語(yǔ)言編寫(xiě)程序,包括顯示程序,計(jì)數(shù)程序,中斷,硬件系統(tǒng)
12、利用PROTEUS強(qiáng)大的功能來(lái)實(shí)現(xiàn),簡(jiǎn)單切易于觀察,在仿真中就可以觀察到實(shí)際的工作狀態(tài)。</p><p><b> 系統(tǒng)電路原理圖</b></p><p><b> 2.2硬件電路設(shè)計(jì)</b></p><p> 本系統(tǒng)中,硬件電路主要有電源電路,晶振電路,復(fù)位電路,顯示電路,以及一些按鍵電路等,本設(shè)計(jì)數(shù)碼管采用共陽(yáng)極
13、四位數(shù)碼管,總體電路圖下</p><p><b> ?。?)單片機(jī)簡(jiǎn)介</b></p><p> 本系統(tǒng)設(shè)計(jì)采用STC12C52A60S2單片機(jī)。</p><p> STC12C52A60S2是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器的低電壓,高性能CMOS8位微處理器。該器件采用ATMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS
14、-51指令集和輸出管腳相兼容(由于在微機(jī)原理中學(xué)過(guò)C-51的具體知識(shí),這里不再詳細(xì)說(shuō)明)。由于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,ATMEL的STC12C52A60S2是一種高效的微控制器。</p><p><b> ?。?)電源電路</b></p><p> 電源電路是系統(tǒng)最基本的部分,任何電路都離不開(kāi)電源部分,由于三端集成穩(wěn)壓器件所組成的穩(wěn)壓電源線路
15、簡(jiǎn)單,性能穩(wěn)定,工作可靠,調(diào)整方便,已逐漸取代分立元件,在生產(chǎn)中被廣泛采用,由于是小系統(tǒng),我們采用7809電源提供+5V穩(wěn)壓電壓。</p><p><b> ?。?)晶體振蕩電路</b></p><p> MCS--51單片機(jī)內(nèi)部的振蕩電路是一個(gè)高增益反相放大器,引線 XTAL1和XTAL2分別為反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入和來(lái)自反向振蕩器的輸出,該
16、反向放大器可以配置為片內(nèi)振蕩器。</p><p> 這里,我們選用51單片機(jī)12MHZ的內(nèi)部振蕩方式,電容器C1,C2起穩(wěn)定振蕩頻率,快速起振的作用,C1和C2可在20-100PF之間取,這里取30P,接線時(shí)要使晶體振蕩器X1盡可能接近單片機(jī)。</p><p><b> ?。?)復(fù)位電路</b></p><p> 采用上電+按鍵復(fù)位電路,上
17、電后,由于電容充電,使RST持續(xù)一段高電平時(shí)間。當(dāng)單片機(jī)已在運(yùn)行之中時(shí),按下復(fù)位鍵也能使用使RST持續(xù)一段時(shí)間的高電平,從而實(shí)現(xiàn)上電加開(kāi)關(guān)復(fù)位的操作。這不僅能使單片機(jī)復(fù)位,而且還能使</p><p> 單片機(jī)的外圍芯片也同時(shí)復(fù)位。當(dāng)程序出現(xiàn)錯(cuò)誤時(shí),可以隨時(shí)使電路復(fù)位。</p><p> ?。?)顯示電路 </p><p> 顯示電路既可以選用液晶顯示
18、器,也可以選用數(shù)碼管顯示。我們采用的是數(shù)碼管顯示電路。用4個(gè)共陽(yáng)極LED顯示,LED是七段式顯示器,內(nèi)部有7個(gè)條形發(fā)光二極管和1個(gè)小圓點(diǎn)發(fā)光二極管組成,根據(jù)各管的亮暗組合成字符。</p><p> 在用數(shù)碼管顯示時(shí),我們有靜態(tài)和動(dòng)態(tài)兩種選擇,靜態(tài)顯示程序簡(jiǎn)單,顯示穩(wěn)定,但是占用端口比較多;動(dòng)態(tài)顯示所使用的端口比較少,可以節(jié)省單片機(jī)的I/O口。</p><p> 在設(shè)計(jì)中,我們采用LED
19、動(dòng)態(tài)顯示,用P0口驅(qū)動(dòng)顯示。由于數(shù)碼管使用的是共陽(yáng)極,我們使用增強(qiáng)型51單片機(jī)具有的強(qiáng)推萬(wàn)挽模式,能夠滿足較大輸出電流驅(qū)動(dòng)數(shù)碼管的要求。</p><p><b> 電路圖如下所示:</b></p><p><b> ?。?)鍵盤(pán)電路</b></p><p> 在按鍵電路中,我們可以在I/O口上直接接按鍵,或者通過(guò)I/O
20、口設(shè)計(jì)一個(gè)鍵盤(pán),然后通過(guò)鍵盤(pán)掃描程序判斷是否有鍵按下等。鍵盤(pán)掃描電路節(jié)省I/O口,但編程有些復(fù)雜,在這里,由于我們所用的按鍵較少,且系統(tǒng)是一個(gè)小系統(tǒng),有足夠的I/O口可以使用,為了使程序簡(jiǎn)化,我們采用按鍵電路,用部分P1口做開(kāi)關(guān),P1.0啟動(dòng),P1.1清零,電路圖如下所示</p><p><b> 三、 軟件設(shè)計(jì)</b></p><p><b> 3.1
21、軟件設(shè)計(jì)概述</b></p><p> 在軟件設(shè)計(jì)中,一般采用模塊化的程序設(shè)計(jì)方法,它具有明顯的優(yōu)點(diǎn)。把一個(gè)多功能的復(fù)雜的程序劃分為若干個(gè)簡(jiǎn)單的、功能單一的程序模塊,有利于程序的設(shè)計(jì)和調(diào)試,有利于程序的優(yōu)化和分工,提高了程序的閱讀性和可靠性,使程序的結(jié)構(gòu)層次一目了然。</p><p> 應(yīng)用系統(tǒng)的程序由包含多個(gè)模塊的主程序和各種子程序組成。各程序模塊都要完成一個(gè)明確的任務(wù),
22、實(shí)現(xiàn)某個(gè)具體的功能,如:加計(jì)數(shù)、暫停、清零,顯示等,在具體需要時(shí)調(diào)用相應(yīng)的模塊即可。</p><p> 功能描述:用4位LED數(shù)碼顯示"秒表",顯示時(shí)間為00~9分59.9秒,每秒自動(dòng)加1;一個(gè)"開(kāi)始"鍵,一個(gè)"復(fù)位"鍵,一個(gè)"清零"鍵。</p><p><b> 3.2程序流程圖</b&g
23、t;</p><p><b> 定時(shí)中斷</b></p><p> 四、 Proteus軟件仿真</p><p><b> 4.1軟件功能簡(jiǎn)介</b></p><p> Proteus ISIS是英國(guó)Labcenter公司開(kāi)發(fā)的電路分析與實(shí)物仿真軟件。它運(yùn)行于Windows操作系統(tǒng)上,可以仿
24、真、分析(SPICE)各種模擬器件和集成電路。</p><p><b> 該軟件的特點(diǎn)是:</b></p><p> ?。?)全部滿足我們提出的單片機(jī)軟件仿真系統(tǒng)的標(biāo)準(zhǔn),并在同類產(chǎn)品中具有明顯的優(yōu)勢(shì)。</p><p> (2)具有模擬電路仿真、數(shù)字電路仿真、單片機(jī)及其外圍電路組成的系統(tǒng)的仿真、RS-232動(dòng)態(tài)仿真、I2 C調(diào)試器、SPI調(diào)試
25、器、鍵盤(pán)和LCD系統(tǒng)仿真的功能;有各種虛擬儀器,如示波器、邏輯分析儀、信號(hào)發(fā)生器等。</p><p> (3)目前支持的單片機(jī)類型有:ARM7系列、68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各種外圍芯片。</p><p> ?。?)支持大量的存儲(chǔ)器和外圍芯片。</p><p> 總之,該
26、軟件是一款集單片機(jī)和SPICE分析于一身的仿真軟件,功能極其強(qiáng)大 ,可仿真ARM、51、AVR、PIC。</p><p> Proteus啟動(dòng)畫(huà)面:</p><p> 4.2 Proteus運(yùn)行流程</p><p> Proteus ISIS的工作界面是一種標(biāo)準(zhǔn)的Windows界面,如圖所示。</p><p> 包括:標(biāo)題欄、主菜單、
27、標(biāo)準(zhǔn)工具欄、繪圖工具欄、狀態(tài)欄、對(duì)象選擇按鈕、預(yù)覽對(duì)象方位控制按鈕、仿真進(jìn)程控制按鈕、預(yù)覽窗口、對(duì)象選擇器窗口、圖形編輯窗口。</p><p> 運(yùn)行Proteus程序后,進(jìn)入軟件的主界面。通過(guò)左側(cè)工具欄中的P(從庫(kù)中選擇元件命令)命令,在Pick Devices 左側(cè)窗口中選擇所需元件的關(guān)鍵字,然后放置元件并調(diào)整方向和位置以及參數(shù)設(shè)置,最后進(jìn)行連線。</p><p><b>
28、 運(yùn)行圖如下:</b></p><p><b> 初始狀態(tài)</b></p><p><b> 中間狀態(tài)</b></p><p><b> 最終狀態(tài)</b></p><p> 經(jīng)過(guò)protues仿真,實(shí)現(xiàn)了題目的要求,并且增加了擴(kuò)展部分單片機(jī)與電腦通信授時(shí)的
29、任務(wù)。并且經(jīng)過(guò)測(cè)試硬件運(yùn)行穩(wěn)定,秒表計(jì)時(shí)時(shí)間精確。完成了設(shè)計(jì)題目的全部?jī)?nèi)容。</p><p><b> 五、課程設(shè)計(jì)體會(huì)</b></p><p> 課程設(shè)計(jì)是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識(shí),發(fā)現(xiàn),提出,分析和解決實(shí)際問(wèn)題,鍛煉實(shí)踐能力的重要環(huán)節(jié),是對(duì)學(xué)生實(shí)際工作能力的具體訓(xùn)練和考察過(guò)程.隨著科學(xué)技術(shù)發(fā)展的日新日異,單片機(jī)已經(jīng)成為當(dāng)今計(jì)算機(jī)應(yīng)用中空前活躍的領(lǐng)域,在生活中可
30、以說(shuō)得是無(wú)處不在。因此作為二十一世紀(jì)的大學(xué)來(lái)說(shuō)掌握單片機(jī)的開(kāi)發(fā)技術(shù)是十分重要的。</p><p> 回顧起此次單片機(jī)課程設(shè)計(jì),仍感慨頗多,的確,從選題到定稿,從理論到實(shí)踐,在接近四星期的日子里,可以說(shuō)得是苦多于甜,但是可以學(xué)到很多很多的的東西,同時(shí)不僅可以鞏固了以前所學(xué)過(guò)的知識(shí),而且學(xué)到了很多在書(shū)本上所沒(méi)有學(xué)到過(guò)的知識(shí)。通過(guò)這次課程設(shè)計(jì)使我們懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)
31、的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在設(shè)計(jì)的過(guò)程中遇到問(wèn)題,可以說(shuō)得是困難重重,這畢竟第一次做的,難免會(huì)遇到過(guò)各種各樣的問(wèn)題,同時(shí)在設(shè)計(jì)的過(guò)程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過(guò)的知識(shí)理解得不夠深刻,掌握得不夠牢固,比如說(shuō)不懂一些元器件的使用方法,對(duì)單片機(jī)匯編語(yǔ)言掌握得不好……通過(guò)這次課程設(shè)計(jì)之后,一定把以前所學(xué)過(guò)的知識(shí)重新溫故。</p><p
32、> 在做課程設(shè)計(jì)的日子里得到了老師的悉心指導(dǎo)和同學(xué)的幫助,在此向他們致以誠(chéng)摯的謝意。感謝提供相關(guān)技術(shù)幫助的老師和同學(xué),你們的支持和鼓勵(lì)使我們對(duì)這次的設(shè)計(jì)完成有了信心和動(dòng)力,在此深表謝意。</p><p><b> 課程小結(jié)</b></p><p> 通過(guò)這兩周程設(shè)計(jì),我對(duì)一些專業(yè)知識(shí)和電子設(shè)計(jì)有了更深的</p><p> 了解,同
33、時(shí)也嘗試著去應(yīng)用自己的所掌握的知識(shí)。本次電子課程設(shè)計(jì)主要是對(duì)已學(xué)習(xí)的模擬電子技術(shù)、數(shù)字電子技術(shù)和單片機(jī)的綜合應(yīng)用,同時(shí)加上電路等知識(shí),設(shè)計(jì)完成了利用軟件模擬的秒表。經(jīng)過(guò)幾天的奮戰(zhàn),我感受很深. </p><p> 我們一小組四個(gè)人一塊兒討論設(shè)計(jì)了此次試驗(yàn),在設(shè)計(jì)過(guò)程中深感自己在培養(yǎng)動(dòng)手能力這方面還需很大的努力。同時(shí),通過(guò)這次我們積極的通過(guò)網(wǎng)絡(luò),書(shū)籍等資源,在同學(xué)的幫助下,把這個(gè)課程設(shè)計(jì)作為一次鍛煉,為
34、以后生活學(xué)習(xí)中培養(yǎng)善于動(dòng)手,樂(lè)于動(dòng)手的習(xí)慣。 單片機(jī)課程設(shè)計(jì)不僅給我們提供了一個(gè)良好的應(yīng)用自己所掌握的知識(shí)的平臺(tái),又是檢驗(yàn)自己所學(xué)知識(shí)的一次考核。 我們運(yùn)用各自在各方面的優(yōu)勢(shì)中和起來(lái),形成了一個(gè)團(tuán)隊(duì).通過(guò)團(tuán)隊(duì)力量,才使設(shè)計(jì)得以完成.可以說(shuō),我們?nèi)齻€(gè)人是一個(gè)不可或缺的整體,少了任何一個(gè)人都是無(wú)法完成任務(wù)的。在設(shè)計(jì)的過(guò)程中我們也不可避免的遇到了很多的問(wèn)題。尤其是在調(diào)試過(guò)程中,會(huì)因?yàn)槟承┰虺霾粊?lái)結(jié)果,或三個(gè)人之間出現(xiàn)了意
35、見(jiàn)分歧,但在最后都達(dá)成一致。通過(guò)這次的課程設(shè)計(jì),我們也發(fā)現(xiàn)了不少自己不會(huì)的知識(shí),通過(guò)查詢各方面資料,我們也進(jìn)步了很多,有學(xué)會(huì)了很多上課時(shí)沒(méi)掌握的東西, 最后在調(diào)試結(jié)果出來(lái)后,我們更是無(wú)比的興奮,無(wú)比的自豪??傊?通過(guò)這次電子課程設(shè)計(jì),我不僅對(duì)自己的知識(shí)有了更好的掌握和應(yīng)用,更了解到團(tuán)隊(duì)精神的力量.在以后的學(xué)習(xí)和生活中受用終身。</p><p><b> 參考文獻(xiàn)</b></
36、p><p> [1] 余發(fā)山主編.單片機(jī)原理及應(yīng)用技術(shù).徐州:中國(guó)礦業(yè)大學(xué)出版社.2003.76-94,152-157</p><p> [2] 楊凌霄編著.微型計(jì)算機(jī)原理及應(yīng)用.徐州:中國(guó)礦業(yè)大學(xué)出版社,2004.36-52</p><p><b> 附1 源程序代碼</b></p><p> #includ
37、e<STC12C5A.h></p><p> #include<intrins.h></p><p> #define duan P0//段選</p><p> #define wei1 P1//計(jì)時(shí)器位選,只接前四口</p><p> #define wei2 P2//年月日位選</p><
38、;p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> sbit start=P3^2;//開(kāi)始按鈕</p><p> sbit reset=P3^3;//暫停復(fù)位按鈕</p><p> sbit DSIO=P3^4;//ds130
39、2 DSIO接口</p><p> sbit RET=P3^5;//ds1302 RET接口</p><p> sbit SCLK=P3^6;//ds1302 SCLK接口</p><p> sbit date=P3^7;//日期時(shí)間轉(zhuǎn)換按鈕</p><p> void DigDisplay();</p><p&g
40、t; void delays(unsigned ms);</p><p> void Ds1302Write(uchar addr, uchar dat);</p><p> uchar Ds1302Read(uchar addr);</p><p> void Ds1302Init();</p><p> void Ds1302R
41、eadTime();</p><p> void UsartConfiguration();</p><p> unsigned char code duanxuan[21] = {</p><p> 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,</p><p> 0x80,0x90,0x40,0x
42、79,0x24,0x30,0x19,0x12,</p><p> 0x02,0x78,0x00,0x10,0xbf};//段選{0,1,3,4,5,6,7,8,9,0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,-}</p><p> //---DS1302寫(xiě)入和讀取時(shí)分秒的地址命令---//</p><p> unsigned char code
43、 weixuan[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};</p><p> //---秒分時(shí)日月周年 最低位讀寫(xiě)位;-------//</p><p> uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d}; </p><p
44、> uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};</p><p> //---DS1302時(shí)鐘初始化2013年1月1日星期二12點(diǎn)00分00秒。---//</p><p> //---存儲(chǔ)順序是秒分時(shí)日月周年,存儲(chǔ)格式是用BCD碼---//</p><p&
45、gt; uchar TIME[7] = {0, 0x30, 0x16, 0x21, 0x12, 0x01, 0x15};</p><p> unsigned char second[4]={0};</p><p> unsigned char clock[8]={0};</p><p> unsigned char i=0;</p><p
46、> void main()</p><p><b> {</b></p><p> unsigned char c;</p><p> char flag=1;</p><p> bit temp=1;</p><p> //unsigned char receiveData[
47、15]={0};</p><p> Ds1302Init();</p><p> UsartConfiguration();</p><p> TMOD=0x21;</p><p><b> TL0=0xF0;</b></p><p><b> TH0=0xD8;</b&
48、gt;</p><p><b> EA=1;</b></p><p><b> ET0=1;</b></p><p><b> while(1)</b></p><p><b> {</b></p><p> if(tem
49、p==1)</p><p><b> {</b></p><p> Ds1302ReadTime();</p><p> clock[0] = TIME[2]/16; //時(shí)</p><p> clock[1] = TIME[2]&0x0f; </p><p> clo
50、ck[2] = 20;</p><p> clock[3] = TIME[1]/16; //分</p><p> clock[4] = TIME[1]&0x0f;</p><p> clock[5] = 20;</p><p> clock[6] = TIME[0]/16; //秒</p><p>
51、 clock[7] = TIME[0]&0x0f;</p><p><b> }</b></p><p> else if(temp==0)</p><p><b> {</b></p><p> Ds1302ReadTime();</p><p> clo
52、ck[0] = 2; //年</p><p> clock[1] = 0; </p><p> clock[2] = TIME[6]/16;</p><p> clock[3] = (TIME[6]&0x0f)+10;</p><p> clock[4] = TIME[4]/16;</p><p>
53、 clock[5] = (TIME[4]&0x0f)+10;</p><p> clock[6] = TIME[3]/16;</p><p> clock[7] = (TIME[3]&0x0f)+10;</p><p><b> }</b></p><p> DigDisplay();
54、</p><p> if(date==0)</p><p><b> {</b></p><p> delays(1);</p><p> if(date==0) {temp=~temp; while(!date) DigDisplay();}</p><p><b> }&l
55、t;/b></p><p> DigDisplay();</p><p> if(start==0)</p><p><b> {</b></p><p> delays(1);</p><p> if(start==0) {TR0=1; flag=1; while(!start)
56、 DigDisplay();}</p><p><b> }</b></p><p> DigDisplay();</p><p> if(flag==0)</p><p><b> {</b></p><p> if(reset==0)</p>&l
57、t;p><b> {</b></p><p> delays(1);</p><p> if(reset==0)</p><p><b> {</b></p><p><b> i=0;</b></p><p> second[0]=0
58、;</p><p> second[1]=0;</p><p> second[2]=0;</p><p> second[3]=0;</p><p><b> TL0=0xF0;</b></p><p><b> TH0=0xD8;</b></p>
59、<p> while(!reset) DigDisplay();</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> else if(flag==1)</p>&l
60、t;p><b> {</b></p><p> if(reset==0)</p><p><b> {</b></p><p> delays(1);</p><p> if(reset==0) {TR0=0; flag=0; while(!reset) DigDisplay();}
61、</p><p><b> }</b></p><p><b> }</b></p><p> DigDisplay();</p><p> if(RI == 1)//查看是否接收到數(shù)據(jù)</p><p><b> {</b></p>
62、;<p> for(c=0;c<15;c++)</p><p><b> {</b></p><p> //receiveData[i] = SBUF;//讀取數(shù)據(jù)</p><p><b> //RI = 0;</b></p><p><b> }//清除標(biāo)
63、志位</b></p><p> //second[1]=receiveData[5];</p><p> /*TIME[1]=(receiveData[11]-0x30)*0x10+(receiveData[12]-0x30);</p><p> TIME[2]=(receiveData[9]-0x30)*0x10+(receiveData[10]
64、-0x30);</p><p> TIME[3]=(receiveData[6]-0x30)*0x10+(receiveData[7]-0x30);</p><p> TIME[4]=(receiveData[4]-0x30)*0x10+(receiveData[5]-0x30);</p><p> TIME[6]=(receiveData[2]-0x30)*
65、0x10+(receiveData[3]-0x30); */</p><p> //Ds1302Init();</p><p><b> }</b></p><p> //DigDisplay();</p><p><b> }</b></p><p><b&g
66、t; }</b></p><p> void DigDisplay()</p><p><b> {</b></p><p> unsigned char k;</p><p> unsigned int j;</p><p> for(k=0;k<4;k++)<
67、;/p><p><b> {</b></p><p> P1M0=0xff;</p><p> wei1 = weixuan[k]; //發(fā)送位選</p><p> duan = duanxuan[second[k]]; //發(fā)送段碼</p><p> j = 2000; //掃
68、描間隔時(shí)間設(shè)定</p><p> while(j--);</p><p> duan = 0xff;//消隱</p><p> P1M0=0x00;</p><p><b> }</b></p><p> for(k=0;k<8;k++)</p><p>&
69、lt;b> {</b></p><p> P2M0=0xff;</p><p> wei2 = weixuan[k]; //發(fā)送位選</p><p> duan = duanxuan[clock[k]]; //發(fā)送段碼</p><p> j = 2000; //掃描間隔時(shí)間設(shè)定</p&g
70、t;<p> while(j--);</p><p> duan = 0xff;//消隱</p><p> P2M0=0x00;</p><p><b> } </b></p><p><b> }</b></p><p> void delays
71、(unsigned ms)</p><p> {int j,k;</p><p> for(j=0;j<ms;j++)</p><p><b> {</b></p><p> for(k=0;k<100;k++);</p><p><b> }</b>
72、</p><p><b> }</b></p><p> void T0_INT()interrupt 1</p><p><b> {</b></p><p><b> TL0=0xF0;</b></p><p><b> TH0=
73、0xD8;</b></p><p><b> i++;</b></p><p> if(i==500)</p><p><b> {</b></p><p><b> i=0;</b></p><p> second[0]=seco
74、nd[0]+1;</p><p><b> }</b></p><p> if(second[0]==10)</p><p><b> {</b></p><p> second[1]=second[1]+1;</p><p> second[0]=0;</p
75、><p><b> }</b></p><p> if(second[1]==6)</p><p><b> {</b></p><p> second[2]=second[2]+1;</p><p> second[1]=0;</p><p>
76、<b> }</b></p><p> if(second[2]==10)</p><p><b> {</b></p><p> second[3]=second[3]+1;</p><p> second[2]=0;</p><p><b> }&l
77、t;/b></p><p><b> }</b></p><p> void Ds1302Write(uchar addr, uchar dat)</p><p><b> {</b></p><p><b> uchar n;</b></p>&l
78、t;p><b> RET = 0;</b></p><p><b> _nop_();</b></p><p> SCLK = 0;//先將SCLK置低電平。</p><p><b> _nop_();</b></p><p> RET = 1; //然后將RE
79、T(CE)置高電平。</p><p><b> _nop_();</b></p><p> for (n=0; n<8; n++)//開(kāi)始傳送八位地址命令</p><p><b> {</b></p><p> DSIO = addr & 0x01;//數(shù)據(jù)從低位開(kāi)始傳送<
80、;/p><p> addr >>= 1;</p><p> SCLK = 1;//數(shù)據(jù)在上升沿時(shí),DS1302讀取數(shù)據(jù)</p><p><b> _nop_();</b></p><p><b> SCLK = 0;</b></p><p><b>
81、 _nop_();</b></p><p><b> }</b></p><p> for (n=0; n<8; n++)//寫(xiě)入8位數(shù)據(jù)</p><p><b> {</b></p><p> DSIO = dat & 0x01;</p><
82、p> dat >>= 1;</p><p> SCLK = 1;//數(shù)據(jù)在上升沿時(shí),DS1302讀取數(shù)據(jù)</p><p><b> _nop_();</b></p><p><b> SCLK = 0;</b></p><p><b> _nop_();<
83、;/b></p><p><b> }</b></p><p> RET = 0;//傳送數(shù)據(jù)結(jié)束</p><p><b> _nop_();</b></p><p><b> }</b></p><p> /*************
84、******************************************************************</p><p> * 函 數(shù) 名 : Ds1302Read</p><p> * 函數(shù)功能 : 讀取一個(gè)地址的數(shù)據(jù)</p><p> * 輸 入 : addr</p>
85、<p> * 輸 出 : dat</p><p> *******************************************************************************/</p><p> uchar Ds1302Read(uchar addr)</p><p><b> {
86、</b></p><p> uchar n,dat,dat1;</p><p><b> RET = 0;</b></p><p><b> _nop_();</b></p><p> SCLK = 0;//先將SCLK置低電平。</p><p><
87、b> _nop_();</b></p><p> RET = 1;//然后將RET(CE)置高電平。</p><p><b> _nop_();</b></p><p> for(n=0; n<8; n++)//開(kāi)始傳送八位地址命令</p><p><b> {</b&g
88、t;</p><p> DSIO = addr & 0x01;//數(shù)據(jù)從低位開(kāi)始傳送</p><p> addr >>= 1;</p><p> SCLK = 1;//數(shù)據(jù)在上升沿時(shí),DS1302讀取數(shù)據(jù)</p><p><b> _nop_();</b></p><p&g
89、t; SCLK = 0;//DS1302下降沿時(shí),放置數(shù)據(jù)</p><p><b> _nop_();</b></p><p><b> }</b></p><p><b> _nop_();</b></p><p> for(n=0; n<8; n++)//讀
90、取8位數(shù)據(jù)</p><p><b> {</b></p><p> dat1 = DSIO;//從最低位開(kāi)始接收</p><p> dat = (dat>>1) | (dat1<<7);</p><p><b> SCLK = 1;</b></p>&l
91、t;p><b> _nop_();</b></p><p> SCLK = 0;//DS1302下降沿時(shí),放置數(shù)據(jù)</p><p><b> _nop_();</b></p><p><b> }</b></p><p><b> RET = 0;&l
92、t;/b></p><p> _nop_();//以下為DS1302復(fù)位的穩(wěn)定時(shí)間,必須的。</p><p><b> SCLK = 1;</b></p><p><b> _nop_();</b></p><p><b> DSIO = 0;</b></
93、p><p><b> _nop_();</b></p><p><b> DSIO = 1;</b></p><p><b> _nop_();</b></p><p> return dat;</p><p><b> }</b
94、></p><p> /*******************************************************************************</p><p> * 函 數(shù) 名 : Ds1302Init</p><p> * 函數(shù)功能 : 初始化DS1302.</p><
95、p> * 輸 入 : 無(wú)</p><p> * 輸 出 : 無(wú)</p><p> *******************************************************************************/</p><p> void Ds1302Init()</p&
96、gt;<p><b> {</b></p><p><b> uchar n;</b></p><p> Ds1302Write(0x8E,0X00); //禁止寫(xiě)保護(hù),就是關(guān)閉寫(xiě)保護(hù)功能</p><p> for (n=0; n<7; n++)//寫(xiě)入7個(gè)字節(jié)的時(shí)鐘信號(hào):分秒時(shí)日月周年&l
97、t;/p><p><b> {</b></p><p> Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]);</p><p><b> }</b></p><p> Ds1302Write(0x8E,0x80); //打開(kāi)寫(xiě)保護(hù)功能</p><
98、;p><b> }</b></p><p> /*******************************************************************************</p><p> * 函 數(shù) 名 : Ds1302ReadTime</p><p> * 函數(shù)功能
99、: 讀取時(shí)鐘信息</p><p> * 輸 入 : 無(wú)</p><p> * 輸 出 : 無(wú)</p><p> *******************************************************************************/</p><p>
100、void Ds1302ReadTime()</p><p><b> {</b></p><p><b> uchar n;</b></p><p> for (n=0; n<7; n++)//讀取7個(gè)字節(jié)的時(shí)鐘信號(hào):分秒時(shí)日--月周年</p><p><b> {</
101、b></p><p> TIME[n] = Ds1302Read(READ_RTC_ADDR[n]);</p><p><b> }</b></p><p><b> }</b></p><p> void UsartConfiguration()</p><p
102、><b> {</b></p><p> SCON=0X50;//設(shè)置為工作方式1</p><p> PCON=0X80;//波特率加倍</p><p> TH1=0XFA; //計(jì)數(shù)器初始值設(shè)置,注意波特率是9600的</p><p><b> TL1=0XF3;<
103、/b></p><p> TR1=1; //打開(kāi)計(jì)數(shù)器</p><p><b> }</b></p><p> 附2 系統(tǒng)原理圖</p><p> 小組成員:楊曉博 尹序鑫 羅恩勇 陳曉峰 </p><p> 小組各成員:討論并確定秒表要實(shí)現(xiàn)哪些功能 &
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于單片機(jī)的秒表設(shè)計(jì)單片機(jī)課程設(shè)計(jì)
- 單片機(jī)秒表系統(tǒng)設(shè)計(jì)課程設(shè)計(jì)--基于8051的單片機(jī)秒表系統(tǒng)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--基于單片機(jī)的秒表系統(tǒng)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-基于單片機(jī)的數(shù)字秒表的設(shè)計(jì)
- 課程設(shè)計(jì)--基于單片機(jī)的(秒表)設(shè)計(jì)
- 基于單片機(jī)的秒表課程設(shè)計(jì)
- 單片機(jī)秒表單片機(jī)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---秒表
- 單片機(jī)秒表課程設(shè)計(jì)
- 秒表(單片機(jī)課程設(shè)計(jì))
- 單片機(jī)課程設(shè)計(jì)---秒表設(shè)計(jì)
- 單片機(jī)秒表課程設(shè)計(jì)
- 單片機(jī)秒表課程設(shè)計(jì)
- 單片機(jī)秒表課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)報(bào)告---單片機(jī)秒表系統(tǒng)設(shè)計(jì)
- 基于單片機(jī)的秒表課程設(shè)計(jì) (2)
- 單片機(jī)秒表的課程設(shè)計(jì)
- 單片機(jī)秒表設(shè)計(jì)課程設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)報(bào)告-秒表設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)報(bào)告-秒表設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論