2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  一、課程設(shè)計的內(nèi)容</b></p><p>  用STC89C52單片機(jī)制作一測溫儀旋轉(zhuǎn)LED時鐘:</p><p>  1.設(shè)計并繪制硬件電路圖;</p><p><b>  2.焊接好元器件;</b></p><p>  3.編寫程序并將調(diào)試好的程序固化到單片機(jī)中。

2、</p><p>  二、課程設(shè)計的要求與數(shù)據(jù)</p><p>  單片機(jī)采用STC89C52芯片,時鐘芯片采用DS1302。用電機(jī)帶動驅(qū)動板旋轉(zhuǎn)系統(tǒng)上電后,驅(qū)動板的LED將會在電機(jī)帶動下動態(tài)掃描出時鐘畫面,并且可以用紅外遙控調(diào)時。</p><p>  三、課程設(shè)計應(yīng)完成的工作</p><p>  1. 完成軟件、硬件的設(shè)計,并進(jìn)行硬件的焊接

3、制作,并將調(diào)試成功的程序固化到單片機(jī)中,最后進(jìn)行硬件與軟件的調(diào)試;</p><p>  2.撰寫設(shè)計說明書。</p><p>  四、課程設(shè)計進(jìn)程安排</p><p>  五、應(yīng)收集的資料及主要參考文獻(xiàn)</p><p>  譚浩強(qiáng).C語言程序設(shè)計(第二版)。北京:清華大學(xué)出版社,1999年12月</p><p>  目

4、 錄</p><p>  廣東工業(yè)大學(xué)課程設(shè)計任務(wù)書·····························&

5、#183;···········1</p><p>  摘要····················

6、83;····································&

7、#183;·····4</p><p>  一、課題設(shè)計的要求及目的·························

8、;··················5</p><p>  1.1設(shè)計要求·············&#

9、183;····································

10、·5</p><p>  1.2課程設(shè)計目的······························&

11、#183;················5</p><p>  二、設(shè)計方案···············

12、;····································

13、83;····5</p><p>  三、系統(tǒng)框圖與工作原理··························&#

14、183;··················8</p><p>  3.1單片機(jī)系統(tǒng)工作架構(gòu)············

15、·····························8</p><p>  3.2系統(tǒng)工作原理··&

16、#183;····································

17、;·······10</p><p>  四、設(shè)計元器件說明························

18、;·························10</p><p>  4.1 PLCC STC89C52RC簡介···

19、3;······························10</p><p>  4.2 74HC573芯片

20、與光電傳感器簡介·····························12</p><p>  4.3 紅外簡介·

21、;····································

22、83;············13</p><p>  4.4 DS1302、LM7805芯片簡介················

23、83;·················15</p><p>  4.5 LED 動態(tài)顯示原理············

24、3;····························17</p><p>  五、系統(tǒng)硬件電路設(shè)計··

25、83;····································&

26、#183;·······18</p><p>  六、系統(tǒng)軟件設(shè)計·······················&#

27、183;···························19</p><p>  6.1 單片機(jī)解碼紅外信號程序··&#

28、183;·································19</p><

29、p>  6.2 單片機(jī)讀寫DS1302程序································

30、3;·····22</p><p>  6.3 自適應(yīng)轉(zhuǎn)速·························

31、3;······················25</p><p>  6.4 數(shù)字顯示模式········

32、83;····································&

33、#183;26</p><p>  6.5 指針顯示模式······························

34、················26</p><p>  七、總結(jié)與體會···············&#

35、183;····································

36、·27</p><p>  八、參考文獻(xiàn)······························

37、83;························27</p><p>  附錄A 完整源程序······

38、83;····································&

39、#183;······28</p><p>  附錄B 實物圖························

40、83;·····························41</p><p>  摘 要</p&g

41、t;<p>  旋轉(zhuǎn)LED鐘,在國外一般稱為“螺旋槳時鐘”(propeller clock),是利用“視覺暫留”原理制作而成。將單片機(jī)控制的LED流水燈設(shè)備稍作改進(jìn),讓它動起來,就能神奇地顯示各種字符或圖案,其效果如浮在空中一般。旋轉(zhuǎn)LED顯示是利用機(jī)械轉(zhuǎn)動動態(tài)掃描代替?zhèn)鹘y(tǒng)逐行掃描方式,顯示屏其實質(zhì)就是與機(jī)械轉(zhuǎn)動配合起來的動態(tài)掃描顯示技術(shù)。本設(shè)計利用高速旋轉(zhuǎn)中控制LED燈的亮滅,進(jìn)行字符的顯示,控制器采用STC89C52單

42、片機(jī),借助人的視覺暫留效果,通過LED燈的機(jī)械掃描方式來顯示各種字符和圖像。 LED旋轉(zhuǎn)時鐘正是基于機(jī)械轉(zhuǎn)動動態(tài)掃描技術(shù),以及人的視覺暫留效果做成的,它主要包括單片機(jī)STC89C52、時鐘芯片DS1302、光電耦合器件等。 </p><p>  我們做的這個時鐘具有兩種顯示模式:一種是字符式數(shù)字顯示模式,可在一個屏上顯示年月日和時分秒信息;另一種是指針式模擬顯示模式,可仿真指針式鐘表顯示時分秒信息。同時還設(shè)有紅外

43、遙控功能,可通過遙控器改變顯示模式和調(diào)整時鐘的時值。</p><p>  關(guān)鍵詞:視覺暫留 旋轉(zhuǎn)時鐘 動態(tài)掃描</p><p>  一、課題設(shè)計的要求及目的</p><p><b>  1.1 設(shè)計要求</b></p><p> ?。?)驅(qū)動板在電機(jī)的旋轉(zhuǎn)帶動下能夠顯示時鐘畫面,并能夠自動計時。</p>

