標(biāo)題: 單片機四層電梯控制系統(tǒng)設(shè)計最終版(含仿真+報告+程序源碼) [打印本頁]
作者: bfq443861 時間: 2018-7-12 21:26
標(biāo)題: 單片機四層電梯控制系統(tǒng)設(shè)計最終版(含仿真+報告+程序源碼)
0.png (56.27 KB, 下載次數(shù): 156)
下載附件
2018-7-13 02:41 上傳
0.png (12.79 KB, 下載次數(shù): 110)
下載附件
2018-7-13 02:34 上傳
4層電梯單片機控制設(shè)計
在1901年的上海,美國奧的斯公司安裝了中國最早的一座電梯,而今,我國電梯業(yè)已進入了高速發(fā)展的時期,商場、醫(yī)院、賓館、倉庫、住宅大樓等地方的電梯都被廣泛應(yīng)用著,直接與人們的生活息息相關(guān),給人們的生活帶來了極大的便利,是一種必不可少的垂直運輸交通工具。
拋開一些復(fù)雜的概念,單片機在我們的生活中觸手可及,尤其是在智能儀表,實時控制,機電一體化,辦公機械,家用電器等方面擁有廣泛的應(yīng)用領(lǐng)域。這次課設(shè)注重對單片機的理解應(yīng)用,明白單片機的工作原理,掌握單片機的接口技術(shù),中斷技術(shù),存儲技術(shù),時鐘方式和控制方式,這樣才能更好地利用單片機來做有效的設(shè)計,提高自己的綜合能力。
1. 設(shè)計任務(wù)
結(jié)合實際情況,基于AT89C52單片機設(shè)計一個四層電梯單片機控制系統(tǒng)。該系統(tǒng)應(yīng)滿足的功能要求為:
4層電梯運行控制,轎內(nèi)外呼叫,運行狀態(tài)顯示。獨立鍵盤、LED顯示樓層、指示燈。
(1) 電梯運行控制系統(tǒng)為四層控制系統(tǒng)。
(2) 電梯能夠轎內(nèi)外呼叫,并顯示運行的狀態(tài)。
(3) 設(shè)計系統(tǒng)具有獨立鍵盤控制,并有LED顯示樓層與指示燈。
主要硬件設(shè)備:AT89C52單片機: AT89C52是一個低電壓,高性能CMOS 8位單片機,片內(nèi)含8k bytes的可反復(fù)擦寫的Flash只讀程序存儲器和256 bytes的隨機存取數(shù)據(jù)存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器和Flash存儲單元,AT89C52單片機在電子行業(yè)中有著廣泛的應(yīng)用。
AT89C52有40個引腳,32個外部雙向輸入/輸出(I/O)端口,同時內(nèi)含2個外中斷口,3個16位可編程定時計數(shù)器,2個全雙工串行通信口,2 個讀寫口線,AT89C52可以按照常規(guī)方法進行編程,也可以在線編程。其將通用的微處理器和Flash存儲器結(jié)合在一起,特別是可反復(fù)擦寫的Flash存儲器可有效地降低開發(fā)成本。
AT89C52有PDIP、PQFP/TQFP及PLCC等三種封裝形式,以適應(yīng)不同產(chǎn)品的需求。
2. 整體方案設(shè)計
本設(shè)計采用AT89C52單片機作為核心,配以適當(dāng)接口作為輸入輸出通道。采用三行按鍵矩陣開關(guān)電路作為外呼內(nèi)選呼叫控制。實際電梯控制系統(tǒng)每層裝有一個傳感器,從而判斷車廂所在位置,本模型由10個獨立按鍵作為樓層到達信號傳輸給單片機,而后通過內(nèi)部電路從串口驅(qū)動數(shù)碼管顯示樓層數(shù)。當(dāng)電梯到達所選層,電梯開門延時等待進人并選層,然后延時關(guān)門執(zhí)行請求,若無請求則停在本層等待請求。軟件部分使用C語言,利用查詢方式來檢測用戶請求的按鍵信息。
圖2-1 基于單片機的四層電梯控制總原理圖
本系統(tǒng)硬件主要由復(fù)位模塊、顯示系統(tǒng)、擴展部分、矩陣控制模塊幾部分組成。各模塊的主要功能如下:
(1) 復(fù)位的功能其一用于程序初始化,其二也用于擺脫互鎖和跑飛。
(2) 顯示系統(tǒng)的功能分為顯示led燈顯示觸發(fā)樓層數(shù)和數(shù)碼管顯示當(dāng)前樓層數(shù)的兩個部分,用于顯示電梯系統(tǒng)此時正在運行的狀態(tài)。
(3) 擴展部分:因為單片機芯片的接口有限,故使用8155擴展串行口用以連接更多功能。
(4) 矩陣控制模塊:即內(nèi)呼外叫控制程序,用于控制電梯內(nèi)外電路。
系統(tǒng)的整體設(shè)計方案設(shè)計圖如圖2-2所示。
圖2-2 系統(tǒng)的整體方案設(shè)計圖
3. 系統(tǒng)硬件電路設(shè)計
3.1 單片機最小系統(tǒng)電路
圖3-1 單片機最小系統(tǒng)電路圖
單片機最小系統(tǒng)包括復(fù)位電路和時鐘電路。具體電路如圖3-1所示。
復(fù)位電路雖然簡單,但其作用非常重要。一個單片機系統(tǒng)能否正常運行,首先要檢查是否能復(fù)位成功。初步檢查可用于示波器探頭監(jiān)視RST引腳,按下復(fù)位鍵,觀察是否有足夠幅度的波形輸出(瞬時的),還可以通過改變復(fù)位電路阻容值進行試驗。本復(fù)位電路采用上電自動復(fù)位和手動復(fù)位組合。上電自動復(fù)位是在加電瞬間電容通過充電來實現(xiàn)的,在通電瞬間,電容C3通過R1K電阻充電,RST端出現(xiàn)正脈沖,用以復(fù)位。只要電源Vcc的上升時間不超過1ms,就可以實現(xiàn)自動上電復(fù)位,即接通電源就完成了系統(tǒng)的復(fù)位初始化。手動復(fù)位是通過按下S111后,通過電阻RR直接給服務(wù)端一個高電平使之復(fù)位。編程初始化設(shè)置數(shù)碼管顯示為1,并且等待樓層模擬傳感器讀取數(shù)據(jù)。
單片機最小系統(tǒng)包括復(fù)位電路。具體電路如圖3所示。
復(fù)位電路雖然簡單,但其作用非常重要。一個單片機系統(tǒng)能否正常運行,首先要檢查是否能復(fù)位成功。初步檢查可用于示波器探頭監(jiān)視RST引腳,按下復(fù)位鍵,觀察是否有足夠幅度的波形輸出(瞬時的),還可以通過改變復(fù)位電路阻容值進行試驗。本復(fù)位電路采用上電自動復(fù)位和手動復(fù)位組合。上電自動復(fù)位是在加電瞬間電容通過充電來實現(xiàn)的,在通電瞬間,電容C3通過R1K電阻充電,RST端出現(xiàn)正脈沖,用以復(fù)位。只要電源Vcc的上升時間不超過1ms,就可以實現(xiàn)自動上電復(fù)位,即接通電源就完成了系統(tǒng)的復(fù)位初始化。手動復(fù)位是通過按下S111后,通過電阻RR直接給服務(wù)端一個高電平使之復(fù)位。編程初始化設(shè)置數(shù)碼管顯示為1,并且等待樓層模擬傳感器讀取數(shù)據(jù)。
3.2 開關(guān)控制電路
圖3-2 開關(guān)控制電路設(shè)計圖實際上即為一個內(nèi)呼外叫系統(tǒng),現(xiàn)以呼叫信號的輸入為例,來說明信號輸入及單片機識別原理。如圖3所示,采
用P0口外接上拉電阻的并行輸入形式,來輸入外呼叫信號,本電路采用4×4中的10個矩陣鍵盤,行掃描法識別鍵值的原理,具體原理如下:
a) 判斷鍵盤中有無鍵按下 將全部行線PC.0-PC.3置低電平,然后檢測列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。
b) 判斷閉合鍵所在的位置 在確認(rèn)有鍵按下后,即可進入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時,其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。
由于沒有電梯控制硬件模型,只能用按鍵來模擬電梯到達位置的觸發(fā)信號。本電路采用獨立式按鍵非編碼鍵盤接口查詢方式。當(dāng)任何一個鍵按下時,與之相連的輸入數(shù)據(jù)線即被清0(低電平),而平時該線為1(高電平)。要判斷是否有鍵按下,用單片機的位處理指令十分方便。這種鍵盤結(jié)構(gòu)的優(yōu)點是電路簡單;缺點是當(dāng)鍵數(shù)較多時要占用較多的I/O口。
查詢方式鍵盤的處理程序比較簡單。本處理程序中沒有使用散轉(zhuǎn)指令,并且省略了軟件去抖動措施,只包括鍵查詢、鍵功能程序轉(zhuǎn)移。
3.3 顯示電路
3.3.1 led樓層觸發(fā)顯示燈電路

