版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> ××大學(xué)××學(xué)院課程設(shè)計</p><p><b> ××大學(xué)××學(xué)院</b></p><p><b> 二○一一年六月</b></p><p> 摘要:當(dāng)前,人們對住房的需求量越來越多,很多家庭都不止一套住房。但是
2、,我國的住房面積有限,為了更好的解決這一問題,于是,很多住房都像商務(wù)建筑一樣,修建成電梯公寓的形式,這樣便能容納更多的住戶。對于電梯的人性化設(shè)計,也顯得很重要了。</p><p> 本次設(shè)計,就是基于AT89S51系列單片機的自動電梯工作的模擬方案。其中涉及到按鍵中斷模塊、LCD人機交互顯示界面模塊、LED流水燈控制模塊、PWM步進(jìn)電機模擬控制模塊。</p><p> 關(guān)鍵字:AT89
3、S51 ,電梯, 脈寬調(diào)制</p><p> Abstract:Currently, more people demand for housing condition, many families have more than an apartment. However,the area we can use is limited, in order to better solving this problem
4、, so many houses are the same as commercial buildings, elevator apartment building into a form that can accommodate more tenants. The user-friendly design for the elevator, it is very important. The design is based o
5、n AT89S51 MCU escalator works as a simulation program. Refering to key interrupt module, LCD int</p><p> Key words:AT89S51 ,Elevator ,PWM</p><p><b> 目 錄</b></p><p>
6、; 1.總體設(shè)計方案1</p><p> 1.1 硬件設(shè)計框圖1</p><p> 1.2 軟件設(shè)計流程圖2</p><p><b> 2.模塊設(shè)計3</b></p><p> 2.1 電源設(shè)計3</p><p> 2.1.1 電源相關(guān)元件的選取3</p>
7、;<p><b> (1)電容3</b></p><p><b> ?。?)穩(wěn)壓芯片3</b></p><p> 2.2 電梯升降狀態(tài)指示燈4</p><p> 3.硬件電路設(shè)計5</p><p> 3.1 原理圖5</p><p> 3
8、.2 PCB圖5</p><p> 4.軟件程序代碼6</p><p> 4.1 相關(guān)頭文件6</p><p> 4.2 主程序代碼9</p><p><b> 5.設(shè)計總結(jié)14</b></p><p><b> 6.參考文獻(xiàn)15</b></
9、p><p><b> 前言</b></p><p> 隨著經(jīng)濟的發(fā)展,人們對住房的需求量越來越多,很多家庭都不止一套住房。但是,我國的住房面積有限,為了更好的解決這一問題,于是,很多住房都像商務(wù)建筑一樣,修建成電梯公寓的形式,這樣便能容納更多的住戶。對于電梯的人性化設(shè)計,也顯得很重要了。</p><p> 本次設(shè)計,就是基于AT89S51系列
10、單片機的自動電梯工作的模擬方案。其中設(shè)計到按鍵中斷模塊、LCD人機交互顯示界面模塊、LED流水燈控制模塊、PWM步進(jìn)電機模擬控制模塊。</p><p> 首先,通過按鍵和LCD1602設(shè)置電梯運行環(huán)境,比如說總共樓層設(shè)置、報警設(shè)置等(還可以新增其他功能,即是對系統(tǒng)進(jìn)行升級)。然后,電梯開始運動,電梯每隔20秒上(或下)一層樓,每到一層樓,停留20秒。通過流水燈方向,可以判斷電梯的上下情況,通過LCD1602的顯
11、示內(nèi)容,可以得到電梯當(dāng)前所到的樓層。</p><p> 本次設(shè)計沒有使用任何已被別人寫好的程序或者電路模塊,所有工程文件都是從開始創(chuàng)建到最終定稿的步驟完成的,也許有很多不足之處,但通過不斷升級、改進(jìn),相信會做到更好的。</p><p><b> 1.總體設(shè)計方案</b></p><p> 1.1 硬件設(shè)計框圖</p><
12、;p> 圖1 硬件結(jié)構(gòu)框圖</p><p> 硬件結(jié)構(gòu)相對簡單,除最小系統(tǒng)外,其他外設(shè)包括:LCD1602顯示(負(fù)責(zé)設(shè)置電梯工作環(huán)境時人機交互界面和當(dāng)前樓層的顯示)、帶方向箭頭的LED燈群(一流水燈得形式負(fù)責(zé)指示電梯升降狀態(tài))、電機模擬燈(兩個燈分別模擬PWM控制電梯電機的正反轉(zhuǎn))以及一個簡單的按鍵電路(負(fù)責(zé)電機的工作環(huán)境的初始化設(shè)置。</p><p> 1.2 軟件設(shè)計流程
13、圖</p><p><b> 圖2 程序流程圖</b></p><p><b> 2.模塊設(shè)計</b></p><p><b> 2.1 電源設(shè)計</b></p><p> 2.1.1 電源相關(guān)元件的選取</p><p><b>
14、(1)電容</b></p><p> 電路設(shè)計中,在電源的設(shè)計部分時,都要考慮到電源的穩(wěn)定性。在一般與電網(wǎng)相連的情況下,都會有各種各樣的干擾信號,為了保證電路能夠正常工作,我們需要對電源的輸入輸出部分進(jìn)行濾波、整流。因而會用到旁路、去耦電容。通過計算,選取104或者105電容,效果較好。另外,為了使輸出端的信號更平滑,可以加上22UF~220UF的電容。</p><p>&l
15、t;b> (2)穩(wěn)壓芯片</b></p><p> 在很多簡單的電源電路,使用5V穩(wěn)壓芯片7805的居多,但這塊芯片有很多不足之處,很重要的一個因素就是它的輸入端要求比輸出端高3V以上的電壓才能正常工作。在實際電路中,要滿足8V的電壓輸入,似乎有些繁瑣。所以本次設(shè)計采用了三端可調(diào)穩(wěn)壓管LM317作為電源部分的穩(wěn)壓芯片??梢酝ㄟ^一個10K的變阻器調(diào)節(jié)輸出端的電壓,如圖3。</p>
16、<p> 圖 3 穩(wěn)壓模塊電路圖</p><p> 輸出電壓可通過公式進(jìn)行運算。因為控制在小于100uA時,這一項的誤差可以忽略不計。因此,調(diào)節(jié)R2與R1的關(guān)系就可得到我們在應(yīng)用中需要的輸出電壓。加上濾波電容,就是我們的電源模塊,如圖4。</p><p><b> 圖4 電源電路圖</b></p><p> 2.2 電梯
17、升降狀態(tài)指示燈</p><p> 圖5 升降狀態(tài)指示燈群</p><p> 當(dāng)電梯向上或者向下運動的時候,都會有對應(yīng)的帶方向的箭頭LED燈群像流水燈一樣動態(tài)顯示。如上圖,豎直一列的6個LED燈兩旁的箭頭燈都是由另外的IO口控制共同控制的。這個效果在實物工作的時候,就很容易觀賞到。再看每個箭頭部分,其限流保護(hù)電阻的阻值略有不同,這是因為同樣的IO口,驅(qū)動的LED的數(shù)量卻不同,為了盡量是
18、每只LED發(fā)光強度一樣,所以選擇的電阻有所差異。</p><p><b> 3.硬件電路設(shè)計</b></p><p><b> 3.1電路原理圖</b></p><p><b> 圖6 電路原理圖</b></p><p> 3.2 電路PCB圖</p>
19、<p> 圖7 電路PCB圖</p><p><b> 4.軟件程序代碼</b></p><p><b> 4.1頭文件程序</b></p><p> 軟件代碼部分自己寫的頭文件代碼只包含一個與LCD1602顯示的H文件-“1602C51.h”。</p><p><b>
20、; 詳細(xì)代碼內(nèi)容如下:</b></p><p> //使用該1602驅(qū)動庫文件時,須調(diào)用包含文件<reg51.h>或<regx52.h></p><p> #define dataport P0 //定義相關(guān)端口和引腳</p><p> sbit RS=P2^3;</p><p&
21、gt; sbit RW=P2^4;</p><p> sbit EN=P2^5;</p><p> sbit busy_flag=P0^7;</p><p> void delay(void)</p><p><b> {</b></p><p> unsigned char i;&l
22、t;/p><p> for(i=0;i<140;i++);</p><p><b> }</b></p><p> /*void check_busy(void)//查忙信號函數(shù) </p><p><b> { </b></p><p><b&
23、gt; do{</b></p><p> dataport=0xff;</p><p><b> RS=0;</b></p><p><b> RW=1; </b></p><p><b> EN=1; </b></p><p>
24、;<b> EN=0;</b></p><p><b> delay();</b></p><p> } while(busy_flag);</p><p><b> } */</b></p><p> void command(unsigned char dat)
25、 //指令操作函數(shù)</p><p><b> {</b></p><p><b> RS=0;</b></p><p><b> RW=0;</b></p><p> dataport=dat;</p><p><b>
26、EN=1;</b></p><p><b> EN=0;</b></p><p><b> delay();</b></p><p><b> }</b></p><p> void init(void)//LCD1602初始化</
27、p><p><b> { </b></p><p> command(0x38);</p><p><b> delay();</b></p><p> command(0x38);</p><p><b> delay();</b><
28、/p><p> command(0x38);</p><p><b> delay();</b></p><p> command(0x38);</p><p><b> delay();</b></p><p> command(0x18);</p>&
29、lt;p><b> delay();</b></p><p> command(0x06);</p><p><b> delay();</b></p><p> command(0x0c);</p><p><b> delay();</b></p>
30、;<p> command(0x01);</p><p><b> delay();</b></p><p> command(0x01);</p><p><b> delay();</b></p><p><b> }</b></p>
31、<p> void display_addr(unsigned char x,unsigned char y) //顯示字符時須//調(diào)用顯示地址初始值、設(shè)置函數(shù)</p><p><b> {</b></p><p><b> if(x<16)</b></p><p><b> {<
32、/b></p><p> if(y==0) x=0x80+x;</p><p> else x=0xc0+x;</p><p> command(x);</p><p><b> }</b></p><p><b> }</b></p>
33、<p> void w_char(unsigned char dat) //顯示字符</p><p><b> {</b></p><p> //check_busy();</p><p><b> RS=1;</b></p><p><b> RW=0
34、;</b></p><p> dataport=dat; </p><p><b> EN=1;</b></p><p><b> EN=0; </b></p><p><b> delay();</b></p><p><b
35、> }</b></p><p> void w_str(unsigned char x,unsigned char y,unsigned char *s) //顯示字</p><p><b> //符串</b></p><p><b> {</b></p><p> d
36、isplay_addr(x,y);</p><p> while(*s!='\0')</p><p><b> {</b></p><p> w_char(*(s++));</p><p><b> }</b></p><p><b> }
37、</b></p><p><b> 4.2 主程序代碼</b></p><p> #include"regx52.h"</p><p> #include"1602C51.h"</p><p> #define U8 unsigned char</p>
38、;<p> #define U16 unsigned int</p><p> #define floor_init 50 // Default the numbers of floors</p><p> #define LEDS_PORT P1 // defined for describing elevator's status</p
39、><p> sbit sw_up=P2^7; // defined for describing elevator's direction and low level is effective</p><p> sbit sw_down=P2^6; // defined for describing elevator's direction and
40、 low level is effective</p><p> sbit LED1=P2^0; // defined for describing motor to step forward</p><p> sbit LED2=P2^1; // defined for describing motor to step backward</p>
41、<p> U8 *str="0123456789"; //define string str for LCD1602's displaying</p><p> U8 key_1;//record the value of keys</p><p> bit key_2=0;</p><p> U8 flo
42、ors=floor_init; //max value is floor_init</p><p> U8 floors_counter=1; //max value is floors</p><p> U8 LED_flow=0; //max value is 7 for there are 7 status LEDS</p><p> U8 c
43、lock_counter=80*floor_init;//within 20 seconds past a floor and pause for 20 seconds</p><p> bit clock_flag=0;</p><p> bit motor_PWM_flag=0;</p><p> bit up_down_flag=0; //‘0’for
44、 up , '1'for down</p><p> bit motor_pause=0;</p><p> void delay_nms(U8 i)</p><p><b> {</b></p><p><b> U8 j;</b></p><p>
45、<b> U16 k;</b></p><p> for(j=0;j<i;j++)</p><p> for(k=0;k<1000;k++);</p><p><b> }</b></p><p> void lcd_disp(void)</p><p>
46、;<b> {</b></p><p> switch(key_1)</p><p><b> {</b></p><p><b> case(0):</b></p><p><b> {</b></p><p> w_
47、str(0,0,"current floor is");</p><p> display_addr(0,1);</p><p> w_char('~');</p><p> w_char(str[floors_counter/10]);</p><p> w_char(str[floors_cou
48、nter%10]);</p><p> w_str(4,1,"key1 to set");</p><p><b> break;</b></p><p><b> }</b></p><p><b> case(1):</b></p>
49、<p><b> {</b></p><p> if(key_2!=key_2)floors++;</p><p> if(floors==(floor_init+1))floors=1;</p><p> w_str(0,0,"set floors' No. ");</p><
50、;p> w_str(0,1,"floors No. is:");</p><p> display_addr(15,1);</p><p> w_char(str[floors/10]);</p><p> w_char(str[floors%10]);</p><p><b> break;&l
51、t;/b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> main(void)</p><p><b> {</b></p&
52、gt;<p><b> IT0=1;</b></p><p><b> IT1=1;</b></p><p> TMOD=0x01;</p><p> TH0=(65536-500)/256;</p><p> TL0=(65536-500)%256;</p>
53、<p> TMOD=0x10;</p><p> TH1=(65536-200)/256;</p><p> TL1=(65536-200)%256;</p><p><b> ET1=1;</b></p><p><b> ET0=1;</b></p><
54、p><b> TR1=1;</b></p><p><b> EX0=1;</b></p><p><b> EX1=1;</b></p><p><b> EA=1;</b></p><p> init(); //LCD
55、1602 initialized</p><p> key_1=key_2=0;</p><p><b> while(1)</b></p><p><b> {</b></p><p> lcd_disp();</p><p> if(motor_pause==1
56、)</p><p><b> {</b></p><p> if(up_down_flag==0) //up</p><p><b> {</b></p><p> sw_down=1;</p><p><b> sw_up=0;</b>
57、</p><p> LEDS_PORT=0xff<<LED_flow;</p><p><b> LED2=0;</b></p><p> LED1=motor_PWM_flag;</p><p><b> }</b></p><p> else
58、 //down</p><p><b> { </b></p><p><b> sw_up=1;</b></p><p> sw_down=0;</p><p> LEDS_PORT=0x3f>>(8-LED_flow);</p><p>
59、<b> LED1=0;</b></p><p> LED2=motor_PWM_flag;</p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p>&
60、lt;p><b> {</b></p><p><b> LED1=1;</b></p><p><b> LED2=1;</b></p><p><b> }</b></p><p><b> }</b></
61、p><p><b> }</b></p><p> void t0(void) interrupt 1</p><p><b> {</b></p><p> TH0=(65536-500)/256;</p><p> TL0=(65536-500)%256;</
62、p><p><b> TF0=0; </b></p><p> clock_flag=~clock_flag; //5ms signal used when it is nessary</p><p> LED_flow++;</p><p> if(LED_flow==7)LED_flow=0;</p
63、><p> clock_counter++;</p><p> if(clock_counter==80*floors)</p><p> clock_counter=0;</p><p> if((clock_counter%80)/40)//</p><p> motor_pause=0;</p>
64、<p> else motor_pause=1;</p><p> if(!(clock_counter%80))floors_counter++;</p><p> if(floors_counter==(floors+1))</p><p><b> {</b></p><p> floors
65、_counter=1;</p><p> up_down_flag=~up_down_flag;</p><p><b> }</b></p><p><b> }</b></p><p> void t1(void) interrupt 3</p><p>&l
66、t;b> {</b></p><p> TH1=(65536-200)/256;</p><p> TL1=(65536-200)%256;</p><p><b> TF1=0;</b></p><p> motor_PWM_flag=~motor_PWM_flag;</p>
67、<p><b> }</b></p><p> void key1(void) interrupt 0</p><p><b> {</b></p><p> delay_nms(15);</p><p><b> }</b></p><
68、p> void key1(void) interrupt 0</p><p><b> {</b></p><p> delay_nms(15);</p><p><b> IE0=0;</b></p><p> if(key_1<1)</p><p>
69、<b> key_1++;</b></p><p> else key_1=0;</p><p><b> }</b></p><p> void key2(void) interrupt 2</p><p><b> {</b></p><p&g
70、t; delay_nms(15);</p><p><b> IE1=0;</b></p><p> key_2=~key_2;</p><p><b> }</b></p><p><b> 5.設(shè)計總結(jié)</b></p><p> 本次課程
71、設(shè)計的時間并不充裕,因為之前四級考試花費了大量時間,而且各科考試也即將來臨,所以用在課程設(shè)計上的時間并不多。因此這次能夠順利完成課程設(shè)計歸功于××教授以及實驗指導(dǎo)老師××提供的大量的幫助與指導(dǎo)顯得尤為的重要。在這次課程設(shè)計中,我學(xué)到了很多以前未能學(xué)到的東西,比如說團(tuán)隊精神。作為組員,我還需要完成自己的任務(wù)。在這次課程設(shè)計中,我負(fù)責(zé)的是為系統(tǒng)設(shè)計原理圖,編寫源程序代碼。如何提高硬件與軟件之間的兼容性
72、,如何保證硬件與軟件的穩(wěn)定性,也是我面臨的問題。</p><p> 其次,作為一個組長,我時時刻刻都在為如何調(diào)度組員任務(wù)已經(jīng)搜集他們的意見而努力著。當(dāng)我們遇到新的問題時,我必須要第一時間搜集起來,然后及時地上網(wǎng)搜索相關(guān)答案,或者尋求老師幫助以解決問題。對于各組員所做的任務(wù),我還需要審核與協(xié)助修改,尤其是負(fù)責(zé)書寫報告的同學(xué),他所給出的理論解釋、功能描述是否合理,是否清楚,這些問題都需要認(rèn)真的審核。</p&g
73、t;<p> 最后,再次感謝××老師和××教授提供的幫助,感謝各位組員的積極配合和熱心參與。</p><p><b> 6.參考文獻(xiàn)</b></p><p> [1]康華光,張林等.電子技術(shù)基礎(chǔ)模擬部分[M].高等教育出版社,2003.5.120-135.</p><p> [2]閻
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電梯課程設(shè)計---電梯模擬控制系統(tǒng)設(shè)計
- 模擬電梯微機原理課程設(shè)計
- c語言課程設(shè)計-自動提款模擬系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--電梯模擬
- 四層電梯自動控制課程設(shè)計
- 課程設(shè)計---四層電梯plc控制系統(tǒng)的模擬
- 四層電梯自動控制系統(tǒng)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告--電梯模擬
- plc課程設(shè)計---四層電梯自動控制
- 四層電梯自動控制plc課程設(shè)計
- 四層電梯自動控制系統(tǒng) 課程設(shè)計報告
- 四層電梯自動控制plc課程設(shè)計
- plc電梯和自動混洗課程設(shè)計-- 三層電梯自動控制
- 電梯課程設(shè)計-- 基于plc的電梯控制系統(tǒng)設(shè)計
- _課程設(shè)計(論文)-plc控制電梯系統(tǒng)設(shè)計
- plc課程設(shè)計報告---四層電梯控制系統(tǒng)的模擬
- 電梯控制課程設(shè)計
- 電梯控制課程設(shè)計
- 電梯控制課程設(shè)計
- 電梯課程設(shè)計報告
評論
0/150
提交評論