51单片机模拟智能电梯系统代码及注释.docx

上传人:b****1 文档编号:1688212 上传时间:2023-05-01 格式:DOCX 页数:15 大小:17.37KB
下载 相关 举报
51单片机模拟智能电梯系统代码及注释.docx_第1页
第1页 / 共15页
51单片机模拟智能电梯系统代码及注释.docx_第2页
第2页 / 共15页
51单片机模拟智能电梯系统代码及注释.docx_第3页
第3页 / 共15页
51单片机模拟智能电梯系统代码及注释.docx_第4页
第4页 / 共15页
51单片机模拟智能电梯系统代码及注释.docx_第5页
第5页 / 共15页
51单片机模拟智能电梯系统代码及注释.docx_第6页
第6页 / 共15页
51单片机模拟智能电梯系统代码及注释.docx_第7页
第7页 / 共15页
51单片机模拟智能电梯系统代码及注释.docx_第8页
第8页 / 共15页
51单片机模拟智能电梯系统代码及注释.docx_第9页
第9页 / 共15页
51单片机模拟智能电梯系统代码及注释.docx_第10页
第10页 / 共15页
51单片机模拟智能电梯系统代码及注释.docx_第11页
第11页 / 共15页
51单片机模拟智能电梯系统代码及注释.docx_第12页
第12页 / 共15页
51单片机模拟智能电梯系统代码及注释.docx_第13页
第13页 / 共15页
51单片机模拟智能电梯系统代码及注释.docx_第14页
第14页 / 共15页
51单片机模拟智能电梯系统代码及注释.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

51单片机模拟智能电梯系统代码及注释.docx

《51单片机模拟智能电梯系统代码及注释.docx》由会员分享,可在线阅读,更多相关《51单片机模拟智能电梯系统代码及注释.docx(15页珍藏版)》请在冰点文库上搜索。

51单片机模拟智能电梯系统代码及注释.docx

51单片机模拟智能电梯系统代码及注释

SETTINGS.H

#include

#defineuintunsignedint

#defineucharunsignedchar

//延时程序,以毫秒为单位,用软件计时,输入的参数为毫秒数

voidDelay_ms(uintTime);

//电梯向上走

voidUp();

//电梯向下走

voidDown();

//报警函数

voidWarnning();

//获取目的楼层

voidDestination();

//显示某一楼层

voidDisplay(ucharn,uchara);

//闪烁显示到达的楼层

voidFlash(uchara);

//点阵键盘扫描

ucharKBScan();

//延时

voiddl_ms();

//解析出按键所代表的楼层

ucharReprsent();

 

SIMPLE.C

#include"settings.h"

ucharcodeTAB[16]=

{

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71

};

sbitP0_0=P0^0;

sbitP0_1=P0^1;

sbitP0_2=P0^2;

sbitP0_3=P0^3;

sbitP0_4=P0^4;

sbitP0_5=P0^5;

sbitP0_6=P0^6;

sbitP0_7=P0^7;

sbitP1_0=P1^0;

ucharlift=1;//电梯所在的楼层

uchardestination1=1;//电梯的目的楼层

ucharflag=0;//进入电梯程序的标志

ucharkey;//按键的键码

ucharrequest[]={0,0,0,0,0,0,0,0,0};//1~8楼有无请求,有请求为1

ucharstatus=1;//电梯往上还是往下走,1为上,0为下

//报警的响声的频率产生

voidTimer1()interrupt3

{

P1_0=~P1_0;

TH1=0xfc;

TL1=0x0c;

}

intmain()

{

uchari;

P0=0xff;

P2=0x76;//数码管‘H’

EA=1;//开启外部中断INT0

EX0=1;

IT0=1;

while

(1)//检查flag标志

{//flag初始化为0

if(flag==1)//在中断中将其置1

{

break;

}

P1=0x01;//数码管跑马显示H

Delay_ms(100);//flag置1后则进入电梯程序

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

{

P1=P1<<1;

Delay_ms(100);

}

}

while

(1)//电梯程序的循环

{

if((key=KBscan())==0x77)//若点阵按键右下角的按键(其代码为0x77)按下

{

Warnning();//则报警

}

else

{

Destination();//查询有无楼层请求到达

if(destination1>=lift)//请求的楼层比要到达的楼层高

{

Up();//电梯向上走

}

else

{

Down();//否则电梯向下走

}

}

}

return0;

}

 

//中断请求,将flag置1,表示要进入电梯程序

voidInt0()interrupt0

{

flag=1;

}

//延时程序,以毫秒为单位,用软件计时,输入的参数

voidDelay_ms(uintTime)

