当前位置: 首页 > news >正文

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

实验目的:按下键盘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.lryc.cn/news/530103.html

相关文章:

  • 组件框架漏洞
  • OFDM系统仿真
  • 基于单片机的盲人智能水杯系统(论文+源码)
  • 安心即美的生活方式
  • 安卓(android)订餐菜单【Android移动开发基础案例教程(第2版)黑马程序员】
  • 【cocos creator】【模拟经营】餐厅经营demo
  • 前端 | 深入理解Promise
  • Visual Studio Code修改terminal字体
  • 自然语言处理-词嵌入 (Word Embeddings)
  • 自定义数据集 使用pytorch框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测,对预测结果计算精确度和召回率及F1分数
  • 【论文笔记】Fast3R:前向并行muti-view重建方法
  • 谈谈你所了解的AR技术吧!
  • upload labs靶场
  • 搜索引擎友好:设计快速收录的网站架构
  • 基于 oneM2M 标准的空气质量监测系统的互操作性
  • 春晚舞台上的人形机器人:科技与文化的奇妙融合
  • 零基础学习书生.浦语大模型-入门岛
  • Gurobi基础语法之 addConstr, addConstrs, addQConstr, addMQConstr
  • 数据结构---图的遍历
  • Qwen 模型自动构建知识图谱,生成病例 + 评价指标优化策略
  • .Net Web API 访问权限限定
  • 项目架构调整,切换版本并发布到中央仓库
  • 考试知识点位运算
  • matlab快速入门(2)-- 数据处理与可视化
  • Kafka中文文档
  • Python-列表
  • 51单片机开发:定时器中断
  • 【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(二)
  • 算法【混合背包】
  • WordPress eventon-lite插件存在未授权信息泄露漏洞(CVE-2024-0235)