44、<p> ?。?)由于電機(jī)工作電壓,環(huán)境因素的影響下,電機(jī)轉(zhuǎn)速不穩(wěn)定使時鐘畫面不穩(wěn)定,所以要求程序能夠自適應(yīng)調(diào)整轉(zhuǎn)速,使時鐘畫面基本穩(wěn)定不變。</p><p>  (3)要求能夠通過紅外遙控實現(xiàn)數(shù)字時鐘和指針時鐘2種模式間轉(zhuǎn)換</p><p> ?。?)要求能夠通過紅外遙控設(shè)置時間。</p><p>  1.2 課程設(shè)計目的</p>&l

45、t;p>  (1)訓(xùn)練正確地應(yīng)用單片微機(jī),培養(yǎng)解決工業(yè)控制、工業(yè)檢測等領(lǐng)域具體問題的初步能力。</p><p> ?。?)該設(shè)計熟悉單片微機(jī)應(yīng)用系統(tǒng)開發(fā)、研制的過程,軟硬件設(shè)計的工作方法、工作內(nèi)容、工作步驟。</p><p> ?。?)提高學(xué)生理論與實踐結(jié)合的能力,將理論知識運用到實踐中來,能更好的掌握課本理論知識。</p><p><b>  二、

46、設(shè)計方案</b></p><p><b>  (1)供電方式選擇</b></p><p><b>  1、常見的供電方式</b></p><p>  根據(jù)調(diào)查的結(jié)果,指針板的供電方式一般有以下三種:</p><p><b>  1)自感應(yīng)發(fā)電</b></p&g

47、t;<p>  這種方法,就是從驅(qū)動板上引出導(dǎo)線,接入到電機(jī)內(nèi)部繞在轉(zhuǎn)子上,電機(jī)旋轉(zhuǎn)時該導(dǎo)線切割磁場產(chǎn)生感應(yīng)電動勢,經(jīng)過整流后作為指針板上的電源。</p><p>  A、這種方式的優(yōu)點是:</p><p>  設(shè)計很巧妙,無機(jī)械磨損。</p><p>  更巧妙的是,由于感應(yīng)出來的電動勢是交流的,所以可以利用該過零

48、 信號來定位,不必另外準(zhǔn)備定位信號了。</p><p>  B、這種方式的缺點是:</p><p>  提供的電流有限,只能適合 LED 較少的旋轉(zhuǎn)時鐘,當(dāng) LED 數(shù)量較多時,需要更多的電流,這種方式就不能滿足了。</p><p>  其次,這種方式要對電機(jī)本身進(jìn)行改造,也有一定的難度。并不是所有的電機(jī)都適合這種改造。而且這種改造可能會給電機(jī)帶來損害。<

49、/p><p>  另外還有一個問題,就是這種方式,只有在電機(jī)旋轉(zhuǎn)時才能發(fā)電給驅(qū)動板供電,一旦停止轉(zhuǎn)動,供電也就無以為繼了,這樣要實現(xiàn)旋轉(zhuǎn)時鐘的不間斷走時,還得另加備用電池并采用低功耗設(shè)計。</p><p><b>  2)自備電池</b></p><p>  這種方式,就是在驅(qū)動板上安裝電池,由電池供電。一般是用兩到三節(jié) 7 號電池。</p&

50、gt;<p>  A、這種方式的優(yōu)點是:</p><p> ?、?不用擔(dān)心電壓波動。</p><p> ?、?也不存在機(jī)械磨損,不用擔(dān)心接觸不良之類問題的困擾。</p><p>  B、這種方式的缺點是:</p><p> ?、?很費電池,三天兩頭換電池,既不經(jīng)濟(jì)也不環(huán)保,還很麻煩!</p><p>  

51、Ⅱ.電池很重,一般的電機(jī)帶不動,必須用很大很大的電機(jī)哦。這也意味了成本的上升。</p><p><b>  3)機(jī)械傳導(dǎo)供電</b></p><p>  也就是采用滑環(huán)和電刷,通過機(jī)械接觸傳導(dǎo)電流。</p><p>  A、這種方式的優(yōu)點是:</p><p>  能夠提供比較大的工作電流。</p><

52、p>  B、這種方式的缺點是:</p><p> ?、?有機(jī)械摩擦,會產(chǎn)生磨損。因此要求滑環(huán)和電刷材料要耐磨,經(jīng)得起折騰。另外,還得有足夠的彈性,并且要耐銹,否則會導(dǎo)致接觸不良。</p><p> ?、?有機(jī)械阻力,因此要求電機(jī)有比較大一點的功率。</p><p><b>  Ⅲ.有機(jī)械噪音。</b></p><p&g

53、t;<b>  4)感應(yīng)供電</b></p><p>  原理和變壓器原理相當(dāng),就是在2個相距很近的線圈中,一只線圈作為電能發(fā)送端,另一只線圈作為電能接收端,發(fā)送端接入交變電流,在相距很近的接收端就能同時感應(yīng)到交變電流。</p><p>  A、這種方式的優(yōu)點是:</p><p><b>  無機(jī)械噪音。</b></

54、p><p>  B、這種方式的缺點是:</p><p>  Ⅰ.線圈耦合度低,供電效率低。</p><p><b> ?、?制作難度大。</b></p><p> ?、?需增加震蕩電路和濾波整流電路。 </p><p>  綜合以上三種:第一種,雖然優(yōu)點多,但難度很大,并且成本很高;第二種,沒有太多的

