找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 9896|回復(fù): 1
收起左側(cè)

基于單片機(jī)設(shè)計(jì)的8層電梯模擬系統(tǒng)

[復(fù)制鏈接]
ID:289106 發(fā)表于 2018-5-2 15:23 | 顯示全部樓層 |閱讀模式
目錄
摘要.............................................................................................................................................. I
Abstract........................................................................................................................................ II
1  緒論........................................................................................................................................ 1
1.1  課題背景....................................................................................................................... 1
1.2  電梯的發(fā)展趨勢............................................................................................................ 1
1.3  設(shè)計(jì)目的....................................................................................................................... 3
1.4  本設(shè)計(jì)完成的工作......................................................................................................... 3
2  總體方案設(shè)計(jì).......................................................................................................................... 4
2.1  硬件設(shè)計(jì)....................................................................................................................... 4
2.2.1  引言................................................................................................................... 4
2.1.2  主控芯片選擇..................................................................................................... 4
2.1.3  電源選取............................................................................................................ 5
3  硬件實(shí)現(xiàn)及單元電路設(shè)計(jì)......................................................................................................... 5
3.1  主控制模塊................................................................................................................... 5
3.2  單片機(jī)的時(shí)鐘電路與復(fù)位電路設(shè)計(jì)................................................................................ 5
3.3  電源設(shè)計(jì)....................................................................................................................... 6
3.4  電梯呼叫按鍵電路......................................................................................................... 6
3.5  樓層顯示和樓層指示電路圖........................................................................................... 7
3.6  電梯上下指示電路......................................................................................................... 7
3.7  聲音提醒電路................................................................................................................ 8
4  系統(tǒng)軟件設(shè)計(jì)方案................................................................................................................... 8
4.1  主程序流程圖................................................................................................................ 8
4.2  電梯各情況下所對(duì)應(yīng)的處理方法.................................................................................. 10
4.3  本章小結(jié)..................................................................................................................... 10
5  系統(tǒng)的安裝與調(diào)試.................................................................................................................. 11
5.1 安裝步驟....................................................................................................................... 11
結(jié)論............................................................................................................................................ 11
致謝............................................................................................................................................ 11
參考文獻(xiàn)..................................................................................................................................... 12
附錄1  整機(jī)電路原理圖............................................................................................................. 13
附錄2   部分源程序................................................................................................................... 14


摘要
    本文介紹了一種采用STC89C52芯片進(jìn)行的電梯模擬控制系統(tǒng),介紹了如何使用單片機(jī)進(jìn)行編程來實(shí)現(xiàn)電子控制的方法。單片機(jī)編程實(shí)現(xiàn)功能,簡潔多變,大大縮短了研發(fā)周期,同時(shí)能使電梯控制系統(tǒng)體積更小功能更強(qiáng)大。本設(shè)計(jì)模擬了電梯控制系統(tǒng)所需的一些基本功能,能通過能通過按鍵選擇樓層,數(shù)碼管顯示實(shí)時(shí)樓層數(shù),LED燈組成的箭頭指示上下方向。本次設(shè)計(jì)更注重了把一些所學(xué)的知識(shí)加入到設(shè)計(jì)中。主要包括采用了STC89C52芯片,使用C語言進(jìn)行編程,使其具有了更強(qiáng)的移植性,更加利于產(chǎn)品的開發(fā)。

1.2 電梯的發(fā)展趨勢
    綠色化:綠色理念是電梯發(fā)展總趨勢。發(fā)展趨勢主要有如下:不斷改進(jìn)產(chǎn)品的設(shè)計(jì)、生產(chǎn)環(huán)保型低能耗、低噪聲、無漏油、無漏水、無電磁干擾、無井道導(dǎo)軌油漬污染的電梯。電梯曳引采用尼龍合成纖維曳引繩、鋼皮帶等無潤滑油污染曳引方式。電梯裝璜將采用無(少)環(huán)境污染材料、電梯空載上升和滿載下行電機(jī)再生發(fā)電回收技術(shù),安裝電梯將無需安裝腳手架,電梯零件在生產(chǎn)和使用過程中對(duì)環(huán)境沒有影響(如剎車皮一定不能使用石棉)并且材料是可以回收的。
   降低能耗:減少電梯能耗的措施是多方面的。主要包括:選擇減小電梯機(jī)械系統(tǒng)的慣性和磨擦阻力;合理運(yùn)用對(duì)重和平衡重。驅(qū)動(dòng)系統(tǒng)使用永磁同步無齒輪曳引機(jī)從永磁同步電機(jī)工作原理可知其勵(lì)磁是由永磁鐵來實(shí)現(xiàn)的,不需要定子額外提供勵(lì)磁電流 因而電機(jī)的功率因數(shù),可以達(dá)到很高(理論上可以達(dá)到1)。同時(shí)永磁同步電機(jī)的轉(zhuǎn)子無電流通過,不存在轉(zhuǎn)子耗損問題,一般比異步電機(jī)降低45%~60%耗損。由于沒有效率低,高能耗蝸輪蝸桿傳動(dòng)副,能耗進(jìn)一步降低。在停站較少的群梯布置中,一個(gè)主機(jī)驅(qū)動(dòng)兩個(gè)轎廂分別上下運(yùn)行是一種節(jié)能的方案。而減少能耗的另一途徑是電梯運(yùn)行過程的能耗控制。利用電梯空載上行、滿載下行時(shí)電機(jī)處以發(fā)電狀態(tài)的特性,將再生能量反饋給電網(wǎng),這種節(jié)能措施在高速梯上效果顯著。還有一種節(jié)能方案將在軟件控制中得以實(shí)現(xiàn)。如建立實(shí)時(shí)控制的交通模式,盡量以較少的運(yùn)行次數(shù)來運(yùn)載較多的乘客,使電梯的停站次數(shù)減至最少。電梯召喚與轎廂指令合一的樓層入口乘客登記方案是電梯控制方式的一項(xiàng)革命性技術(shù),使原來層站上乘客未知的目的層變得一目了然,從而使控制系統(tǒng)的派梯效率達(dá)到最高。減少運(yùn)行過程能耗的另一措施是將電梯運(yùn)行中的加減速度模式設(shè)置成變參數(shù),即電梯控制系統(tǒng)中運(yùn)行的速度、加速度以及加速度變化率曲線既隨運(yùn)行距離變化,也隨轎廂負(fù)載變化通過仿真軟件模擬,確定出不同樓層之間的最佳運(yùn)行曲線。利用電梯機(jī)房在樓頂?shù)膬?yōu)勢,充分利用太陽能作為電梯的補(bǔ)充能源也將是新的研究課題。
   智能化:隨著計(jì)算機(jī)技術(shù),通訊技術(shù)與控制技術(shù)的發(fā)展使大廈的智能化成為現(xiàn)實(shí),而電梯是智能建筑中的重要交通工具,其技術(shù)發(fā)展及智能化程度也倍受世人關(guān)注。智能化的電梯首先要與智能大廈中所有自動(dòng)化系統(tǒng)聯(lián)網(wǎng),如與樓宇控制系統(tǒng)、消防系統(tǒng)、保安監(jiān)控系統(tǒng)等交互聯(lián)系,使電梯成為高效優(yōu)質(zhì)、安全舒適的服務(wù)工具。
