线反转法实现矩形键盘按键识别
由于行、列线为多键共用,各按键彼此将相互发 生影响,必须将行、列线信号配合起来并作适当的处 理,才能确定闭合键的位置。
线反转法
第1步:列线输出为全低电平,则行线中电平由高变低 的所在行为按键所在行。
第2步:行线输出为全低电平,则列线中电平由高变低 所在列为按键所在列。
综合上述两步,可确定闭合按键所在行和列。
程序代码
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
/*共阴极数码管0至F的段码*/
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
/*0至F的键值*/
uchar code key_value[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,
0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,
0xe7,0xd7,0xb7,0x77};
void delay();
void delay()
{
uint i;
for(i=0;i<1000;i++);
}
uchar key_dis()
{
uchar key_buf;
uchar key_state;
P2=0xf0;
key_buf=P2;
if(key_buf!=0xf0)
{
delay();
if(P2==key_buf)
{
key_state=key_buf&0xf0;
P2=0x0f;
key_buf=P2;
key_buf&=0x0f;
key_state=key_state|key_buf;
return key_state;
}
else
return 0;
}
else
return 0;
}
void main(void)
{
uchar j,key_num;
P0=0x00; // 开机黑屏
while(1)
{
key_num=key_dis();
if(key_num!=0)
{
for(j=0;j<16;j++)
{
if(key_num==key_value[j]) //获得按键的键号
break;
}
P0=table[j];
}
}
}
原理图

仿真结果