55、擔(dān)心,可是使用起來相當(dāng)?shù)穆闊?,可能還會因為更換電池不及時而導(dǎo)致其中其他的零件受損;第三種,雖然會產(chǎn)生些摩擦,但是能提供較大電流,而摩擦的問題可以采用其他方法來彌補。第四種,雖不產(chǎn)生機(jī)械噪音,但是需要在驅(qū)動板上加上濾波整流電路,增加驅(qū)動板重量。所以我們采用的是第三種機(jī)械傳導(dǎo)供電。</p><p>  (2)過零信號產(chǎn)生電路選擇</p><p><b>  1)霍爾傳感器</b

56、></p><p>  霍爾傳感器處于工作狀態(tài)時輸出總是處于高電平狀態(tài),當(dāng)磁鋼N極接近傳感器正面的有效距離,輸出端變?yōu)榈碗娖健.?dāng)磁鋼撤離傳感器有效距離。輸出端又顯示低電平,從而產(chǎn)生下降沿,是單片機(jī)中斷口接收到下降沿,從而產(chǎn)生中斷。</p><p><b>  2)光電開關(guān)</b></p><p>  光電開關(guān)處于工作狀態(tài)時輸出總是處于高電

57、平狀態(tài),當(dāng)光電開關(guān)經(jīng)過擋片時,輸出端變?yōu)榈碗娖?。?dāng)光電開關(guān)離開擋片時,輸出端又顯示低電平,從而產(chǎn)生下降沿,是單片機(jī)中斷口接收到下降沿,從而產(chǎn)生中斷。</p><p>  光電開關(guān)利用光敏二極管對光的敏感性原理制作的,反應(yīng)較靈敏,且低電平時間由擋片的寬度決定,控制方便。而霍爾傳感器利用磁場對電場的作用原理制作的,反應(yīng)較遲緩,且感應(yīng)磁鋼的距離遠(yuǎn),當(dāng)轉(zhuǎn)速較快時難以控制。故該設(shè)計采用光電開關(guān)。</p>&l

58、t;p><b> ?。?)LED選擇</b></p><p>  由于旋轉(zhuǎn)LED要求時鐘的分辨率高且重量輕,長度短,故該設(shè)計選用貼片LED發(fā)光二極管</p><p><b> ?。?)單片機(jī)選擇</b></p><p>  由于旋轉(zhuǎn)LED驅(qū)動板上包括較多元器件和芯片,空間不足,所以該設(shè)計選用PLCC封裝的單片機(jī),這種

59、封裝的單片機(jī)為正方形,面積小,質(zhì)量輕。</p><p>  三、系統(tǒng)框圖與工作原理</p><p>  3.1單片機(jī)系統(tǒng)工作架構(gòu)</p><p>  圖3.1.1 系統(tǒng)框圖</p><p>  圖3.1.2 外部中斷1流程圖</p><p>  圖3.1.3 定時器1流程圖</p><p>

60、<b>  3.3系統(tǒng)工作原理</b></p><p>  通過光耦和外部中斷控制單片機(jī)從DS1302中讀取時鐘數(shù)據(jù)并在旋轉(zhuǎn)LED中的顯示位置,通過紅外遙控外部中斷讀取控制旋轉(zhuǎn)LED時鐘的顯示模式和時值的加減調(diào)控。</p><p><b>  四、設(shè)計元器件說明</b></p><p>  4.1 PLCC STC89C

61、52RC簡介</p><p>  圖4.1.1 PLCC STC89C52RC管腳圖 圖4.1.2 STC89C52RC單片機(jī)結(jié)構(gòu)</p><p>  STC89C52RC是一種帶4KB可編程可擦除只讀存儲器的低電壓,高性能微處理器,俗稱單片機(jī)。單片機(jī)的可擦除只讀存儲器可以反復(fù)擦除100次。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-5

62、1指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,STC89C52RC是一種高效微控制器,STC89C52RC是它的一種精簡版本。STC89C52RC單片機(jī)為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。STC89C52RC引腳即外觀如圖4.1.1所示,內(nèi)部結(jié)構(gòu)如圖4.1.2所示。</p><p>  P0口:P0口是一組8位漏極開路型雙向I/O口,也即地址/數(shù)據(jù)總線復(fù)制用口,作為

63、輸入口時,每位能吸收電流的方式驅(qū)動8個TTL邏輯門電路,對端口寫入“1可作為高阻抗輸入端用。在訪問外部數(shù)據(jù)存儲器或程序存儲器時,這組口線分時轉(zhuǎn)換地址(低8位)和數(shù)據(jù)總線復(fù)用,在訪問期激活內(nèi)部上拉電阻。在Flash編程時,PO口接收指令節(jié),而在程序校檢時,輸出指令字節(jié),校檢時,要求外接上拉電阻。</p><p>  P1口:P1口是一個帶內(nèi)部上拉電阻的8位雙向I/O口,P1的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個T

64、TL邏輯門電路。對端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時可作輸入口,作輸入口時,因為內(nèi)部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流I。Flash編程和程序校檢期間,P1接收低8位地址。</p><p>  P2口:P2口是一個帶內(nèi)部上拉電阻的8位雙向I/O口,P1的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個TTL邏輯門電路。對端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時可作輸入口,

65、作輸入口時,因為內(nèi)部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流I。在訪問外部數(shù)據(jù)存儲器或16位地址的外部數(shù)據(jù)存儲(例如執(zhí)行MOVX@DPTR指令)時,P2口送出高8位地址數(shù)據(jù)。在訪問8位地址的外部數(shù)據(jù)存儲器(如執(zhí)行MOVX@RI指令)時,P2口線上的內(nèi)容(也即特殊功能寄存器(SFR)區(qū)中R2寄存器的內(nèi)容),在整個訪問期間不改變。Flash編程和校檢時,P2亦接收高位地址和其他控制信號。</p><p>

