在51单片机上完成一个八层楼的电梯模拟项目的简单的示例代码 其要求如下 1、使用键盘阵列模拟电梯按键 2、开发板8个LED灯自下向上排列,分别对应8个楼层 3、使用8x8LED点阵屏显示1-8八个数字; 4、蜂鸣器发出“哔”声,提示电梯到达。 电梯运行流程如下: 1、初始电梯停在1楼,对应的LED灯点亮,点阵屏显示数字1; 2、按下按键上的数字键,表示电梯运行的目标楼层,对应LED灯点亮,如:按下 3,对应3层的LED灯点亮;允许多次按键,如楼层已经按过,再按不起作用; 3、按下确定键,电梯开始以0.5秒一层的速度自下向上运行,同时对应的LED灯和点阵屏随同改变,如:运行到2层,1层LED熄灭,2层LED亮起,点阵屏显示数字2; 4、电梯一直运行到目标楼层,蜂鸣器响起,提示到达目标;如有多个目标楼层,每一个目标楼层停顿三秒后电梯继续运行直到最后一个目标,此时仅有该楼层LED点亮,电梯一次运行结束; 5、不论电梯停在何层,重复步骤2-4,电梯继续运行,注意:当目标楼层中出现小于当前楼层的,电梯都以“先上后下”原则处理,即先运行到最高目标楼层后再往下运行到最低的目标楼层方停止,完成一次运行;如仅有低于当前楼层的目标楼层,则电梯直接向下运行; 6、电梯运行过程中按键不起作用。

时间: 2023-12-03 21:05:24 浏览: 21
好的,以下是一个简单的示例代码,实现了八层楼电梯的基本功能。需要注意的是,这只是一个示例代码,可能还有些不足之处,您可以根据实际需求进行修改和完善。 ```c #include <reg52.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int sbit beep = P3^4; // 蜂鸣器 sbit led1 = P1^0; // LED灯 sbit led2 = P1^1; sbit led3 = P1^2; sbit led4 = P1^3; sbit led5 = P1^4; sbit led6 = P1^5; sbit led7 = P1^6; sbit led8 = P1^7; uchar code led_table[] = { // LED灯表格 0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f }; uchar code num_table[] = { // 数字表格 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f }; uchar key_value = 0; // 按键值 uchar current_floor = 1; // 当前楼层 uchar target_floor = 1; // 目标楼层 uchar flag = 0; // 标志位,用于判断是否到达目标楼层 uchar stop_flag = 0; // 停顿标志位,用于判断是否需要停顿 uchar delay_count = 0; // 延时计数器 uchar count = 0; // 计数器,用于控制电梯的运行速度 void delay(uint x) { // 延时函数 uint i, j; for(i = x; i > 0; i--) for(j = 110; j > 0; j--); } void display_num(uchar num) { // 数码管显示函数 P0 = num_table[num - 1]; delay(1); } void display_floor(uchar floor) { // 8x8LED点阵屏显示函数 uchar i; for(i = 0; i < 8; i++) { P0 = led_table[i]; P2 = ~(1 << floor - 1); delay(1); } } void beep_sound() { // 蜂鸣器响声函数 beep = 0; delay(10); beep = 1; delay(10); } void run_elevator() { // 电梯运行函数 if(current_floor < target_floor) { // 上升 display_num(current_floor); display_floor(current_floor); led1 = 0; led2 = 0; led3 = 0; led4 = 0; led5 = 0; led6 = 0; led7 = 0; led8 = 0; switch(current_floor) { case 1: led1 = 1; break; case 2: led2 = 1; break; case 3: led3 = 1; break; case 4: led4 = 1; break; case 5: led5 = 1; break; case 6: led6 = 1; break; case 7: led7 = 1; break; case 8: led8 = 1; break; } current_floor++; count = 0; } else if(current_floor > target_floor) { // 下降 display_num(current_floor); display_floor(current_floor); led1 = 0; led2 = 0; led3 = 0; led4 = 0; led5 = 0; led6 = 0; led7 = 0; led8 = 0; switch(current_floor) { case 1: led1 = 1; break; case 2: led2 = 1; break; case 3: led3 = 1; break; case 4: led4 = 1; break; case 5: led5 = 1; break; case 6: led6 = 1; break; case 7: led7 = 1; break; case 8: led8 = 1; break; } current_floor--; count = 0; } else { // 到达目标楼层 display_num(current_floor); display_floor(current_floor); beep_sound(); flag = 1; stop_flag = 1; delay_count = 0; } } void main() { P0 = 0xff; // 数码管初始显示0 P2 = 0xff; // 8x8LED点阵屏初始显示空 beep = 1; // 蜂鸣器初始化为不响 while(1) { key_value = P3; // 读取键盘阵列值 if(key_value != 0xff) { // 有键按下 delay(5); // 延时去抖 if(key_value != 0xff) { // 再次确认键是否按下 switch(key_value) { case 0xfe: target_floor = 1; break; case 0xfd: target_floor = 2; break; case 0xfb: target_floor = 3; break; case 0xf7: target_floor = 4; break; case 0xef: target_floor = 5; break; case 0xdf: target_floor = 6; break; case 0xbf: target_floor = 7; break; case 0x7f: target_floor = 8; break; } } while(key_value != 0xff); // 等待键抬起 } if(!flag && target_floor != current_floor && !stop_flag) { // 电梯未到达目标楼层,且没有停顿标志位 run_elevator(); // 运行电梯 } if(flag && delay_count < 30) { // 电梯到达目标楼层,等待3秒 delay_count++; if(delay_count == 30) { flag = 0; stop_flag = 0; delay_count = 0; } } if(flag && delay_count == 30) { // 电梯停顿3秒后,继续运行 if(target_floor > current_floor) { // 目标楼层在电梯上方 current_floor++; count = 0; } else if(target_floor < current_floor) { // 目标楼层在电梯下方 current_floor--; count = 0; } else { // 到达目标楼层 beep_sound(); flag = 1; stop_flag = 1; delay_count = 0; } } if(count == 15) { // 控制电梯的运行速度 count = 0; } count++; } } ``` 希望对您有所帮助。

