【mcuclub】矩阵键盘
1、实物图
2、原理图
3、基本原理
使用8个I/O口来进行16个按键的控制读取,用4条I/O线作为行线,4条I/O线作为列线组成键盘,当某个按键按下时,进行行列扫描,从而判断是第几行第几列的按键,进而进行整体按键值的确定。
4、优点
使用8个I/O口来进行16个按键的控制读取,可以减小I/O口的使用,有效地提高单片机系统中I/O口的利用率
5、扫描方式——行列扫描
定义一组IO口作为矩阵键盘的引脚,高四位连接列,低四位连接行。先令IO口的高四位(四个列)输出低电平,低四位(四个行)输出高电平,假设有按键按下,从I/O口的低四位读取键盘状态,判断低四位的四行哪一行变成了低电平,就知道是第几行;再令I/O口的高四位(四个列)输出高电平,低四位(四个行)输出低电平,从I/O口的高四位读取键盘状态,判断高四位的四列哪一列变成了低电平,就知道是第几列,将两次读取结果相加组合起来就可以得到当前按键的特征编码,使用上述方法就可以得到16个按键的特征编码,然后再利用特征编码重新给每个按键赋一个对应的键值。
6、程序
/****
*******矩阵键盘扫描函数
*******返回值:键值
*****/
uchar matrix_keyboard_pro(void) //键盘扫描函数,使用行列反转扫描法
{
uchar cord_h,cord_l; //行列值中间变量
MATRIX_KEYBOARD_DATA=0x0f; //列线输出全为0
cord_h=MATRIX_KEYBOARD_DATA&0x0f; //读入行线值
if(cord_h!=0x0f) //先检测有无按键按下
{
Delay_function(10); //去抖
if((MATRIX_KEYBOARD_DATA&0x0f)!=0x0f)
{
cord_h=MATRIX_KEYBOARD_DATA&0x0f; //读入行线值
MATRIX_KEYBOARD_DATA=cord_h|0xf0; //输出当前列线值
cord_l=MATRIX_KEYBOARD_DATA&0xf0; //读入列线值
while((MATRIX_KEYBOARD_DATA&0xf0)!=0xf0); //等待松开并输出
return(cord_h+cord_l); //返回组合码值
}
}
return(0xff); //没有按键按下,返回0xff
}
/****
*******矩阵键盘键值编码为数值函数
*******返回值:键值数值
*****/
uchar Matrix_Keyboard_Scan(void)
{
switch(matrix_keyboard_pro())
{
case (0xee): return 1; break; //K1按下
case (0xde): return 2; break; //K2按下
case (0xbe): return 3; break; //K3按下
case (0x7e): return 'A'; break; //K4按下
case (0xed): return 4; break; //K5按下
case (0xdd): return 5; break; //K6按下
case (0xbd): return 6; break; //K7按下
case (0x7d): return 'B'; break; //K8按下
case (0xeb): return 7; break; //K9按下
case (0xdb): return 8; break; //K10按下
case (0xbb): return 9; break; //K11按下
case (0x7b): return 'C'; break; //K12按下
case (0xe7): return '*'; break; //K13按下
case (0xd7): return 0; break; //K14按下
case (0xb7): return '#'; break; //K15按下
case (0x77): return 'D'; break; //K16按下
default: return 0xff; break; //没有按键按下
}
}
7、软件流程
定义一组IO口作为矩阵键盘的引脚,高四位连接列,低四位连接行。先令IO口的高四位(四个列)输出低电平,低四位(四个行)输出高电平,判断低四位是否发生改变即是否有按键按下,如果改变,则进行延时消抖,再判断低四位是否发生改变,如果改变,则保存此时行状态值,接下来,令IO口的高四位(四个列)输出高电平,低四位(四个行)输出低电平,保存此时列状态值,等待列状态值恢复,再返回两次读取结果相加组合起来值即当前按键的特征编码,最后再利用特征编码重新给每个按键赋一个对应的键值。
【mcuclub】矩阵键盘相关推荐
- 4*4按键扫描程序c语言,【资料】单片机4*4矩阵键盘扫描程序(c语言+汇编语言2个版本)...
;4X4矩阵键盘程序.主要原理为扫描键盘矩阵时,每次只有一行电平拉低.在逐次扫描拉低的这些行的同时,去读那些列的电平. ;被拉低的行上,按下的键对应的列的电平为0 ,其它为1. 用左移位的指令,在进位 ...
- 单片机入门-矩阵键盘控制数码管显示
任务简述:通过按下4X4矩阵键盘实现数码管对应显示数字 实现方式:通过行列分接法,可以节省使用单片机的I/O口,扫描矩阵键盘是否有按下,判断P2端口得到的值. protues 硬件系统 单片机晶振复位 ...
- 4x4矩阵键盘工作原理及扫描程序_4X4矩形键盘
介绍 什么是矩阵键盘 矩阵键盘是单片机外部设备中所使用的排布类似于矩阵的键盘组,由于电路设计时需要更多的外部输入,单独的控制一个按键需要浪费很多的IO资源,所以就有了矩阵键盘,常用的矩阵键盘有4X4和 ...
- PIC16F877矩阵键盘的识别
原文地址:http://blog.sina.com.cn/s/blog_4a3946360100mwqh.html 关于矩阵键盘的识别方法在51矩阵键盘识别中已经说过,现在要说的是PIC单片机与51单 ...
- 矩阵键盘程序_独立按键与矩阵按键
一.独立按键原理 按键在闭合和断开时,触点会存在抖动现象 硬件消抖电路 独立按键控制程 二.独立按键控制程序 #include "reg52.h" typedef unsigned ...
- vba循环通过键盘某个按键按下退出循环_51单片机按键检测--独立按键与矩阵键盘...
按键可以说是51单片机项目开发的一个重要组件了,它是作为51单片机IO口输入的一种重要方式.我们可以通过按键控制单片机执行相应的程序,得到我们想要得效果.51单片机的按键输入主要有两种,一种是独立按键 ...
- c51单片机矩阵键盘1602计算器_基于51单片机矩阵键盘的简易计算器制作
1. 运算过程.符号公式实时显示在显示屏上(I2C 1602). 2. 自带三角函数.开根号.平方运算. 3. 计算得出的结果可设置保存并用以下一次计算. 4. 所有运算结果精确到至少小数点后两位. ...
- 51单片机独立键盘和矩阵键盘
独立键盘代码: #include<reg52.h> #include<intrins.h>#define uint unsigned int #define uchar uns ...
- c语言键盘控制数码管显示,3*4矩阵键盘控制4位数码管显示的C程序
这个很简单 ;******************************************************************************** ;* 标题: 伟纳电 ...
最新文章
- python冒泡排序
- linux c++ 得到 指定进程名 线程数
- 算法导论读书笔记(7)
- [WPF] 动画Completed事件里获取执行该动画的UI对象
- 如何编写优秀的单元测试用例
- 大学计算机基础教程大纲
- 深入理解逻辑回归算法(Logistic Regression)
- linux电子相册设计,电子相册设计报告
- 看懂影片标题,各种电影视频格式标题的含义
- firefox os android,若能同时使用Android应用,那么你可以接受Firefox OS手机了吗?
- 【软件工程】需求规格说明书
- “一把梭:REST API 全用 POST”
- Android-蓝牙sco通话
- oracle 按天数 均值,oracle 按天数统计数据
- BDB的Btree结构以及影响Btree性能的各种配置和方法
- CCF-201409-5-拼图
- Linux命令:dpkg【dpkg命令的英文全称是“Debian package”,故名意思是Debian Linux系统用来安装、创建和管理软件包的实用工具】
- HDMI 2.1的traning流程
- 智慧城市/数字政府/城市大脑
- 电池工况测试 matlab,一种电动汽车用动力蓄电池脉冲工况测试方法与流程