当前位置: 首页 > 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--);
}u8 key_scan(u8 mode){ static u8 key=1;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/530944.html

相关文章:

  • 02.04 数据类型
  • FPGA学习篇——开篇之作
  • 【Cadence仿真技巧学习笔记】求解65nm库晶体管参数un, e0, Cox
  • 【RocketMQ】RocketMq之IndexFile深入研究
  • 小白零基础--CPP多线程
  • 利用deepseek参与软件测试 基本架构如何 又该在什么环节接入deepseek
  • 大模型微调技术总结及使用GPU对VisualGLM-6B进行高效微调
  • WPF进阶 | WPF 样式与模板:打造个性化用户界面的利器
  • Java 大视界 -- Java 大数据在自动驾驶中的数据处理与决策支持(68)
  • 自动化构建-make/Makefile 【Linux基础开发工具】
  • python学opencv|读取图像(五十二)使用cv.matchTemplate()函数实现最佳图像匹配
  • 通信方式、点对点通信、集合通信
  • TCP编程
  • OpenAI 实战进阶教程 - 第七节: 与数据库集成 - 生成 SQL 查询与优化
  • Apache Iceberg数据湖技术在海量实时数据处理、实时特征工程和模型训练的应用技术方案和具体实施步骤及代码
  • QT交叉编译环境搭建(Cmake和qmake)
  • Turing Complete-成对的麻烦
  • 寒假刷题Day20
  • deepseek 本地化部署和小模型微调
  • 【Java异步编程】基于任务类型创建不同的线程池
  • makailio-alias_db模块详解
  • 文字显示省略号
  • [LeetCode] 字符串完整版 — 双指针法 | KMP
  • 从零开始部署Dify:后端与前端服务完整指南
  • springboot中路径默认配置与重定向/转发所存在的域对象
  • 二叉树——429,515,116
  • Leetcode 3444. Minimum Increments for Target Multiples in an Array
  • 分享半导体Fab 缺陷查看系统,平替klarity defect系统
  • Java基础——分层解耦——IOC和DI入门
  • DeepSeek-R1 本地部署教程(超简版)