從電梯運(yùn)行的控制智能化角度講,要求電梯有優(yōu)質(zhì)的服務(wù)質(zhì)量,控制程序中應(yīng)采用先進(jìn)的調(diào)度規(guī)則,使群控管理有最佳的派梯模式,F(xiàn)在的群控算法中已不是單一地依賴“乘客等候時(shí)間最短”為目標(biāo),而是采用模糊理論、神經(jīng)網(wǎng)絡(luò)、專家系統(tǒng)的方法,將要綜合考慮的因素(即專家知識(shí))吸收到群控系統(tǒng)中去,在這些因素中既有影響乘客心理的因素,也有對(duì)即將要發(fā)生的情況作評(píng)價(jià)決策,是專家系統(tǒng)和電梯當(dāng)前運(yùn)行狀態(tài)組合在一起的多元目標(biāo)控制。利用遺傳算法對(duì)客流交通模式及派梯規(guī)則進(jìn)行優(yōu)化、自學(xué)習(xí),實(shí)現(xiàn)電梯調(diào)度規(guī)則的進(jìn)化,以適應(yīng)環(huán)境的變化!耙匀藶楸尽痹O(shè)計(jì)的電梯控制系統(tǒng),將會(huì)使電梯的服務(wù)質(zhì)量越來越好。
1.3  設(shè)計(jì)目的
   目前電梯控制系統(tǒng)大多采用繼電器或者可編程控制器(PLC)的控制方式,存在著成本高,需要三相供電等缺點(diǎn),本設(shè)計(jì)給出了一種基于單片機(jī)的電梯模型控制系統(tǒng)設(shè)計(jì)。以單片機(jī)為核心,再輔以適當(dāng)?shù)挠布娐泛涂刂瞥绦騺頇z測和控制整個(gè)電梯的信號(hào),具有成本低、通用性強(qiáng)、靈活性大、擴(kuò)展容易及易于實(shí)現(xiàn)復(fù)雜控制等優(yōu)點(diǎn)。本設(shè)計(jì)注重基本理論知識(shí)與實(shí)際情況的緊密結(jié)合,同時(shí)對(duì)學(xué)生獨(dú)立創(chuàng)新和分析問題的能力進(jìn)行培養(yǎng),加深對(duì)知識(shí)的理解,為以后的工作和學(xué)習(xí)打下堅(jiān)實(shí)的基礎(chǔ)
1.4  本設(shè)計(jì)完成的工作
1、設(shè)計(jì)電路模擬8層電梯運(yùn)行
2、設(shè)置電梯的每一層按鍵,每按下一個(gè)按鍵有相應(yīng)的二極管指示。
3、電梯具有向上還是向下指示,同時(shí)能顯示到了哪一層
4、電梯無人時(shí),應(yīng)默認(rèn)停在第一層
5、自行構(gòu)建基于單片機(jī)的最小系統(tǒng),完成相關(guān)硬件電路的設(shè)計(jì)實(shí)現(xiàn);

   
2  總體方案設(shè)計(jì)
系統(tǒng)采用STC89C52單片機(jī)作為核心控制單元用于智能車系統(tǒng)的控制,小車車頭裝有5個(gè)ST178紅外光電傳感器,檢測地面黑線。ST178光電傳感器將地面黑線轉(zhuǎn)化成電信號(hào),用于判斷是否需要轉(zhuǎn)彎和小車是否偏離跑道。系統(tǒng)總體的設(shè)計(jì)方框圖如圖1所示。



圖1 系統(tǒng)總體方框圖
2.1  硬件設(shè)計(jì)
2.2.1  引言
    由于電梯要運(yùn)送客人到不同樓層,所以每一層都要有按鍵才可以滿足不同樓層顧客的需求。而且,電梯還要有人性化的顯示,如哪個(gè)按鈕按下了,就把它對(duì)應(yīng)樓層按鈕的二極管點(diǎn)亮,還要有一個(gè)數(shù)碼管實(shí)時(shí)顯示電梯所在層數(shù),用發(fā)光二極管組成的上下箭頭來表示電梯當(dāng)前的運(yùn)行方向等等。而這些零碎的原件,又需要高效的芯片來控制,它們相互之間的物理連接問題這些就是本章所要敘述的硬件設(shè)計(jì)部分。
2.1.2  主控芯片選擇
    考慮到現(xiàn)在市場上能夠買到的芯片以及系統(tǒng)要求實(shí)現(xiàn)的功能來看,采用STC89C52單片機(jī)。STC89C52單片機(jī)是CMOS工藝的8位單片機(jī),片內(nèi)含有8KB可反復(fù)擦寫的只讀程序存儲(chǔ)器和256字節(jié)的隨機(jī)存取存儲(chǔ)器,片內(nèi)置通用8位中央處理器(CPU)和Flash 存儲(chǔ)單元,使得STC89C52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。STC89C52具有以下標(biāo)準(zhǔn)功能:8k字節(jié)Flash,256字節(jié)RAM,32位I/O口線,2個(gè)數(shù)據(jù)指針,看門狗定時(shí)器,三個(gè)16位定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時(shí)鐘電路。另外,STC89C52可降至0Hz靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式?臻e模式下,CPU停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。這一模塊以單片機(jī)為中心把程序代碼燒進(jìn)去然后外圍接上復(fù)位電路、振蕩電路、鍵盤控制、LED顯示電路、報(bào)警電路等子模塊。
