基于STC89C51單片機的模擬電梯設計畢業(yè)論文_第1頁
基于STC89C51單片機的模擬電梯設計畢業(yè)論文_第2頁
基于STC89C51單片機的模擬電梯設計畢業(yè)論文_第3頁
基于STC89C51單片機的模擬電梯設計畢業(yè)論文_第4頁
基于STC89C51單片機的模擬電梯設計畢業(yè)論文_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、題 目:基于stc89c51單片機的模擬電梯設計 目錄一、 設計任務11.1 設計內(nèi)容與要求1二、設計系統(tǒng)主要功能的說明22.1 設計設備的選擇22.2 設計原理2三、硬件電路設計33.1電源部分33.2按鍵部分43.3 數(shù)碼管顯示原理53.4電機驅動原理53.5單片機最小系統(tǒng)6四、軟件設計流程74.1 延時程序控制74.1.1 循環(huán)延時服務控制84.1.2 編碼按鍵掃描控制84.2 軟件的實現(xiàn)84.2.1主程序的實現(xiàn)84.2.2子函數(shù)服務程序的實現(xiàn)94.2.3 鍵盤掃描的實現(xiàn)方法9五、軟、硬件的調(diào)試115.1 調(diào)試方案的確定115.2 調(diào)試過程11六、設計心得11參考文獻13附錄a 模擬電梯

2、的程序15摘要: 本設計是使用宏晶公司的stc89c51rc加外圍器件作控制單元,用數(shù)碼管顯示,制作的經(jīng)濟實惠的電梯模擬系統(tǒng)。其原理圖可分為按鍵部分、顯示部分、電機部分、最小系統(tǒng)部分。兩個按鍵(一個電梯內(nèi),一個電梯外)對應一個樓層,另有開門、關門兩個按鍵。芯片一旦檢測到某樓層的按鍵被按下,就會在對應端口輸出5v高電平驅動電機來到該樓層,程單序會延遲幾分鐘,等人進入電梯后,關門,去到要去的樓層。在整個過程中,數(shù)碼管會顯示樓層數(shù)。最小系統(tǒng)為單片機提供時鐘信號和復位功能。 關鍵詞:stc89c51 單片機 模擬電梯 四位一體數(shù)碼管一、 設計任務(選題) 隨著科技的發(fā)展,單片機因強大的功能、低廉的價格

3、,越來越被廣泛使用,成為很多電子產(chǎn)品中不可缺少的部分。同時因為單片機是模擬電子與數(shù)字電子的結合品,它的應用對于我們電子專業(yè)來說是一門必要掌握的課程。 電梯對人們來說已經(jīng)是必不可少了乘載工具,所以將單片機應用于實際的生活中,才達到學以致用、舉一反三的境界。二、 方案設計1.處理部分:現(xiàn)在的單片機越來越注重功耗和處理數(shù)據(jù)快慢的問題,目前最低功耗最有發(fā)展?jié)摿Φ膯纹瑱C是美國ti公司的msp430系列。不過這里為了學以致用和節(jié)約成本,同時電梯的處理數(shù)據(jù)就不需要那么高的速度,所以選用8位的stc89c51單片機。2.顯示部分:本來可以用15*18的點陣,可是考慮到成本和接電路布線的繁瑣,更糟糕的是那耗電大

4、而不是實際的電路就沒必要。所以直接用四位的數(shù)碼管顯示就好了。3.控制部分:本來可以用4*4的鍵盤,現(xiàn)在只用了四位數(shù)碼管代表三層樓,所以只用3個按鍵代表梯內(nèi)3層樓,3個按鍵代表梯外3層樓,加上“關門”和“開門(延時)鍵各一個,總共8個鍵組成編碼式按鍵就行了。功能:三、 硬件部分1.原理框圖2.原理圖細分電源部分:用變壓器把交流電220v轉為交流電9v(不能小于或者等于交流電5伏,因為三端穩(wěn)壓管7805的輸入端輸出端電波壓差為2.5v),交流9v經(jīng)過整流橋d1后得到平均值為8.1v單方向全波脈動電壓,其中停含有較大的汶波,為了得到平滑的電壓,在其后面加濾波電容濾除交流成分。滌綸電容104可用來抵消

