单片机课程设计电梯.docx

上传人:b****1 文档编号:1875993 上传时间:2023-05-02 格式:DOCX 页数:18 大小:191.61KB
下载 相关 举报
单片机课程设计电梯.docx_第1页
第1页 / 共18页
单片机课程设计电梯.docx_第2页
第2页 / 共18页
单片机课程设计电梯.docx_第3页
第3页 / 共18页
单片机课程设计电梯.docx_第4页
第4页 / 共18页
单片机课程设计电梯.docx_第5页
第5页 / 共18页
单片机课程设计电梯.docx_第6页
第6页 / 共18页
单片机课程设计电梯.docx_第7页
第7页 / 共18页
单片机课程设计电梯.docx_第8页
第8页 / 共18页
单片机课程设计电梯.docx_第9页
第9页 / 共18页
单片机课程设计电梯.docx_第10页
第10页 / 共18页
单片机课程设计电梯.docx_第11页
第11页 / 共18页
单片机课程设计电梯.docx_第12页
第12页 / 共18页
单片机课程设计电梯.docx_第13页
第13页 / 共18页
单片机课程设计电梯.docx_第14页
第14页 / 共18页
单片机课程设计电梯.docx_第15页
第15页 / 共18页
单片机课程设计电梯.docx_第16页
第16页 / 共18页
单片机课程设计电梯.docx_第17页
第17页 / 共18页
单片机课程设计电梯.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机课程设计电梯.docx

《单片机课程设计电梯.docx》由会员分享,可在线阅读,更多相关《单片机课程设计电梯.docx(18页珍藏版)》请在冰点文库上搜索。

单片机课程设计电梯.docx

单片机课程设计电梯

单片机课程设计

一、设计名称:

电梯控制系统设计

二、设计人员:

周海峰、杨柳、吴晶晶、邹敏

三、指导老师:

王宪菊

四、设计要求:

楼层:

共六层设计名称:

电梯控制系统设计

六个按键:

用来输入要去的楼层

点阵1:

显示当前楼层

点阵2:

显示“↑”或“↓”箭头

例如:

当前电梯停在三楼,当按下键1时,点阵1间隔一秒依次显示“2”,“1”,点阵2显示箭头↓;当按下键6时,点阵1间隔一秒依次显示“4”,“5”,“6”,点阵2显示箭头↑。

器件:

89c51芯片、两个8*8点阵、6个按键

五、器件介绍:

89c51芯片:

89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。

单片机的可擦除只读存储器可以反复擦除100次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器,89C2051是它的一种精简版本。

89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

结构特点:

  8位CPU;

  片内振荡器和时钟电路;

  32根I/O线;

  外部存贮器寻址范围ROM、RAM64K;

  2个16位的定时器/计数器;

  5个中断源,两个中断优先级;

  全双工串行口;

布尔处理器;

 

管脚说明:

  VCC:

供电电压。

  GND:

接地。

  P0口:

P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

当P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/

地址的第八位。

在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

  P1口:

P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在FLASH编程和校验时,P1口作为第八位地址接收。

  P2口:

P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

并因此作为输入时,P2口的管脚被外部拉低,将输出电流。

这是由于内部上拉的缘故。

P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。

P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

  P3口:

P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。

作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

  P3口也可作为AT89C51的一些特殊功能口,如下表所示:

  口管脚备选功能

  P3.0RXD(串行输入口)

  P3.1TXD(串行输出口)

  P3.2/INT0(外部中断0)

  P3.3/INT1(外部中断1)

  P3.4T0(记时器0外部输入)

  P3.5T1(记时器1外部输入)

  P3.6/WR(外部数据存储器写选通)

  P3.7/RD(外部数据存储器读选通)

  P3口同时为闪烁编程和编程校验接收一些控制信号。

  RST:

复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

  ALE/PROG:

当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。

在FLASH编程期间,此引脚用于输入编程脉冲。

在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。

因此它可用作对外部输出的脉冲或用于定时目的。

然而要注意的是:

每当用作外部数据存储器时,将跳过一个ALE脉冲。

如想禁止ALE的输出可在SFR8EH地址上置0。

此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。

另外,该引脚被略微拉高。

如果微处理器在外部执行状态ALE禁止,置位无效。

  /PSEN:

外部程序存储器的选通信号。

在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。

但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

/EA/VPP:

当/EA保持低电平时,则在此期间外部程序存储器

(0000H-FFFFH),不管是否有内部程序存储器。

注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。

在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

  XTAL1:

反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:

来自反向振荡器的输出

 

8*8点阵显示:

8X8点阵LED结构如下图所示 

从图中可以看出,8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮;因此要实现一根柱形的亮法,如图所示,对应的一列为一根竖柱,或者对应的一行为一根横柱,因此实现柱的亮的方法如下所述:

 

