版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)課程設(shè)計報告--基于stc89c52單片機(jī)的電子時鐘(日歷)
- STC89C52單片機(jī).doc
- STC89C52單片機(jī).doc
- STC89C52單片機(jī).doc
- stc89c52單片機(jī).pdf
- stc89c52單片機(jī).pdf
- STC89C52單片機(jī).doc
- stc89c52單片機(jī).pdf
- STC89C52單片機(jī).doc
- STC89C52單片機(jī).doc
- STC89C52單片機(jī).doc
- STC89C52單片機(jī).doc
- STC89C52單片機(jī).doc
- stc89c52單片機(jī).pdf
- STC89C52單片機(jī).doc
- stc89c52單片機(jī).pdf
- 單片機(jī)課程設(shè)計報告--基于stc89c52單片機(jī)的實驗平臺開發(fā)設(shè)計
- 單片機(jī)課程設(shè)計報告--基于stc89c52單片機(jī)的實驗平臺開發(fā)設(shè)計
- 單片機(jī)課程設(shè)計報告---基于stc89c52的溫度測控系統(tǒng)設(shè)計
- 基于stc89c52單片機(jī)紅外測溫系統(tǒng)設(shè)計
評論
0/150
提交評論