5、輸入端的電感效應,還可以消除電源的高頻干擾。一般取值是0.1-1uf。波動較大8.1v電壓經(jīng)7805的1腳輸入,輸出端輸出穩(wěn)定的5v,最后還要用電解電容10uf和滌綸電容104再次濾波,使電壓更穩(wěn)定,以供單片機和其他元器件需要。按鍵部分:8個按鍵分別是電梯外三個鍵代表想電梯來到的每一層樓,電梯內(nèi)三個鍵代表想要去的三層樓,一個關門鍵和一個開門鍵。它們一邊直接接地,另一邊直接接stc的p1和p3口,這樣就可以用高低電平去判斷,然后執(zhí)行對應鍵的操作函數(shù)。顯示部分:用一個四位的共陽數(shù)碼管,再用四個9015(pnp)三極管去控制顯示。這樣就不會占用四個i/o而浪費資源。當然數(shù)碼管還要加上100的限流電阻

6、。再備用一個led燈。電機部分:用p20和p21輸出高低之間去驅動8550組成的對稱電路,從而控制電機的正轉和反轉。晶振部分:用12m和30pf的滌綸電容使單片機stc89c51起振,從而為單片機stc89c51提供頻率信號。最小系統(tǒng):用一個按鍵、200和利用電容(電解電容22uf)充放電原理去使stc89c51重新上電復位。四、 軟件部分1. 程序流程圖五、 調(diào)試和驗證首先布局好電路的擺布,如何讓人一目了然,如何好看。跟著把電路焊接完畢。 先不要急著把單片機插上去整個系統(tǒng)調(diào)試,而是先測試電源部分5v正常與否。當我測試到5v波動很大或者直接沒有時,發(fā)現(xiàn)三端穩(wěn)壓管7805之后的那個滌綸電容104

7、已經(jīng)擊穿了,換了一個之后電源穩(wěn)定正常了。 然后在仿真軟件proteus上對照自己設計的電路畫了個電路圖,因為上面沒有9015三極管只有通用的pnp三極管只好用這個來替補。當我在keil c51上隨便編了一個顯示5678的函數(shù)把它灌入仿真軟件上調(diào)試時,發(fā)現(xiàn)數(shù)碼管四位都是顯示8。然后我再倒頭看看程序是否錯誤,感覺真的沒錯啊。又用另外的方式編寫了顯示1234的程序,它還是一樣顯示4444。我就在keil 上一步一步地調(diào)試程序,真的感覺沒有錯,當時一時懵了。最后我就做了決定,直接把把程序燒進上,插上到電路板上,那顯示竟然與自己編寫的完全一致喔。那時一片黑云散了,心情很好。 后來覺得調(diào)試不方便,不可能每

8、次都要把程序燒進單片機上在電路板上調(diào)試。我就仿真軟件上把那個通用三極管換成反相放大器,這樣調(diào)試就好了。六、心得每一次努力都總會有或多或少的收獲,所以當我們做每一件事時都要全力以赴,否則就不要去做。這對我們以后工作乃至生活形成一個良好的習慣和心態(tài)。結論謝辭在、 首先感謝各位老師三年來的教導。俗話說入靠師傅,修行在個人。剛接觸這個專業(yè)時,還不清楚學什么,能學到什么,而現(xiàn)在雖說七、參考文獻 譚浩強編著.c語言程序設計胡宴如、耿蘇燕編著.模擬電子技術 劉守義、楊宏麗、王靜霞編著.單片機應用技術 鄭鵬思、林遠長、董前程、矯津毅編著.protel99 se附錄a模擬電梯程序#includesbit key

9、3=p11;sbit key2=p10;sbit key1=p12;sbit key4=p13;sbit key5=p14;sbit key6=p37;sbit key7=p36; /關門升降sbit key8=p35; /開門延時鍵sbit p24=p24;sbit p25=p25;sbit p26=p26;sbit p27=p27;sbit zhengzhuan=p20; /電動機正轉sbit fanzhuan=p21; /電動機反轉unsigned int i,j;unsigned char sanlou=0;unsigned charerlou=0;bit biaozhi=0;unsi