一根竖柱:

对应的列置1,而行则采用扫描的方法来实现。

 

一根横柱:

对应的行置0,而列则采用扫描的方法来实现。

 

 硬件电路连线 

(1). 把“单片机系统”区域中的P1端口用8芯排芯连接到“点阵模块”区域中的“DR1-DR8”端口上; 

(2). 把“单片机系统”区域中的P3端口用8芯排芯连接到“点阵模块”区域中的“DC1-DC8”端口上;

 

六、设计流程图:

七、设计程序:

#include

#defineucharunsignedchar

#defineuintunsignedint

#definen800//宏定义电梯暂留时间

sbitk1=P2^0;//键盘位定义

sbitk2=P2^1;

sbitk3=P2^2;

sbitk4=P2^3;

sbitk5=P2^4;

sbitk6=P2^5;

ucharcodetab[]={0x00,0x10,0x30,0x10,0x10,0x10,0x10,0x38,//-1-

0x00,0x38,0x44,0x04,0x08,0x10,0x20,0x7C,//-2-

0x00,0x38,0x44,0x04,0x38,0x04,0x44,0x38,//-3-

0x00,0x08,0x18,0x28,0x48,0x7C,0x08,0x08,//-4-

0x00,0x7C,0x40,0x40,0x38,0x04,0x44,0x38,//-5-

0x00,0x38,0x44,0x40,0x78,0x44,0x44,0x38//-6-

};

ucharcodetab1[]={0x00,0x18,0x18,0x18,0x99,0x5A,0x3C,0x18,

0x00,0x18,0x18,0x18,0x99,0x5A,0x3C,0x18,

0x00,0x18,0x18,0x18,0x99,0x5A,0x3C,0x18,

0x00,0x18,0x18,0x18,0x99,0x5A,0x3C,0x18,

0x00,0x18,0x18,0x18,0x99,0x5A,0x3C,0x18,

0x00,0x18,0x18,0x18,0x99,0x5A,0x3C,0x18

};

ucharcodetab2[]={0x00,0x18,0x3C,0x5A,0x99,0x18,0x18,0x18,

0x00,0x18,0x3C,0x5A,0x99,0x18,0x18,0x18,

0x00,0x18,0x3C,0x5A,0x99,0x18,0x18,0x18,

0x00,0x18,0x3C,0x5A,0x99,0x18,0x18,0x18,

0x00,0x18,0x3C,0x5A,0x99,0x18,0x18,0x18,

0x00,0x18,0x3C,0x5A,0x99,0x18,0x18,0x18

};//下

ucharflag=16,aa;//flag滚屏位

uchara,b,c,d,e,f,g,h;//a,b,c,d,e,g楼层按键标志位,f楼层号标志位,h电梯方向标志位;

voidjianpan();//键盘检测函数

voidinit()//定时器0初始化

{f=flag;//让电梯停在当前3楼

TMOD=0x01;

TH0=0x3c;

TL0=0xb0;

EA=1;

ET0=1;

TR0=1;//定时器T0开关位

}

voiddelay(uinttime)//延时us

{

while(time)

time--;

}

voiddelay1(uintz)//延时ms,且显示点阵且检测键盘;用于让电梯在某楼暂留等待人们出去

{uintj,i;

for(j=z;j>0;j--)

{

for(i=110;i>0;i--);

jianpan();

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

{

P3=i;

{if(h==1||h==0)

P0=tab2[i+flag];

if(h==2)

P0=tab1[i+flag];

P1=tab[i+flag];

delay(20);

}

}

}

}

voidmain()

{uchari;

init();//初始化T0

while

(1)

{

for(i=0;i<8;i++)//显示点阵

{

P3=i;//行扫描

{

if(h==1||h==0)//检测电梯方向,上

P0=tab2[i+flag];//向上滚箭头

if(h==2)//检测电梯方向,下

P0=tab1[i+flag];//向下滚箭头

P1=tab[i+flag];//滚数字

delay(20);//延时us

}

}

if(h==2)//检测电梯向下

{

if(a==1&&flag==0)//检测楼层2键盘按下,是否到达楼1

{

TR0=0;//关闭定时器

delay1(n);//延时让电梯暂留

TR0=1;//打开T0

a=0;//重置键盘

}

if(b==1&&flag==8)//检测楼层2键盘按下,是否到达楼1

{

TR0=0;//关闭定时器

delay1(n);//延时让电梯暂留

TR0=1;//打开T0

b=0;//重置键盘

}

if(c==1&&flag==16)

{

TR0=0;

delay1(n);

TR0=1;

c=0;

}

if(d==1&&flag==24)

{

TR0=0;

delay1(n);

TR0=1;

d=0;

}

if(e==1&&flag==32)

{

TR0=0;

delay1(n);

TR0=1;

e=0;

}

if(g==1&&flag==40)

{

TR0=0;

delay1(n);

TR0=1;

g=0;

}

}

if(h==1)//检测电梯向上

{

if(a==1&&flag==0)//检测楼层1键盘按下,是否到达楼1

{

TR0=0;//关闭定时器

delay1(n);//延时让电梯暂留;

TR0=1;//打开T0

a=0;//重置键盘

}

if(b==1&&flag==8)//检测楼层1键盘按下,是否到达楼1

{

TR0=0;//关闭定时器

delay1(n);//延时让电梯暂留;

TR0=1;//打开T0

b=0;//重置键盘

}

if(c==1&&flag==16)

{

TR0=0;

delay1(n);

TR0=1;

c=0;

}

if(d==1&&flag==24)

{

TR0=0;

delay1(n);

TR0=1;

d=0;

}

if(e==1&&flag==32)

{

TR0=0;

delay1(n);

TR0=1;

e=0;

}

if(g==1&&flag==40)

{

TR0=0;

delay1(n);

TR0=1;

g=0;

}

}

}

}

