【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单片机四层电梯仿真

相关推荐
刻BITTER3 小时前
用EXCEL 将单色屏幕的Bitmap 字模数据还原回图形
单片机·嵌入式硬件·excel·arduino
撬动未来的支点5 小时前
【嵌入式】MCU和MPU的区别
单片机·嵌入式硬件
一支闲人6 小时前
CAN:STM32 CAN外设2
stm32·单片机·基础知识·can协议·stm外设
雅欣鱼子酱6 小时前
两种电流检测电路设计方案 高侧,低侧,最高耐压90V
单片机·嵌入式硬件·芯片·电子元器件·电流检测芯片
平凡灵感码头7 小时前
经典按键扫描程序算法实现方式
单片机·矩阵·计算机外设
d111111111d8 小时前
STM32--SPI通讯外设-学习笔记
笔记·stm32·单片机·嵌入式硬件·学习
bai5459368 小时前
STM32旋转编码计次
stm32·单片机·嵌入式硬件
d111111111d8 小时前
在STM32中有参宏定义define该怎么使用
笔记·stm32·单片机·嵌入式硬件·学习
KWTXX8 小时前
STM32工作原理与数电模电的紧密联系【主要是介绍电路,模数电,想看STM32的工作原理可以不用看】
stm32·单片机·嵌入式硬件
就是蠢啊8 小时前
51单片机——蜂鸣器实验
单片机·嵌入式硬件