圖3-3-1 led樓層觸發(fā)顯示燈電路
本設(shè)計所用A/D轉(zhuǎn)換電路采用通用的ADC0809模數(shù)轉(zhuǎn)換芯片,它是一種8位數(shù)字輸出的逐次逼近式A/D轉(zhuǎn)換器件,轉(zhuǎn)換時間為100us! 其主要特性有……
ADC0809的工作原理為……
使用ADC0809應(yīng)該注意……
其與單片機的接口電路如圖3-1所示。
3.3.2 當(dāng)前樓層顯示電路
圖3-3-2 當(dāng)前樓層顯示電路
運用7SEG-MPX-4CA來實現(xiàn)輸出樓層信息和當(dāng)前樓層上下信息,7seg-mpx8-ca是共陽極數(shù)碼管顯示器,它左下側(cè)的abcdefg dp是LED數(shù)碼管顯示器的I/O口,是段選信號,右下側(cè)的12345678是它的位選信號,就是從左到右分別是第一位到第八位,段選信號與位選信號分別接到單片機的不同輸出口,例如段選信號可以接到P0口,位選信號可以接到P2口,共陽極的字形顯示代碼為:
Uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}.位選信號代碼為:uchar Digits[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};當(dāng)選中第一位時,段選信號就執(zhí)行從0到九的顯示。
3.4 8155串行口擴展電路
圖3-4 串行口擴展電路圖本次實驗所用的試驗箱內(nèi)部已經(jīng)接好8155的擴展電路,8155是一個有40引腳的塑封芯片,功能較強,廣泛的應(yīng)用在計算機電路中。它有兩個8位口A、B和一個6位口C,總共可以擴展出22條接線。它含一個可預(yù)置的計數(shù)器,計數(shù)范圍從2到16383,可用于延時、計數(shù)或分頻。它內(nèi)部還有256字節(jié)的RAM,可以補充CPU內(nèi)存的不足。為了能夠設(shè)置芯片的工作方式和了解芯片的狀態(tài),內(nèi)部還有命令寄存器和狀態(tài)寄存器。圖1為8155的引腳圖。其中,與 CPU相連的引腳有:CE是片選信號,當(dāng)CE=0時,芯片才與CPU交換信息。CE接到地址譯碼器上,由整個系統(tǒng)分配給高位地址,以保證任何時刻只有一個芯片可與CPU交換信息,不發(fā)生地址沖突;IO/M是接口或內(nèi)部RAM寄存器的選擇線。當(dāng)IO/M=1時,CPU是對I/O接口操作,當(dāng)IO/M=0時,CPU 是對RAM進行操作,它一般接到CPU的地址線A8上;AD0~AD7為地址數(shù)據(jù)總線;ALE 是地址鎖存信號輸入線;RD、WR分別是讀、寫控制線;RESET是復(fù)位線。當(dāng)RESET=1時,8155被復(fù)位。與外部設(shè)備連接的引腳有:TMRIN(timerin)是計數(shù)輸入線;接到待測的脈沖源;TMROUT(timerout)是計數(shù)輸出線;PA0~PA7為A口的8位輸入/輸出線;PB0~PB7為B口的8位輸入/輸出線;PC0~PC5為C口的6位輸入/輸出線。各接口的工作方式由控制命令決定。
8155各引腳功能說明如下:RST:復(fù)位信號輸入端,高電平有效。復(fù)位后,3個I/O口均為輸入方式。AD0~AD7:三態(tài)的地址/數(shù)據(jù)總線。與單片機的低8位地址/數(shù)據(jù)總線(P0口)相連。單片機與8155之間的地址、數(shù)據(jù)、命令與狀態(tài)信息都是通過這個總線口傳送的。RD:讀選通信號,控制對8155的讀操作,低電平有效。WR:寫選通信號,控制對8155的寫操作,低電平有效。CE:片選信號線,低電平有效。IO/M :8155的RAM存儲器或I/O口選擇線。當(dāng)IO/M =0時,則選擇8155的片內(nèi)RAM,AD0~AD7上地址為8155中RAM單元的地址(00H~FFH);當(dāng)IO/M =1時,選擇 8155的I/O口,AD0~AD7上的地址為8155 I/O口的地址。ALE:地址鎖存信號。8155內(nèi)部設(shè)有地址鎖存器,在ALE的下降沿將單片機P0口輸出的低8位地址信息及 ,IO/ 的狀態(tài)都鎖存到8155內(nèi)部鎖存器。因此,P0口輸出的低8位地址信號不需外接鎖存器。PA0~PA7:8位通用I/O口,其輸入、輸出的流向可由程序控制。PB0~PB7:8位通用I/O口,功能同A口。PC0~PC5:有兩個作用,既可作為通用的I/O口,也可作為PA口和PB口的控制信號線,這些可通過程序控制。TIMER IN:定時/計數(shù)器脈沖輸入端。TIMER OUT:定時/計數(shù)器輸出端。VCC:+5V電源。(1) 壓力傳感器的選定
3.5 總設(shè)計圖
圖3-5 總設(shè)計圖4. 系統(tǒng)程序設(shè)計
4.1 主程序流程圖