相关文章:
线反转法实现矩形键盘按键识别
由于行、列线为多键共用,各按键彼此将相互发 生影响,必须将行、列线信号配合起来并作适当的处 理,才能确定闭合键的位置。 线反转法 第1步:列线输出为全低电平,则行线中电平由高变低 的所在行为按键所在行。 第2步&…...
在 Element Plus 的 <el-select> 组件中,如果需要将 <el-option> 的默认值设置为 null。 用于枚举传值
文章目录 引言轻松实现 `<el-option>` 的默认值为 `null`I 实现方式监听清空事件 【推荐】使用 v-model 绑定 null添加一个值为 null 的选项处理 null 值的显示引言 背景:接口签名规则要求空串参与,空对象不参与签名计算 // 空字符串“” 参与签名组串,null不参与签…...
大白话面试中应对自我介绍
在面试中,自我介绍是开场的关键环节,它就像你递给面试官的一张“个人名片”,要让面试官快速了解你并对你产生兴趣。下面详细讲讲应对自我介绍的要点及回答范例。 一、自我介绍的时间把控 一般面试中的自我介绍控制在1 - 3分钟比较合适。时间…...
Pytorch构建LeNet进行MNIST识别 #自用
LeNet是一种经典的卷积神经网络(CNN)结构,由Yann LeCun等人在1998年提出,主要用于手写数字识别(如MNIST数据集)。作为最早的实用化卷积神经网络,LeNet为现代深度学习模型奠定了基础,…...
元宇宙崛起:区块链与金融科技共绘数字新世界
文章目录 一、引言二、元宇宙与区块链的深度融合三、区块链在元宇宙金融中的应用四、金融科技在元宇宙中的创新应用五、面临的挑战与机遇《区块链与金融科技》亮点内容简介获取方式 一、引言 随着科技的飞速发展,元宇宙概念逐渐走进人们的视野,成为数字…...
React Native 实现滑一点点内容区块指示器也滑一点点
效果图如上,内容滑一点点,指示器也按比例话一点点,列表宽度跟数据有关。 实现思路如下: 1.监听列表滑动事件,获取列表横向滑动距离,假设为A; 2.获取列表的宽度,及列表可滑动的宽度…...
怎么写C#命令行参数程序,及控制台带参数案例(程序完整源码)下载
C#命令行参数解析控制台带参数编写案例(程序完整源码)下载链接 https://download.csdn.net/download/luckyext/90434790 在CMD命令窗口,输入ping 、ipconfig等这样的命令,大家应该都知道,但很多同学可能不知道怎么写…...
全国青少年航天创新大赛各项目对比分析
全国青少年航天创新大赛各项目对比分析 一、比赛场地对比 项目名称场地尺寸场地特点组别差异筑梦天宫虚拟三维场景动态布局,小学组3停泊处,初高中组6停泊处;涉及传送带、机械臂、传感器等虚拟设备。初中/高中组任务复杂度更高,运…...
基于RAG的法律条文智能助手
文章目录 前言一、 项目背景与需求设计二、 数据收集与整理三、 核心实现流程1. 配置与模型初始化1. 配置区2. 模型初始化(init_models 函数)3. 数据加载与验证(load_and_validate_json_files 函数)4. 节点生成(create…...
智能对讲机:5G+AI赋能下的石油工业新“声”态
在浩瀚的能源版图上,中国正以非凡的“深度”探索着石油资源的奥秘。随着5G技术的不断成熟与普及,曾经“满山遍野找信号”的石油工人,如今已步入了一个全新的通信时代。在这个时代里,智能对讲机成为了连接指挥中心与一线工人的桥梁…...
leetcode日记(77)子集Ⅱ
不知道为什么看到这道题就很头痛…… 其实只要掌握nums不包含重复元素的情况下的代码就行了。 若nums不能包含重复元素,那么使用回溯很容易就能写出来: class Solution {void hs(vector<int> v,int x,vector<int> r,vector<vector<…...
Linux tar命令
压缩解压缩 1. tar 命令 语法: tar [主选项 辅选项] 文件或目录 参数功能-c创建新的归档文件(打包)-x从归档文件中提取文件(解包)-f <文件名>指定归档文件名-v显示操作的详细信息-z通过gzip压缩归档文件-j通…...
【nodeJS】服务端连接mysql、定义一个接口,并在前端调用
服务端连接数据库,并简单使用 服务器连接mysql后端定义接口前端调用接口封装axios(简易版)解决前端请求接口返回了一个html 定义api请求vue中调用接口 服务器连接mysql 安装mysql2:npm install mysql2启动服务:npm sta…...
驱动开发系列40 - Linux 显卡KMD驱动代码分析(一) - 设备初始化过程
目录 一:概述 二:显卡内核态驱动的主要功能 1. 设备初始化 2. 内存管理 3. 中断处理 4. 显示管理 5. 电源管理 三:Linux显卡内核态驱动的架构 四:PCI设备初始化过程 五:显卡设备初始化 一:概述 显卡内核态驱动(KMD)负责与GPU硬件直接交互,提供底层接口、管理显存…...
玩转大语言模型——Ubuntu系统环境下使用llama.cpp进行CPU与GPU混合推理deepseek
系列文章目录 玩转大语言模型——使用langchain和Ollama本地部署大语言模型 玩转大语言模型——三分钟教你用langchain提示词工程获得猫娘女友 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 玩转大语言模型—…...
20250301在chrome中安装CRX猫抓
20250301在chrome中安装CRX猫抓 2025/3/1 18:08 百度:猫抓 CRX https://www.crx4chrome.com/crx/49597/ 猫抓 (cat-catch) Crx File 2.5.9 for Chrome (Latest Version) Get Latest Version of 猫抓 (cat-catch) from Web Store Developer Tools > cat-catch / E…...
Docker 深度解析:适合零基础用户的详解
此博客涵盖 Docker 的基本概念和作用、架构和核心组件、与传统虚拟机的对比、安装与基本操作,以及在实际开发和运维中的应用场景。 首先,详细解释了 Docker 的基本概念,包括它的诞生背景、作用及其如何解决传统应用部署中的问题。然后&#…...
LeetCode 分割回文串(回溯、dp)
131.分割回文串 给你一个字符串 s,请你将 s 分割成一些 子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。 示例 1: 输入:s "aab" 输出:[["a","a","b"],["a…...
期权帮|股指期货入门知识:什么是股指期货基差?什么是股指期货价差?
锦鲤三三每日分享期权知识,帮助期权新手及时有效地掌握即市趋势与新资讯! 股指期货入门知识:什么是股指期货基差?什么是股指期货价差? 股指期货的基差与价差是两个重要的价格关系指标,它们反映了现货市场…...
解锁GPM 2.0「卡顿帧堆栈」|代码示例与实战分析
每个游戏开发者都有一个共同的愿望,那就是能够在无需复现玩家反馈的卡顿现象时,快速且准确地定位卡顿的根本原因。为了实现这一目标,UWA GPM 2.0推出了全新功能 - 卡顿帧堆栈,旨在为开发团队提供高效、精准的卡顿分析工具。在这篇…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
企业大模型服务合规指南:深度解析备案与登记制度
伴随AI技术的爆炸式发展,尤其是大模型(LLM)在各行各业的深度应用和整合,企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者,还是积极拥抱AI转型的传统企业,在面向公众…...
前端开发者常用网站
Can I use网站:一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use:Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站:MDN JavaScript权威网站:JavaScript | MDN...