66、  P3口:P3口是一個帶內(nèi)部上拉電阻的8位雙向I/O口。P3口輸出緩沖級可驅(qū)動(吸收或輸出電流)4個TTL邏輯門電路。對P3口寫入“1”時,它們被內(nèi)部上拉電阻拉高并可作輸入端口,作輸入端時,被外部拉低的P3口將用上拉電阻,輸出電流I。P3口還接收一些用于Flash閃速存儲器編程和程序校檢的控制信號。</p><p>  RST:復(fù)位輸入,當(dāng)震蕩器工作時,RST引腳出現(xiàn)兩個機(jī)器周期以上高電平將使單片機(jī)復(fù)位。<

67、;/p><p>  ALE/PROG:當(dāng)訪問外部程序存儲器或數(shù)據(jù)存儲器時,ALE(地址鎖存允許)輸出脈沖用于所存地址的低8位字節(jié)。即使不訪問外部存儲器,ALE乃以時鐘振動頻率的1/6輸出固定的正脈沖信號,因此它可對外輸出時鐘或用于定時目的。要注意的是:每當(dāng)訪問外部數(shù)據(jù)存儲器時將跳過一個ALE脈沖。</p><p>  4.2 74HC573芯片與光電傳感器簡介</p><p

68、>  4.2.1 74HC573芯片</p><p>  圖 4.2.1 74HC573</p><p>  芯片74HC573為八進(jìn)制3 態(tài)非反轉(zhuǎn)透明鎖存器,是高性能硅門cmos器件。當(dāng)鎖存使能端LE為高時,這些器件的鎖存對于數(shù)據(jù)是透明的(也就是說輸出同步)。當(dāng)鎖存使能變低時,符合建立時間和保持時間的數(shù)據(jù)會被鎖存。</p><p>  4.2.2 光電

69、傳感器</p><p>  對射式U型槽光耦管具有,響應(yīng)塊,驅(qū)動簡單,容易安裝,易于與單片機(jī)通信等特點如上圖。上電之后光耦的光敏三極管的集電極輸出低電平,當(dāng)有物體擋住了光敏三極管的紅外光線時,光敏三極管的集電極和發(fā)射極處于高阻態(tài),所以集電極輸出高電平,當(dāng)光敏三極管再次感應(yīng)到紅外光源時,集電極再次輸出低電平,從而給單片機(jī)一個中斷信號。</p><p>  圖4.2.2 光電開關(guān),ITR96

70、08-F 中間寬5MM</p><p>  槽式光電開關(guān)通常是標(biāo)準(zhǔn)的U字型結(jié)構(gòu),其發(fā)射器和接收器分別位于U型槽的兩邊,并形成一光軸,當(dāng)被檢測物體經(jīng)過U型槽且阻斷光軸時,光電開關(guān)就產(chǎn)生了檢測到的開關(guān)量信號。槽式光電開關(guān)比較安全可靠的適合檢測高速變化,分辨透明與半透明物體。</p><p><b>  4.3 紅外簡介</b></p><p>  

71、4.3.1 一體化紅外遙控接收頭</p><p>  圖4.3.1 HS0038B SIP3 一體化紅外遙控接收頭</p><p>  紅外遙控信號是一連串的二進(jìn)制脈沖碼。為了使其在無線傳輸過程中免受其他紅外信號的干擾,通常都是先將其調(diào)制在特定的載波頻率上,然后再經(jīng)紅外發(fā)射二極管發(fā)射出去,而紅外線接收裝置則要濾除其他雜波,只接收該特定頻率的信號并將其還原成二進(jìn)制脈沖碼,也就是解調(diào)。目前,對

72、于這種進(jìn)行了調(diào)制的紅外遙控信號,通常是采用一體化紅外線接收頭進(jìn)行調(diào)解。一體化紅外線接收頭將低噪音放大器,限幅器,帶通濾波器,解調(diào)器,,以及整形驅(qū)動電路等集成在一起。一體化紅外線接收頭體積小,靈敏度高,外接元件少,抗干擾能力強(qiáng),使用十分方便。</p><p>  4.3.2遙控發(fā)射器</p><p>  圖4.3.2 紅外遙控器</p><p><b>  

73、遙控發(fā)射器及其編碼</b></p><p>  遙控發(fā)射器專用芯片很多,根據(jù)編碼格式可以分成兩大類,這里我們以運用比較廣泛,解碼比較容易的一類來加以說明,現(xiàn)以日本NEC的uPD6121G組成發(fā)射電路為例說明編碼原理。當(dāng)發(fā)射器按鍵按下后,即有遙控碼發(fā)出,所按的鍵不同遙控編碼也不同。這種遙控碼具有以下特征:</p><p>  采用脈寬調(diào)制的串行碼,以脈寬為0.565ms、間隔0.

74、56ms、周期為1.125ms的組合表示二進(jìn)制的“0”;以脈寬為0.565ms、間隔</p><p>  1.685ms、周期為2.25ms的組合表示二進(jìn)制的“1”,其波形如圖2所示。</p><p>  上述“0”和“1”組成的32位二進(jìn)制碼經(jīng)38kHz的載頻進(jìn)行二次調(diào)制以提高發(fā)射效率,達(dá)到降低電源功耗的目的。然后再通過紅外發(fā)射二極管產(chǎn)生紅外線向空間發(fā)射,如圖3所示,連發(fā)波形如圖4所示。