voidtime0()interrupt1

{

TH0=0x3c;

TL0=0xb0;

jianpan();//键盘检测

aa++;

if(aa==6)

{

aa=0;

if(h==1)//检测电梯向上

flag++;//向上滚屏

if(h==2)//检测电梯向下

flag--;//向下滚屏

if(flag==f&&h==1)//到达最高

{

h=0;//重置电梯方向位h

if(g==1)f=40;//检测低楼层键

if(e==1)f=32;

if(d==1)f=24;

if(c==1)f=16;

if(b==1)f=8;

if(a==1)f=0;

}

if(flag==f&&h==2)//到达最低楼层

{

h=0;//重置电梯方向位h

if(a==1)f=0;//检测高楼层键

if(b==1)f=8;

if(c==1)f=16;

if(d==1)f=24;

if(e==1)f=32;

if(g==1)f=40;

}

}

}

voidjianpan()

{

if(k1==0)//检测楼层1键盘

{a=1;f=0;}//赋楼层1键盘标志位a=1,楼层号标志位f=0

if(k2==0)//检测楼层2键盘

{b=1;f=8;}//赋楼层2键盘标志位b=1,楼层号标志位f=16

if(k3==0)//检测楼层3键盘

{c=1;f=16;}//赋楼层3键盘标志位c=1,楼层号标志位f=24

if(k4==0)

{d=1;f=24;}

if(k5==0)

{e=1;f=32;}

if(k6==0)

{g=1;f=40;}

if(flag

h=1;//向上标志位h=1

if(h==1)//检测最高楼层按键重新赋值f

{

if(b==1)f=8;

if(c==1)f=16;

if(d==1)f=24;

if(e==1)f=32;

if(g==1)f=40;

}

if(flag>f&&h==0)//检测电梯首次运行方向,向下

h=2;//向下标志位h=2

if(h==2)//检测最低楼层按键重新赋值f

{

if(e==1)f=32;

if(d==1)f=24;

if(c==1)f=16;

if(b==1)f=8;

if(a==1)f=0;

}

八、设计电路:

九、设计心得:

本次单片机课程设计实验由本组四位成员经过两周努力设计得到。

软件的编程要我们不断的调试,最终一个能完成课程设计的劳动成果出来了,很高兴它能按着设计的思想与要求运动起来。

当然,这其中也有很多问题,第一、不够细心,由于对课本理论的不熟悉导致编程出现错误。

第二,是在学习态度上,这次课设是对我们的学习态度的一次检验。

对于这次单片机综合课程实习,我们的第一大心得体会就是作为一名工程技术人员,要求具备的首要素质绝对应该是严谨。

我们这次实习所遇到的多半问题多数都是由于我们不够严谨。

第三,在做人上,我们认识到,无论做什么事情,只要你足够坚强,有足够的毅力与决心,有足够的挑战困难的勇气,就没有什么办不到的。

在这次难得的课程设计过程中我们锻炼了自己的思考能力和动手能力。

通过设计电路的过程中,加强了我们思考问题的完整性和实际生活联系的可行性。

在方案设计选择和芯片的选择上,培养了我们综合应用单片机的能力,对单片机的各个管脚的功能也有了进一步的认识。

还锻炼我们个人的查阅技术资料的能力,动手能力,发现问题,解决问题的能力。

并且我们熟练掌握了有关器件的性能及测试方法。

再次感谢老师的辅导以及同学的帮助,是他们让我们有了一个更好的认识,无论是学习还是生活,生活是实在的,要踏实走路。

课程设计时间虽然很短,但我们学习了很多的东西,使我们眼界打开,感受颇深。

 

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

当前位置:首页 > 自然科学 > 物理

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

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