模拟电梯控制模拟电梯控制.docx

上传人:b****1 文档编号:14328860 上传时间:2023-06-22 格式:DOCX 页数:11 大小:46.53KB
下载 相关 举报
模拟电梯控制模拟电梯控制.docx_第1页
第1页 / 共11页
模拟电梯控制模拟电梯控制.docx_第2页
第2页 / 共11页
模拟电梯控制模拟电梯控制.docx_第3页
第3页 / 共11页
模拟电梯控制模拟电梯控制.docx_第4页
第4页 / 共11页
模拟电梯控制模拟电梯控制.docx_第5页
第5页 / 共11页
模拟电梯控制模拟电梯控制.docx_第6页
第6页 / 共11页
模拟电梯控制模拟电梯控制.docx_第7页
第7页 / 共11页
模拟电梯控制模拟电梯控制.docx_第8页
第8页 / 共11页
模拟电梯控制模拟电梯控制.docx_第9页
第9页 / 共11页
模拟电梯控制模拟电梯控制.docx_第10页
第10页 / 共11页
模拟电梯控制模拟电梯控制.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

模拟电梯控制模拟电梯控制.docx

《模拟电梯控制模拟电梯控制.docx》由会员分享,可在线阅读,更多相关《模拟电梯控制模拟电梯控制.docx(11页珍藏版)》请在冰点文库上搜索。

模拟电梯控制模拟电梯控制.docx

模拟电梯控制模拟电梯控制

 

单片机课程设计

 

专业:

人工智能与控制技术

班级:

0691201

姓名:

邸宝鑫

指导教师:

王文仲、孟祥莲、孙平

 

哈尔滨工业大学华德应用技术学院

2007年12月XX日

姓名:

邸宝鑫

班级:

0691201

学号:

18

课题编号:

11

课题名称:

模拟电梯

基本功能:

模拟电梯的基本工作

点阵模拟电梯开关门动作

数码管显示轿厢所在层数

按键为呼叫按钮

LED显示呼叫层数

 

扩展功能:

 

成绩:

评审老师:

一、需求分析:

随着生活水平的提高,电梯在生活中的使用也变得广泛。

该设计可应用在四层楼中。

通过扩展可应用在更高的楼上,为生活节省时间带来方便。

 

二、硬件设计方案

硬件所用器件:

器件名称

型号

数量

功能说明

单片机

AT89C51

1

核心控制部分

芯片

DM74LS08N

2

与门

点阵

8*8

1

显示开关门

数码管

共阳

1

显示所在层数

电池盒

4节1.5V

1

提供工作电压

二极管

4红1绿1黄

6

提示灯

按键

普通

8

电梯呼叫

晶振

12MHz

1

时钟控制信号

电阻

470Ω

16

限流电阻

电阻

4.7KΩ

8

上拉电阻

电阻

100Ω

1

限流电阻

瓷片电容

30pf

1

配合晶振工作

电解电容

33mf

1

提供复位时间常数

AT89C51芯片简介:

AT89系列单片机是ATMEL公司最早推出,也是功能最简单的一个系列,该系列都是内含Flash程序存储器的MCS-51兼容单片机,AT89C51就是其中一款可在线编程ISPFlash单片机。

AT89C51具有价格便宜、性能优良、可在线编程等特点。

其具体性能参数如下:

兼容MCS-51内核单片机;4KB可在线编程Flash存储器,可有效擦除/读写1000次;工作电压范围4.0~5.5V;完全静态工作:

0Hz~33MHz;ROM三级加密模式;128*8bit内置RAM;32位可控I/O引脚;2个16位的时钟源;5个中断源;全双工UART串行接口;低功耗工作模式;看门狗计时器;两个数据指针;快速编程特性。

 

三、软件设计方案

 

主要算法:

呼叫标志变量MB

轿厢在所在层变量DQ

判断是否开门算法

(mb&dq1)==dq1

判断是否上升算法

(!

down)&&(dq1<((0x10-dq1)&mb))

判断是否下降算法

(!

up)&&((mb

=0))

四、调试

硬件调试:

在硬件设计时考虑到本程序点阵只涉及开门关门不用考虑其他功能这样我们只控制哪一列亮或灭就可以了,所以我们把所有的行线都直接接到电源上,用单片机直接给地就可以控制了。

按键设计考虑到所有人的呼叫都要得到相应不能漏掉呼叫,所以我们把按键通过与门都接到INT0上,用中断判断按键的按

下。

软件调试