75、</p><p>  4.4 DS1302、LM317、LM7805芯片簡介</p><p>  4.4.1 DS1302</p><p>  DS1302 是美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實時時鐘電路,它可以對年、月、日、周日、時、分、秒進(jìn)行計時,具有閏年補償功能,工作電壓為2.5V~5.5V。采用三線接口與CPU進(jìn)行同步通信,并可采用突

76、發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。DS1302內(nèi)部有一個31×8的用于臨時性存放數(shù)據(jù)的RAM寄存器。DS1302是DS1202的升級產(chǎn)品,與DS1202兼容,但增加了主電源/后備電源雙電源引腳,同時提供了對后備電源進(jìn)行涓細(xì)電流充電的能力。</p><p><b>  引腳功能及結(jié)構(gòu)</b></p><p>  DS1302的引腳排列,其中Vcc1

77、為后備電源,VCC2為主電源。在主電源關(guān)閉的情況下,也能保持時鐘的連續(xù)運行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當(dāng)Vcc2大于Vcc1+0.2V時,Vcc2給DS1302供電。當(dāng)Vcc2小于Vcc1時,DS1302由Vcc1供電。X1和X2是振蕩源,外接32.768kHz晶振。RST是復(fù)位/片選線,通過把RST輸入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位

78、寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當(dāng)RST為高電平時,所有的數(shù)據(jù)傳送被初始化,允許對DS1302進(jìn)行操作。如果在傳送過程中RST置為低電平,則會終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電運行時,在Vcc>2.0V之前,RST必須保持低電平。只有在SCLK為低電平時,才能將RST置為高電平。I/O為串行數(shù)據(jù)輸入輸出端(雙向),后面有詳細(xì)說明。SCLK為時鐘輸入端。 下圖為DS1302的引腳功能圖:</

79、p><p>  圖4.4.1 DS1302管腳定義圖</p><p>  數(shù)據(jù)輸入輸出(I/O)</p><p>  在控制指令字輸入后的下一個SCLK時鐘的上升沿時,數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時從低位0位到高位7。</p><p>

80、  圖4.4.2數(shù)據(jù)輸入輸出</p><p>  DS1302的控制字節(jié)</p><p>  DS1302 的控制字如圖2所示??刂谱止?jié)的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入DS1302中,位6如果為0,則表示存取日歷時鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進(jìn)行寫操作,為1表示進(jìn)行讀操作,控制字節(jié)總是從最低位開始

81、輸出。</p><p>  4.4.2 LM7805</p><p>  三端穩(wěn)壓集成電路lm7805,組成穩(wěn)壓電源所需的外圍元件極少,電路內(nèi)部還有過流、過熱及調(diào)整管的保護(hù)電路,使用起來可靠、方便,而且價格便宜。lm7805輸出電壓為正5V。</p><p>  圖1 LM7805封裝圖 圖2 LM7805引腳圖</p><

82、p>  圖3 LM7805典型應(yīng)用電路</p><p>  4.5 LED 動態(tài)顯示原理</p><p>  LED具有低功耗,接口控制方便等優(yōu)點,而且與模塊的接口信號和操作指令具有廣泛的兼容性,能直接與單片機(jī)接口,方便實現(xiàn)各種不同的操作。</p><p>  旋轉(zhuǎn)LED是一種通過同步控制發(fā)光二極管的位置和點亮狀態(tài)來實現(xiàn)圖文顯示,可視角能達(dá)360度,本設(shè)計采

83、用32個發(fā)光二級管,利用人眼的“視覺暫留效應(yīng)”顯示時間和溫度。</p><p>  圖4.5 Led顯示模塊</p><p>  五、系統(tǒng)硬件電路設(shè)計</p><p>  硬件電路原理圖如下:</p><p>  LED燈為8*4組共32顆</p><p><b>  六、系統(tǒng)軟件設(shè)計</b>&

84、lt;/p><p>  6.1單片機(jī)解碼紅外信號程序</p><p>  圖6.1.1紅外解碼流程圖</p><p>  以下為單片機(jī)解碼紅外的程序:</p><p>  #include <reg52.h></p><p>  #define uchar unsigned char </p>&

85、lt;p>  uchar code table[]={</p><p>  0xc0,0xf9,0xa4,0xb0,</p><p>  0x99,0x92,0x82,0xf8,</p><p>  0x80,0x90,0x88,0x83,</p><p>  0xc6,0xa1,0x86,0x8e};</p><p

86、>  #define Imax 14000 //此處為晶振為11.0592時的取值, </p><p>  #define Imin 8000 //如用其它頻率的晶振時,</p><p>  #define Inum1 1450 //要改變

87、相應(yīng)的取值。</p><p>  #define Inum2 700 </p><p>  #define Inum3 3000</p><p>  uchar Im[4]={0x00,0x00,0x00,0x00}; //存放4個字節(jié)32位編碼</p><p>  uchar show[2]={0,0};

88、 //存儲數(shù)據(jù)碼</p><p>  unsigned long m,Tc; //兩脈沖間隔 </p><p>  uchar flag,IrOK;</p><p>  void delay(uchar i)</p><p><b>  {</b&

89、gt;</p><p>  uchar j,k; </p><p>  for(j=i;j>0;j--)</p><p>  for(k=125;k>0;k--);</p><p><b>  }</b></p><p>  void display()</p><

