51单片机开发:独立键盘实验

server/2025/2/1 7:52:30/

实验目的:按下键盘1时,点亮LED灯1。

键盘原理图如下图所示,可见,由于接GND,当键盘按下时,P3相应的端口为低电平。

键盘按下时会出现抖动,时间通常为5-10ms,代码中通过延时函数delay_10us将抖动过滤掉。

我们要实现的功能是按下键盘1,LED1点亮,再按下键盘1,LED1熄灭。为了防止一直按着键盘不松手,LED1被反复点亮熄灭,代码中通过key来确保按下键盘只执行一次操作。

#include "reg52.h"typedef unsigned char u8;
typedef unsigned int u16;sbit KEY1 = P3^1; //定义键盘对应的端口
sbit KEY2 = P3^0;
sbit KEY3 = P3^2;
sbit KEY4 = P3^3;sbit LED1 = P2^0; //LED灯对应的端口#define KEY1_PRESS 1
#define KEY2_PRESS 2
#define KEY3_PRESS 3
#define KEY4_PRESS 4
#define KEY_UNPRESS 0void delay_10us(u16 ten_us){while(ten_us--);
}static u8 key=1;
u8 key_scan(u8 mode){ if(mode)key=1; //key的目的是防止一直按按键不松手if(key==1 &&(KEY1==0||KEY2==0||KEY3==0||KEY4==0)){//低电平表示键盘被按下delay_10us(1000);key=0;if(KEY1==0)return KEY1_PRESS;else if(KEY2==0)return KEY2_PRESS;else if(KEY3==0)return KEY3_PRESS;	else if(KEY4==0)return KEY4_PRESS;		}else if(KEY1==1&&KEY2==1&&KEY3==1&&KEY4==1){//键盘未被按下key=1;}return  KEY_UNPRESS;
}void main(){u8 key=0;while(1){key = key_scan(0);if(key==KEY1_PRESS){//当键盘1按下时,LED灯1被点亮LED1 = !LED1;}}
}


http://www.ppmy.cn/server/164014.html

相关文章

布林线(BOLL)

BOLL上轨的意义 BOLL指标由上轨、中轨和下轨组成,上轨是股价运行的“压力线”,当股价突破上轨时,通常意味着市场处于极度强势的上涨行情。但如果股价在突破上轨后无法持续维持在上轨上方,而是开始回落并跌破上轨,这往往…

Vue 3 项目结构及核心文件

Vue 3 是一个流行的前端框架,它提供了一种高效、灵活的方式来构建用户界面。在这篇博客中,我们将深入探讨一个标准 Vue 3 项目的目录结构,并详细介绍 main.ts 和 App.vue 这两个核心文件。 目录结构 首先,让我们来看一下一个典型…

最近最少使用算法(LRU最近最少使用)缓存替换算法

含义 最近最少使用算法(LRU)是一种缓存替换算法,用于在缓存空间有限的情况下,选择最少使用的数据项进行替换。该算法的核心思想是基于时间局部性原理,即刚被访问的数据在未来也很有可能被再次访问。 实现 LRU算法的…

华为Ascend产品

文章目录 昇腾 AI服务器 昇腾 AI服务器 昇腾 AI服务器 - ZOMI Atlas 800 训练服务器 - 模型图

【2024年华为OD机试】 (A卷,200分)- 最大化控制资源成本(JavaScriptJava PythonC/C++)

一、问题描述 任务混部问题解析 问题描述 公司创新实验室需要解决一个任务混部问题,目标是最小化资源成本并最大化资源利用率。给定一批任务,每个任务有开始时间、结束时间和并行度三个属性。并行度表示任务运行时占用的服务器数量。任务运行完成后立即释放服务器。要求计…

Unet 改进:在encoder和decoder间加入TransformerBlock

目录 1. TransformerBlock 2. Unet 改进 3. 完整代码 Tips:融入模块后的网络经过测试,可以直接使用,设置好输入和输出的图片维度即可 1. TransformerBlock TransformerBlock是Transformer模型架构的基本组件,广泛应用于机器翻译、文本摘要和情感分析等自然语言处理任务…

2025数学建模美赛|A题成品论文

A题 摘要 本研究提出了一种数学建模方法,旨在帮助考古学家基于台阶磨损模式得出关于台阶使用情况的基本结论。通过模型的建立,我们解决了两个主要任务:首先是从磨损模式中推测台阶的使用频率、行走方向偏好和同时使用人数;其次是在…

SOAFEE 技术研讨会:汽车软件定义与自动驾驶技术探讨

在本次技术研讨会上,来自汽车与科技领域的专家们围绕汽车软件定义及自动驾驶技术展开了深入交流与探讨。从 SOAFEE 蓝图计划的创新性理念,到 Autoware 开源项目及 Open AD Kit 在实际应用中的探索,再到 Edge Workload Abstraction and Orches…