2.1.3  電源選取
     由于本系統(tǒng)是模擬電梯系統(tǒng),我們采用9V直流電源為系統(tǒng)供電。經(jīng)過7805穩(wěn)壓后為單片機(jī),指示燈,數(shù)碼管供電。經(jīng)過實(shí)驗(yàn)驗(yàn)證系統(tǒng)工作時(shí),數(shù)碼管、單片機(jī)、指示燈工作穩(wěn)定能夠滿足系統(tǒng)的要求。
3  硬件實(shí)現(xiàn)及單元電路設(shè)計(jì)3.1  主控制模塊
主控制最小系統(tǒng)電路如圖2所示。
圖2 單片主控電路
3.2  單片機(jī)的時(shí)鐘電路與復(fù)位電路設(shè)計(jì)
本系統(tǒng)采用STC89C52單片機(jī),要使單片機(jī)工作起來,就必須有電源,晶振,復(fù)位電路。本系統(tǒng)采用外部方式的時(shí)鐘電路和按鍵復(fù)位的復(fù)位電路,如下圖3圖4所示:  
                圖3 時(shí)鐘電路                    
圖4 復(fù)位電路
3.3  電源設(shè)計(jì)
    供電電源電路如圖5,9V電源經(jīng)78L05穩(wěn)壓后輸出5V供系統(tǒng)供電。D25為電源指示燈。C4、C6、C7、C5為電源濾波電容。
圖5 電源電路
3.4  電梯呼叫按鍵電路
   本系統(tǒng)模擬的是8層樓電梯,所以有8個(gè)按鍵,每一個(gè)按鍵對(duì)應(yīng)一層樓。8個(gè)按鍵接在P2口。
圖6 電梯呼叫按鍵電路圖
3.5  樓層顯示和樓層指示電路圖
圖7 電路圖
本系統(tǒng)總共8層,如圖7樓層顯示采用一位共陰數(shù)碼管顯示,每個(gè)樓層按鍵按下指示燈為8個(gè)發(fā)光二極管。
3.6  電梯上下指示電路
    電梯上下指示采用發(fā)光二級(jí)管組成一個(gè)箭頭,當(dāng)電梯向上時(shí),點(diǎn)亮向上的箭頭,向下時(shí)點(diǎn)亮向下的箭頭。電路圖如圖8所示
圖8 紅外光電傳感器安裝
3.7  聲音提醒電路
    當(dāng)電梯到達(dá)每一層時(shí)通過蜂鳴器聲音提醒,電路如圖9
圖9 聲提醒電路
4 系統(tǒng)軟件設(shè)計(jì)方案
4.1  主程序流程圖
電梯所處的狀態(tài)是整個(gè)程序成功運(yùn)行的核心保證。在電梯每經(jīng)過一個(gè)樓層時(shí),就會(huì)自動(dòng)調(diào)用該函數(shù),它的作用是基于高效率、短時(shí)間、人性化的基礎(chǔ)上,合理智能的對(duì)電梯的運(yùn)行進(jìn)行調(diào)度,結(jié)合實(shí)際情況,最終得出電梯下一個(gè)目標(biāo)停留樓層。其流程如圖10所示。
圖10 主程序流程圖
    由圖可知,程序中將實(shí)際情況分為四種情況來判斷:電梯上行且是去送人(即電梯此時(shí)位于底層,而高層有人呼叫要上樓)、電梯上行且是去接人(即電梯此時(shí)位于底層,而高層有人呼叫要下樓)、電梯下行且是去送人(即電梯此時(shí)位于高層,而低層有人呼叫要下樓)、電梯下行且是去接人(即電梯此時(shí)位于高層,而低層有人呼叫要上樓)。
    而這四種情況,也就包含了實(shí)際電梯中的絕大部分情況。情況不同,分析的方法也當(dāng)然不一樣。而首先,我們要了解電梯是如何得知此時(shí)它是上面四種的哪一種情況的呢?
    這可以分為兩個(gè)步驟:第一判斷電梯是上行還是下行;第二,判斷是去接人還是去送人。當(dāng)然,第一個(gè)是最好判斷的,因?yàn)殡娞菰谶\(yùn)行時(shí),有兩個(gè)與樓層有關(guān)的變量,一個(gè)為當(dāng)前所在樓層值,一個(gè)為目標(biāo)樓層值,當(dāng)電梯運(yùn)行時(shí),會(huì)讓這兩個(gè)值進(jìn)行比較,若前者大于后者,就為下行,從而讓狀態(tài)變量清零(由于電路中上下行的箭頭使用了非門,故在程序中,兩表示上下行的狀態(tài)變量清零時(shí)表示有效);反之,當(dāng)前者小于后者,即為上行,從而上行變量清零。
    至于是接人還是送人,是判別的難點(diǎn)。在此,巧妙地利用了兩個(gè)狀態(tài)變量scanup和scandown,前者等于所有上行按鍵和去幾層按鍵狀態(tài)變量的或,后者等于所有上行按鍵和去幾層按鍵狀態(tài)變量的或。由此可知,當(dāng)上行按鍵和去幾層按鍵均為0時(shí),電梯仍為上行狀態(tài),那么此時(shí),電梯的狀態(tài)肯定處于上樓接人的狀態(tài)中(即在高層,有人按了下行鍵)。反之,若它們中有一個(gè)為1(且按鍵所處樓層高于當(dāng)前電梯所在樓層,這個(gè)由其他函數(shù)來限定,防止電梯在上行過程中受已經(jīng)過樓層按鍵按下時(shí)的干擾),則電梯此時(shí)處于上樓送人狀態(tài),就會(huì)執(zhí)行對(duì)應(yīng)的子程序。其他的與此同理。