10、gned charyilou=0;unsigned char qusanlou=0;unsigned char querlou=0;unsigned char quyilou=0; unsigned char code tab=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/-延時1ms函數(shù)-void delay(unsigned int t) for(i=0;it;i+) for(j=0;j121;j+) ; /-外按三樓函數(shù)-void display3(void) if(qusanlou=1) for(i=0;i500;i+) for(

11、j=0;j121;j+) ; if(p26=0)/如果現(xiàn)在在一樓則顯示從一樓到三樓函數(shù) p2=0xb0; p0=tab1; for(i=0;i500;i+) for(j=0;j121;j+) if(key2=0) /判讀外二樓有沒有人按下 delay(10); while(key2=0); erlou=1; if(key8=0&qusanlou=1);/同時要是之前的內(nèi)三樓鍵按下才有效 delay(10); while(key8=0); delay(1000); /如果再次開門就延時1s if(key7=0) delay(10); while(key7=0); i=200;/把i變成200跳出

12、延時函數(shù) zhengzhuan=1; fanzhuan=0; /電機正轉 delay(1000); delay(1000); delay(1000); delay(1000);/上一層樓的時間 p2=0xd0; p0=tab2; for(i=0;i500;i+) for(j=0;j121;j+) if(key8=0&qusanlou=1); /同時要是內(nèi)三樓鍵按下才有效 delay(10); while(key8=0); delay(1000); /如果再次開門就延時1s if(key7=0) delay(10); while(key7=0); i=200;/把i變成200跳出延時函數(shù) if(

13、erlou=1) delay(1000); /在二樓停留多1s當模擬有人進出 zhengzhuan=0; fanzhuan=0; /電機停止 zhengzhuan=1; fanzhuan=0; /電機正轉 delay(1000); delay(1000); delay(1000); delay(1000);/上一層樓的時間 p2=0xe0; p0=tab3; for(i=0;i500;i+) for(j=0;j121;j+) if(key8=0&qusanlou=1); /同時要是內(nèi)三樓鍵按下才有效 delay(10); while(key8=0); delay(1000); /如果再次開門就

14、延時1s if(key7=0) delay(10); while(key7=0); i=200;/把i變成200跳出延時函數(shù) if(p25=0) p2=0xd0; p0=tab2; zhengzhuan=1; fanzhuan=0; /電機正轉 delay(1000); delay(1000); delay(1000); delay(1000); p2=0xe0; p0=tab3; if(p24=0)/如果現(xiàn)在還是顯示3樓 p2=0xe0; p0=tab3; sanlou=0; erlou=0; qusanlou=0; zhengzhuan=0; fanzhuan=0; /電機停止/-外按二樓

15、函數(shù),不過最后還是到先三樓去-void display2(void) if(querlou=1) for(i=0;i500;i+) for(j=0;j121;j+) ; if(p26=0) /如果現(xiàn)在在一樓則顯示從一樓到二樓再到三樓函數(shù) p2=0xb0; p0=tab1; for(i=0;i500;i+) for(j=0;j121;j+) if(key8=0&querlou=1); /同時要是內(nèi)二樓鍵按下才有效 delay(10); while(key8=0); delay(1000); /如果再次開門就延時1s if(key7=0) delay(10); while(key7=0); i=2

16、00;/把i變成200跳出延時函數(shù) zhengzhuan=1; fanzhuan=0; /電機正轉 delay(1000); delay(1000); delay(1000); delay(1000); /上一層樓的時間 p2=0xd0; p0=tab2; for(i=0;i500;i+) for(j=0;j121;j+) if(key8=0&querlou=1); /同時要是內(nèi)二樓鍵按下才有效 delay(10); while(key8=0); zhengzhuan=0; fanzhuan=0; /電機停止 delay(1000); /如果再次開門就延時1s if(key7=0) delay

17、(10); while(key7=0); i=200;/把i變成200跳出延時函數(shù) zhengzhuan=0; fanzhuan=0; /電機停止 delay(1000); delay(1000); delay(1000);/在二樓停留多1s當模擬有人進出 zhengzhuan=1; fanzhuan=0; /電機正轉 delay(1000); delay(1000); delay(1000); delay(1000);/上一層樓的時間 p2=0xe0; p0=tab3; for(i=0;i500;i+) for(j=0;j121;j+) if(key8=0&querlou=1); /同時要是

