`
javababy1
  • 浏览: 1229965 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

4*4的键盘矩阵

 
阅读更多

一个4*4的键盘矩阵,可以采用逐行扫描或全扫描的方式实现按键的读取。

行列扫描

若行线和列线加驱动后空载时为高电平,逐行扫描的方法为逐行使行线的每位为低,再判断列线的返回信号,如果没有键按下,返回的信号全为高;如果返回的信号中有列线为低,那么肯定是有按键按下,根据列线和行线的交点可以判断按键的具体位置。

可以设置一个数组,存放从1F对应的16个代码,比如将P2_0P2_7的交点处定为0,那么数组第0个元素则为0X7E(二进制0111 1110),当正确求出P2对应的数值时与数组对照便可求得按键的值。

uchar keyboard[16]={0x7e,0x7d,0x7b,0x77,0xbe,0xbd,0xbb,0xb7,0xde,

0xdd,0xdb,0xd7,0xee,0xed,0xeb,0xe7},这个数组就是对应键盘扫描值的0~F

注意:这个数组依照确定键值的位置不同而不同。

全扫描

全扫描的方法为先列线全为低,判断行线,如果行线有为低的,则可以判断有键按下,此时还不能判断某列的具体的键和列,还需反过来将列线全为高,再判断具体的列,根据行列号即确定具体的按键。

#include <at89x52.h>

#include "key.h"

//键盘扫描码

//键值 0 1 2 3 4 5 6 7

const unsigned char keyboard[16]={0x7e,0x7d,0x7b,0x77,0xbe,0xbd,0xbb,0xb7,

//键值 8 9 a b c d e f

0xde,0xdd,0xdb,0xd7,0xee,0xed,0xeb,0xe7 };

const unsigned char Select_bit[4] = {0x01,0x02,0x04,0x08}; //行列扫描所需变量

unsigned char KeyValue = 0xFF; //键盘扫描值

/******************************************************

名称:delay_10ms

功能:防抖动延时10ms

参数:unsigned int i

*******************************************************/

void delay_10ms(unsigned int i)

{

unsigned int j;

for(;i>0;i--)

for(j=2250;j>0;j--);

}

/******************************************************

名称:key_value

功能:获得键盘扫描值

参数:unsigned char scancode(行列锁确定的扫描值)

*******************************************************/

void key_value(unsigned char scancode)

{

unsigned char point;

for( point = 0x00; point < 0x10; point++)

{

if(scancode == keyboard[point])

{

KeyValue = point;

}

}

}

/******************************************************

名称:Key_AllScan

功能:键盘全扫描

参数:无

*******************************************************/

unsigned char Key_AllScan(void)

{

unsigned char Temp_key, Temp_10ms;

P2 = 0x0F;//全扫描线全为低,判断行线

Temp_key = P2;

if ( Temp_key < 0x0F )//判断按键按下

{

delay_10ms(1); //延时防抖动

Temp_10ms = P2;

if(Temp_10ms == Temp_key)

{

Temp_key ^= 0xF0; //列线全为高在判断具体的列

P2 = Temp_key;

Temp_key = P2;

key_value(Temp_key); //获得键盘扫描值

}

}

return KeyValue;

}

/******************************************************

名称:Key_RankScan

功能:键盘行列扫描

参数:无

*******************************************************/

unsigned char Key_RankScan(void)

{

unsigned char Temp_key, Temp , Temp_10ms, point;

for(point = 0x00; point < 0x04; point++) //逐行设置低电平

{

Temp = 0xFF;

Temp ^= Select_bit[point]; //判断是否有按键按下

P2 = Temp;

Temp_key = P2;

if(Temp != Temp_key)

{

delay_10ms(1);//延时放抖动

Temp_10ms = P2;

if(Temp_10ms == Temp_key)

{

key_value(Temp_key);

break;

}

}

}

return KeyValue;

}

分享到:
评论

相关推荐

    4*4键盘矩阵控制条形LED显示

    4*4键盘矩阵控制条形LED显示

    4*4矩阵键盘原理图及资料

    4*4矩阵键盘是电子工程领域中常见的输入设备,尤其在嵌入式系统和单片机应用中广泛使用。这种键盘由4行4列共16个按键组成,通过简单的硬件连接和软件处理,可以实现多键同时检测的功能。下面我们将深入探讨4*4矩阵...

    4*4矩阵键盘 按键消抖 单片机c语言

    4*4矩阵键盘是单片机应用中常见的人机交互设备,主要用于收集用户输入的数据。在设计和编程时,为了确保稳定性和准确性,通常需要处理按键消抖问题,这一环节通常使用C语言来实现。本文将深入探讨4*4矩阵键盘的工作...

    4*4矩阵键盘+1602显示的proteus仿真

    在电子工程和嵌入式系统开发领域,"4*4矩阵键盘+1602显示的Proteus仿真"是一个常见的实践项目,它涉及到输入设备(矩阵键盘)和输出设备(1602液晶显示屏)的集成以及在Proteus软件中的仿真。下面将详细解释这些知识...

    4*4矩阵键盘源程序

    4*4矩阵键盘是一种常见的输入设备,常用于嵌入式系统和简单的电子设备中,如计算器、学习机等。它的结构简单,由16个按键组成,排列成4行4列,因此得名。在本场景中,我们将讨论4*4矩阵键盘与单片机的交互,以及相关...

    4*4矩阵键盘电路设计

    【4*4矩阵键盘电路设计】是指在电子设备中,使用4条行线和4条列线交叉构成的16个按键布局。这种设计能够高效地利用单片机的I/O资源,通常在C51单片机系统中被广泛应用。在4*4矩阵键盘中,16个按键分别位于4行4列的...

    单片机的4*4矩阵键盘

    单片机技术在电子工程领域中占据着重要地位,它能实现各种控制功能,而4*4矩阵键盘是单片机应用中常见的输入设备。这种键盘由16个按键组成,利用矩阵排列方式大大节省了单片机的I/O资源。下面我们将详细探讨4*4矩阵...

    4*4矩阵键盘

    4*4矩阵键盘程序。c代码。

    FPGA 4*4矩阵键盘键盘自定义外设

    【FPGA 4*4矩阵键盘键盘自定义外设】是一种常见的硬件设计实践,它涉及到数字逻辑、嵌入式系统和现场可编程门阵列(FPGA)的应用。在这个项目中,通过使用Verilog硬件描述语言,设计了一个4x4矩阵键盘作为自定义的...

    51单片机设计4*4矩阵键盘密码锁keil工程文件C源文件

    本文将深入探讨51单片机在设计4*4矩阵键盘密码锁项目中的应用,以及如何利用keil开发环境和C语言源文件实现这一功能。 首先,4*4矩阵键盘是一种常见的输入设备,由4行4列共16个按键组成。通过简单的电路连接,可以...

    C语言单片机4*4矩阵键盘的识别

    首先,4x4矩阵键盘是由16个按键排列成4行4列的结构,通过连接行线和列线到单片机的输入/输出端口来实现按键的识别。每个按键对应一个交叉点,通过扫描行线和列线的电平变化,可以确定哪个按键被按下。 1. **硬件...

    Arduino--4*4矩阵键盘

    在这个项目中,我们将聚焦于"Arduino--4*4矩阵键盘",这是一种常见的输入设备,用于与Arduino交互,输入数字或字符。 矩阵键盘的基本原理是利用行列扫描法来检测按键状态。4x4矩阵键盘由4行和4列的开关组成,每个...

    FPGA4*4矩阵键盘实现简单电子琴

    该篇文章将介绍如何使用FPGA实现一个4*4矩阵键盘的简单电子琴。电子琴通过4*4矩阵键盘接收输入,根据用户按下不同键位,输出相应的音调和节奏。设计中,从第一列第二个键开始,设定为中音1,接着按照列顺序设置共15...

    4*4矩阵键盘设计(绝对好)

    4*4矩阵键盘是当前单片机系统中常见的输入设备,其设计巧妙地利用了有限的I/O口资源,实现了大量的按键输入功能。它通过将行线和列线进行交叉连接,形成了一个由16个按键组成的网格状结构。每一行和每一列都对应着...

    51单片机控制4*4矩阵键盘中断扫描keil工程文件C源文件

    在这个项目中,我们将讨论如何使用51单片机来控制一个4*4矩阵键盘,并实现中断扫描方式来检测按键。 4*4矩阵键盘是一种常见的输入设备,由4行4列共16个按键组成。在硬件连接上,行线连接到单片机的输出引脚,列线...

    fpga的4*4矩阵键盘代码

    标题“fpga的4*4矩阵键盘代码”指的是一个项目,这个项目的目标是用Verilog硬件描述语言编写代码来控制4*4矩阵键盘,并将其部署到FPGA上运行。Verilog是一种广泛使用的硬件描述语言,它可以用来描述数字系统的结构和...

    4*4矩阵键盘C程序代码

    ### 4*4矩阵键盘C程序代码解析 #### 一、概述 本篇文章将深入解析一个4*4矩阵键盘的C程序代码。该程序适用于基于8051微控制器架构的系统,通过矩阵扫描的方式实现对键盘上16个按键的识别与处理。程序结构清晰,...

    4*4矩阵键盘PCB文件(单层板)

    标题 "4*4矩阵键盘PCB文件(单层板)" 涉及到的是一个电子硬件设计项目,其中4*4矩阵键盘是常见的输入设备,常见于许多电子项目和小型设备中。矩阵键盘利用了矩阵电路的概念,通过较少的I/O引脚控制多个按键,降低了...

    4*4矩阵键盘(方法2) STM32F103

    4*4矩阵键盘(方法2)已经在STM32F103RBT6亲测通过,引脚排布、键值排布均已标出。第一种方法见另外一个资源4*4矩阵键盘(方法1)。.

Global site tag (gtag.js) - Google Analytics