4.2  電梯各情況下所對(duì)應(yīng)的處理方法
    以電梯上行的兩種狀態(tài)為例。
    在實(shí)際應(yīng)用中,最簡單的情況莫過于電梯當(dāng)前為閑置狀態(tài),然后有一人按下按鍵呼叫,然后電梯便響應(yīng)呼叫。但是,實(shí)際情況往往比這復(fù)雜的多,在第一個(gè)人按下按鍵電梯運(yùn)行的過程中,還很有可能會(huì)有其他不同樓層的人按下不同的按鍵(上行或者下行)的情況發(fā)生。那么就必須得為電梯規(guī)定好一個(gè)特定的優(yōu)先級(jí)規(guī)則,讓其依據(jù)這個(gè)規(guī)則來運(yùn)行,以免亂作一團(tuán)。那么這個(gè)規(guī)則就必須要高效且人性化,在此,我們規(guī)定,當(dāng)電梯上行時(shí),均不理會(huì)那些按下行按鍵的顧客。并且,若在上行過程中,也有人在某層按的是上行按鍵,但是電梯此時(shí)已經(jīng)走過了該層,那么電梯也絕對(duì)不會(huì)再選擇先下行接他。當(dāng)然,當(dāng)將高層上行的顧客送完后(此時(shí)一般來說電梯已經(jīng)處于高層了),電梯便會(huì)檢測下行按鍵,若更高層有人呼叫下行,則電梯會(huì)選擇先去響應(yīng)他們,然后再下行的過程中依次響應(yīng)按了下行處于等待中的顧客,最后這些顧客都送完后,再去相應(yīng)那些電梯上行過程中,處于比電梯低的樓層卻按了上行鍵的顧客。
    簡單地說,若電梯處于上行狀態(tài),則在該過程中響應(yīng)不同顧客的優(yōu)先級(jí)(或者電梯響應(yīng)的先后順序)為:高層呼叫上行顧客>高層呼叫下行顧客>底層呼叫下行顧客>底層呼叫上行顧客。那么,當(dāng)電梯通過程序運(yùn)行得知到相應(yīng)狀態(tài)后,又是如何具體的判斷當(dāng)天所鎖定的目標(biāo)樓層是否要變更呢?現(xiàn)以上行為例,加以詳細(xì)說明:上行,且是送人,比如電梯當(dāng)前在二層,五樓有人呼叫上樓,那么它就要響應(yīng)這一呼叫,從而把自己的目標(biāo)樓層鎖定為五樓并向上運(yùn)行,而在五樓呼叫后不久,四樓也有人呼叫上樓(且電梯此刻還未運(yùn)行到六樓),那么在電梯運(yùn)行中,沒經(jīng)過一個(gè)樓層,會(huì)做一次判決,因?yàn)樗臉且灿腥撕艚,所以正常情況下,它應(yīng)該在判決后將目標(biāo)樓層定位四樓。而若四樓的顧客按下的是下行鍵,或者二樓的人按下呼叫鍵,電梯此時(shí)都會(huì)暫時(shí)不予理會(huì)。部分程序代碼見附錄。
4.3  本章小結(jié)
    本章介紹的是整體流程圖以及工作原理。
5  系統(tǒng)的安裝與調(diào)試5.1 安裝步驟
1.檢查元件的好壞
按電路圖買好元件后首先檢查買回元件的好壞,按各元件的檢測方法分別進(jìn)行檢測,一定要仔細(xì)認(rèn)真。而且要認(rèn)真核對(duì)原理圖是否一致,在檢查好后才可上件、焊件,防止出現(xiàn)錯(cuò)誤焊件后不便改正。
2.放置、焊接各元件
按原理圖的位置放置各元件,在放置過程中要先放置、焊接較低的元件,后焊較高的和要求較高的元件。特別是容易損壞的元件要后焊,在焊集成芯片時(shí)連續(xù)焊接時(shí)間不要超過10s,注意芯片的安裝方向。
結(jié)論
   經(jīng)過幾十天的艱苦奮斗,我最終完成了畢業(yè)設(shè)計(jì)的基本要求。在大學(xué)的最后一個(gè)學(xué)期里,我學(xué)到了很多的知識(shí)和技能。通過本次畢業(yè)設(shè)計(jì),我掌握了做科學(xué)研究的基本方法和思路,為今后的工作打下了堅(jiān)實(shí)的基礎(chǔ)。
   首先,我學(xué)會(huì)了對(duì)相關(guān)文獻(xiàn)的檢索。隨著計(jì)算機(jī)的普及以及網(wǎng)絡(luò)技術(shù)的發(fā)展,對(duì)文獻(xiàn)的檢索,收集資料的形式也變得越來越豐富。我們一方面可以利用學(xué)校圖書館資源,另一方面可以利用網(wǎng)絡(luò)來檢索資源,例如中國知網(wǎng)CNKI、IEEE、萬方數(shù)據(jù)庫、百度文庫、豆丁文庫等數(shù)據(jù)庫系統(tǒng)。
   其次,通過這次畢業(yè)設(shè)計(jì),培養(yǎng)了我的動(dòng)手能力,使我進(jìn)一步了解畢業(yè)設(shè)計(jì)的基本知識(shí)。鞏固了我的知識(shí)架構(gòu)體系,強(qiáng)化了我對(duì)大學(xué)期間所學(xué)到的基礎(chǔ)課以及專業(yè)課的認(rèn)識(shí)和理解,為今后的工作打下理論基礎(chǔ)。