相关推荐

在51单片机上完成一个八层楼的电梯模拟项目的简单的示例代码 其要求如下 1、使用键盘阵列模拟电梯按键 S1按键代表5层 S2按键代表6层 S3按键代表7层 S4按键代表8层 S5按键代表1层 S6按键代表2层 S7按键代表3层 S8按键代表4层 S13按键代表确认 2、开发板8个LED灯自下向上排列,分别对应8个楼层 3、使用8x8LED点阵屏显示1-8八个数字; 4、蜂鸣器发出“哔”声,提示电梯到达。 电梯运行流程如下: 1、初始电梯停在1楼,对应的LED灯点亮,点阵屏显示数字1; 2、按下按键上的数字键,表示电梯运行的目标楼层,对应LED灯点亮,如:按下 3,对应3层的LED灯点亮;允许多次按键,如楼层已经按过,再按不起作用; 3、按下确定键,电梯开始以0.5秒一层的速度自下向上运行,同时对应的LED灯和点阵屏随同改变,如:运行到2层,1层LED熄灭,2层LED亮起,点阵屏显示数字2; 4、电梯一直运行到目标楼层,蜂鸣器响起,提示到达目标;如有多个目标楼层,每一个目标楼层停顿三秒后电梯继续运行直到最后一个目标,此时仅有该楼层LED点亮,电梯一次运行结束; 5、不论电梯停在何层,重复步骤2-4,电梯继续运行,注意:当目标楼层中出现小于当前楼层的,电梯都以“先上后下”原则处理,即先运行到最高目标楼层后再往下运行到最低的目标楼层方停止,完成一次运行;如仅有低于当前楼层的目标楼层,则电梯直接向下运行; 6、电梯运行过程中按键不起作用。

在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、电梯运行过程中按键不起作用。

最新推荐

recommend-type

基于51单片机的电梯控制器设计方案.doc

基于51单片机的电梯控制器设计方案,本方案基本功能已具备,电梯内有各楼层按钮和紧急呼叫按钮和开关门提示音以及警报声,各楼层有上下行按钮,希望各位能够采纳,个人所作,学校课程要求。
recommend-type

51单片机单中断多按键的应用.doc

在单片机的按键编程中,有时会遇到一个问题,用多个按键来控制多个死循环,而程序一旦进入循环就跳不出来,此时会想到用中断,而普通单片机一般只有2个外部中断,stc系列的查了一下最多也只有5个外部中断,那要是...
recommend-type

51单片机整数二一十进制转换的快速算法

无论是与传统汇编语言子程序,还是与使用sprintf()函数的程序相比,快速算法都有很大的速度优势;是一种针对8位机的创新算法,具有很强的工程实用性,值得推广应用。
recommend-type

单片机与DSP中的利用单片机实现的模拟信号和数字信号单线混合传输