圖4-1 主程序流程圖
系統(tǒng)工作流程:(1)用菊陽仿真器使程序處于連續(xù)運行狀態(tài)
(2)顯示模塊顯示當(dāng)前樓層,主程序不斷地執(zhí)行鍵盤掃描程序,當(dāng)有鍵盤輸入時,主程序調(diào)用定時器中斷程序,并通過行列掃描方式讀取到是哪個鍵盤輸入。
(3)讀取到鍵盤之后,主程序調(diào)用顯示子程序,通過顯示上下和當(dāng)前樓層信息和LED輸出當(dāng)前按下鍵的信息以及開關(guān)門的信息向操作人員傳遞信息。
系統(tǒng)主程序流程圖如圖4-1所示。
4.2 定時器子程序流程圖
圖4-1 定時器程序流程圖
定時器子程序主要任務(wù)是完成3秒的定時,使顯示模塊能保持一段時間,使人能夠觀察到具體信息。如果沒有這一模塊,靠系統(tǒng)時鐘來控制,一些中間過程根本看不出來,也給軟件仿真和硬件仿真帶來不小的困難。
4.3 掃描子程序流程圖
掃描子程序主要任務(wù)是通過行列掃描方式確定具體鍵盤的輸入,先讓PA口輸出低電平,逐行掃描,直到能確定哪行有輸入,然后讀取PC口的信息,再與設(shè)定值進行比較,最后通過選擇環(huán)節(jié),確定最終的鍵盤號,如proteus圖中所示,PC0-PC3作為行線,PA0-PA2作為列線,相互配合完成掃描確認(rèn)工作,最終轉(zhuǎn)到輸出子程序并將所輸入的信息轉(zhuǎn)化為具體的上下和數(shù)字輸出,完成鍵盤掃描子程序的基本任務(wù)。

