- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
智能仪器
课
程
设
计
基于51单片机的电梯控制设计
姓名:
学号:
班级:
本文主要是用51单片机电梯控制系统,使其具备电梯基本升、降功能,并当多层对电梯呼叫时,能安排电梯停靠
该系统以MCU控制模块核心,控制台电路主要是完成电梯的启动、停止以及楼层数的显示,电梯内电路是用来让电梯内用户选择目标楼层(作为内招信号),电梯间电路是同来让电梯外用户选择目标楼层(作为外招信号),内外招使用按键按下与否而引起的电平的改变作为用户请求信息发送到MCU,MCU控制电动机转动,到达目标楼层。楼层检测模块一般采用传感器,实时检测反馈给MCU,来确定的电机的转停。报警模块作为电梯的求救系统。
2.1单片机最小系统
单片机采用ATMEL公司的AT89C51,晶体振荡器选12MHz,C1、C2为30p瓷片电容,与晶体振荡器构成时钟电路。电容C3按键RESET构成上电复位和手动复位电路。
主要特性:
与MCS-51 兼容4K字节可编程闪烁存储器寿命:1000写/擦循环数据保留时间:10年全静态工作:0Hz-24Hz三级程序存储器锁定128*8位内部RAM32可编程I/O线两个16位定时器/计数器5个中断源 可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电路
系统主流程图
4.1标志目标楼层
当某个按键被按下之后,就会触发单片机外部中断,在中断服务例程Ext0_IS()或 Ext1_ISR()中通过调用按键查询函数 GetKey()来查询被按下的是哪个键。根据被按下的键来置位 Floor_Opt 中相应的位。源码如下:
/********************************************************************
*
Ext0_ISR.c
*
外部中断 0 服务例程
*******************************************************************/
void Ext0_ISR (void) interrupt 0
{
char key = GetKey();//查询被按下的键
Floor_Opt |= key0x07;//置位相应的位
if( Floor_Opt!=Floor_Cur led_cnt==8 ) _CLOSE_DOOR();
/******** 这里不可以写作:Flag_Door = (key0xC0)6 *************/
if( (key0x40) (!Flag_Run) ) Flag_Door = 1;//电梯运行中不能打开门
if( key0x80 ) Flag_Door = 2;
}
4.2 定时器模拟电机运行
当有按键被按下之后,通过查询被按下的键与电梯当前所在楼层是否相等,如果在同一层则打开电梯门,否则电梯电机运行,上升或者下降。程序里使用定时器 0 来模拟电梯的运行,每隔 2 秒钟跟新一次表示电梯当前楼层的全局变量Floor_Cur,并用数码管显示当前楼层数。同时判断当前楼层是否有按键被按下,
如果有就打开电梯,否则继续运行。电梯的运行方向是通过判断目标楼层 Floor_Opt 与当前楼层 Floor_Cur 来决定的。这里需要注意的一点是,Floor_Cur 的数值大小本身就代表了当前所在的楼层,Floor_Cur==2 就表示电梯当前所在楼层是 2 楼。而 Floor_Opt 是用位来表示的,比如 Floor_Opt==7 (0b0000 0111)表示 0,1,2 楼的按键都有被按下。所以两者不可以直接比较,而是通过对 Floor_Cur 查表的形式来与 Floor_Opt 比较。
if(Floor_Optfloor_encode[Floor_Cur])// 上升
{
Floor_Cur++;
}
else if(Floor_Optfloor_encode[Floor_Cur])//下降
{
Floor_Cur--;
}
如果当前楼层有按键被按下,调用打开电梯门的子程序:_OPEN_DOOR().该函数实际上是一个宏定义,作用是打开定时器 1,然后每个一段时间点亮一个 LED 灯,以此来模拟电梯门的打开过程。
#define _OPEN_DOOR()
TR1=1;Flag_Door=1//打开电梯门
#define _CLOSE_DOOR()
TR1=1;Flag_Door=2//关闭电梯门
如果在电梯关门的过程中(Flag_Door==2)按下了 OPEN 按键,并且此时电梯门还没有完
文档评论(0)