把电梯的所有呼叫都用一个变量的低四位表示(如:

一层、二层、三层都有呼叫则标志位为:

00000111),当前所在层也用一个变量的低四位表示(如:

当前在四层则标志为:

00001000)通过我们共同研究的算法模拟电梯的基本运行方式。

五、心得体会

在这次课程设计调试过程中,提示灯无法正确工作,始终保持常量状态,经过仔细查询程序错误,并进行及时修改,完成了提示灯工作任务。

还有焊点不导通问题,有时候调试修改,会把其中焊点或导线端碰掉。

用万用表进行排查,找出不导通的焊点区域,进行重新焊接。

在不层呼叫的时候也出现过错误,有的时候是忽略了某层呼叫,有的时候程序跑飞,在通过修改单片机引脚进行了修改。

通过这次课程设计,使我对单片机应用范围了解了更多,特别是在生活中有那么多广泛的应用。

希望以后有机会能设计出自己思想的单片机。

 

附录1:

(程序代码)

#include"reg51.h"

#defineucharunsignedchar

#defineuintunsignedint

sbitP3_0=P3^0;

sbitP3_1=P3^1;

sbitP3_2=P3^2;

sbitP3_4=P3^4;

sbitP3_5=P3^5;

sbitP3_3=P3^3;

sbitP3_7=P3^7;

ucharmb=0,up=0,down=0,mbz=1,dq1=1;

voiddelay()

{

uintx,i;

for(i=0;i<6;i++)

for(x=0;x<15000;x++);

}

voidkm()

{

mbz=0;

P0=0x18;

delay();

P0=0x3c;

delay();

P0=0x7e;

delay();

P0=0xff;

}

voidgm()

{

mbz=1;

P0=0x7e;

delay();

P0=0x3c;

delay();

P0=0x18;

delay();

P0=0x00;

}

voidss()

{

dq1=dq1<<1;

P3_0=1;

P3_1=0;

delay();

delay();

switch(dq1)

{

case0x01:

{P2=0x9f;break;}

case0x02:

{P2=0x25;break;}

case0x04:

{P2=0x0d;break;}

case0x08:

{P2=0x99;break;}

}

}

voidxj()

{

dq1=dq1>>1;

P3_0=0;

P3_1=1;

delay();

delay();

switch(dq1)

{

case0x01:

{P2=0x9f;break;}

case0x02:

{P2=0x25;break;}

case0x04:

{P2=0x0d;break;}

case0x08:

{P2=0x99;break;}

}

}

voidanjian()interrupt0

{

ucharjz;

jz=P1;

if((jz&0x10)==0)

{

mb=mb|0x01;

P3_4=0;

}

if((jz&0x20)==0)

{

mb=mb|0x02;

P3_5=0;

}

if((jz&0x40)==0)

{

mb=mb|0x04;

P3_3=0;

}

if((jz&0x80)==0)

{

mb=mb|0x08;

P3_7=0;

}

if((jz&0x01)==0)

mb=mb|0x01;

if((jz&0x02)==0)

mb=mb|0x02;

if((jz&0x04)==0)

mb=mb|0x04;

if((jz&0x08)==0)

mb=mb|0x08;

}

 

voidmain()

{

P0=0x00;

EX0=1;

IT0=0;

P1=0xff;

P3_2=1;

EA=1;

P2=0x9f;

if(mb!

=0)

while

(1)

{

if((mb&dq1)==dq1)

{

delay();

delay();

delay();

km();

delay();

delay();

delay();

gm();

P3_0=1;

P3_1=1;

switch(dq1)

{

case0x01:

{mb=mb&0xfe;P3_4=1;}break;

case0x02:

{mb=mb&0xfd;P3_5=1;}break;

case0x04:

{mb=mb&0xfb;P3_3=1;}break;

case0x08:

{mb=mb&0xf7;P3_7=1;}break;

}

}

if((!

down)&&(dq1<((0x10-dq1)&mb)))

{

up=1;

ss();

switch(dq1)

{

case0x01:

{if((mb&0xfe)==0){up=0;break;}}

case0x02:

{if((mb&0xfc)==0){up=0;break;}}

case0x04:

{if((mb&0xf8)==0){up=0;break;}}

case0x08:

{up=0;break;}

}

}

if((!

up)&&((mb

=0)))

{

down=1;

xj();

switch(dq1)

{

case0x01:

{if((mb&0xf7)==0){down=0;break;}}

case0x02:

{if((mb&0xf3)==0){down=0;break;}}

case0x04:

{if((mb&0xf1)==0){down=0;break;}}

case0x08:

{down=0;break;}

}

}

 

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2