信号传输在现代工程中是很重要的一个技术环节,通常使用多芯电缆将模拟信号和数字信号独立多线传输。但在信号传输中,数字信号将对模拟信号产生干扰,不得不采用互相屏蔽的多芯缆来降低干扰。这样不仅使电缆的线径和...
recommend-type

基于STC15W204S单片机模拟单总线EEPROM芯片DS2431

基于STC15W204S单片机研究模拟了单总线EEPROM芯片DS2431。SOP8封装的STC15W204S...主要介绍了1Wire通信协议、单片机模拟芯片硬件电路、单片机模拟DS2431的程序设计流程、单片机模拟DS2431的64位光刻以及EEPROM。
recommend-type

RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz

REALTEK 8188FTV 8188eus 8188etv linux驱动程序稳定版本, 支持AP,STA 以及AP+STA 共存模式。 稳定支持linux4.0以上内核。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

:YOLOv1目标检测算法:实时目标检测的先驱,开启计算机视觉新篇章

![:YOLOv1目标检测算法:实时目标检测的先驱,开启计算机视觉新篇章](https://img-blog.csdnimg.cn/img_convert/69b98e1a619b1bb3c59cf98f4e397cd2.png) # 1. 目标检测算法概述 目标检测算法是一种计算机视觉技术,用于识别和定位图像或视频中的对象。它在各种应用中至关重要,例如自动驾驶、视频监控和医疗诊断。 目标检测算法通常分为两类:两阶段算法和单阶段算法。两阶段算法,如 R-CNN 和 Fast R-CNN,首先生成候选区域,然后对每个区域进行分类和边界框回归。单阶段算法,如 YOLO 和 SSD,一次性执行检
recommend-type

info-center source defatult

这是一个 Cisco IOS 命令,用于配置 Info Center 默认源。Info Center 是 Cisco 设备的日志记录和报告工具,可以用于收集和查看设备的事件、警报和错误信息。该命令用于配置 Info Center 默认源,即设备的默认日志记录和报告服务器。在命令行界面中输入该命令后,可以使用其他命令来配置默认源的 IP 地址、端口号和协议等参数。
recommend-type

c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf

校园超市商品信息管理系统课程设计旨在帮助学生深入理解程序设计的基础知识,同时锻炼他们的实际操作能力。通过设计和实现一个校园超市商品信息管理系统,学生掌握了如何利用计算机科学与技术知识解决实际问题的能力。在课程设计过程中,学生需要对超市商品和销售员的关系进行有效管理,使系统功能更全面、实用,从而提高用户体验和便利性。 学生在课程设计过程中展现了积极的学习态度和纪律,没有缺勤情况,演示过程流畅且作品具有很强的使用价值。设计报告完整详细,展现了对问题的深入思考和解决能力。在答辩环节中,学生能够自信地回答问题,展示出扎实的专业知识和逻辑思维能力。教师对学生的表现予以肯定,认为学生在课程设计中表现出色,值得称赞。 整个课程设计过程包括平时成绩、报告成绩和演示与答辩成绩三个部分,其中平时表现占比20%,报告成绩占比40%,演示与答辩成绩占比40%。通过这三个部分的综合评定,最终为学生总成绩提供参考。总评分以百分制计算,全面评估学生在课程设计中的各项表现,最终为学生提供综合评价和反馈意见。 通过校园超市商品信息管理系统课程设计,学生不仅提升了对程序设计基础知识的理解与应用能力,同时也增强了团队协作和沟通能力。这一过程旨在培养学生综合运用技术解决问题的能力,为其未来的专业发展打下坚实基础。学生在进行校园超市商品信息管理系统课程设计过程中,不仅获得了理论知识的提升,同时也锻炼了实践能力和创新思维,为其未来的职业发展奠定了坚实基础。 校园超市商品信息管理系统课程设计的目的在于促进学生对程序设计基础知识的深入理解与掌握,同时培养学生解决实际问题的能力。通过对系统功能和用户需求的全面考量,学生设计了一个实用、高效的校园超市商品信息管理系统,为用户提供了更便捷、更高效的管理和使用体验。 综上所述,校园超市商品信息管理系统课程设计是一项旨在提升学生综合能力和实践技能的重要教学活动。通过此次设计,学生不仅深化了对程序设计基础知识的理解,还培养了解决实际问题的能力和团队合作精神。这一过程将为学生未来的专业发展提供坚实基础,使其在实际工作中能够胜任更多挑战。