最后,通過本次畢業(yè)設(shè)計(jì),使我懂得在遇到困惑和不解時(shí)要及時(shí)與老師和其他同學(xué)溝通,這樣才能更迅速地解決設(shè)計(jì)中遇到的問題,提供工作效率。
總之,這次畢業(yè)設(shè)計(jì)不是一次簡簡單單地完成一個(gè)課題。它不僅讓我鍛煉了動(dòng)手操作能力和分析解決問題的能力,鞏固了我的專業(yè)知識(shí),還讓我學(xué)到了很多東西,為我今后的工作打下基礎(chǔ)。
致謝
大學(xué)四年即將畫上一個(gè)句號(hào)了,畢業(yè)設(shè)計(jì)是我在學(xué)校交的最后一份答卷。在論文完成之際,感受收獲喜悅的同時(shí),心中充滿了更是感激之情。
首先感謝學(xué)校給我們提供的條件使我們有了一個(gè)可以對(duì)大學(xué)四年的知識(shí)進(jìn)行溫習(xí)總結(jié)并付諸實(shí)踐的機(jī)會(huì)。在此次畢業(yè)設(shè)計(jì)過程中,特別要感謝我的畢業(yè)實(shí)際指導(dǎo)老師,感謝您在這段日子里對(duì)我親切的關(guān)懷和悉心的指導(dǎo)。老師在我遇到難題時(shí),不但給予我技術(shù)上的幫助,更教會(huì)我諸多檢查及解決問題的方法。老師淵博的知識(shí)以及對(duì)待學(xué)生的耐心和責(zé)任感,不僅讓我對(duì)專業(yè)知識(shí)有了更深的理解,還教會(huì)了我們今后面對(duì)工作生活的態(tài)度。
借此機(jī)會(huì),我也感謝大學(xué)四年期間所有指導(dǎo)過我的老師,感謝他們對(duì)我無私的教誨和幫助,感謝他們的諄諄教導(dǎo)。
在此同時(shí),我也要感謝一直陪伴在我身邊給予我精神支持和行動(dòng)支持的同學(xué)們,正是由于你們的幫助和支持,我才能克服一個(gè)又一個(gè)的困難,并且讓我從你們身上學(xué)到了很多知識(shí)。
參考文獻(xiàn)
[1]童詩白 華成英 編著《模擬電子技術(shù)基礎(chǔ)》 高等教育出版社  2011年5月
[2]李朝青 編著《單片機(jī)原理及接口技術(shù)》 北京航天航空大學(xué)出版社 2011年1月
[3]馬忠梅  編著 《單片機(jī)的C語言應(yīng)用程序設(shè)計(jì)》     航空航天出版社 2003年7月
[4]佘新平 編著《數(shù)字電子技術(shù)》 華中科技大學(xué)出版社  2011年2月
[5]薛永毅 王淑英 何希才 編著《新型電源電路應(yīng)用實(shí)例》 電子工業(yè)出版社     2001年10月
附錄1  整機(jī)電路原理圖
附錄2   部分源程序
#include <reg52.h>            //調(diào)用單片機(jī)頭文件
#define uchar unsignedchar  //無符號(hào)字符型 宏定義  變量范圍0~255
#define uint  unsigned int      //無符號(hào)整型 宏定義    變量范圍0~65535
//數(shù)碼管段選定義       0    1   2    3   4          5      6      7     8    9      
uchar codesmg_du[]={0xde,0x90,0xcd,0xd9,0x93,0x5b,0x5f,0xd0,0xdf,0xdb
//                                   A     B     C    D          E   F    不顯示
                                    };   //斷碼  