90、p><b>  {</b></p><p><b>  P1=6;</b></p><p>  P0=table[show[0]];</p><p><b>  delay(5);</b></p><p><b>  P1=5;</b></p&

91、gt;<p>  P0=table[show[1]];</p><p><b>  delay(5);</b></p><p><b>  }</b></p><p>  //外部中斷解碼程序</p><p>  void INT_1(void) interrupt 2 using 1

92、</p><p><b>  {</b></p><p>  Tc=TH0*256+TL0; //提取中斷時間間隔時長</p><p><b>  TH0=0; </b></p><p>  TL0=0;

93、 //定時中斷重新置零</p><p>  if((Tc>Imin)&&(Tc<Imax)) //9.12ms+4.5ms </p><p><b>  { </b></p><p><b>  m=0;</b>&l

94、t;/p><p><b>  flag=1;</b></p><p><b>  return;</b></p><p>  } //找到啟始碼</p><p>  if(flag==1)</p><p><b>  {</b></p>

95、;<p>  if(Tc>Inum1&&Tc<Inum3) //2.25ms </p><p><b>  {</b></p><p>  Im[m/8]=Im[m/8]>>1|0x80; m++; //1 取碼</p><p><b>

96、  }</b></p><p>  if(Tc>Inum2&&Tc<Inum1) //1.125ms</p><p><b>  {</b></p><p>  Im[m/8]=Im[m/8]>>1; m++; //0 取碼&

97、lt;/p><p><b>  }</b></p><p>  if(m==32) </p><p><b>  {</b></p><p><b>  m=0; </b></p><p><b>  flag=0;</b></

98、p><p>  if(Im[2]==~Im[3]) </p><p><b>  {</b></p><p><b>  IrOK=1; </b></p><p><b>  }</b></p><p>  else IrOK=0;

99、 //取碼完成后判斷讀碼是否正確</p><p>  } //準(zhǔn)備讀下一碼</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  /*演示主程序

100、*/</b></p><p>  void main(void)</p><p><b>  {</b></p><p>  unsigned int a; </p><p><b>  m=0;</b></p><p><b>  flag=0;&l

101、t;/b></p><p><b>  EA=1;</b></p><p>  IT1=1; //下降沿觸發(fā) </p><p>  EX1=1; //外部中斷1允許</p><p>  TMOD=0x01; </p><p><b>  TH0=0;</b>

102、;</p><p><b>  TL0=0;</b></p><p>  TR0=1;//開啟定時器0 </p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  if(IrOK==1) </

103、p><p><b>  {</b></p><p>  show[1]=Im[2] & 0x0F; //取鍵碼的低四位</p><p>  show[0]=Im[2] >> 4; </p><p><b>  IrOK=0;</b></p>

104、<p><b>  }</b></p><p>  if(Im[2]==69)</p><p><b>  {</b></p><p><b>  P0=0x55;</b></p><p><b>  }</b></p><p

105、>  if(Im[2]==70)</p><p><b>  {</b></p><p><b>  P0=0xaa;</b></p><p><b>  }</b></p><p>  if(Im[2]==7)</p><p><b>

106、  {</b></p><p><b>  P0=0xff;</b></p><p><b>  }</b></p><p>  if(Im[2]==9)</p><p><b>  {</b></p><p><b>  P0=0

107、x00;</b></p><p><b>  }</b></p><p>  for(a=100;a>0;a--)</p><p><b>  {</b></p><p>  display();</p><p><b>  }</b>

108、</p><p><b>  }</b></p><p><b>  }</b></p><p>  6.2單片機(jī)讀寫DS1302程序</p><p>  以下為典型的DS1302讀寫程序:</p><p>  /*******************************

109、************************************* </p><p><b>  *</b></p><p>  * 名稱: RTInputByte</p><p><b>  * 說明: </b></p><p>  * 功能: 往DS1302寫入1Byte數(shù)據(jù)</

110、p><p><b>  * 調(diào)用:</b></p><p>  * 輸入: ucDa 寫入的數(shù)據(jù) </p><p><b>  * 返回值: 無</b></p><p>  *****************************************************************

111、******/</p><p>  void RTInputByte(unsigned char ucDa) </p><p><b>  { </b></p><p>  unsigned char i;</p><p>  ACC = ucDa;</p><p>  for(i=8; i&g

112、t;0; i--)</p><p><b>  {</b></p><p>  T_IO = ACC0; /*相當(dāng)于匯編中的 RRC */</p><p>  T_CLK = 1;</p><p>  T_CLK = 0;</p><p>  ACC = ACC >> 1; </

113、p><p><b>  } </b></p><p><b>  }</b></p><p>  /******************************************************************** </p><p><b>  *</b>&l

114、t;/p><p>  * 名稱: unsigned char uc_RTOutputByte</p><p><b>  * 說明: </b></p><p>  * 功能: 從DS1302讀取1Byte數(shù)據(jù)</p><p><b>  * 調(diào)用: </b></p><p>&l

115、t;b>  * 輸入: </b></p><p>  * 返回值: ACC</p><p>  ***********************************************************************/</p><p>  unsigned char uc_RTOutputByte(void) </p&g

116、t;<p><b>  { </b></p><p>  unsigned char i;</p><p>  for(i=8; i>0; i--)</p><p><b>  {</b></p><p>  ACC = ACC >>1; /*相當(dāng)于匯編中的 RRC

117、*/</p><p>  ACC7 = T_IO;</p><p>  T_CLK = 1;</p><p>  T_CLK = 0;</p><p><b>  } </b></p><p>  return(ACC); </p><p><b>  }<

