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

51单片机KeyWard

eg1: 单片机键盘的分类

  • 键盘分为编码键盘和非编码键盘,键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值得称为编码键盘,如计算机键盘,而靠软件来识别的称为非编码键盘,在单片机组成的各种系统中使用最多的就是非编码键盘,也有使用到编码键盘的,非编码键盘又称为独立式和矩阵式键盘。

单片机键盘根据按键的结构和工作原理的不同,可以分为以下几类:

  1. 矩阵键盘(Matrix Keyboard):
    • 矩阵键盘是最常见的单片机键盘之一。
    • 它使用一种矩阵排列的按键结构,通过行和列的交叉点来确定按下的按键。
    • 一般通过行列扫描的方式来检测按键的按下和释放。
  2. 独立按键(Individual Key):
    • 独立按键是指每一个按键都有独立的引脚连接到单片机。
    • 每个按键都使用一个独立的IO引脚,通过读取引脚的电平状态来检测按键的按下和释放。
    • 独立按键一般用于需要较少按键的应用场景。
  3. 脉冲编码开关(Encoder Switch):
    • 脉冲编码开关也被称为旋转编码开关,用于检测旋转操作。
    • 它通常由两个触点组成,通过检测两个触点的状态变化来确定旋转方向和步数。
    • 脉冲编码开关常用于旋转编码器、音量调节器等应用场景。
  4. 矩阵键盘和独立按键结合:
    • 在某些情况下,矩阵键盘和独立按键可能会结合使用。
    • 例如,一些常用的功能按键使用独立按键,而数字键盘使用矩阵键盘的方式来连接到单片机。

单片机键盘电路设计图
在这里插入图片描述test1:点击第一个按钮时点亮第一个led管

#include <REGX52.H>
#include <INTRINS.H>
sbit d1 = P1^0;
sbit keyboard01 = P3^0;void main(){P3 = 0xff; // 1111 1111while(1){if(keyboard01 == 0){d1 = 0;}else{d1 = 1;}}
}

在这里插入图片描述单片机的按键在闭合和断开时,触点会出现抖动现象
在这里插入图片描述独立键盘的检测与消抖

  • eg2: 点击独立按键的同时led亮灭同时晶体管统计次数当数字为9时归0
#include <REGX52.H>
#include <INTRINS.H>
sbit d1 = P1^0;
sbit dula = P2^6;
sbit wela = P2^7;
sbit keyboard01 = P3^0;
// 宏定义
#define uint unsigned int
#define uchar unsigned char
uchar num;
uint code table[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};void delay(uint z){uint x,y;for(x = z; x > 0; x --){for(y = 110; y > 0; y--){}}}void main(){wela  = 1;P0 = 0xfe;wela = 0;P3 = 0xff; // 1111 1111while(1){if(keyboard01 == 0){delay(10);if(keyboard01 == 0){d1 = 0;num ++;if(num == 10){num = 0;}}// 判断,加上松手检测while(!keyboard01);delay(10);while(!keyboard01);}else{d1 = 1; dula = 1;P0 = table[num];dula = 0;}}
}

在这里插入图片描述eg3:矩阵键盘
在这里插入图片描述以下的矩阵表示第二行的第一个按键按下去其它的16进制依次类推
10110111 − − − − > 11101101 = = 0 x e d 10110111 ----> 1110 1101 == 0xed 10110111>11101101==0xed

在这里插入图片描述eg4:51片机矩阵代码实现每按一个按键就会显示一个不同的数