uchar dis_smg[8] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};
bit flag_100ms,flag_1s;   
bit flag_stop = 1;   //用做到了相應(yīng)的樓停下
sbit beep  = P2^6;
sbit xia   = P2^0;
sbit zhong = P2^1;
sbit shang = P2^2;
uchar value2;
sbit led1 = P1^0;   //8個(gè)發(fā)光二極管定義
sbit led2 = P1^1;
sbit led3 = P1^2;
sbit led4 = P1^3;
sbit led5 = P1^4;
sbit led6 = P1^5;
sbit led7 = P1^6;
sbit led8 = P1^7;
uchar dt_1;  //1樓電梯標(biāo)志位
uchar dt_2;  //2樓電梯標(biāo)志位
uchar dt_3;  //3樓電梯標(biāo)志位
uchar dt_4;  //4樓電梯標(biāo)志位
uchar dt_5;  //5樓電梯標(biāo)志位
uchar dt_6;  //6樓電梯標(biāo)志位
uchar dt_7;  //7樓電梯標(biāo)志位
uchar dt_8;  //8樓電梯標(biāo)志位
uchar dt_value = 1;  //電梯到哪一層的變量
uchar dt_s_x ;    //電梯上下的標(biāo)志位
/***********************1ms延時(shí)函數(shù)*****************************/
void delay_1ms(uint q)
{
       uint i,j;
       for(i=0;i<q;i++)
              for(j=0;j<120;j++);
}
/********************獨(dú)立按鍵程序*****************/
uchar key_can;     //按鍵值
void key()      //獨(dú)立按鍵程序
{
       static uchar key_new;
       key_can = 20;                  //按鍵值還原
       P3 |= 0xff;
       if((P3 & 0xff) != 0xff)             //按鍵按下
       {
              delay_1ms(1);              //按鍵消抖動(dòng)
              if(((P3 &0xff) != 0xff) && (key_new == 1))
              {                                        //確認(rèn)是按鍵按下
                     key_new = 0;
                     switch(P3)
                     {
                            case0xfe: key_can = 1; break;   //得到按鍵值
                            case0xfd: key_can = 2; break;         //得到按鍵值
                            case0xfb: key_can = 3; break;   //得到按鍵值
                            case0xf7: key_can = 4; break;   //得到按鍵值
                            case0xef: key_can = 5; break;   //得到按鍵值
                            case0xdf: key_can = 6; break;         //得到按鍵值
                            case0xbf: key_can = 7; break;   //得到按鍵值
                            case0x7f: key_can = 8; break;   //得到按鍵值
                     }
              }                  
       }
       else
              key_new = 1;      
}
void key_with()
{
       if(key_can == 1)
       {
              led1 = 1;        //點(diǎn)亮發(fā)光二極管
              dt_1 = 1;       //
       }            
       if(key_can == 2)
       {
              led2 = 1;        //點(diǎn)亮發(fā)光二極管
              dt_2 = 1;
       }     
       if(key_can == 3)
       {
              led3 = 1;       //點(diǎn)亮發(fā)光二極管
              dt_3 = 1;
       }     
       if(key_can == 4)
       {
              led4 = 1;       //點(diǎn)亮發(fā)光二極管
              dt_4 = 1;
       }     
       if(key_can == 5)
       {
              led5 = 1;       //點(diǎn)亮發(fā)光二極管
              dt_5 = 1;
       }     
       if(key_can == 6)
       {
              led6 = 1;       //點(diǎn)亮發(fā)光二極管
              dt_6 = 1;
       }     
       if(key_can == 7)
       {
              led7 = 1;      
              dt_7 = 1;
       }     
       if(key_can == 8)
       {
              led8 = 1;      
              dt_8 = 1;
       }     
}
/*********************當(dāng)電梯不動(dòng)時(shí)、判斷是向上、還是向下**********************/
void tiandi_shang_xia()
{
       static uchar value;
       if(dt_s_x == 0)
       {
              
              flag_stop = 1;
              if(dt_value == 1)  //電梯在第1層停下不走了
              {
                     value = dt_2 + dt_3 + dt_4 + dt_5 + dt_6+ dt_7 + dt_8;
                     if(value != 0)
                     {
                            dt_s_x= 1;   //電梯向上      
                            shang= 0;      //顯示上
                            zhong= 0;   
                            xia= 1;                             
                     }
              }                  
              if(dt_value == 2)  //電梯在第2層停下不走了
              {
                     value = dt_3 + dt_4 + dt_5 + dt_6 + dt_7+ dt_8;
                     if(value != 0)
                     {
                            dt_s_x= 1;   //電梯向上走   
                            shang= 0;      //顯示上
                            zhong= 0;   
                            xia= 1;                             
                     }
                     value = dt_1;
                     if(value != 0)
                     {
                            dt_s_x= 2;   //電梯向下走   
                            xia= 0;   //顯示下
                            zhong= 0;   
                            shang= 1;                                      
                     }     
              }
              if(dt_value == 3)  //電梯在第3層停下不走了
              {
                     value = dt_4 + dt_5 + dt_6 + dt_7 + dt_8;
                     if(value != 0)
                     {
                            dt_s_x= 1;   //電梯向上走   
                            shang= 0;      //顯示上
                            zhong= 0;   
                            xia= 1;                             
                     }
                     value = dt_1 + dt_2;
                     if(value != 0)
                     {
                            dt_s_x= 2;   //電梯向下走   
                            xia= 0;   //顯示下
                            zhong= 0;   
                            shang= 1;     
                                                              
                     }     
              }     
              if(dt_value == 4)  //電梯在第4層停下不走了
              {
                     value = + dt_5 + dt_6 + dt_7 + dt_8;
                     if(value != 0)
                     {
                            dt_s_x= 1;   //電梯向上走   
                            shang= 0;      //顯示上
                            zhong= 0;   
                            xia= 1;                             
                     }
                     value = dt_1 + dt_2 + dt_3;
                     if(value != 0)
                     {
                            dt_s_x= 2;   //電梯向下走   
                            xia= 0;   //顯示下
                            zhong= 0;   
                            shang= 1;                                      
                     }     
              }     
              if(dt_value == 5)  //電梯在第5層停下不走了
              {
                     value = dt_6 + dt_7 + dt_8;
                     if(value != 0)
                     {
                            dt_s_x= 1;   //電梯向上走   
                            shang= 0;      //顯示上
                            zhong= 0;
                            xia= 1;                                   
                     }
                     value = dt_1 + dt_2 + dt_3 + dt_4;
                     if(value != 0)
                     {
                            dt_s_x= 2;   //電梯向下走   
                            xia= 0;   //顯示下
                            zhong= 0;   
                            shang= 1;                                      
                     }     
              }     
              if(dt_value == 6)  //電梯在第5層停下不走了
              {
                     value = dt_7 + dt_8;
                     if(value != 0)
                     {
                            dt_s_x= 1;   //電梯向上走   
                            shang= 0;      //顯示上
                            zhong= 0;
                            xia= 1;                                   
                     }
                     value = dt_1 + dt_2 + dt_3 + dt_4 + dt_5;
                     if(value != 0)
                     {
                            dt_s_x= 2;   //電梯向下走   
                            xia= 0;   //顯示下
                            zhong= 0;   
                            shang= 1;                                      
                     }     
              }     
              if(dt_value == 7)  //電梯在第5層停下不走了
              {
                     value = dt_8;
                     if(value != 0)
                     {
                            dt_s_x= 1;   //電梯向上走   
                            shang= 0;      //顯示上
                            zhong= 0;   
                            xia= 1;                             
                     }
                     value = dt_1 + dt_2 + dt_3 + dt_4 + dt_5+ dt_6;
                     if(value != 0)
                     {
                            dt_s_x= 2;   //電梯向下走   
                            xia= 0;   //顯示下
                            zhong= 0;   
                            shang= 1;                                      
                     }     
              }     
              if(dt_value == 8)   //電梯在第5層停下不走了
              {
                     value = dt_8;
                     if(value != 0)
                     {
                            dt_s_x= 1;   //電梯向上走   
                            shang= 0;      //顯示上
                            zhong= 0;   
                            xia= 1;                             
                     }
                     value = dt_1 + dt_2 + dt_3 + dt_4 + dt_5+ dt_6;
                     if(value != 0)
                     {
                            dt_s_x= 2;   //電梯向下走   
                            xia= 0;   //顯示下
                            zhong= 0;   
                            shang= 1;                                
                     }     
              }     
       }
}
/****************電梯向上、做最后的判斷是否還要繼續(xù)向上****************/
void dt_shang_guan()
{
       uchar value;
       if(dt_s_x == 1)    //電梯向上  做最后的判斷是否還要繼續(xù)向上
       {
              if(dt_value == 1) //在第1層
              {
                     value = dt_2 + dt_3 + dt_4 + dt_5 + dt_6+ dt_7 + dt_8;
                     if(value == 0)       //說明上面沒有人按下
                     {
                            dt_s_x= 0;  //電梯停下不動(dòng)了  
                            shang= 1;            //關(guān)閉上字
                            zhong= 1;  
                     }else
                            flag_stop= 1;      
              }            
              else if(dt_value== 2) //在第2層
              {
                     value = dt_3 + dt_4 + dt_5 + dt_6 + dt_7+ dt_8;
                     if(value == 0)       //說明上面沒有人按下
                     {
                            dt_s_x= 0;  //電梯停下不動(dòng)了  
                            shang= 1;            //關(guān)閉上字
                            zhong= 1;  
                     }else
                            flag_stop= 1;      
              }            
              else if(dt_value== 3) //在第3層
              {
                     value = + dt_6 + dt_7 + dt_8;
                     if(value == 0)       //說明上面沒有人按下
                     {
                            dt_s_x= 0;  //電梯停下不動(dòng)了  
                            shang= 1;            //關(guān)閉上字
                            zhong= 1;                                    
                     }else
                            flag_stop= 1;      
              }            
              else if(dt_value== 4) //在第4層
              {
                     value = dt_5 + dt_6 + dt_7 + dt_8;
                     if(value == 0)       //說明上面沒有人按下
                     {
                            dt_s_x= 0;  //電梯停下不動(dòng)了  
                            shang= 1;            //關(guān)閉上字
                            zhong= 1;  
                     }else
                            flag_stop= 1;            
              }            
              else if(dt_value== 5) //在第5層
              {
                     value = dt_6 + dt_7 + dt_8;
                     if(value == 0)       //說明上面沒有人按下
                     {
                            dt_s_x= 0;  //電梯停下不動(dòng)了  
                            shang= 1;            //關(guān)閉上字
                            zhong= 1;  
                     }else
                            flag_stop= 1;            
              }            
              else if(dt_value== 6) //在第6層
              {
                     value = dt_7 + dt_8;
                     if(value == 0)       //說明上面沒有人按下
            {
                            dt_s_x= 0;  //電梯停下不動(dòng)了  
                            shang= 1;            //關(guān)閉上字
                            zhong= 1;  
                     }else
                            flag_stop= 1;                    
              }     
              else if(dt_value== 7) //在第7層
              {
                     value = dt_8;
                     if(value == 0)       //說明上面沒有人按下
                     {
                            dt_s_x= 0;  //電梯停下不動(dòng)了  
                            shang= 1;            //關(guān)閉上字
                            zhong= 1;  
                     }else
                            flag_stop= 1;      
              }            
              else if(dt_value== 8) //在第8層
              {
                     dt_s_x = 0;  //電梯停下不動(dòng)了
                     shang = 1;            //關(guān)閉上字
                     zhong = 1;         
              }            
       }     
}
/****************電梯向下、做最后的判斷是否還要繼續(xù)向下****************/
void dt_xia_guan()
{
       uchar value;
       if(dt_s_x == 2)    //電梯向下  做最后的判斷是否還要繼續(xù)向下
       {
              if(dt_value == 1) //在第1層
              {
                     dt_s_x = 0;  //電梯停下不動(dòng)了
                     xia = 1;         //關(guān)閉上字
                     zhong = 1;         
                     flag_stop = 1;      
              }            
              else if(dt_value== 2) //在第2層
              {
                     value = dt_1;
                     if(value == 0)       //說明上面沒有人按下
                     {
                            dt_s_x= 0;  //電梯停下不動(dòng)了  
                            xia= 1;         //關(guān)閉上字
                            zhong= 1;  
                     }else
                            flag_stop= 1;      
              }            
              else if(dt_value== 3) //在第3層
              {
                     value = dt_1 + dt_2;
                     if(value == 0)       //說明上面沒有人按下
                     {
                            dt_s_x= 0;  //電梯停下不動(dòng)了  
                            xia= 1;         //關(guān)閉上字
                            zhong= 1;                                    
                     }else
                            flag_stop= 1;      
              }            
              else if(dt_value== 4) //在第4層
              {
                     value = dt_2 + dt_3;
                     if(value == 0)       //說明上面沒有人按下
                     {
                            dt_s_x= 0;  //電梯停下不動(dòng)了  
                            xia= 1;         //關(guān)閉上字
                            zhong= 1;  
                     }else
                            flag_stop= 1;            
              }            
              else if(dt_value== 5) //在第5層
              {
                     value = dt_1 + dt_2 + dt_4;
                     if(value == 0)       //說明上面沒有人按下
                     {
                            dt_s_x= 0;  //電梯停下不動(dòng)了  
                            xia= 1;         //關(guān)閉上字
                            zhong= 1;  
                     }else
                            flag_stop= 1;            
              }            
              else if(dt_value== 6) //在第6層
              {
                     value = dt_1 + dt_2 + dt_3 + dt_4 + dt_5;
                     if(value == 0)       //說明上面沒有人按下
            {
                            dt_s_x= 0;  //電梯停下不動(dòng)了  
                            xia= 1;         //關(guān)閉上字
                            zhong= 1;  
                     }else
                            flag_stop= 1;                    
              }     
              else if(dt_value== 7) //在第7層
              {
                     value = dt_1 + dt_2  + dt_4 + dt_5+ dt_6;
                     if(value == 0)       //說明上面沒有人按下
                     {
                            dt_s_x= 0;  //電梯停下不動(dòng)了  
                            xia= 1;         //關(guān)閉上字
                            zhong= 1;  
                     }else
                            flag_stop= 1;      
              }            
              else if(dt_value== 8) //在第8層
              {
                     value =  dt_3 + dt_4 + dt_5 + dt_6 + dt_7;
                     if(value == 0)       //說明上面沒有人按下
                     {
                            dt_s_x= 0;  //電梯停下不動(dòng)了  
                            xia= 1;         //關(guān)閉上字
                            zhong= 1;  
                     }else
                            flag_stop= 1;      
                     
              }            
       }            
}
/***********************電梯處理函數(shù)************************/
void td_dis()
{
       uchar value,value1;
       value = dt_1 + dt_2 + dt_3 + dt_4 + dt_5 + dt_6 + dt_7 + dt_8;
       if(value != 0)
       {              //100ms
              if(flag_stop == 1)       //到相應(yīng)的樓了  要停下
              {
/***************************向上走電梯***********************************/
                     if(dt_s_x != 0)              //向上走電梯
                     {
                            value1++;
                            if(value1>= 10)  //1s
                            {
                                   value1 = 0;
                                   if(dt_s_x == 1)             //向上走電梯
                                   {
                                          dt_value++;
                                          shang= 0;            //顯示上字
                                          zhong= 0;
                                   }
                                   if(dt_s_x == 2)             //向下走電梯
                                   {
                                          dt_value--;
                                          xia= 0;         //顯示下字
                                          zhong= 0;
                                   }                                 
                                   if(dt_value == 1)    //當(dāng)?shù)搅说谝粚拥臅r(shí)候
                                   {
                                          if(dt_1== 1)
                                          {
                                                 led1 = 0;               //關(guān)閉第一層發(fā)光二極管
                                                 dt_1 = 0;        //清零電機(jī)在的標(biāo)志
                                                 flag_stop = 0;   //到停下
                                                 beep = 0;        //打開蜂鳴器
                                          }                        
                                   }
                                   else if(dt_value == 2)    //當(dāng)?shù)搅说诙䦟拥臅r(shí)候
                                   {
                                          if(dt_2== 1)
                                          {
                                                 led2 = 0;               //關(guān)閉第二層發(fā)光二極管
                                                 dt_2 = 0;        //清零電機(jī)在的標(biāo)志
                                                 flag_stop = 0;   //到停下
                                                 beep = 0;        //打開蜂鳴器
                                          }                        
                                   }
                                   else if(dt_value == 3)    //當(dāng)?shù)搅说?層的時(shí)候
                                   {
                                          if(dt_3== 1)
                                          {
                                                 led3 = 0;               //關(guān)閉第3層發(fā)光二極管
                                                 dt_3 = 0;        //清零電機(jī)在的標(biāo)志
                                                 flag_stop = 0;   //到停下
                                                 beep = 0;        //打開蜂鳴器
                                          }                        
                                   }
                                   else if(dt_value == 4)    //當(dāng)?shù)搅说?層的時(shí)候
                                   {
                                          if(dt_4== 1)
                                          {
                                                 led4 = 0;               //關(guān)閉第4層發(fā)光二極管
                                                 dt_4 = 0;        //清零電機(jī)在的標(biāo)志
                                                 flag_stop = 0;   //到停下
                                                 beep = 0;        //打開蜂鳴器
                                          }                        
                                   }
                                   else if(dt_value == 5)    //當(dāng)?shù)搅说?層的時(shí)候
                                   {
                                          if(dt_5== 1)
                                          {
                                                 led5 = 0;               //關(guān)閉第5層發(fā)光二極管
                                                 dt_5 = 0;        //清零電機(jī)在的標(biāo)志
                                                 flag_stop = 0;   //到停下
                                                 beep = 0;        //打開蜂鳴器
                                          }                        
                                   }
                                   else if(dt_value == 6)    //當(dāng)?shù)搅说?層的時(shí)候
                                   {
                                          if(dt_6== 1)
                                          {
                                                 led6 = 0;               //關(guān)閉第6層發(fā)光二極管
                                                 dt_6 = 0;        //清零電機(jī)在的標(biāo)志
                                                 flag_stop = 0;   //到停下
                                                 beep = 0;        //打開蜂鳴器
                                          }                        
                                   }
                                   else if(dt_value == 7)    //當(dāng)?shù)搅说?層的時(shí)候
                                   {
                                          if(dt_7== 1)
                                          {
                                                 led7 = 0;               //關(guān)閉第7層發(fā)光二極管
                                                 dt_7 = 0;        //清零電機(jī)在的標(biāo)志
                                                 flag_stop = 0;   //到停下
                                                 beep = 0;        //打開蜂鳴器
                                          }                        
                                   }
                                   else if(dt_value == 8)    //當(dāng)?shù)搅说?層的時(shí)候
                                   {
                                          if(dt_8== 1)
                                          {
                                                 led8 = 0;               //關(guān)閉第8層發(fā)光二極管
                                                 dt_8 = 0;        //清零電機(jī)在的標(biāo)志
                                                 flag_stop = 0;   //到停下
                                                 beep = 0;        //打開蜂鳴器
                                          }                        
                                   }
                            }
                     }            
              }                                       
       }
       if(flag_stop == 0)
       {
//                   flag_stop = 1;      
//                   value1 = 0;
              value2 ++;
              if(value2 % 5 ==0)
              {
                     if(dt_s_x == 1)       //上
                     {
                            shang= ~shang;
                            zhong= ~zhong;                     
                     }
                     if(dt_s_x == 2)       //下
                     {
                            zhong= ~zhong;
                            xia= ~xia;                        
                     }            
              }
              if(value2 >=10) //1.0s
              {                  
                     beep = 1; //關(guān)閉蜂鳴器
              }
              if(value2 >=20)
              {
                     value2 = 0;                       
                     dt_shang_guan();  //電梯向上  做最后的判斷是否還要繼續(xù)向上
                     dt_xia_guan();       //電梯向下  做最后的判斷是否還要繼續(xù)向下
              }
       }     
}
/*************定時(shí)器0初始化程序***************/
void time_init()     
{
       EA   = 1;            //開總中斷
       TMOD = 0X01;    //定時(shí)器0、工作方式1
       ET0  = 1;             //開定時(shí)器0中斷
       TR0  = 1;             //允許定時(shí)器0定時(shí)
}
/******************主程序**********************/      
void main()
{
       P3 = 0xff;
       P2 = 0xff;
       P1 = 0x00;
       P0 = 0X00;      //單片機(jī)IO口初始化
       time_init();   //定時(shí)器初始化
       while(1)
       {
              key();              //按鍵程序
              if(key_can <20)
              {      
                     if(dt_s_x == 0)
                     {
                            value2= 0;
                            flag_stop= 1;
                     }
                     key_with();         
              }  
              tiandi_shang_xia();      //當(dāng)電梯不動(dòng)時(shí)、判斷是向上、還是向下
              P0 =smg_du[dt_value];     //顯示
              if(flag_100ms  == 1)
              {
                     flag_100ms = 0;
                     td_dis();               //電梯處理函數(shù)
              }
       }
}
/*************定時(shí)器0中斷服務(wù)程序***************/
void time0_int() interrupt 1
{     
       static uchar value;
       TH0 = 0x3c;
       TL0 = 0xb0;     // 50ms
       value ++;
       if(value % 2 == 0)
       {
              flag_100ms = 1 ;
       }
}

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:646110 發(fā)表于 2019-12-17 08:45 | 顯示全部樓層
很好,給力
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表