118、/b></p><p>  /******************************************************************** </p><p><b>  *</b></p><p>  * 名稱: W1302</p><p>  * 說明: 先寫地址,后寫命令/數(shù)據(jù)&l

119、t;/p><p>  * 功能: 往DS1302寫入數(shù)據(jù)</p><p>  * 調(diào)用: RTInputByte() </p><p>  * 輸入: ucAddr: DS1302地址, ucDa: 要寫的數(shù)據(jù)</p><p><b>  * 返回值: 無</b></p><p>  *******

120、****************************************************************/</p><p>  void W1302(unsigned char ucAddr, unsigned char ucDa)</p><p><b>  {</b></p><p>  T_RST = 0;<

121、;/p><p>  T_CLK = 0;</p><p>  T_RST = 1;</p><p>  RTInputByte(ucAddr); /* 地址,命令 */</p><p>  RTInputByte(ucDa); /* 寫1Byte數(shù)據(jù)*/</p><p>  T_CLK = 1;</p>&l

122、t;p><b>  T_RST =0;</b></p><p><b>  }</b></p><p>  /******************************************************************** </p><p><b>  *</b><

123、/p><p>  * 名稱: uc_R1302</p><p>  * 說明: 先寫地址,后讀命令/數(shù)據(jù)</p><p>  * 功能: 讀取DS1302某地址的數(shù)據(jù)</p><p>  * 調(diào)用: RTInputByte() , uc_RTOutputByte()</p><p>  * 輸入: ucAddr: DS1

124、302地址</p><p>  * 返回值: ucDa :讀取的數(shù)據(jù)</p><p>  ***********************************************************************/</p><p>  unsigned char uc_R1302(unsigned char ucAddr)</p>

125、<p><b>  {</b></p><p>  unsigned char ucDa;</p><p>  T_RST = 0;</p><p>  T_CLK = 0;</p><p>  T_RST = 1;</p><p>  RTInputByte(ucAddr); /* 地

126、址,命令 */</p><p>  ucDa = uc_RTOutputByte(); /* 讀1Byte數(shù)據(jù) */</p><p>  T_CLK = 1;</p><p><b>  T_RST =0;</b></p><p>  return(ucDa);</p><p><b>

127、  }</b></p><p>  void Set1302(void) </p><p><b>  {</b></p><p>  W1302(0x8e,0x00); /* 控制命令,WP=0,寫操作?*/</p><p>  W1302(0x8c,NUM2BCD(Time[5]));</p>

128、;<p>  W1302(0x8a,NUM2BCD(Time[6]));</p><p>  W1302(0x88,NUM2BCD(Time[4]));</p><p>  W1302(0x86,NUM2BCD(Time[3]));</p><p>  W1302(0x84,NUM2BCD(Time[2]));</p><p>

129、  W1302(0x82,NUM2BCD(Time[1]));</p><p>  W1302(0x80,NUM2BCD(Time[0]));</p><p>  W1302(0x8e,0x80); /* 控制命令,WP=1,寫保護(hù)?*/</p><p><b>  }</b></p><p>  void Get13

130、02(void) </p><p><b>  {</b></p><p>  Time[5] = BCD2NUM(uc_R1302(0x8d));</p><p>  Time[6] = BCD2NUM(uc_R1302(0x8b));</p><p>  Time[4] = BCD2NUM(uc_R1302(0x89

131、));</p><p>  Time[3] = BCD2NUM(uc_R1302(0x87));</p><p>  Time[2] = BCD2NUM(uc_R1302(0x85));</p><p>  Time[1] = BCD2NUM(uc_R1302(0x83));</p><p>  Time[0] = BCD2NUM(uc_R1

132、302(0x81));</p><p><b>  }</b></p><p><b>  6.3 自適應(yīng)轉(zhuǎn)速</b></p><p>  系統(tǒng)開機(jī)后,程序先進(jìn)入測試轉(zhuǎn)速階段, 測試2次中斷之間(旋轉(zhuǎn)一圈)定時器中斷數(shù),與所需的中斷數(shù)對比,通過對比調(diào)整定時器初設(shè)值,達(dá)到改變旋轉(zhuǎn)1圈定時器中斷數(shù)的目的。</p>