#include <REGX52.H>
#include <INTRINS.H>
sbit d1 = P1^0;
sbit dula = P2^6;
sbit wela = P2^7;
sbit keyboard01 = P3^0;
// 宏定义
#define uint unsigned int
#define uchar unsigned char
uchar num,temp,num1;
uint code table[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};// 函数声明
uchar keyboardScan();void delay(uint z){uint x,y;for(x = z; x > 0; x --){for(y = 110; y > 0; y--){}}}void main(){// 让所有的数码管都显示num = 17;dula = 1;P0 = 0;dula = 0;wela = 1;P0 = 0xc0;wela = 0;//0xfe 的值是0111 1111 ---> 1111 1110 while(1){num1 = keyboardScan();dula = 1;P0 = table[num1-1];		 dula = 0;}}// 键盘扫描函数
uchar keyboardScan(){// 检测键盘P3 = 0xfe;temp = P3;// 1111 1110 & 1111 0000 == 1111 0000// 0xf0 表示的值是0000 1111---> 1111 0000temp = temp&0xf0; // c语言中的switchcase语句while(temp != 0xf0){delay(5);temp = P3;temp = temp&0xf0;while(temp != 0xf0){temp = P3;switch(temp){case 0xee: // 0111 --> 1110num = 1;break;	 case 0xde:  //1011 --> 1101num = 2; break;	case 0xbe: // 1011num = 3;break;case 0x7e: // 0111num = 4;break;}while(temp != 0xf0){temp = P3;temp = temp&0xf0;}// 函数的参数可以作为子函数进行调用/*dula = 1;0 = table[num -1];dula = 0; */}}// 检测第二行------------------------------------------------------// 检测键盘P3 = 0xfd;temp = P3;// 1111 1110 & 1111 0000 == 1111 0000// 0xf0 表示的值是0000 1111---> 1111 0000temp = temp&0xf0; // c语言中的switchcase语句while(temp != 0xf0){delay(5);temp = P3;temp = temp&0xf0;while(temp != 0xf0){temp = P3;switch(temp){case 0xed: // 0111 --> 1110num = 5;break;	 case 0xdd:  //1011 --> 1101num = 6; break;	case 0xbd: // 1011num = 7;break;case 0x7d: // 0111num = 8;break;}while(temp != 0xf0){temp = P3;temp = temp&0xf0;}// 函数的参数可以作为子函数进行调用/*dula = 1;0 = table[num -1];dula = 0; */}}// 检测第三行-------------------------------------------|---------------|-----------------|----------------|// 检测键盘P3 = 0xfb;temp = P3;// 1111 1110 & 1111 0000 == 1111 0000// 0xf0 表示的值是0000 1111---> 1111 0000temp = temp&0xf0; // c语言中的switchcase语句while(temp != 0xf0){delay(5);temp = P3;temp = temp&0xf0;while(temp != 0xf0){temp = P3;switch(temp){case 0xeb: // 0111 --> 1110num = 9;break;	 case 0xdb:  //1011 --> 1101num = 10; break;	case 0xbb: // 1011num = 11;break;case 0x7b: // 0111num = 12;break;}while(temp != 0xf0){temp = P3;temp = temp&0xf0;}// 函数的参数可以作为子函数进行调用/*dula = 1;0 = table[num -1];dula = 0; */}}// 检测第四行--------|---------------|--------------------|---------------------------|-----------------------|-------------		// 检测键盘P3 = 0xf7;temp = P3;// 1111 1110 & 1111 0000 == 1111 0000// 0xf0 表示的值是0000 1111---> 1111 0000temp = temp&0xf0; // c语言中的switchcase语句while(temp != 0xf0){delay(5);temp = P3;temp = temp&0xf0;while(temp != 0xf0){temp = P3;switch(temp){case 0xe7: // 0111 --> 1110num = 13;break;	 case 0xd7:  //1011 --> 1101num = 14; break;	case 0xb7: // 1011num = 15;break;case 0x77: // 0111num = 16;break;}// 松手检测代码while(temp != 0xf0){temp = P3;temp = temp&0xf0;}// 函数的参数可以作为子函数进行调用/*dula = 1;0 = table[num -1];dula = 0; */}}return num;}

代码的截图----------->需要后期优化

在这里插入图片描述51单片机点击某个keyboard后的显示结果
在这里插入图片描述

相关文章:

51单片机KeyWard

eg1&#xff1a; 单片机键盘的分类 键盘分为编码键盘和非编码键盘&#xff0c;键盘上闭合键的识别由专用的硬件编码器实现&#xff0c;并产生键编码号或键值得称为编码键盘&#xff0c;如计算机键盘&#xff0c;而靠软件来识别的称为非编码键盘&#xff0c;在单片机组成的各种…...

【简记】getprop, setprop 命令使用

getprop, setprop 命令使用 1、终端设置、读取系统属性 // 例 adb shell setprop "test" "1" adb shell getprop "test"2、安卓读取系统配置 部分属性需要通过反射 android.os.SystemProperties 的方法获取&#xff0c;参见 android 获取手机…...

Ubuntu22.04安装nvidia-docker

安装docker 参考这篇文章&#xff1a;Ubuntu22.04安装docker - 掘金 安装nvidia-docker 参考这篇文章&#xff1a;Ubuntu 22.04 LTS : NVIDIA Container Toolkit : Install : Server World 流程&#xff1a; curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | …...

简单的代码优化(后端)

上一篇谈了谈简单的前端的优化&#xff0c;这次就以下几点谈谈后端的优化。 书写时常见的。 循环里面不要走IO流。 走IO&#xff0c;是要对硬盘进读写操作的。就结论而言&#xff0c;硬盘的读写速度是低于内存的&#xff0c;比如说硬盘上读一次数据&#xff0c;需要1秒&#…...

3.Node-事件循环的用法

题记 node.js事件循环的使用方法 Node.js 是单进程单线程应用程序&#xff0c;但是因为 V8 引擎提供的异步执行回调接口&#xff0c;通过这些接口可以处理大量的并发&#xff0c;所以性能非常高。 Node.js 几乎每一个 API 都是支持回调函数的。 Node.js 基本上所有的事件机制都…...

2525.根据规则将箱子分类/并查集/动态规划

2525. 根据规则将箱子分类 - 力扣&#xff08;LeetCode&#xff09; 给你四个整数 length &#xff0c;width &#xff0c;height 和 mass &#xff0c;分别表示一个箱子的三个维度和质量&#xff0c;请你返回一个表示箱子 类别 的字符串。 如果满足以下条件&#xff0c;那么…...

2023年10月小程序云开发cms内容管理无法使用,无法同步内容模型到云开发数据库的解决方案

一&#xff0c;问题描述 最近越来越多的同学找石头哥&#xff0c;说cms用不了&#xff0c;其实是小程序官方最近又搞大动作了&#xff0c;偷偷的升级的云开发cms&#xff08;内容管理&#xff09;以下都称cms&#xff0c;不升级不要紧&#xff0c;这一升级&#xff0c;就导致我…...

无论有没有按钮,iPhone都可以进行截屏操作!如何在iPhone上截屏

通过简单的按键组合&#xff0c;可以很容易地将iPhone屏幕的图片捕获到图像文件中&#xff0c;并保存到照片库中。以下是操作方法。 什么是屏幕截图 屏幕截图是指通常包含你在设备屏幕上看到的内容的精确副本的图像。在设备内拍摄的数字屏幕截图通常使用相机拍摄物理屏幕的照…...

笔记本平台信号讲解

1、power button:这个信号会引起SMI#或者SCI来表示系统请求进入到睡眠状态。如果系统已经处于睡眠状态,这将导致唤醒事件信号。 如果PWRBTN#键超过4秒,这将导致一个无条件的过渡(电源按钮替代)到S5状态。即使系统是在S1-S4的状态,覆盖也会发生。 这个信号有一个内部上拉…...

什么是Sectigo证书?

Sectigo证书&#xff0c;早前被称为Comodo证书&#xff0c;是一种SSL&#xff08;安全套接层&#xff09;证书&#xff0c;用于保护互联网上的数据传输的安全性和隐私性。这些证书由全球领先的SSL证书颁发机构Sectigo颁发&#xff0c;被广泛用于网站、应用程序和服务器上。本文…...

虹科 | 测试方案 | 汽车示波器 通讯网络(LIN/CAN/FlexRay)测试方案

通讯网络&#xff08;LIN/CAN/FlexRay&#xff09;测试 虹科CAN总线示波器把你的PC电脑变成一台功能强大的汽车测试工具&#xff0c;用于检测车辆网络各类通讯信号&#xff0c;如CAN Bus、CAN FD、LIN、FlexRay&#xff0c;还可以检测车上所有传感器和执行器的信号 串行译码 …...

ubuntu20.04安装MySQL8、MySQL服务管理、mysql8卸载

ubuntu20.04安装MySQL8 #更新源 sudo apt-get update #安装 sudo apt-get install mysql-serverMySQL服务管理 # 查看服务状态 sudo service mysql status # 启动服务 sudo service mysql start # 停止服务 sudo service mysql stop # 重启服务 sudo service mysql restart登…...

曾仕强老师视频+音频+电子书合集百度网盘资源

需要的扫码添加获取&#xff1a;...

KubeSphere安装mysql8

需要持久化储存数据的&#xff0c;建立有状态服务。 无状态服务是不会持久化的&#xff0c;重启就归零 KubeSphere 创建自建应用后&#xff0c;创建有状态服务&#xff0c;但是自己应用的有状态服务不能外放端口&#xff0c;需要在服务哪里删除pod&#xff0c;在创建负载指定相…...

相似度loss汇总,pytorch code

用于约束图像生成&#xff0c;作为loss。 可梯度优化 pytorch structural similarity (SSIM) loss https://github.com/Po-Hsun-Su/pytorch-ssimhttps://github.com/harveyslash/Facial-Similarity-with-Siamese-Networks-in-Pytorch/blob/master/Siamese-networks-medium.ip…...

python中的yolov5结合PyQt5,使用QT designer设计界面没正确启动的解决方法

python中的yolov5结合PyQt5&#xff0c;使用QT designer设计界面没正确启动的解决方法 一、窗体设计test: 默认你已经设计好了窗体后&#xff1a; 这时你需要的是保存生成的untitle.ui到某个文件夹下&#xff0c;然后在命令行中奖.ui转换为.py&#xff08;&#xff0c;通过​​…...

Milk-V Duo移植rt-thread smart

前言 &#xff08;1&#xff09;PLCT实验室实习生长期招聘&#xff1a;招聘信息链接 &#xff08;2&#xff09;首先&#xff0c;我们拿到Milk-V Duo板子之后&#xff0c;我个人建议先移植大核Linux。因为那个资料相对多一点&#xff0c;也简单很多&#xff0c;现象也容易观察到…...

会声会影2024有哪些新功能?好不好用

比如会声会影视频编辑软件&#xff0c;既加入光影、动态特效的滤镜效果&#xff0c;也提供了与色彩调整相关的LUT配置文件滤镜&#xff0c;可选择性大&#xff0c;运用起来更显灵活。会声会影在用户的陪伴下走过20余载&#xff0c;经过上百个版本的优化迭代&#xff0c;已将操作…...

vue3 + axios 中断取消接口请求

前言 最近开发过程中&#xff0c;总是遇到想把正在请求的axios接口取消&#xff0c;这种情况有很多应用场景&#xff0c;举几个例子&#xff1a; 弹窗中接口请求返回图片&#xff0c;用于前端展示&#xff0c;接口还没返回数据&#xff0c;此时关闭弹窗&#xff0c;需要中断接…...

Linux高性能服务器编程——ch6笔记

第6章 高级I/O函数 6.1 pipe函数 用于创建一个管道&#xff0c;以实现进程间通信。 int pipe(int fd[2]); 读端文件描述符fd[0]和写端文件描述符fd[1]构成管道的两端&#xff0c;默认是阻塞的&#xff0c;fd[0]读出数据&#xff0c;fd[1]写入数据。管道内部传输的数据是字节…...

AI教育平台开发技术框架

在国内开发AI英语教育平台&#xff0c;技术架构通常需要适配国产大模型生态、满足高并发低延迟要求&#xff0c;并严格遵循国内的数据安全与备案法规。以下是2026年主流的国内AI教育平台开发技术框架&#xff1a;1. 云原生算力与基础设施层由于大模型推理成本极高&#xff0c;国…...

Hailo8 Dataflow Compiler 模型转换指南--以 ONNX 模型为例

目录 一、环境安装 1.1 系统要求 1.2 系统包安装 二、模型转换 2.1 ONNX 转 HEF 文件 2.1.1 实例化 ClientRunner 解析ONNX模型 2.2.2 加载/准备量化校准数据集 2.2.3 参数配置并执行量化操作 2.2.4 保存 HAR 文件并编译生成 HEF 板端文件 2.2 模型可视化 一、环境安…...

UWPHook终极指南:一键将UWP游戏和Xbox Game Pass游戏添加到Steam

UWPHook终极指南&#xff1a;一键将UWP游戏和Xbox Game Pass游戏添加到Steam 【免费下载链接】UWPHook &#x1f517; Add your Windows Store or UWP games to Steam 项目地址: https://gitcode.com/gh_mirrors/uw/UWPHook 还在为Steam无法识别Windows Store和Xbox Gam…...

PyPTO Agent 实操:1天开发自定义融合算子

一、PyPTO Agent背景在 Agent 技术日益普及的当下&#xff0c;为了提升开发体验&#xff0c;我们推出了基于智能体平台 CANNBot 与高性能编程框架 PyPTO 的 CANNBot PyPTO Agent。通过将最佳实践固化为 7 个标准化 Skill&#xff0c;并由 4 个专业 Agent 进行协同调度&#xff…...

Quest 2到手后别急着买游戏!手把手教你用SideQuest安装免费资源(附4000+游戏合集)

Quest 2新手指南&#xff1a;解锁SideQuest的无限游戏世界 刚拿到Oculus Quest 2的兴奋感还没消退&#xff0c;你可能已经发现官方商店的游戏价格让人望而却步。别急着掏钱包&#xff0c;其实有更经济实惠的方式让你畅游VR世界。SideQuest这个神奇的平台&#xff0c;能为你打开…...

别再写冗长路径了!Qt QML资源文件管理:用前缀和别名让代码清爽3倍

别再写冗长路径了&#xff01;Qt QML资源文件管理&#xff1a;用前缀和别名让代码清爽3倍 在QML项目开发中&#xff0c;资源路径管理是个容易被忽视却影响深远的细节。想象一下&#xff0c;当你第20次在代码中敲入source: "images/images/code.jpg"时&#xff0c;是否…...

FireRedASR-AED-L轻量化部署教程:8GB显存以下设备也能流畅运行1.1B模型

FireRedASR-AED-L轻量化部署教程&#xff1a;8GB显存以下设备也能流畅运行1.1B模型 想体验专业级的本地语音识别&#xff0c;但被动辄几十GB的显存要求劝退&#xff1f;今天给大家介绍一个好消息&#xff1a;基于1.1B参数的FireRedASR-AED-L大模型&#xff0c;现在只需要不到8…...

免费音频编辑神器Audacity:从零基础到专业级的完整指南

免费音频编辑神器Audacity&#xff1a;从零基础到专业级的完整指南 【免费下载链接】audacity Audio Editor 项目地址: https://gitcode.com/GitHub_Trending/au/audacity 在数字内容创作成为主流的今天&#xff0c;音频质量直接影响着作品的专业度和传播效果。然而&am…...

前端路由管理方案

前端路由管理方案是现代Web应用开发中的核心技术之一&#xff0c;它决定了用户如何与单页面应用&#xff08;SPA&#xff09;交互&#xff0c;以及页面如何在不刷新的情况下实现动态切换。随着前端框架的普及&#xff0c;路由管理从简单的URL跳转演变为复杂的导航控制、权限校验…...

GetQzonehistory:你的QQ空间记忆守护者

GetQzonehistory&#xff1a;你的QQ空间记忆守护者 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 在数字时代&#xff0c;我们的青春记忆散落在各种社交平台上&#xff0c;QQ空间作为一…...