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

相关推荐
学习路上_write12 小时前
STM32回调函数使用/定时器/GPIO/串口/
c语言·单片机·嵌入式硬件
稻草、14 小时前
合泰单片机之时基中断
单片机·嵌入式硬件
盈创力和200714 小时前
物联网 “神经” 之以太网:温湿度传感器的工业级 “高速干道”
运维·服务器·网络·嵌入式硬件·以太网温湿度传感器
GilgameshJSS14 小时前
STM32H743-ARM例程36-DNS
c语言·arm开发·stm32·单片机·嵌入式硬件
工具人555515 小时前
电脑插入USB一个端口都识别不出来
单片机·嵌入式硬件·电脑
KOAN凯擎小妹15 小时前
晶振信号质量:上升下降时间与占空比
单片机·嵌入式硬件·fpga开发·信息与通信
sheepwjl17 小时前
《嵌入式硬件(二十一):基于IMX6ULL的脉冲宽度调制(PWM)操作》
嵌入式硬件·pwm·脉冲宽度调制
小莞尔18 小时前
【51单片机】【protues仿真】基于51单片机简易电子琴系统(8键)
c语言·单片机·嵌入式硬件·物联网·51单片机
盈创力和200719 小时前
技术解析:CO与NO₂双气体监测如何构筑协同化安全防线
嵌入式硬件·安全·以太网温湿度传感器·多参量传感器·温湿度+气体智能传感器
平凡灵感码头20 小时前
STM32 串口中断接收原理与实战详解:从配置到中断服务函数全流程解析
单片机·嵌入式硬件