当前位置: 首页 > 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]写入数据。管道内部传输的数据是字节…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...