133、<p>  /*外部中斷0處理函數(shù)*/     void intersvr0(void) interrupt 0 using 1         {           D=D+(S-N)*2;

134、0;   //修正值           Ti0=600+D;     //得到定時器T0的初設(shè)值            S=0;   

135、    //計數(shù)器清零,將重新計數(shù)         }</p><p>  /*定時中斷0處理函數(shù)*/       void timer0(void) interrupt 1 using 1    &

136、#160;  {          TH1=-Ti0/256;TL1=-Ti0%256;//設(shè)置定時器T0的初設(shè)值          S++;        

137、0;         //計數(shù)         }</p><p>  其中S為旋轉(zhuǎn)一圈定時器1實際中斷數(shù)(既實際顯示的列數(shù)),D為調(diào)整值,N為旋轉(zhuǎn)一圈定時器所需的中斷數(shù)(既所需顯示的列數(shù))。程序分析如下:</p><

138、p>  0、在外部中斷的處理程序里,先給定時器一個合適的初設(shè)值Pt。</p><p>  程序開始,D=0,Ti0即為600(按需設(shè)定),并得到定時器初設(shè)值。</p><p>  1、定時器開始計數(shù),每溢出一次S自加一次。</p><p>  2、完成一圈后,處理外部中斷函數(shù)。</p><p>  當(dāng)S>N時,修正值D增大,使定時

139、器T1的時間值增大,隨之S值減小。</p><p>  當(dāng)S<N時,修正值D減小,使定時器T1的時間值減小,隨之S值增大。</p><p>  當(dāng)S=N時,修正值不產(chǎn)生變化。</p><p>  函數(shù)中N值是按需設(shè)定的常數(shù)。</p><p>  6.4 數(shù)字顯示模式</p><p>  時鐘的上半部分和下半部分的

140、顯示是相反的,故需要對數(shù)字顯示進(jìn)行調(diào)整。故分2步顯示,第一步顯示上半部分,正常顯示。程序如下:</p><p>  if(ii<16) </p><p><b>  {</b></p><p>  P2=0xf1;P1=~nAsciiDot1[jj*2+v[ii]*16]; //顯示的上半圓部分(正顯)</p>

141、;<p>  P2=0xf2;P1=~nAsciiDot1[1+jj*2+v[ii]*16]; </p><p><b>  }</b></p><p>  16表示顯示16個字</p><p>  第二步顯示下半部分,因需和上半部現(xiàn)實相反,故下半部反向顯示,程序如下:</p><p>  e

142、lse if(ii<32) </p><p><b>  {</b></p><p>  P2=0xf2;P1=~nAsciiDot2[14-jj*2+v[ii]*16]; //顯示的下半圓部分(反顯)</p><p>  P2=0xf1;P1=~nAsciiDot2[15-jj*2+v[ii]*16];</p>

143、<p><b>  }</b></p><p>  6.5 指針顯示模式</p><p>  顯示時,由于要將12點的位置和數(shù)字模式統(tǒng)一顯示到正上方,而不是中斷發(fā)生處,故需進(jìn)行轉(zhuǎn)換:</p><p>  P2=0xf1;P1=(0xfe<<3*(ii%5==4))&(0xff>>2*(ii==Tme0

144、))&(0xfe<<5*(ii%15==14));</p><p>  P2=0xf2;P1=(0xff*(ii!=Tme0)*(ii!=Tme1))&(0xff>>4*(ii==Tme2));</p><p>  P2=0xf4;P1=(0xff*(ii!=Tme0)*(ii!=Tme1)*(ii!=Tme2));</p><p

145、>  P2=0xf8;P1=(0xff*(ii!=Tme0)*(ii!=Tme1)*(ii!=Tme2));</p><p><b>  七、總結(jié)與體會</b></p><p>  回顧起此次單片機(jī)課程設(shè)計,至今我仍感慨頗多,從選題到定稿,從理論到實踐,在整整兩星期的日子里,可以說得是苦多于甜,但是可以學(xué)到很多很多的的東西,同時不僅可以鞏固了以前所學(xué)過的知識,而

146、且學(xué)到了很多在書本上所沒有學(xué)到過的知識。通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實際動手能力和獨立思考的能力。在設(shè)計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固。DS1302和單片機(jī)

147、解碼紅外這一部份花了一天多才弄明白,深感自己對所學(xué)過的知識的理解之淺。</p><p>  這次的課設(shè)硬件弄的時間比較長,因為是用萬用版焊制,出現(xiàn)比較多的問題,例如芯片的管腳就因大意弄錯了序號好幾次,經(jīng)過幾次的仔細(xì)查找才找出了問題的所在。程序方面倒沒有太大的錯誤發(fā)生,不過到最好作品完成的時候DS1302突然壞了,但未能及時發(fā)現(xiàn),直到花了一天的時間排查了所有硬件才最終確定了DS1302的損壞導(dǎo)致顯示出現(xiàn)亂碼,這也直

148、接導(dǎo)致了我們的作品未能在第一天被驗收。</p><p>  這次單片機(jī)課程設(shè)計。我們發(fā)揮團(tuán)隊精神。相互去學(xué)習(xí),去解決問題的所在,以及一起探討。希望我們在實訓(xùn)結(jié)束后同樣能夠去更進(jìn)一步的去學(xué)習(xí)單片機(jī),鞏固和加深對單片機(jī)的學(xué)習(xí)。</p><p><b>  八、參考文獻(xiàn)</b></p><p>  [1].李朝青.單片機(jī)原理及接口技術(shù)(第3版).北京

149、航天航空大學(xué)出版社,2005 年10月</p><p>  [2].譚浩強(qiáng).C語言程序設(shè)計(第二版)·北京:清華大學(xué)出版社,1999年12月</p><p>  [3].彭偉. 單片機(jī)C語言程序設(shè)計實訓(xùn)100例:基于8051+Proteus仿真 .電子工業(yè)出版社.2009年</p><p><b>  [4].網(wǎng)上資料</b><

150、;/p><p><b>  附錄A 完整源程序</b></p><p>  #include <reg52.h></p><p>  #include <intrins.h></p><p>  #include <absacc.h></p><p>  #defi

151、ne uchar unsigned char</p><p>  unsigned char code maxnum[]={59,23,31,12,99}; //調(diào)整值最大限量</p><p>  unsigned char code minnum[]={0,0,1,1,0}; //調(diào)整值最小限量</p><p>  unsigned char code

152、nAsciiDot1[] = // ASCII</p><p><b>  {</b></p><p>  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // - -</p><p>  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</p&

153、gt;<p>  0x00,0x0C,0x00,0x06,0x00,0x03,0x80,0x01, // -/-</p><p>  0xC0,0x00,0x60,0x00,0x30,0x00,0x00,0x00,</p><p>  0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x06, // -:-</p><p> 

154、 0x30,0x06,0x00,0x00,0x00,0x00,0x00,0x00,</p><p>  0xF8,0x07,0xFC,0x0F,0x04,0x09,0xC4,0x08, // -0-</p><p>  0x24,0x08,0xFC,0x0F,0xF8,0x07,0x00,0x00,</p><p>  0x00,0x00,0x10,0x08,0x

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論