18、內(nèi)二樓鍵按下才有效 delay(10); while(key8=0); delay(1000); /如果再次開門就延時1s if(key7=0) delay(10); while(key7=0); i=200;/把i變成200跳出延時函數(shù) erlou=0; biaozhi=biaozhi;/為了不讓在顯示完上升函數(shù)時再去顯示下降函數(shù) /- / 如果現(xiàn)在是在三樓的話 /- if(p24=0&biaozhi=0) /如果現(xiàn)在在三樓的話則從三樓到二樓再到一樓 p2=0xe0; p0=tab3; for(i=0;i200;i+) for(j=0;j121;j+) if(key8=0&querlou=1

19、); /同時要是內(nèi)二樓鍵按下才有效 delay(10); while(key8=0); delay(1000); /如果再次開門就延時1s if(key7=0) delay(10); while(key7=0); i=200;/把i變成200跳出延時函數(shù) zhengzhuan=0; fanzhuan=1; /電機反轉 delay(1000); delay(1000); delay(1000); delay(1000);/上一層樓的時間 p2=0xd0; p0=tab2; for(i=0;i200;i+) for(j=0;j121;j+) if(key8=0&querlou=1); /同時要是內(nèi)

20、二樓鍵按下才有效 delay(10); while(key8=0); zhengzhuan=0; fanzhuan=0; /電機停止 delay(1000); /如果再次開門就延時1s if(key7=0) delay(10); while(key7=0); i=200;/把i變成200跳出延時函數(shù) zhengzhuan=0; fanzhuan=0; /電機停止 delay(1000); /在二樓停留多2s當模擬有人進出 zhengzhuan=0; fanzhuan=1; /電機反轉 delay(1000); delay(1000); delay(1000); delay(1000);/上一層

21、樓的時間 p2=0xb0; p0=tab1; for(i=0;i200;i+) for(j=0;j121;j+) if(key8=0&querlou=1); /同時要是內(nèi)二樓鍵按下才有效 delay(10); while(key8=0); delay(1000); /如果再次開門就延時1s if(key7=0) delay(10); while(key7=0); i=200;/把i變成200跳出延時函數(shù) erlou=0; biaozhi=0; querlou=0; zhengzhuan=0; fanzhuan=0; /電機停止/-外按一樓函數(shù)-void display1(void) if(qu

22、yilou=1) for(i=0;i500;i+) for(j=0;j121;j+) ; if(p24=0) /如果現(xiàn)在在三樓則顯示從三樓到一樓函數(shù) p2=0xe0; p0=tab3; for(i=0;i200;i+) for(j=0;j121;j+) if(key2=0)/判讀外二樓有沒有人按下 delay(10); while(key2=0); erlou=1; if(key8=0&quyilou=1); /同時要是內(nèi)一樓鍵按下才有效 待添加的隱藏文字內(nèi)容2 delay(10); while(key8=0); delay(1000); /如果再次開門就延時1s if(key7=0) del

23、ay(10); while(key7=0); i=200;/把i變成200跳出延時函數(shù) zhengzhuan=0; fanzhuan=1; /電機反轉 delay(1000); delay(1000); delay(1000); delay(1000);/上一層樓的時間 p2=0xd0; p0=tab2; for(i=0;i200;i+) for(j=0;j121;j+) if(key8=0&quyilou=1); /同時要是內(nèi)一樓鍵按下才有效 delay(10); while(key8=0); zhengzhuan=0; fanzhuan=0; /電機停止 delay(2000); /如果再

24、次開門就延時2s if(key7=0) delay(10); while(key7=0); i=200;/把i變成200跳出延時函數(shù) if(erlou=1) zhengzhuan=0; fanzhuan=0; /電機停止 delay(1000); /在二樓停留多1s當模擬有人進出 zhengzhuan=0; fanzhuan=1; /電機反轉 delay(1000); delay(1000); delay(1000); delay(1000);/上一層樓的時間 p2=0xb0; p0=tab1; for(i=0;i200;i+) for(j=0;j121;j+) if(key8=0&quyilou=1); /同時要是內(nèi)一樓鍵按下才有效 delay(10); while(key8=0); delay(2000); /如果再次開門就延時2s if(key7=0) delay(10); while(key7=0); i=200;/把i變成200跳出延時函數(shù) yil

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論