獲取全套設(shè)計(jì)資源,請(qǐng)見(jiàn)后文說(shuō)明~
設(shè)計(jì)要求
- 電梯設(shè)置內(nèi)外鍵脑奠,按下任一鍵基公,電梯控制系統(tǒng)響應(yīng);
- 電梯樓層和升降狀態(tài)通過(guò)數(shù)碼管宋欺、LED燈實(shí)時(shí)顯示;
- 具有緊急停止和聲光報(bào)警功能轰豆,保護(hù)乘客安危;
- 使用步進(jìn)電機(jī)模擬電梯升降,順時(shí)轉(zhuǎn)動(dòng)為升齿诞,逆時(shí)為降酸休;
- 電梯無(wú)人時(shí),默認(rèn)停留在一樓掌挚;
系統(tǒng)概述
本系統(tǒng)以51單片機(jī)作為控制核心雨席,實(shí)時(shí)讀取電梯內(nèi)外部操作按鍵菩咨,及時(shí)響應(yīng)乘坐要求吠式。數(shù)碼管和LED指示燈,分別表示當(dāng)前電梯所在樓層和升降狀態(tài)抽米;步進(jìn)電機(jī)模擬電梯運(yùn)行過(guò)程(電機(jī)順時(shí)針轉(zhuǎn)動(dòng)為升特占,逆時(shí)針為降)。
同時(shí)云茸,本系統(tǒng)具有電梯緊急停止和報(bào)警功能是目。電梯運(yùn)行過(guò)程中,按下報(bào)警鍵标捺,報(bào)警燈閃爍懊纳,蜂鳴器鳴叫,電梯停止運(yùn)行亡容。長(zhǎng)按啟動(dòng)鍵后嗤疯,解除報(bào)警,電梯恢復(fù)運(yùn)行闺兢;
按下緊急停止按鍵茂缚,電梯急停,數(shù)碼管顯示當(dāng)前急停樓層,上行燈和下行燈均熄滅脚囊,表明電梯處于不可用狀態(tài)龟糕。
需要注意的是,啟動(dòng)鍵用于模擬電梯關(guān)門悔耘,在電梯內(nèi)部按下要去的樓層后讲岁,再按下啟動(dòng)鍵,電梯才會(huì)開始運(yùn)行淮逊。
整個(gè)系統(tǒng)構(gòu)建如下所示:
仿真電路圖
仿真分析
雙擊單片機(jī)催首,加載C程序文件夾里的elevator.hex,運(yùn)行仿真泄鹏,結(jié)果如下郎任。電梯停靠在1樓备籽,上行燈點(diǎn)亮舶治,等待乘客乘坐;
假設(shè)4樓住戶要到2樓,4樓住戶在電梯外部按下“下”的按鍵后珠闰,電梯從1樓開始上升惜浅,上行燈點(diǎn)亮,步進(jìn)電機(jī)順時(shí)轉(zhuǎn)動(dòng)伏嗜,數(shù)碼管依次顯示樓層坛悉;
到達(dá)4樓后承绸,步進(jìn)電機(jī)停止轉(zhuǎn)動(dòng)裸影,數(shù)碼管顯示數(shù)字4,同時(shí)黃色下行燈點(diǎn)亮军熏,表明電梯將開始下降轩猩;
4樓住戶進(jìn)入電梯,按下電梯內(nèi)部按鍵2F后荡澎,再按下啟動(dòng)鍵(模擬電梯關(guān)門)均践,電梯運(yùn)行,步進(jìn)電機(jī)逆時(shí)針轉(zhuǎn)動(dòng)摩幔;
報(bào)警與急停
在電梯運(yùn)行的任何時(shí)刻彤委,按下電梯內(nèi)部報(bào)警按鈕,紅色LED報(bào)警燈點(diǎn)亮热鞍,蜂鳴器鳴叫葫慎,電梯停止在當(dāng)前樓層衔彻,步進(jìn)電機(jī)也停止轉(zhuǎn)動(dòng);長(zhǎng)按啟動(dòng)鍵偷办,警報(bào)解除艰额,電梯恢復(fù)運(yùn)行;
出現(xiàn)意外情況時(shí)椒涯,按下緊急停止按鍵后柄沮,電梯立即停止,數(shù)碼管顯示當(dāng)前急停樓層废岂,上行燈或下行燈都熄滅祖搓,表明電梯此時(shí)不可用,同時(shí)步進(jìn)電機(jī)停轉(zhuǎn)湖苞;此時(shí)只有重新運(yùn)行系統(tǒng)才可解除急停拯欧;
部分C代碼
#include <REG52.H>
#include <INTRINS.H>
unsigned char ucMotorDrvPuls; //電機(jī)運(yùn)轉(zhuǎn)時(shí)初始值
unsigned char FORREV=1; //1表示上行,0表示下行
unsigned char STOPCUR=0;//1電梯停留在當(dāng)前層财骨,0不停留
unsigned char CURFLR=1; //當(dāng)前所在樓層
unsigned char count=0; //累計(jì)到COUNT即表示運(yùn)行過(guò)一層
#define UCTIMES 8 //設(shè)置電機(jī)轉(zhuǎn)速
#define OUTPUT P2 //電機(jī)驅(qū)動(dòng)信號(hào)口
#define COUNT 8 //電機(jī)每循環(huán)8次表示電梯經(jīng)過(guò)一層樓
sbit UP1=P3^4;
sbit DOWN2=P3^3;
sbit UP2=P3^2;
sbit DOWN3=P3^1;
sbit UP3=P3^0;
sbit DOWN4=P1^7;
sbit FLOOR1=P1^0;
sbit FLOOR2=P1^1;
sbit FLOOR3=P1^2;
sbit FLOOR4=P1^3;
sbit START=P1^4;
sbit STOP=P1^5;
sbit ALARM=P1^6;
//報(bào)警位
sbit alarmBit=P0^4;
sbit upLight=P0^5;
sbit downLight=P0^6;
void time(unsigned int ucMs);//延時(shí)單位:ms
void outPress();//按下電梯外按鈕
unsigned char inPress();//按下電梯內(nèi)樓層按鈕
unsigned char elevator();//到達(dá)某一層返回1镐作,否則返回0
void storeUP(unsigned char);//存儲(chǔ)當(dāng)前所有上行請(qǐng)求
void storeDOWN(unsigned char);//存儲(chǔ)當(dāng)前所有下行請(qǐng)求
//延時(shí)函數(shù)
void time(unsigned int ucMs);
//初始化所有燈
void initLights(void);
//設(shè)置當(dāng)前樓層
void setFloor(int floor);
//設(shè)置電梯向上運(yùn)行燈
void setUpLight();
//設(shè)置電梯向下運(yùn)行燈
void setDownLight();
//設(shè)置電梯停止運(yùn)行燈
void setStopLight();
//設(shè)置電梯向上運(yùn)行燈
void setAlarmLight();
//設(shè)置電梯報(bào)警燈和喇叭
void setAlarmLight();
//關(guān)閉電梯報(bào)警燈和喇叭
void offAlarmLight();
//報(bào)警開關(guān)
int alarmSwitch=1;
unsigned char UP_req[5]={0,0,0,0,0}; //上行請(qǐng)求
unsigned char DOWN_req[5]={0,0,0,0,0}; //下行請(qǐng)求
//電機(jī)定位
void position(void)
{
OUTPUT=0x01|(P2&0xf0);time(200);
OUTPUT=0x02|(P2&0xf0);time(200);
OUTPUT=0x04|(P2&0xf0);time(200);
OUTPUT=0x08|(P2&0xf0);time(200);
ucMotorDrvPuls=0x11;
OUTPUT=0x01|(P2&0xf0);
}
/****************************************/
/* 主函數(shù) */
/****************************************/
void main(void)
{
time(100);
initLights();
position();//電機(jī)定位
ucMotorDrvPuls=0x11;
OUTPUT=0x00|(P2&0xf0);//電機(jī)停止
setFloor(CURFLR);
setUpLight();
time(100);
while(1)//主循環(huán)
{
outPress();//按下電梯外按鈕
while(STOPCUR==1)//電梯在當(dāng)前層,電梯不動(dòng)隆箩,可以繼續(xù)接受請(qǐng)求
{
outPress();
inPress();
}
if(inPress())//按下電梯內(nèi)樓層按鈕
{
while(START)//等待啟動(dòng)按鍵按下该贾,電梯不動(dòng),可以繼續(xù)接受請(qǐng)求
{
outPress();
inPress();
}
}
while(1)//電機(jī)運(yùn)轉(zhuǎn)循環(huán)
{
if(UP_req[1]==0&&UP_req[2]==0&&UP_req[3]==0&&
DOWN_req[2]==0&&DOWN_req[3]==0&&DOWN_req[4]==0)
{
break;//沒(méi)有請(qǐng)求捌臊,跳出電機(jī)運(yùn)轉(zhuǎn)循環(huán)杨蛋,電梯不動(dòng)
}
if(FORREV)//上行
{
setUpLight();//上行燈亮
if(STOPCUR==1){break;}//
if(elevator())//往上到達(dá)某一層
{
if(CURFLR==4) {setDownLight();break;}//到達(dá)四樓
}
OUTPUT=(ucMotorDrvPuls&0x0f)|(P2&0xf0);
ucMotorDrvPuls=_crol_(ucMotorDrvPuls,1);
}
if(!FORREV)//下行
{
setDownLight();//下行燈亮
;
if(STOPCUR==1){break;}
if(elevator())//往下到達(dá)某一層
{
if(CURFLR==1) {setUpLight();break;}//到達(dá)一樓
}
OUTPUT=(ucMotorDrvPuls&0x0f)|(P2&0xf0);
ucMotorDrvPuls=_cror_(ucMotorDrvPuls,1);
}
outPress();//按下電梯外按鈕
//if(inPress())//按下電梯內(nèi)樓層按鈕
//{
// while(START)//等待啟動(dòng)按鍵按下
//{
// outPress();
inPress();//電梯運(yùn)行時(shí),內(nèi)部按鈕按下理澎,無(wú)需按啟動(dòng)按鈕
// }
//}
time(380-UCTIMES*16);
}//end while-電機(jī)運(yùn)轉(zhuǎn)循環(huán)
OUTPUT=0x00|(P2&0xf0);//電機(jī)停止逞力,有請(qǐng)求時(shí)按下啟動(dòng)按鈕啟動(dòng)
}//end while-主循環(huán)
}
8層電梯控制系統(tǒng)設(shè)計(jì)
為給大家更多參考,現(xiàn)提供另一套蔣宇智的8層電梯控制系統(tǒng)原創(chuàng)設(shè)計(jì)矾端,其仿真電路如下所示掏击。
8層電梯仿真分析
按下電梯外部按鍵8F卵皂,模擬8層住戶需要電梯秩铆,8F LED指示燈點(diǎn)亮,數(shù)碼管從1到8依次顯示灯变,電梯上行箭頭點(diǎn)亮殴玛;
電梯到達(dá)8樓后添祸,上行箭頭閃爍后熄滅滚粟,提示音嗶兩聲,表示電梯到達(dá)8樓刃泌;
假設(shè)8樓住戶要去5樓凡壤,按下電梯內(nèi)部按鍵5F署尤,5F LED指示燈點(diǎn)亮,數(shù)碼管從8到5依次顯示亚侠,模擬電梯下行曹体,同時(shí)下行箭頭點(diǎn)亮;
電梯到達(dá)5樓后箕别,5F LED指示燈熄滅,同樣滞谢,下行箭頭閃爍后熄滅串稀,提示音嗶兩聲,表示電梯到達(dá)5樓狮杨;
資源內(nèi)容有
(1)四層電梯Proteus仿真文件母截;
(2)C程序;
(3)參考資料橄教;
(4)系統(tǒng)框圖微酬;
(5)設(shè)計(jì)2:八層電梯控制;
資源截圖
8層電梯資源
獲取4層和8層電梯控制系統(tǒng)設(shè)計(jì)的全套資源颤陶,Proteus仿真颗管、C程序等
請(qǐng)搜索關(guān)注我的公眾號(hào):交院小智