在BST-V51 Ver3.3全新升级版的51单片机开发板上完成一个八层楼的电梯模拟项目的简单的示例代码 其硬件配置要求如下 1、使用键盘阵列模拟电梯按键,按键的排列如下 S1按键代表去5层 S2按键代表去6层 S3按键代表去7层 S4按键代表去8层 S5按键代表去1层 S6按键代表去2层 S7按键代表去3层 S8按键代表去4层 S13按键代表确认前往 2、开发板8个LED灯自下向上排列,分别对应8个楼层 如下; D1代表8层 D2代表7层 D3代表6层 D4代表5层 D5代表4层 D6代表3层 D7代表2层 D8代表1层 3、蜂鸣器发出“哔”声,提示电梯到达。 电梯运行流程如下: 1、初始电梯停在1楼,对应的LED灯点亮; 2、按下按键上的数字键,表示电梯运行的目标楼层,对应LED灯点亮,如:按下3,对应3层的LED灯点亮;允许多次按键,如楼层已经按过,再按不起作用; 3、按下确定键,电梯开始以0.5秒一层的速度自下向上运行,同时对应的LED灯随同改变,如:运行到2层,1层LED熄灭,2层LED亮起; 4、电梯一直运行到目标楼层,蜂鸣器响起,提示到达目标;如有多个目标楼层,每一个目标楼层停顿三秒后电梯继续运行直到最后一个目标,此时仅有该楼层LED点亮,电梯一次运行结束; 5、不论电梯停在何层,重复步骤2-4,电梯继续运行,注意:当目标楼层中出现小于当前楼层的,电梯都以“先上后下”原则处理,即先运行到最高目标楼层后再往下运行到最低的目标楼层方停止,完成一次运行;如仅有低于当前楼层的目标楼层,则电梯直接向下运行; 6、电梯运行过程中按键不起作用。
时间: 2023-12-07 16:03:49 浏览: 151
5、步骤5 相关例程.zip_51单片机_BST-V51 51单片机_BST-V51程序_iic数码管
5星 · 资源好评率100%
以下是可能的示例代码,仅供参考:
```c
#include <reg52.h>
sbit S1 = P2^0;
sbit S2 = P2^1;
sbit S3 = P2^2;
sbit S4 = P2^3;
sbit S5 = P2^4;
sbit S6 = P2^5;
sbit S7 = P2^6;
sbit S8 = P2^7;
sbit S13 = P1^0;
sbit D1 = P0^7;
sbit D2 = P0^6;
sbit D3 = P0^5;
sbit D4 = P0^4;
sbit D5 = P0^3;
sbit D6 = P0^2;
sbit D7 = P0^1;
sbit D8 = P0^0;
sbit buzzer = P3^0;
unsigned char floor = 1; // 当前楼层
unsigned char target_floors[8] = {0}; // 目标楼层列表
unsigned char target_count = 0; // 目标楼层数量
unsigned char target_index = 0; // 当前处理的目标楼层在列表中的下标
void delay(unsigned int time) {
unsigned int i, j;
for (i = time; i > 0; i--) {
for (j = 110; j > 0; j--);
}
}
void buzzer_beep() {
unsigned int i;
for (i = 0; i < 1000; i++) {
buzzer = 1;
delay(1);
buzzer = 0;
delay(1);
}
}
void update_leds() {
D1 = (floor == 8);
D2 = (floor == 7);
D3 = (floor == 6);
D4 = (floor == 5);
D5 = (floor == 4);
D6 = (floor == 3);
D7 = (floor == 2);
D8 = (floor == 1);
}
void add_target_floor(unsigned char f) {
unsigned char i;
for (i = 0; i < target_count; i++) {
if (target_floors[i] == f) {
return; // 目标楼层已经存在,不需要添加
}
}
target_floors[target_count++] = f;
}
void process_target_floors() {
if (target_count == 0) {
return; // 没有目标楼层
}
unsigned char i;
unsigned char max_floor = target_floors[0];
for (i = 1; i < target_count; i++) {
if (target_floors[i] > max_floor) {
max_floor = target_floors[i]; // 找到最高的目标楼层
}
}
while (floor < max_floor) {
floor++; // 向上运行
update_leds();
delay(500);
}
for (i = 0; i < target_count; i++) {
if (target_floors[i] == floor) {
buzzer_beep(); // 到达目标楼层,蜂鸣器响起
delay(3000); // 停顿三秒
}
}
while (floor > 1) {
floor--; // 向下运行
update_leds();
delay(500);
}
target_count = 0; // 清空目标楼层列表
}
void main() {
while (1) {
if (S1 == 0) {
add_target_floor(5);
while (S1 == 0);
}
if (S2 == 0) {
add_target_floor(6);
while (S2 == 0);
}
if (S3 == 0) {
add_target_floor(7);
while (S3 == 0);
}
if (S4 == 0) {
add_target_floor(8);
while (S4 == 0);
}
if (S5 == 0) {
add_target_floor(1);
while (S5 == 0);
}
if (S6 == 0) {
add_target_floor(2);
while (S6 == 0);
}
if (S7 == 0) {
add_target_floor(3);
while (S7 == 0);
}
if (S8 == 0) {
add_target_floor(4);
while (S8 == 0);
}
if (S13 == 0) {
process_target_floors();
while (S13 == 0);
}
}
}
```
阅读全文