自动车库控制系统设计.docx
《自动车库控制系统设计.docx》由会员分享,可在线阅读,更多相关《自动车库控制系统设计.docx(14页珍藏版)》请在冰点文库上搜索。
自动车库控制系统设计
自动车库控制系统设计、组装与调试
1.设计要求
(1)用AT89C51单片机及外围电路组成自动车库控制系统。
车库为6车位,分为A、B两个区,每区3个车位,编号分别为A1、A2、A3和B1、B2、B3。
(2)根据控制台的指令,车库外的车送到指定车位,或从指定车位将车取出。
2.设计方案
整个系统由自动车库和控制系统两大部分组成。
车库部分(如图4-33所示)为A1-A3、B1-B3、C0-C3是送车平台的运送通道。
“驶入”和“驶离”为两个按键,触动“驶入”按键表示有车驶入在C0位置的送车平台。
触动“驶离”按键表示车辆从C0位置的送车平台上开走。
工作流程如下:
送车平台平时在车库外的C0位置,如果有车要存,首先将车开上在C0位置的平台(按“驶入“键),平台将车送到由控制台指定的车位。
例如要将C0处的车送到B2车位,送车平台载车从C0出发经过C1、C2到达B2,将车送入B2车位,然后送车平台原路返回,回到C0。
如果要取车,C0位置的平台先到达指定的车位取车。
然后再原路返回,回到C0,将车取出到C0位置。
在A1-A3、B1-B3、C0-C3的12个位置上各装一个指示灯,以便显示车位占用情况和送车平台运动的情况。
为了降低难度和成本,未使用行程开关作定位信号,采用延时的方法。
送取车的过程中每2s移动一个位置,比如C0指示灯亮到C1指示灯亮要经过2s时间,当然也可修改延时子程序改变动作速度。
图4-33车库示意图
图4-34车库控制台
控制台电路如图4-34所示
(1)车位占用显示
共显示6个车位,编号分别为A1、A2、A3、B1、B2、B3。
每个方格中包含1个按键和1个指示灯。
指示灯亮时表示相对应车位已被占用,即该车位中有车;指示灯灭时表示该车位空闲。
车位按键与控制台左边的存取选择按键配合决定“存”或“取”操作。
(2)存取选择按键
触动IN按键后,“存入”指示灯亮,再触动“车位占用显示”中的车位按键。
若欲存入的车位未被占用,则“选择正确”指示灯亮。
按Enter按键确认后,车库的送车平台开始动作,将车送入指定车位。
若选择存入车位已经被车辆占用,“选择正确”指示灯不亮,Enter按键操作无效。
触动OUT按键后,“取出”指示灯亮,再触动“车位占用显示”中的车位按键。
若欲取出的车位被车辆占用,则“选择正确”指示灯亮。
按Enter按键确认后,车库的送车平台开始动作,将指定车位的车取至C0位置。
若选择取出车位未被车辆占用,“选择正确”指示灯不亮,Enter按键操作无效。
3.电路硬件设计
原理电路如图4-35、图4-36、图4-37所示,电路板如图4-38、图4-39所示。
图4-35车库部分原理图
图4-36控制台部分原理图
图4-37单片机部分原理图
图4-38电路板PCB正面图4-39电路板PCB底面
(1)车库部分
由2个按键和10个发光二极管组成。
按键INTER和LEAVE用以模拟车库外的送车平台上(图4-33中的C0位置)是否有车。
当送车平台上无车时,按INTER键表示有车开上送车平台;当送车平台声有车时,按LEAVE键表示送车平台上的车离开送车平台。
两个按键分别于单片机的端口P3.2和P3.3连接,R30、R31是上拉电阻,其作用是保证按键未按下时,端口P3.2和P3.3为高电位。
当按键按下时,端口P3.2和P3.3通过按键接地,使得P3.2和P3.3变为低电平。
电容C10、C11的作用是消抖动和抗干扰。
每个发光二极管通过一只阻值为470Ω的限流电阻与电源VCC,这样流经发光二极管的电流约为7.5mA,有适当的亮度,同时单片机的端口在不加驱动情况下可以承受。
A1L、A2L、A3L、B1L、B2L、B3L这6只发光二极管分别对应A1~A3、B1~B3共6个车位,并与控制台的A1K、A2K、A3K、B1K、B2K、B3K这6只发光二极管两两并联,与单片机的P0口连接,即A1K和A1L、A2K和A2L、……、B3K和B3L同时动作。
(2)控制台部分
由9个按键和9只发光二极管组成。
A1A、A2A、A3A、B1A、B2A、B3A这6个按键表示要存取的车位号。
按下IN键表示要存车,按下OUT键表示要取车。
确认操作无误后,按下Enter键开始存取动作。
控制部分的上拉电阻、消抖动电容等与车库部分相同。
单片机采用AT89C51,片内Flash容量为4KB。
晶体振荡器频率选择6MHz,CS1、CS2为30pF瓷片电容,与晶体振荡器构成时钟电路。
电容CS3,电阻RS1、RS2以及按键Reset构成上电复位和手动复位电路。
4.程序设计
(1)程序框架
程序分成5大部分:
1初始化,设置定时器工作方式和初值;开放中断;设置堆栈。
2存车操作。
3取车操作。
4定时器中断服务程序,读取按键装填,控制指示灯状态。
5延时子程序。
在初始化程序中设置定时器T0为工作方式1,每10ms中断一次,并且开放T0中断。
设置堆栈底为70H。
在存车操作程序中,判断送车平台C0位置上是否有车,若无车不能执行存车操作。
判断选定的存车车位中是否有车,若有车不能执行存车操作,以免发生碰撞事故。
在取车操作程序中,判断送车平台C0位置上是否有车,若有车不能执行取车操作。
判断选定的取车车位中是否有车,若无车不能执行取车操作。
定时器中断服务每10ms检查一次按键情况,并控制相应的指示灯亮灭,指示灯的状态将作为其他操作的判断依据。
中断服务程序读取IN、OUT、INTER、LEAVE这4个按键的状态,并以INK、OUTK、C0L这3个指示灯来记录。
INTER键按下,C0L亮,表示有车驶入送车平台。
LEAVE键按下,C0L灭,表示送车平台上的驶离送车平台。
按下IN键,指示灯INK亮,OUTK灭,表示已选中存车操作。
按下OUT键,指示灯INK灭、OUTK亮,表示已选中取车操作。
(3)程序流程
程序流程图如图4-40所示
图4-40主程序流程图
图4-41中断程序流程图
(4)参考程序
ORG0000H
AJMPSTART
ORG000BH
AJMPKEY
START:
MOVTMOD,#01H
MOVIE,#82H
MOVTH0,#0ECH;定时10ms
MOVTL0,#78H
SETBTR0
MOVSP,#6FH;存车
IN0:
MOVP2,#0FFH
IN1:
JNBP2.1,IN2;存车灯亮,执行IN2
AJMPOUT1;存车灯不亮,转到取车操作
IN2:
JNBP2.4,IN3;C0位置有车,执行IN3
AJMPOUT1;C0位置无车,转到取车操作
IN3:
MOVP1,#0FFH
MOVA,P1;等待选择车位号
CPLA
ANLA,#3FH
JZIN1
MOVR2,A;核准选定的车位是否空闲
MOVA,P0
CPLA
ANLA,#3FH
ANLA,R2
JNZIN1;若已占用,则返回IN1,重新操作
CLRP2.2;“选择正确”指示灯亮
JBP3.0,$;等待确认执行
MOVA,R2
SETBP2.4;开始存入
ACALLDLY
CLRP2.5;到达C1位置
ACALLDLY
SETBP2.5
CJNEA,#01H,IN4
CLRP0.0;存入A1
ACALLDLY
AJMPIN11
IN4:
CJNEA,#08H,IN5
CLRP0.3:
存入B1
ACALLDLY
AJMPIN1
IN5:
CLRP2.6;到达C2位置
ACALLDLY
SETBP2.6
CJNEA,#02H,IN6
CLRP0.1;存入A2
ACALLDLY
AJMPIN10
IN6:
CJNEA,#10H,IN7
CLRP0.4;存入B2
ACALLDLY
AJMPIN10
IN7:
CLRP2.7;到达C3位置
ACALLDLY
SETBP2.7
CJNEA,#04H,IN8
CLRP0.2;存入A3
ACALLDLY
AJMPIN9
IN8:
CLRP0.5;存入B3
ACALLDLY
IN9:
CLRP2.7;退回C3位置
ACALLDLY
SETBP2.7
IN10:
CLRP2.6;退回C2位置
ACALLDLY
SETBP2.6
IN11:
CLRP2.5;退回C1位置
ACALLDLY
SETBP2.5
CLRP2.4;退回C0位置
ACALLDLY
MOVP2,#0FFH
AJMPIN1;存入完成,到开始位置重新运行取车
OUT0:
MOVP2,#0FFH
OUT1:
NBP2.0,OUT2;取车灯亮,执行OUT2
AJMPIN1;取车灯不亮,转到存车操作
OUT2:
JBP2.4,OUT3;C0位置无车,可以取车操作
AJMPIN1;C0位置有车,执行存车
OUT3:
MOVP1,#0FFH
MOVA,P1;等待选择车位号
CPLA
ANLA,#3FH
JZOUT1
CPLA
MOVR2,A;核准选定的车位是否有车
MOVA,P0
CPLA
ORLA,R2
CJNEA,#0FFH,OUT4
SJMPOUT5
OUT4:
AJMPIN1;空闲,返回IN1,重新操作
OUT5:
CLRP2.2;“选择正确”指示灯亮
JBP3.0,$;等待确认执行
MOVA,R2
CPLA
CLRP2.4;开始取车
ACALLDLY
SETBP2.4
CLRP2.5;到达C1位置
ACALLDLY
CJNEA,#01H,OUT6
SETBP2.5
ACALLDLY
SETBP0.0;取出A1
AJMPOUT13
OUT6:
CJNEA,#08H,OUT7
SETBP2.5
ACALLDLY
SETBP0.3;取出B1
AJMPOUT13
OUT7:
SETBP2.5
CLRP2.6;到达C2位置
ACALLDLY
SETBP2.6
CJNEA,#02H,OUT8
SETBP2.6
ACALLDLY
SETBP0.1;取出A2
AJMPOUT12
OUT8:
CJNEA,#10H,OUT9
SETBP2.6
ACALLDLY
SETBP0.4;取出B2
AJMPOUT12
OUT9:
SETBP2.6
CLRP2.7;到达C3位置
ACALLDLY
SETBP2.7
CJNEA,#04H,OUT10
SETBP2.7
ACALLDLY
SETBP0.2;取出A3
AJMOOUT11
OUT10:
SETBP2.7
ACALLDLY
SETBP0.5;取出B3
OUT11:
CLRP2.7;退回C3位置
ACALLDLY
SETBP2.7
OUT12:
CLRP2.6;退回C2位置
ACALLDLY
SETBP2.6
OUT13:
CLRP2.5;退回C1位置
ACALLDLY
SETBP2.5
CLRP2.4;取车到C0位置
MOVP2,#0EFH
AJMPIN1;存入完成,到开始位置重新运行;T0中断服务程序
KEY:
MOVTH0,#0ECH;每10ms读一次按键的状态
MOVTL0,#78H
JBP3.3,KEY1;驶入按键按下,C0位置有车指示灯亮
CLRP2.4
KEY1:
JBP3.2,KEY2;驶出按键按下,C0位置有车指示灯灭
SETBP2.4
KEY2:
JBP1.6,KEY3;存车键按下,存车指示灯亮,取车灯灭
SETBP2.0
CLRP2.1
KEY3:
JBP1.7,KEY4;存车键按下,取车指示灯亮,存车灯灭
SETBP2.1
CLRP2.0
KEY4:
RETI
;2s延时
DLY:
MOVR5,#20
DLYA:
MOVR6,#100
DLYB:
MOVR7,#250
DJNZR7,$
DJNZR6,DLYB
DJNZR5,DLYA
RET
END