圖4-2 鍵盤掃描流程圖
控制子程序流程圖如圖4-2所示。
4.4 顯示子程序流程圖

圖4-4 顯示子程序流程圖
4.5 延時流程圖
圖4-5 延時程序流程圖
5. 系統(tǒng)調(diào)試
5.1 Proteus軟件仿真調(diào)試
系統(tǒng)初始狀態(tài)在意、1樓等候,以下為遇到的情況:
(1)當(dāng)按下2樓上,顯示欄會顯示上和上到2樓的信息,同時到2樓之后,開門LED會同時點亮。上樓按法和顯示同上。
(2)當(dāng)樓層上升到4樓,按下下樓按鍵,顯示欄會顯示經(jīng)過的樓層以及到達樓層,同時LED在開門時會點亮,下樓按法和顯示同上。
(3)當(dāng)在電梯外部按完,開門LED點亮之后,接下來按你所要去的樓層,到達目標(biāo)樓層之后,開門LED會點亮,同時顯示上下和樓層信息。
調(diào)試中所遇到的問題:
( 1 )鍵盤不能被鍵盤掃描程序讀取,最終發(fā)現(xiàn)是沒有接上拉電阻,接上上拉電阻模塊之后,鍵盤可以可靠地被掃描
(2)8155不能正常擴展電路,8155片選端要接低電平才能有效片選。
5.2 硬件調(diào)試
內(nèi)1(7鍵)內(nèi)2(1鍵)內(nèi)3(TV鍵)內(nèi)4(F1鍵)
1上(4鍵)2上(0鍵)3上(RG鍵)
2下(2鍵)3下(EX鍵)4下(SETP鍵)按下相應(yīng)鍵盤顯示上下及樓層信息。
7.小結(jié)
通過此次電梯控制系統(tǒng)的設(shè)計,我收獲頗豐。設(shè)計的核心內(nèi)容就是利用單片機C51的編程來實現(xiàn)控制外圍各電路的運行。通過本次設(shè)計,我熟練掌握了程控系統(tǒng)設(shè)計的一般步驟,熟悉了編程軟件的用法,并對編程能力起到了一定的提高作用。
感謝學(xué)校給我們這次機會,鍛煉了我們的動手能力及運用專業(yè)軟件的能力。通過這次課設(shè)讓我明白了理論和實際操作之間差距,而且也讓我很明確得意識到自己在數(shù)電上有很多的知識漏洞,以后應(yīng)該多鉆研一下。這次課程設(shè)計我主要負(fù)責(zé)文論撰寫,在寫論文過程中積極和同組同學(xué)探討電梯的基本原理,每個模塊的功能及如何實現(xiàn)。對Office套件的使用更熟悉,為以后畢業(yè)論文的撰寫奠定了一定基礎(chǔ)。最后再次感謝這次課程設(shè)計。
6. 程序清單
- #include "reg52.h"
- #include "absacc.h"
- #define uint unsigned int
- #define uchar unsigned char
- #define COM XBYTE[0xFF20] //定義8155地址
- #define PA XBYTE[0xFF21]
- #define PB XBYTE[0xFF22]
- #define PC XBYTE[0xFF23]
-
- sbit lup1=P1^0; //L1 //定義led控制端口
- sbit lup2=P1^1; //L2
- sbit ldown2=P1^2; //L3
- sbit lup3=P1^3; //L4
- sbit ldown3=P1^4; //L5
- sbit ldown4=P1^5; //L6
- sbit lopen=P1^7; //L8
-
-
- uchar state; //當(dāng)前電梯狀態(tài)
- uchar statepre; //之前電梯狀態(tài)
- uchar flag; //電梯上下標(biāo)志,0下,1上
- bit flag1; //定時時間到標(biāo)志
- uchar counter; //計數(shù)器
- bit in1=0, in2=0, in3=0, in4=0, up1=0, up2=0, up3=0, down2=0, down3=0, down4=0; //KEY
- uchar code table[]={0xf9, 0xa4,0xb0,0x99, 0xa1, 0xc1, 0xff}; //樓層顯示碼表,一共是四層
-
- void delay(uint xms) //簡單延時0.1ms
- {
- uint o,j;
- for(o=xms;o>0;o--)
- for(j=11;j>0;j--);
- }
- /***********************************************************/
- void display(){
- PB=0xff;
- PA=0xfe;
- PB=table[state-1];
- delay(2);
-
- PB=0xff;
- PA=0xfd;
- PB=table[flag+4];
- delay(2);
- }
- void keyscan(){ //掃描鍵盤
- uchar pctemp;
- PB=0xff;
- PA=~0x01; //PA0口輸出低電平
- pctemp=PC;
- switch(pctemp&0x0f){ //PC高位置0
- case(0x0e):{
- in1=1; //被按下后標(biāo)記,亮燈,下同
-
-
- break;
- }
- case(0x0d):{
- in2=1;
-
-
- break;
- }
- case(0x0b):{
- in3=1;
-
-
- break;
- }
- case(0x07):{
- in4=1;
-
-
- break;
- }
- default: break;
- }
- PA=~0x02; //PA1口低電平掃描第二行
- delay(1);
- pctemp=PC;
- switch(pctemp&0x0f){
- case(0x0e):{
- up1=1;
- lup1=0;
-
- break;
- }
- case(0x0d):{
- up2=1;
- lup2=0;
-
- break;
- }
- case(0x0b):{
- up3=1;
- lup3=0;
-
- break;
- }
-
- default: break;
- }
- PA=~0x04;
- delay(1); //PA2口低電平掃描第三行
- pctemp=PC;
- switch(pctemp&0x0f){
-
- case(0x0d):{
- down2=1;
- ldown2=0;
-
- break;
- }
- case(0x0b):{
- down3=1;
- ldown3=0;
-
- break;
- }
- case(0x07):{
- down4=1;
- ldown4=0;
-
- break;
- }
- default: break;
- }
- }
-
-
- void iniclock() //start clock
- {
- TH0=60; //TH0=(65536-50000)/256 TL0=(65536-50000)%256 50ms初值
- TL0=176;
- ET0=1; //開定時器
- TR0=1; //啟動定時器T0
- }
- void run(){
- iniclock(); //開定時
- while(~flag1){ //時間未到掃描鍵盤
- keyscan();
- display();
- }
- flag1=0; //時間到了,清標(biāo)志位,關(guān)定時器
- TR0=0;
- ET0=0;
- }
- void main()
- {
- state=1;
- statepre=1;
- flag=1;
- flag1=0;
- COM=0x43; //intialize 8155
- TMOD=0x01; //定義定時器0/1為定時器模式
- //TH0=(65536-50000)/256;//50ms初值
- //TL0=(65536-50000)%256;
- //ET0=1; //開定時器
- //TR0=1; //啟動定時器T0
- EA=1; //開中斷
-
-
- while(1){
- switch(state){ //掃描電梯所在位置
- case(1):{
- //up1=0; //一樓的按鍵燈都熄滅
- //in1=0;
- //lup1=1;
- //lin1=1;
- //keyscan;
- //display();
- if(state!=statepre){ //上次的狀態(tài)和本次不一樣說明電梯 需要開門
- lopen=0;
- run(); //按鍵掃描三秒鐘
- lopen=1;
- in1=0; //如果in1和up1被按下則無效
-
- up1=0;
- lup1=1;
- }
- else{
- if(up1){
- up1=0;
- lup1=1;
- lopen=0;
- run();
- lopen=1;
- }
- }
- in1=0;
-
- if(up2|down2|up3|down3|down4|in2|in3|in4){
- flag=1; //說明上行
- run(); //按鍵掃描三秒鐘
- state=2; //更新狀態(tài)
- statepre=1;
- }
- else{
- statepre=state;
- flag=2;
- keyscan();
- display();
- }
- break;
- }
- case(2):{ //電梯到2樓
- //in2=0; //電梯內(nèi)部2樓指示燈滅
- //lin2=1;
- //if(flag==1){ //如果上行,電梯外上行指示燈滅
- //up2=0;
- //lup2=1;
- //}
- //else{ //如果下行,電梯外下行指示燈滅
- //down2=0;
- // ldown2=1;
- //}
- //keyscan;
- //display();
- if(state!=statepre)
- { //如果前后兩次狀態(tài)不一樣則可能需要開門
- if(!(
- ((flag==1)&&(in3|up3|down3)&&(~up2)&&(~in2)) //去三樓
- ||((flag==1)&&(in4|down4)&&(~up2)&&(~in2)) //去四樓
- ||((flag==0)&&(in1||up1)&&(~down2)&&(~in2)) //去一樓
- )
- )
- {
- lopen=0;
- run(); //按鍵掃描三秒鐘
- lopen=1;
- in2=0; //如果in2被按下則無效
-
- if(flag==1){ //如果上行,電梯外上行指示燈按下無效
- up2=0;
- lup2=1;
- }
- else{ //如果下行,電梯外下行指示燈按下無效
- down2=0;
- ldown2=1;
- }
- }
- }
- else{ //在二樓停
- if(down2|up2){
- down2=0;
- up2=0;
- lopen=0;
- run();
- lopen=1;
- ldown2=1;
- lup2=1;
- }
- }
- in2=0;
-
- if(flag)
- up2=0;
- else
- down2=0;
- if(flag==1){
- if(down3|in3|up3|down4|in4){
- flag=1;
- run();
- state=3;
- statepre=2;
- }
- else if(in1|up1){
- flag=0;
- run();
- state=1;
- statepre=2;
- }
- else{
- statepre=state;
- flag=2;
- keyscan();
- display();
- }
- }
- else {
- if(up1|in1){
- flag=0;
- run();
- state=1;
- statepre=2;
- }
- else if(in3|down3|up3|in4|down4){
- flag=1;
- run();
- state=3;
- statepre=2;
- }
- else{
-
- statepre=state;
- flag=2;
- keyscan();
- display();
- }
- }
- break;
- }
- case(3):{ //電梯到3樓
- //in3=0; //電梯內(nèi)部3樓指示燈滅
- //lin2=1;
- //if(flag==1){ //如果上行,電梯外上行指示燈滅
- //up3=0;
- //lup3=1;
- //}
- //else{ //如果下行,電梯外下行指示燈滅
- //down3=0;
- // ldown2=1;
- //}
- //keyscan;
- //display();
- if(state!=statepre)
- { //如果前后兩次狀態(tài)不一樣則可能需要開門
- if(!(
- ((flag==0)&&(in2|up2|down2)&&(~up3)&&(~in3)) //去二樓
- ||((flag==1)&&(in4|down4)&&(~up3)&&(~in3)) //去四樓
- ||((flag==0)&&(in1||up1)&&(~down3)&&(~in2)) //去一樓
- )
- )
- {
- lopen=0;
- run(); //按鍵掃描三秒鐘
- lopen=1;
- in3=0; //如果in3被按下則無效
-
- if(flag==1){ //如果上行,電梯外上行指示燈按下無效
- up3=0;
- lup3=1;
- }
- else{ //如果下行,電梯外下行指示燈按下無效
- down3=0;
- ldown2=1;
- }
- }
- }
- else{ //在三樓停
- if(down3|up3){
- down3=0;
- up3=0;
- lopen=0;
- run();
- lopen=1;
- ldown3=1;
- lup3=1;
- }
- }
- in3=0;
-
- if(flag)
- up3=0;
- else
- down3=0;
- if(flag==1){
- if(down4|in4){
- flag=1;
- run();
- state=4;
- statepre=3;
- }
- else if(in1|up1|in2|up2|down2){
- flag=0;
- run();
- state=2;
- statepre=3;
- }
- else{
- statepre=state;
- flag=2;
- keyscan();
- display();
- }
- }
- else {
- if(up1|in1|up2|in2|down2){
- flag=0;
- run();
- state=2;
- statepre=3;
- }
- else if(in4|down4){
- flag=1;
- run();
- state=4;
- statepre=3;
- }
- else{
-
- statepre=state;
- flag=2;
- keyscan();
- display();
- }
- }
- break;
- }
- case(4):{ //case4和case1類似
- //down4=0;
- //in4=0;
- //ldown4=1;
- //lin4=1;
- keyscan();
- display();
- if(state!=statepre){
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
0.png (44.04 KB, 下載次數(shù): 134)
下載附件
2018-7-13 02:43 上傳
全部資料51hei下載地址(內(nèi)附仿真圖與源程序+word格式的完整報告文檔):
四層電梯最終版11.zip
(1.07 MB, 下載次數(shù): 856)
2018-7-12 21:25 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者: ptlantu 時間: 2018-7-13 11:03
非常感謝。!
作者: feiji666 時間: 2018-10-31 21:23
感謝分享
作者: 陪君走到最后 時間: 2018-12-14 20:52
挺詳細的
作者: HaliDog520 時間: 2018-12-22 12:51
哇~我想要一個
作者: Jony0000 時間: 2019-1-7 20:47
太棒了 感謝樓主分享
作者: mynetroom 時間: 2019-1-22 12:16
正在學(xué)習(xí)
作者: Angle145 時間: 2019-1-23 04:25
mynetroom 發(fā)表于 2019-1-22 12:16
正在學(xué)習(xí)
我也寫了一個,需要可以去看看
作者: eastgan 時間: 2019-1-27 20:53
謝謝樓主賞賜
作者: 沃爾特v 時間: 2019-2-24 20:37
不錯下載學(xué)習(xí)一下
作者: 61654 時間: 2019-2-26 20:28
非常感謝。!
作者: 我就要飛刀 時間: 2019-3-15 19:40
我分不夠了,下不了了。
作者: Hi矮油 時間: 2019-3-15 20:01
很實用的東西。
作者: baojiangong 時間: 2019-3-22 11:44
非常感謝。!非常感謝。!非常感謝。!
作者: 1031537726 時間: 2019-4-28 20:51
#在這里快速回復(fù)# 非常感謝。。
作者: 鯊大魚 時間: 2019-6-1 15:48
萬分感謝
作者: 鯊大魚 時間: 2019-6-3 15:23
非常感謝。!非常感謝!。》浅8兄x!
作者: 123424242342424 時間: 2019-6-16 14:15
我也想要
作者: 劉小強 時間: 2019-6-16 17:33
想要程序
作者: 旋風(fēng)板藍根 時間: 2019-6-17 16:14
支持一下大神~!!~
作者: yusan12342019 時間: 2019-6-17 16:57
太棒了 感謝樓主分享
作者: 123424242342424 時間: 2019-6-18 10:58
電梯復(fù)位鍵沒用
作者: 擺渡黑 時間: 2019-6-25 10:11
感謝大佬
作者: iyixi 時間: 2019-7-2 10:07
感謝大佬分享
作者: 52weiliangai13! 時間: 2019-8-11 15:18
好,有實際驗證過嗎
作者: bjgaocl 時間: 2019-8-11 19:46
這個資料真不錯,學(xué)習(xí)了
作者: blovec 時間: 2019-8-28 11:46
寫的非常詳細,程序可讀性比較高
作者: blovec 時間: 2019-8-28 11:47
寫的非常信息,程序可讀性高
作者: Richard666 時間: 2019-11-19 15:42
感謝!!!!!!!!!!!
作者: YUSIYUAN 時間: 2019-12-5 09:00
怎么做一個雙排電梯
作者: 哇哈哈哈 時間: 2019-12-5 10:49
感謝分享
作者: 哇哈哈哈 時間: 2019-12-5 11:07
樓主的分享很有意義,正好最近在看這個。所以可以參考一下
作者: wulusai 時間: 2019-12-11 17:47
請問如何加入報警器和開關(guān)門呢
作者: 半砂半和石 時間: 2019-12-13 09:04
為什么一運行仿真就會卡死??(出現(xiàn)SIMULATE:運行PROSPICE .DLL [C:\temp\LISA5928 SDF]),求大神回復(fù)。!
作者: 1025432523 時間: 2019-12-16 21:56
剛好需要,感謝分享
作者: LDM251621778 時間: 2020-2-9 09:43
很完整的資料,很給力,下載來看下
作者: 學(xué)生一號 時間: 2020-4-24 11:39
非常感謝
作者: 學(xué)生一號 時間: 2020-4-24 11:39
非常感謝
作者: 我是憨憨 時間: 2020-5-10 13:28
非常感謝
作者: epoch 時間: 2020-5-12 13:34
求解P2口無法正常使用
作者: Edison. 時間: 2020-5-16 15:39
我這邊也是你這個問題,同問
作者: daxiong2020 時間: 2020-5-18 21:33
非常感謝
作者: a997389797 時間: 2020-6-4 23:07
8155地址是哪里
作者: Hibari 時間: 2020-6-15 16:30
非常感謝
作者: gan1 時間: 2020-11-25 12:51
電機啥的怎么安裝
作者: sinclair123 時間: 2023-11-12 20:18
厲害了,,真是牛啊,,真是不錯的帖子。
作者: Acxiaoling 時間: 2023-12-3 22:18
很感謝,大佬的帖子很有用
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |