C51矩阵键盘

2023-05-16


对于键盘按键之前也是似懂非懂,手里有一块浩豚电子的51板子,现在跟着使用说明看一遍学习。矩阵键盘,称为行列键盘,在单片机上使用4条I/O口作为行线,4条I/O口作为列线,此文章中我使用P1口作为键盘的使用端口。P2口接共阴极8段数码管,为按键按下后显示对应的数字。


键盘扫描采用反转扫描法,p1.0~p1.3 先设为高电平,p1.4~p1.7设为低电平,当有按键按下时P1口作为I/O口,例如按下第一个按键,P10高电平,P17为低电平,按键按下后,线路导通,按键与I/O口之间没有其他元件,此时就相当于一根导线连接,P10口变成低电平状态,此时可以确定行按下,但是还要确定列按下,才能确定具体按键,最容易确定按键按下的当然是电平的跳变,不然都是低电平,怎样确认哪列?前面提到我们用反转法,讲p1.0~p1.3设为低电平,p1.4~p1.7设为高电平,在按键按下没松手时间段,确认电平跳变的I/O口,进而确认列坐标,行列组合最终确认按键被按下的坐标。

下面贴出此实验的C代码,共参考使用

#include<reg51.h>

#define uchar unsigned char 
#define uint unsigned int