{

uinti=0,j=0;

for(i=0;i

{

for(j=0;j<125;++j);

}

}

//电梯向上走

voidUp()

{

ucharn,m;//n为所在楼层,m为存储查询有无楼层请求的变量

uchari;//循环控制

status=1;//置1表示电梯向上走

for(n=lift;n<=destination1;++n)//电梯到达目的楼层之前往上走

{

Display(n,1);//没到达一楼就显示该楼层数

lift=n;

m=Represent();//读取点阵键盘

if(m==9)//报警键按下则报警

{

Warnning();

}

else//有楼层请求到达

{//将对应的request置1

request[m]=1;

}

for(i=1;i<=8;++i)//若请求到达的楼层在所在楼层和目的楼层之间

{//则停下闪烁显示

if(request[i]==1&&i==n)//并将其对应的request清零

{

request[i]=0;

Flash

(1);

}

}

}

--n;

lift=n;

Flash

(1);//到达目的楼层闪烁显示该楼层

}

//电梯向下走

voidDown()

{

ucharn,m;//n为所在楼层,m为存储查询有无楼层请求的变量

uchari;//循环控制

status=0;//置1表示电梯向上走

for(n=lift;n>=destination1;--n)//电梯到达目的楼层之前往下走

{

Display(n,0);//没到达一楼就显示该楼层数

lift=n;

m=Represent();//读取点阵键盘

if(m==9)//报警键按下则报警

{

Warnning();

}

else//有楼层请求到达

{//将对应的request置1

request[m]=1;

}

for(i=1;i<=8;++i)//若请求到达的楼层在所在楼层和目的楼层之间

{//则停下闪烁显示

if(request[i]==1&&i==n)//并将其对应的request清零

{

request[i]=0;

Flash(0);

}

}

}

++n;

lift=n;

Flash(0);//到达目的楼层闪烁显示该楼层

}

//报警函数

voidWarnning()

{

TMOD=0x10;//T1定时器初始化

ET1=1;

TH1=0xfc;

TL1=0x0c;

TR1=1;

while

(1)

{

P1=0x02;//显示STOP

P2=0x6D;

Delay_ms(5);

P1=0x04;

P2=0x07;

Delay_ms(5);

P1=0x08;

P2=0x3f;

Delay_ms(5);

P1=0x10;

P2=0x73;

Delay_ms(5);

if(KBScan()!

=0x77)//报警键没有按

{//则跳出,并停止喇叭响

TR1=0;

break;

}

}

}

//获取目的楼层

voidDestination()

{

ucharj,n;//j循环控制变量,n存储度点阵键盘变量

n=Represent();//有键按下

request[n]=1;//其对应的楼层request置1

if(status==1)//若电梯向上走则从高楼层到低楼层扫描

{//以此达到判断优先级的目的

for(j=8;j>=1;--j)

{

if(request[j]==1)

{

request[j]=0;//哪一层有请求

destination1=j;//则将目的楼层设为该楼

break;//并将其对应的request置1,然后跳出

}

}

}

elseif(status==0)//若电梯向下走则从低楼层到高楼层扫描

{//以此达到判断优先级的目的

for(j=1;j<=8;++j)

{

if(request[j]==1)

{

request[j]=0;

destination1=j;

break;

}

}

}

}

//显示某一楼层

voidDisplay(ucharn,uchara)

{

uchari,b;

if(a==1)

{

b=0x73;

}

elseif(a==0)

{

b=0x5E;

}

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

{

P1=0x20;

P2=b;

Delay_ms(10);

P1=0x02;

P2=TAB[n];

Delay_ms(10);

}

}

//闪烁显示到达的楼层

voidFlash(uchara)

{

uchari,j,b;

ucharm;

if(a==1)//a=1表示向上

{

b=0x73;//七段码P

}

elseif(a==0)//a=0表示向下

{

b=0x5E;//七段码d

}

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

{

m=Represent();//闪烁时判断有无楼层请求到达

request[m]=1;

for(j=0;j<15;++j)//闪烁显示楼层和P或者d

{

P1=0x20;//先显示P或者d以及楼层数

P2=b;//再显示P或者d而不显示楼层数

Delay_ms(10);//以此达到闪烁的目的

P1=0x02;

P2=TAB[lift];

Delay_ms(10);

}

for(j=0;j<15;++j)

{

P1=0x20;

P2=b;

Delay_ms(10);

P1=0x02;

P2=0x00;

Delay_ms(10);

}

}

}

 

OPERATIONS.C

#include"settings.h"

//延时

voiddl_ms()

{

uchari;

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

}

//点阵键盘扫描

ucharKBScan()

{

ucharsccode,recode;//sccode低位,recode高位

uchari,a;//i循环控制,a读取P0口

P0=0x0f;

if((P0&0x0f)!

=0x0f)//有无键按下

{

dl_ms();//消抖延时

if((P0&0x0f)!

=0x0f)//有键按下则继续

{

recode=0x7f;

for(i=1;i<=4;++i)

{

P0=recode;//从P0的最高位开始扫描,即点阵键盘第四行

if((P0&0x0f)!

=0x0f)

{

a=P0;//若该行有键按下,则返回其代码

sccode=a&0x0f;

recode=recode&0xf0;

return(sccode+recode);

}

else

{

recode=(recode>>1)|0x80;//若没有则扫描其上面一行

}

}

}

}

return0;

}

//解析出按键所代表的楼层

ucharRepresent()

{

ucharkey,n;

key=KBScan();

switch(key)

{

case0xee:

n=1;break;

case0xed:

n=2;break;

case0xeb:

n=3;break;

case0xe7:

n=4;break;

case0xde:

n=5;break;

case0xdd:

n=6;break;

case0xdb:

n=7;break;

case0xd7:

n=8;break;

case0x77:

n=9;break;

default:

n=0;break;

}

returnn;

}

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

当前位置:首页 > 初中教育 > 语文

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

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