热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

51单片机—矩阵键盘代码

#include#include..delaydelay.h#includematrix.h*按键扫描函

#include #include "../delay/delay.h"
#include "matrix.h"
/*=====================================================
按键扫描函数,返回扫描键值
======================================================*/
unsigned char key_scan(void)
{
unsigned char keyvalue; KEYPORT = 0xf0; //高四位置高,低四位拉低
if(0xf0 != keyvalue)
{
delay_ms(10); //去抖
if(0xf0 != keyvalue) //有按键按下
{
KEYPORT = 0xfe; //检测第一行
if(0xfe != KEYPORT)
{
keyvalue = KEYPORT;
keyvalue &= 0xf0; //过滤干扰
keyvalue += 0x0e; //过滤干扰
while(0xfe != KEYPORT);
delay_ms(10); //去抖
while(0xfe != KEYPORT);
return keyvalue;
}
KEYPORT = 0xfd; //检测第二行
if(0xfd != KEYPORT)
{
keyvalue = KEYPORT;
keyvalue &= 0xf0; //过滤干扰
keyvalue += 0x0d; //过滤干扰
while(0xfd != KEYPORT);
delay_ms(10); //去抖
while(0xfd != KEYPORT);
return keyvalue;
}

KEYPORT = 0xfb; //检测第三行
if(0xfb != KEYPORT)
{
keyvalue = KEYPORT;
keyvalue &= 0xf0; //过滤干扰
keyvalue += 0x0b; //过滤干扰
while(0xfb != KEYPORT);
delay_ms(10); //去抖
while(0xfb != KEYPORT);
return keyvalue;
}
KEYPORT = 0xf7; //检测第四行
if(0xf7 != KEYPORT)
{
keyvalue = KEYPORT;
keyvalue &= 0xf0; //过滤干扰
keyvalue += 0x07; //过滤干扰
while(0xf7 != KEYPORT);
delay_ms(10); //去抖
while(0xf7 != KEYPORT);
return keyvalue;
}
}
}
return 0xff;
}
/*=====================================================
按键值处理函数,返回扫描键值
======================================================*/
unsigned char key_pro(void)
{
unsigned char keynum;
keynum = key_scan();

/*按下相应的键显示相对应的码值*/
switch(keynum)
{
case 0x7e:
{
return 0; //0
break;
}
case 0xbe:
{
return 1; //1
break;
}
case 0xde:
{
return 2; //2
break;
}
case 0xee:
{
return 3; //3
break;
}
case 0x7d:
{
return 4; //4
break;
}
case 0xbd:
{
return 5; //5
break;
}
case 0xdd:
{
return 6; //6
break;
}
case 0xed:
{
return 7; //7
break;
}
case 0x7b:
{
return 8; //8
break;
}
case 0xbb:
{
return 9; //9
break;
}
case 0xdb:
{
return 10; //10
break;
}
case 0xeb:
{
return 11; //11
break;
}
case 0x77:
{
return 12; //12
break;
}
case 0xb7:
{
return 13; //13
break;
}

case 0xd7:
{
return 14; //14
break;
}

case 0xe7:
{
return 15; //15
break;
}
default:
{
return 0xff;
break;
}
}
}