uchar led[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
		0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴极 数码管 0-f显示
//函数声明
uchar keyscanner(void);//键盘扫描函数
void delay(uint i);	//延迟函数

int main(){
	uchar key;
	P1 = 0x00; //P1口清除
	while(1){
	 	key = keyscanner(); //扫描
		switch(key){
		 	case 0x7e:
				P2=led[0];
				break;
			case 0x7d:
				P2=led[1];
				break;
			case 0x7b:
				P2=led[2];
				break;
			case 0x77:
				P2=led[3];
				break;
			case 0xbe:
				P2=led[4];
				break;
			case 0xbd:
				P2=led[5];
				break;
			case 0xbb:
				P2=led[6];
				break;
			case 0xb7:
				P2=led[7];
				break;
			case 0xde:
				P2=led[8];
				break;
			case 0xdd:
				P2=led[9];
				break;
			case 0xdb:
				P2=led[10];
				break;
			case 0xd7:
				P2=led[11];
				break;
			case 0xee:
				P2=led[12];
				break;
			case 0xed:
				P2=led[13];
				break;
			case 0xeb:
				P2=led[14];
				break;
			case 0xe7:
				P2=led[15];
				break;
		}
	}
 	return 0;
}

void delay(uint i) {
 	for(;i>=0;i--);
}

uchar keyscanner(void){          //键盘扫描,使用行列反转
	uchar cord_h,cord_l;     //行列值中间变量
	P1 = 0x0f;               //行线输出0,列为1
	cord_h = P1 & 0x0f;      //读P1的列值,有按下高电平变为地电平
	if(cord_h!=0x0f){
	 	delay(100);      //去抖处理
		if(cord_h != 0x0f){
		 	cord_h = P1 & 0x0f;	 //去抖后再读一次P1状态,确定按下行坐标
			P1 = 0xf0;               //反转行列电平设置
			cord_l = P1 & 0xf0;      //读入P1的行线值,确定按下列坐标
			return cord_h+cord_l;    //行列组合确定按键位置
		}
	}
	return 0xff;
}


有错误的地方多谢留言指正。




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C51矩阵键盘 的相关文章

  • LibCurl HTTP部分详细介绍

    目录索引 xff1a 一 LibCurl基本编程框架 二 一些基本的函数 三 curl easy setopt函数部分选项介绍 四 curl easy perform 函数说明 xff08 error 状态码 xff09 五 libcurl
  • navicat连接oracle报错:ORA-12737 Instant Client Light:unsupported server character set ZHS16GBK

    今天使用Navicat连接Oracle数据库 xff0c 报了下面的这个错误 xff1a ORA 12737 Instant Client Light unsupported server character set ZHS16GBK 从这
  • RabbitMQ 与 Kafka深度解析(二)

    介绍 作为一名处理大量基于微服务的系统的软件架构师 xff0c 我经常会遇到一个反复出现的问题 xff1a 我应该使用RabbitMQ还是Kafka xff1f 出于某种原因 xff0c 许多开发人员认为这些技术是可以互换的 虽然在某些情况
  • VMWare报错"指定的文件不是虚拟磁盘"或“The file specified is not a virtual disk”

    今天打开原来创建的虚拟机 xff0c 突然报错 指定的文件不是虚拟磁盘 xff0c 如下图 xff1a 由于之前这个虚拟机创建了快照 xff0c 因此下面的解决方法是基于快照的 1 打开虚拟机的 vmx文件 xff0c 我的虚拟机名字为 U
  • Javascript模块加载框架——seajs

    最近看了一些开源web的项目 xff0c 发现其前台采用的框架seajs在编写JavaScript代码上很是方便 xff0c 现将学习的记录记于此 1 什么是JavaScript模块加载 为了解决不同javascript库里操作对象的命名冲
  • JS实现浏览器打印、打印预览

    目前正在做浏览器端采用JS方式实现打印这么一个功能 xff0c JS打印实现的方法很多 xff0c 但是兼容各个浏览器实现打印预览的功能有些棘手 xff0c 现将实现的内容及遇到的问题记录下来 xff0c 希望有大牛看到所提的问题后可以给予
  • 日期与天干地支算法

    天干地支五行对照表 天干 地支与五行的对应表 甲 乙 丙 丁 戊 己 庚 辛 壬 癸 阳 阴 阳 阴 阳 阴 阳 阴 阳 阴 木 木 火 火 土 土 金 金 水 水 子 丑 寅 卯 辰 巳 午 未 申 酉 戌 亥 鼠 牛 虎 兔 龙 蛇 马
  • TR技术评审节点

    产品开发中 xff0c TR是技术评审节点 下面是某产品的技术评审点 xff0c 供参考 xff1a TR1 概念阶段技术评审点 xff1a 产品需求和概念技术评审 xff08 业务需求评审 xff09 是ISO IEC TR 19768
  • linux虚拟机重新启动后不能联网的问题

    这里解决的是linux中 xff0c 曾经能连上网的情况下 xff0c 重启后或一段时间没上后 xff0c 不能联网的问题 xff08 安装后就没连上网 xff0c 就乖乖安装各种教程来一下啊 xff0c 这里可能不一定适合你 当然 xff
  • Spring MVC执行流程

    Spring MVC 框架是高度可配置的 xff0c 包含多种视图技术 xff0c 例如 JSP FreeMarker Tiles iText 和 POI Spring MVC 框架并不关心使用的视图技术 xff0c 也不会强迫开发者只使用
  • 数据分析必备——SQL入门基础知识

    数据说 梦想季 一直很喜欢一句话 xff1a 山鸟与鱼不同路 xff0c 从此山水不相逢 意思就是如果你现在不够优秀 xff0c 即使遇见了 xff0c 也不配拥有 努力是唯一的方向 xff01 导读 xff1a 科学技术的快速发展正在改变
  • CentOS6.5安装nginx

    转载 xff1a http blog csdn net yinwenjie article details 46620711 2 Nginx的安装 2 1 准备工作 操作系统 xff1a centOS 6 5 Nginx的下载地址 xff1
  • Spring源码剖析之AbstractApplicationContext抽象类的refresh()方法

    Spring源码剖析之AbstractApplicationContext抽象类的refresh 方法 简书 Spring中AbstractApplicationContext抽象类的refresh 方法是用来刷新Spring的应用上下文的
  • Python多进程任务如何识别谁是谁

    在Python多进程 多线程编程中 xff0c 如果使用future和add done callback 经常会遇到如何区分异步任务的问题 这里推荐两种方式 方式一 xff1a 给future新增属性 def call back futur
  • spring事务配置的五种方式

    https blog csdn net m8396017 article details 51615806 spring事务配置的五种方式 第一种方式 xff1a 每个Bean都有一个代理 第二种方式 xff1a 所有Bean共享一个代理基
  • dependency 和dependencyManagement 的区别

    https blog csdn net m0 37664223 article details 105836943 dependencyManagement 和dependency 的区别 dependencyManagement 我们项目
  • Ubuntu系统使用root远程登录

    https blog csdn net weixin 45239621 article details 115523031 Ubuntu系统使用root远程登录的操作 一般这种情况是某某云服务器或者新的Ubuntu系统 xff08 仅Ubu
  • npm 安装详细教程

    https blog csdn net Cleve baby article details 125632341 转载 xff1a http xiaoyaojones blog 163 com blog static 28370125201
  • Linux新建用户,切换后只显示$问题

    问题 xff1a linux新建用户 xff0c 切换后只显示 的问题 xff0c 而且有些命令也使用不了 xff0c 解决方法如下 1 新建用户命令 root登录 useradd d usr sam m jiang 此命令创建了一个用户j
  • DTI(dwi)使用FSL做预处理及做TBSS处理流程(fsleyes查看结果)

    预处理 刚开始我用的数据初始文件是多个dcm格式的文件 xff0c 当时我从格式转换 提取b0 波脑 涡流 计算张量下来是没有问题的 后来我用dwi的文件 xff08 包含四维的 nii gz bvec bval文件 xff09 xff0c

随机推荐

  • 引用的问题

    1 二者的区别 xff08 1 xff09 引用 访问一个变量是直接访问 xff0c 而指针是间接访问 xff08 2 xff09 引用 是一个变量的别名 xff0c 本身不单独分配自己的内存空间 xff0c 而指针有自己的内存空间 xff
  • Android抓取log文件的方法

    很简单 xff0c 使用命令行来就可以 xff0c 步骤如下 xff1a 1 adb devices 检查调试设备是否连接好 xff0c 没有调试设备抓不了 2 adb logcat c 3 cd Desktop 进入你要存放日志文件的目录
  • ESLint 配置入门

    大家好 xff0c 我是前端西瓜哥 xff0c 今天带大家了解 ESLint 的配置项 ESLint 是一款检查 JavaScript 程序是否符合特定的规则的工具 比如字符串用单引号还是双引号 xff0c tab 缩进用 2 个空格还是
  • linux开机自动登陆

    在超级用户的身份下 编辑vim etc gdm custom conf span class hljs number 1 span span class hljs comment GDM configuration storage span
  • Python(Web服务)全链路日志个跟踪

    1 背景 在我们的实际项目中 xff0c 尤其以Web服务为例 xff0c 经常遇到要做日志跟踪的场景 我们经常采用的方式是 xff0c 生成一个trace id 在全链路的调用中都输出这个id进行跟踪 这里需要处理的几个问题是 xff1a
  • BCLinux用yum安装报Your license is invalid.

    1 介绍 BCLinux基于 CentOS 进行定制化 xff0c 满足企业对于通用 Linux 操作系统的需求 xff0c 提供标准化 平台化的产品发布及运行环境 xff0c 该版本与红帽商业版本及社区版本完全兼容 2 步骤 安装好操作系
  • Excel表格数据如何批量乘以一个数字

    今天跟大家分享一下Excel表格数据如何批量乘以一个数字 1 打开Excel文件 xff0c 我们想要批量将数字乘以10 2 首先我们选择所有数据单元格区域 3 点击下图选项 xff08 Excel工具箱 xff0c 百度即可了解详细下载安
  • Win2003系统部署SSL证书(部署https教程)

    在windows 2003操作系统下 xff0c IIS 6 环境的服务器SSL证书安装教程 安装前 xff0c 请准备好SSL证书 部署前请退出服务器内安装的杀毒软件 xff08 360 金山 安全狗等安全软件有可能导致SSL证书部署出错
  • Android启动模式之singleinstance的坑

    Android启动模式之singleinstance的坑 前言 在实际应用中 xff0c 使用singleinstance启动模式时 xff0c 会遇到一些奇奇怪怪的问题 Android有四种启动模式 xff0c 分别是standard x
  • 关于使用iconfont图标总生成小长方形框的解决办法

    起因是在联系仿写网易的静态页面的时候 xff0c 使用iconfont小图标的时候 xff0c 引入正确 xff0c 但是在页面上一直显示的是一个长方形小框的页面 各种搜索终于找到了解决办法 主要原因是由于iconfont css中路径不对
  • Qt和MFC的效率对比

    Qt和MFC的效率对比 之前一直做mfc xff0c 昨天看了一晚上的Qt xff0c 瞬间就喜欢上它了 xff0c Qt在windows下应该没有mfc的运行效率高 xff0c 但是我想知道差多少 xff0c 不知有没有大牛做过这方面的对
  • android 移植

    from http wiki kldp org wiki php AndroidPortingOnRealTarget s 6 1 Contents 1 Introduction 2 Copyright and Acknowledgemen
  • LD3320语音识别模块+JQ8900-TF语音模块实现简单的语音交互控制

    玩这个真的要感谢头条的强大推荐 xff0c 清明节回家的大巴车上 xff0c 无聊的刷着头条 xff0c 很智能的给我推荐了一款语音识别模块 xff0c 一直很想自己试着玩一把的我 xff0c 按奈不住 xff0c 点开视频看到了介绍 xf
  • 智能配网方案 Airkiss 技术原理介绍及应用

    写在前面 站在巨人的肩膀上 xff0c 可以看得更远 一 什么是Air Kiss 可以说AirKiss 是微信硬件平台提供的一种WIFI硬件设备快速配置连接网络的技术 xff0c 是一种创新性的信息传递技术 通过该技术可以便捷的向一台具有W
  • 谈谈Android 安全策略SElinux

    不积跬步无以至千里 xff0c 补全自己的短板 xff0c 完善体系 xff0c 站在巨人的肩膀上 xff0c 看到的更远 xff0c 写这篇文章也算是对这个知识点的总结 一 xff0c 背景 SElinux出现之前 xff0c Linux
  • AOSP添加新硬件设备开发-HAL层

    此篇文章接上一篇hidl 我们来实现hal层 hal层官方解释系统硬件抽象层 xff0c 理解为kernel的代理层 xff0c 他的存在屏蔽了不同硬件设备的差异 xff0c 根据提供的访问标准 xff0c 就可以对不同的硬件进行操作 xf
  • 解决 Windows has triggered a breakpoint in Linkage.exe问题

    这两天在做一个小项目 xff0c 里面有多线程的东东 xff0c 在调试的时候 总是遇到 Windows has triggered a breakpoint in Linkage exe 的错误 现在将这个问题和大家分享一下 前提是这样的
  • android rc文件的启动

    记录hostapd 启动方式 xff0c 多种方式可以启动一个bin hostapd android rc init rc fragment for hostapd on Android Copyright c 2002 2016 Joun
  • MTK WLAN支持多种NVRAM方案

    背景 硬件差异的前提 wifi功率会有差异 软件上可以做功率补偿方案 但是需要知道整机状态 然后设定一个flag 软件根据flag 选择使用预制的多NVRAM 简单点来说就是 根据不同条件 加载不同的NVRAM 实现原理 1 根据不同的射频
  • C51矩阵键盘

    对于键盘按键之前也是似懂非懂 xff0c 手里有一块浩豚电子的51板子 xff0c 现在跟着使用说明看一遍学习 矩阵键盘 xff0c 称为行列键盘 xff0c 在单片机上使用4条I O口作为行线 xff0c 4条I O口作为列线 xff0c