矩阵键盘的编程方法——读取键值
来源:互联网 发布:淘宝内部券怎样赚佣金 编辑:程序博客网 时间:2024/05/29 17:35
矩阵键盘的使用在单品机的学习当中十分广泛,可是对于许多新手,包括本人有时也是搞不明白,昨天晚上和今天早上的思考和同行们的讨论,终于有了点头绪,所以想记录下读取键盘的思路。
在单片机的学习版中,矩阵键盘通常如下图设计:
下面就以按下S16键来讲解其思路:
首先:
P3的高位P3.4~P3.7输出为0,低位P3.0~P3.3输出为1;即P3=0x0F,当按下S16键后(有消抖动过程),P3.3的值为0,则P3的值更新为0x07;
其次:
P3的高位P3.4~P3.7输出为1,低位P3.0~P3.3输出为0;即P3=0xF0,当按下S16键后(有消抖动过程),P3.4的值为0,则P3的值更新为0xE0;
最后将两个值相加得P3=0xE7;
在keyscan()函数(假设我们的键盘扫描程序为unsigned char keyscan())返回其键盘的值供后续的程序调用,通常会有一个switch块根据其返回值来确定输出的是哪一个数值。
下面提供一段KeilC51语言的代码来解释一下:
- <SPAN style="FONT-SIZE: 18px">/*------------------------------------------------
- 键盘扫描程序
- ------------------------------------------------*/
- uchar keyscan( void ) //键盘扫描函数,使用行列反转扫描法
- {
- uchar cord_h,cord_l;//行列值中间变量
- P3 = 0x0f; //行线输出全为0
- cord_h = P3 & 0x0f; //读入列线值
- if( cord_h != 0x0f )//先检测有无按键按下
- {
- delay( 100 ); //去抖
- if( cord_h != 0x0f )
- {
- cord_h = P3 & 0x0f; //读入列线值
- P3 = cord_h | 0xf0; //输出当前列线值
- cord_l = P3 & 0xf0; //读入行线值
- return( cord_h + cord_l );//键盘最后组合码值
- }
- }
- return( 0xff ); //返回该值
- }
- </SPAN>
/*------------------------------------------------ 键盘扫描程序------------------------------------------------*/uchar keyscan( void ) //键盘扫描函数,使用行列反转扫描法{uchar cord_h,cord_l;//行列值中间变量P3 = 0x0f; //行线输出全为0cord_h = P3 & 0x0f; //读入列线值if( cord_h != 0x0f ) //先检测有无按键按下{delay( 100 ); //去抖if( cord_h != 0x0f ){cord_h = P3 & 0x0f; //读入列线值P3 = cord_h | 0xf0; //输出当前列线值cord_l = P3 & 0xf0; //读入行线值return( cord_h + cord_l );//键盘最后组合码值}}return( 0xff ); //返回该值}
首先把P3的口赋值为0x0f,同时把P3和0x0f赋值给cord_h(行的数值),倘若有按键按下,那么P3的值就会改变,随后cord_h的只也会随之变化,经过消抖之后记录cord_h的值,
即cord_h = P3 & 0x0f;
(若以S16为例,那么P3.3的值变为0,所以cord_h的值就会变为0x07;)
接下来:P3 = cord_h | 0xf0;
意在不改变P3的第四位,把P3的高四位赋为高电平,那么P3=0x0f7;
到了关键的一步:
cord_l = P3 & 0xf0;我当初以为cord_l=0xf0呢,结果就和程序运行的不一样喽,最后还是问了我的同行(非常感谢刘伟同志!指点迷津!),其实在第二个if语言内,S16已经被按下了的,所以P3的值立刻就变为0x0e的了,以至于cord_l=0x0e,最后返回行和列的和return( cord_h + cord_l );(0xe7)。这才是最终对的结果,各位看官懂了吗?O(∩_∩)O哈哈~
- 矩阵键盘的编程方法——读取键值
- 矩阵键盘的编程方法——读取键值
- 7.矩阵键盘读取键值 数码管显示
- 获取键盘上键值的方法
- 矩阵键盘扫描显示键值
- 【电子基础】矩阵键盘的读取
- USB键盘的键值
- 键盘对应的键值
- 编程的朋友们用的着的键盘键值汇总
- 矩阵键盘按键LED显示键值
- nRF52832 — 矩阵键盘
- 详细的键盘键值表
- 获取键盘对应的键值
- 详细的键盘键值表
- 详细的键盘键值表
- FPGA矩阵键盘的扫描方法
- uClinux使用/dev/vc/0设备名来读取usb键盘的键值
- 单片机——矩阵键盘
- 利用VC调用动态链接库中的函数
- 完美解决android监听联系人数据变化
- Node(17) Debug
- 在线编辑器上传图片时总是刷新问题
- POJ2749-二分,2SAT
- 矩阵键盘的编程方法——读取键值
- ExtJS layout的样式详解
- WPF中获取顶层窗体的句柄
- easyui-datagrid
- cocos2d游戏开发,常用工具集合
- SQL程序员的小邪恶 哇哈哈
- 海量数据处理常用思路和方法
- 求教C++单例模板类的问题
- 弯曲手指可隔空操作电脑:无指纹犯罪神器!