推荐阅读
  • 求助高手调试程序,非常感谢您的支持!在编写C语言程序时遇到了一些问题,具体代码如下:```c#include #include #include #define MAX 50int t;```希望有经验的开发者能提供指导,帮助解决调试中的难题。感谢您的时间和帮助! ... [详细]
  • 在过去,我曾使用过自建MySQL服务器中的MyISAM和InnoDB存储引擎(也曾尝试过Memory引擎)。今年初,我开始转向阿里云的关系型数据库服务,并深入研究了其高效的压缩存储引擎TokuDB。TokuDB在数据压缩和处理大规模数据集方面表现出色,显著提升了存储效率和查询性能。通过实际应用,我发现TokuDB不仅能够有效减少存储成本,还能显著提高数据处理速度,特别适用于高并发和大数据量的场景。 ... [详细]
  • 本文深入探讨了 MySQL 中 `ANALYZE TABLE` 和 `SHOW CREATE TABLE` 的语法规则及其应用。`ANALYZE TABLE` 语句用于分析并存储表的关键字分布情况,以优化查询性能。该操作在执行过程中会获取表的读锁,确保数据的一致性。而 `SHOW CREATE TABLE` 则用于显示创建表时的详细语句,包括表结构、索引和存储引擎等信息,有助于数据库管理和维护。通过这些命令,DBA 可以更好地理解和优化数据库性能。 ... [详细]
  • 在HDU 1166敌军布阵问题中,通过运用线段树数据结构,可以高效地计算指定区间的敌军数量。该算法不仅能够在限定的时间和内存条件下快速求解,还能够灵活应对动态变化的战场局势,为实时决策提供支持。 ... [详细]
  • 算法专题:罗马数字转换为整数详解与实现 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • 本文作为探讨PHP依赖注入容器系列文章的开篇,将首先通过具体示例详细阐述依赖注入的基本概念及其重要性,为后续深入解析容器的实现奠定基础。 ... [详细]
  • 基址获取与驱动开发:内核中提取ntoskrnl模块的基地址方法解析
    基址获取与驱动开发:内核中提取ntoskrnl模块的基地址方法解析 ... [详细]
  • 本文详细解析了LeetCode第215题,即高效寻找数组中前K个最大元素的问题。通过使用快速选择算法(partition),可以在平均时间复杂度为O(N)的情况下完成任务。本文不仅提供了算法的具体实现步骤,还深入探讨了partition算法的工作原理及其在不同场景下的应用,帮助读者更好地理解和掌握这一高效算法。 ... [详细]
  • 在晴朗天气条件下,对一种神奇的魔法现象进行了深入分析。该题目为原创,基准时间限制为1秒,空间限制为131072KB,分值20,属于3级难度的算法题。研究发现,这种魔法现象在阳光明媚的环境中表现得尤为显著,进一步探讨了其背后的科学原理和技术实现方法。 ... [详细]
  • 如果程序使用Go语言编写并涉及单向或双向TLS认证,可能会遭受CPU拒绝服务攻击(DoS)。本文深入分析了CVE-2018-16875漏洞,探讨其成因、影响及防范措施,为开发者提供全面的安全指导。 ... [详细]
  • 每日精选Codeforces训练题:1119E(贪心算法)、821C(栈模拟)和645D(拓扑排序)
    题目涉及三种不同类型的算法问题:1119E(贪心算法)、821C(栈模拟)和645D(拓扑排序)。其中,1119E的问题背景是有n种不同长度的棍子,长度分别为2^0, 2^1, …, 2^(n-1),每种棍子的数量为a[i]。任务是计算可以组成的三角形数量。根据三角形的性质,任意两边之和必须大于第三边。该问题可以通过贪心算法高效解决,通过合理选择棍子组合来最大化三角形的数量。 ... [详细]
  • 在探讨Fragment的使用时,FragmentTransaction是不可或缺的一部分。作为管理Fragment操作的核心类,FragmentTransaction提供了诸如显示、隐藏、添加和移除等方法,这些方法在实际开发中被广泛使用。本文将深入解析FragmentTransaction的源码实现机制,帮助开发者更好地理解和优化Fragment的管理。通过分析其内部工作原理,读者可以掌握如何高效地进行Fragment的动态管理和性能优化。 ... [详细]
  • 本文详细介绍了使用C语言和C++实现的动态规划算法来解决数塔问题。通过具体的代码示例和算法解析,展示了如何高效地计算数塔的最大路径和。该方法不仅适用于数塔问题,还可应用于其他类似的组合优化问题。 ... [详细]
  • 如何在 Node.js 环境中将 CSV 数据转换为标准的 JSON 文件格式? ... [详细]
author-avatar
人对方啥地位
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有