【51单片机】【protues仿真】基于51单片机四层电梯系统

目录

一、主要功能

二、使用步骤

三、硬件资源

四、软件设计

五、实验现象

一、主要功能

1、数码管显示楼层号,上下方向

2、指示灯显示电梯运行状态

3、按键分为内外按键

二、使用步骤

核心控制器采用STC89C52单片机,搭配数码管显示楼层、矩阵按键输入指令、以及LED指示灯显示运行状态。外呼按键采用消抖电路设计。

三、硬件资源

1、51单片机核心模块

2、按键模块

3、8155芯片传感器

4、数码管显示模块

四、软件设计

#include "reg52.h"

#include "absacc.h"

#define uint unsigned int

#define uchar unsigned char

#define COM XBYTE[0xFF20]

#define PA XBYTE[0xFF21]

#define PB XBYTE[0xFF22]

#define PC XBYTE[0xFF23]

sbit lup1=P1^0;

sbit lup2=P1^1;

sbit ldown2=P1^2;

sbit lup3=P1^3;

sbit ldown3=P1^4;

sbit ldown4=P1^5;

sbit lopen=P1^7;

uchar state; //当前电梯状态

uchar statepre; //之前电梯状态

uchar flag; //电梯上下标志,0下,1上

bit flag1; //定时时间到标志

uchar counter; //计数器

bit in1=0, in2=0, in3=0, in4=0, up1=0, up2=0, up3=0, down2=0, down3=0, down4=0;op=0;

uchar code table[]={0xf9, 0xa4,0xb0,0x99, 0xa1, 0xc1, 0xff};

void T0_time()interrupt 1

{

TH0=(65536-50000)/256; TL0=(65536-50000)%256; //重赋初值

counter++; //定时器中断次数加1

if(counter==60) //三秒钟执行一次

{

counter=0;

flag1=1; //三秒钟定时到标志

}

}void delay(uint xms) //简单延时0.1ms

{

uint o,j;

for(o=xms;o>0;o--)

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

}

void main()

{

state=1;

statepre=1;

flag=1;

flag1=0;

COM=0x43; //intialize 8155

TMOD=0x01; //定义定时器0/1为定时器模式

EA=1; //开中断

while(1){

switch(state){ //扫描电梯所在位置

case(1):{

if(state!=statepre){ //上次的状态和本次不一样说明电梯 需要开门

lopen=0;

run(); //按键扫描三秒钟

lopen=1;

in1=0; //如果in1和up1被按下则无效

up1=0;

lup1=1;

}

else{

if(up1){

up1=0;

lup1=1;

lopen=0;

run();

lopen=1;

}

}

in1=0;

if(up2|down2|up3|down3|down4|in2|in3|in4){

flag=1; //说明上行

run(); //按键扫描三秒钟

state=2; //更新状态

statepre=1;

}

else{

statepre=state;

flag=2;

keyscan();

display();

}

break;

}

case(2):{

if(state!=statepre)

{

if(!(

((flag==1)&&(in3|up3|down3)&&(~down2)&&(~in2))

||((flag==1)&&(in4|down4)&&(~up2)&&(~in2))

||((flag==0)&&(in1||up1)&&(~down2)&&(~in2))

)

)

{

lopen=0;

run(); //按键扫描三秒钟

lopen=1;

in2=0; //如果in2被按下则无效

if(flag==1){ //如果上行,电梯外上行指示灯按下无效

up2=0;

lup2=1;

}

else{ //如果下行,电梯外下行指示灯按下无效

down2=0;

ldown2=1;

}

}

}

else{

if(down2|up2){

down2=0;

up2=0;

lopen=0;

run();

lopen=1;

ldown2=1;

lup2=1;

}

}

in2=0;

if(flag)

up2=0;

else

down2=0;

if(flag==1){

if(down3|in3|up3|down4|in4){

flag=1;

run();

state=3;

statepre=2;

}

else if(in1|up1){

flag=0;

run();

state=1;

statepre=2;

}

else{

statepre=state;

flag=2;

keyscan();

display();

}

}

else {

if(up1|in1){

flag=0;

run();

state=1;

statepre=2;

}

else if(in3|down3|up3|in4|down4){

flag=1;

run();

state=3;

statepre=2;

}

else{

statepre=state;

flag=2;

keyscan();

display();

}

}

break;

}

}

}

五、实验现象

演示视频:

【51单片机-B060】【protues仿真】基于51单片机四层电梯仿真

相关推荐
传感器与混合集成电路6 小时前
210℃与175℃高温存储器选型研究:LHM256MB与LDMF4GA-H架构与可靠性对比(上)
嵌入式硬件·能源
时光找茬6 小时前
【瑞萨AI挑战赛-FPB-RA6E2】+ 从零开始:FPB-RA6E2 开箱测评与 e2 studio 环境配置
c++·单片机·边缘计算
17(无规则自律)7 小时前
【CSAPP 读书笔记】第二章:信息的表示和处理
linux·嵌入式硬件·考研·高考
@good_good_study7 小时前
FreeRTOS内存管理
单片机
Hello_Embed8 小时前
libmodbus 移植 STM32(基础篇)
笔记·stm32·单片机·学习·modbus
qq_397562319 小时前
QT工程 , 生成别的电脑运行的exe程序
嵌入式硬件·qt
qqssss121dfd10 小时前
STM32H750XBH6的ETH模块移植LWIP
网络·stm32·嵌入式硬件
想放学的刺客12 小时前
单片机嵌入式试题(第27期)设计可移植、可配置的外设驱动框架的关键要点
c语言·stm32·单片机·嵌入式硬件·物联网
天昊吖12 小时前
stc8H启用DMA发送后 卡住【踩坑日志】
单片机
李永奉12 小时前
杰理芯片SDK开发-ENC双麦降噪配置/调试教程
人工智能·单片机·嵌入式硬件·物联网·语音识别