矩阵键盘是单片机外部设备中所使用的排布类似于矩阵的键盘组。

本文以51单片机为载体介绍一种4*4矩阵键盘实现16个按键操作的原理、电路和软件设计要点。

1、 矩阵键盘的一般电路

如图 1矩阵键盘电路所示,4*4矩阵键盘有4行4列按键,单片机4个I/O口接矩阵键盘的行线,另外4个I/O口接矩阵键盘的列线,通过对行线列线的操作完成按键的识别和操作。

2、 矩阵键盘的原理

矩阵键盘按键识别的流程一般是这样的:(1)置第1行为低电平(0),其余行为高电平,读取列线数据,列线有低电平表示此行有按键按下。(2)置第2行为低电平(0),其余行为高电平,读取列线数据,列线有低电平表示此行有按键按下。......(N-1)根据行线列线的电平不同可以识别是否有按键按下,哪一个按键按下,获取按键号。(N) 根据按键号跳转至对应的按键处理程序。

3、 一个矩阵键盘程序的例子

图2为按键处理的主流程,思路是依次拉低按键的各个行,再读取列线的数据,假如列线有低电平,则认为此行有按键按下,标记此行有按键按下并存入行值。

读取列线数据的思路则是这样,依次读取第1-4列,假如读取此列时为低电平,则标记并存入列值。

下面是部分代码:

//(1)按键识别程序void key() //按键扫描{unsigned char key_value_temp; //临时按键值,默认1111 1111(二进制)key_value=0xff;

//键值key_value_temp=0xff; //键值临时变量//矩阵键盘程序流程//依次拉低第1234行,读入列线数据Pin_r_1=0; Pin_r_2=1;Pin_r_3=1;Pin_r_4=1; //拉低第1行。//Pin_r_1第1行行线,Pin_r_2第2行行线,其余类似key_value_temp=read_column();//读列数据if (key_value_temp != 0xff)

//表示第一行有按键按下{key_value=key_value_temp & 0x1f;//获取按键号,例如0001

1101表示第1行第2列的按键按下}Pin_r_1=1; Pin_r_2=0;Pin_r_3=1;Pin_r_4=1; //拉低第2行key_value_temp=read_column();//读列数据if (key_value_temp != 0xff)

//表示第2行有按键按下{key_value=key_value_temp &0x2f;}Pin_r_1=1; Pin_r_2=1;Pin_r_3=0;Pin_r_4=1; //拉低第3行key_value_temp=read_column();//读列数据if (key_value_temp != 0xff)

//表示第3行有按键按下{key_value=key_value_temp &0x3f;}Pin_r_1=1; Pin_r_2=1;Pin_r_3=1;Pin_r_4=0; //拉低第4行key_value_temp=read_column();//读列数据if (key_value_temp != 0xff)

//表示第4行有按键按下{key_value=key_value_temp &0x4f;}}//(2)读取列线数据unsigned char read_column() //读矩阵键盘的列{unsigned char key_column;key_column=0xff;if(Pin_c_1==0 ) key_column=key_column & 0xfe;//1110

表示第1列按键按下。 key_column的低4位表示按键号,高4位常为1111if(Pin_c_2==0 ) key_column=key_column & 0xfd;//1101

表示第2列按键按下。if(Pin_c_3==0 ) key_column=key_column & 0xfb;//1011

表示第3列按键按下。if(Pin_c_4==0 ) key_column=key_column & 0xf7;//0111

表示第4列按键按下。return key_column;}以上程序对应的键值表如下:

矩阵键盘mega16 c语言程序,矩阵键盘实现16个按键操作原理及应该方案相关推荐

  1. 8279键盘扫描c语言程序,8279键盘显示C程序

    8279键盘显示C程序 8279键盘和显示程序 #include #include #include #define COM8279 XBYTE [0xF2FF] //定义8279控制口 #defin ...

  2. 两个随机矩阵相乘的c语言编程,实现两个矩阵相乘的C语言程序

    程序功能:实现两个矩阵相乘的C语言程序,并将其输出 代码如下: 1 #include "stdafx.h" 2 #include "windows.h" 3 v ...

  3. 编c语言程序 任意输入一个长方体的长,宽,高,计算体积.,C语言程序,由键盘任意输入一个长方体的长.宽.高,计算体积....

    用C语言编写程序,输入一个正整数n(1 #include"stdio.h"intmain(){\x09inti,j,n;\x09inta[12];\x09intmin,mx;\x0 ...

  4. java程序 键盘事件_java编写程序实现键盘钢琴,运用键盘事件、鼠标事件

    java编写程序实现键盘钢琴,运用键盘事件.鼠标事件 界面     实现 MouseListener,MouseMotionListener,KeyListener接口,当鼠标进入不同按钮时,会播放不 ...

  5. 查询式键盘实验c语言,查询式键盘与阵列式键盘实验.doc

    查询式键盘与阵列式键盘实验 PAGE \* MERGEFORMAT 1 论 文 提 要 在大部分嵌入式系统中,人机交互界面是必不可少的一个重要部分,人机交互界面的设计往往占据很大一部分工作.人机交互界 ...

  6. 电子琴仿真c语言程序,矩阵键盘模拟电子琴C语言程序设计

    原标题:矩阵键盘模拟电子琴C语言程序设计 //24c08地址为0xa0 #include #define uchar unsigned char unsigned char code table[]= ...

  7. 矩形键盘c语言程序,矩阵键盘C语言程序+电路图(51单片机)

    下面是51单片机驱动矩阵键盘的电路图 采用一位数码管显示 按键的结果 下面是c语言源程序: #include #define uint unsigned int #define uchar unsig ...

  8. 4x3矩阵键盘扫描法c语言,4X4矩阵键盘扫描程序

    4X4矩阵键盘扫描程序 4X4矩阵键盘扫描: 1. 4根行线的GIO均设为Output,根列线的GIO均设为Input: 2. 4根行线的GIO分别置为0111.1011.1101.1110,读逐一读 ...

  9. 4x4矩阵键盘扫描c语言程序,单片机4*4矩阵键盘扫描程序(c语言+汇编语言2个版本)...

    ;4X4矩阵键盘程序.主要原理为扫描键盘矩阵时,每次只有一行电平拉低.在逐次扫描拉低的这些行的同时,去读那些列的电平. ;被拉低的行上,按下的键对应的列的电平为0 ,其它为1. 用左移位的指令,在进位 ...

  10. 4x6矩阵键盘反转法c语言,反转法矩阵键盘

    /*P1口外接3*4矩阵键盘,P1^0不用,反转法读键值 本程序虽然稍多几行,但是没有循环, 还可以提前返回,所以执行的速度最快*/ #include #include #define uint un ...

最新文章

  1. R语言使用randomForest包构建随机森林模型(Random forests)、使用importance函数查看特征重要度、使用table函数计算混淆矩阵评估分类模型性能、包外错误估计OOB
  2. 鸡年除夕全天微信红包收发量达142亿个增长75.7%
  3. python 字符串转字节数组
  4. Android开发,Error: Failed to find Build Tools revision 24.0.2
  5. 33、Power Query-统计员工完成业绩的记录
  6. 仅使用numpy从头开始实现神经网络,包括反向传播公式推导过程
  7. java张int 和 Integer的区别
  8. Java垃圾回收精粹 — Part4
  9. java多线程代码_java多线程实例代码详解
  10. JAVA初学者推荐《Java开发实战经典》李兴华著
  11. 超级实用:Python 合成多张图片保存为PDF
  12. 五步教你快速搭建http代理
  13. [前端]HTML段落首行缩进两字符
  14. openCV: 利用python和cv2绘出一个笑脸
  15. HP1020打印机加入域后,域用户无法使用HP1020域打印功能
  16. 一次Wi-Fi入侵实录
  17. LINUX下三款QQ聊天软件全接触(最新实践和对比)
  18. SpringBoot项目源码+VUE前后分离电商购物系统前后台
  19. ×××国家标准电子计算机机房设计规范 GB50174-93
  20. ajax中的trim方法,js中trim函数实例参考

热门文章

  1. 通过IDM插件让本就不限速的阿里云盘直接起飞
  2. FreeImage使用
  3. 西门子触摸屏脚本程序_西门子触摸屏实例程序
  4. 西门子estop指令_西门子6RA80直流调速器调试步骤和参数设置
  5. Docker下安装Redis超详细步骤
  6. 微信小程序的弹窗提示
  7. 网易云音乐广告CTR预估模型演进过程
  8. [数理统计-逐步回归]国内旅游收入回归
  9. json接口(使用,以及自定义)
  10. 深度强化学习(深度Q学习