一种基于矩阵键盘扫描原理的程序设计

《工业控制计算机》2018年第31卷第7
矩阵键盘单片机应用系统中的一个重要部件,它能实现向单片机输入数据、传送命令等功能。如要对键盘编码就需要识别按键,识别按键的方法很多,最常用的是扫描法。基于扫描原理的常用编程方法在应用过程中不利于键盘的灵活编码,尤其是出于保密需要定期打乱键盘排序时更为不便。1矩阵键盘扫描原理
美容笔常用的矩阵键盘扫描方法有两种:一种是逐行扫描,通过高四位轮流输出低电平来对矩阵键盘进行逐行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,然后通过接收到的数据是哪一位为0来判断是哪一个按键被按下。另一种是行列扫描,高四位全部输出低电平,低四位输出高电平。当接收到的数据,低四位不全为高电平时,说明有按键按下,然后通过接收的数据值,判断是哪一列有按键按下,然后再反过来,高四位输出高电平,低四位输出低电平,然后根据接收到的高四位的值判断是那一行有按键按下,这样就能够确定是哪一个按键按下[1-2]。
以上两种方法在对矩阵键盘编码时常以一定规律进行。比如用以上方法对4x4矩阵键盘编码时,定义了某一行或列4个按键的字符后,其余行列都必须以其四倍的数进行编码(常用的扫描程序见图1)。这样会极大限制键盘使用的灵活性。为此,本文将介绍在51单片机环境下,基于扫描原理的4x4矩阵键盘
的一种编程方法。
图1常用的扫描程序
2程序设计及仿真2.1编程原理
如图2所示为典型4×4矩阵键盘按键定义的功能[3-5]。
图24×4矩阵键盘按键定义图
为了便于区分,可将图2中所示的4x4矩阵键盘划分为1、2、3、4共四列和A 、B 、C 、D 共四行,四列接单片机P1端口高四位,四行接单片机P1端口低四位。
首先将高四位置1,低四位置0。如果没有按键按下则返回11110000即0XF0。如某列有按键按下则对应得到如表1所示值。
表1四列扫描结果值
t型铝型材
再将高四位置0,低四位置1。如果没有按键按下则返回00001111即0X0F 。如某行有按键按下则对应得到如表2所示值。
表2四行扫描结果值
根据图2中定义的按键功能,从表1、表2选择对应的行、列值进行“或”运算,运算结果即为对应按键按下后应返回至单
一种基于矩阵键盘扫描原理的程序设计
武志鹏(武汉技师学院信息中心,湖北武汉430051)
焦红卫(武汉软件工程职业学院机械工程学院,湖北武汉430205)
汽车投影
A Method of Programming Design Based on Matrix Keyboard Scanning Principle
摘要:介绍了应用于单片机矩阵键盘扫描原理,在行列扫描原理基础上通过配对行列扫描结果并进行“或”运算的编程方法,在C 语言环境下,通过if 语句实现矩阵键盘任意编码的目的。
关键词:单片机,矩阵键盘,编码方法,C 语言
Absrtact 押This paper introduces the programming method applied to the matrix keyboard scanning principle of single chip computer熏and puts forward a program model of pairing the result of row and column scanning and performing OR op⁃eration on the basis of the principle of row and column scanning熏in C language environment.The purpose of arbitrary en⁃coding of matrix keyboard is realized by if statement.
Keywords 押single chip computer熏matrix keyboard熏coding method熏C
language
141
一种基于矩阵键盘扫描原理的程序设计
片机的值,整理后如表3。
例如图2中1列C 行设定的编码为“1”,则有按键按下时返回至单片机的值应为:11100000|00001011=1110-1011(0xEB )。根据此值通过if 语句即可进行任意编码。2.2程序设计
由上述原理,在Keil 软件平台上编写C 语言程序:
#include ″reg52.h″
typedef unsigned int uint鸦typedef unsigned char uchar鸦#define smg P0//数码管引脚#define key P1//矩阵键盘引脚
uchar keyrow熏keycolumn鸦//用来存放扫描的行、列值uchar keyvalue鸦//用来存放或运算结果
uchar duan 眼演=邀0xC0熏0xF9熏0xA4熏0xB0熏0x99熏0x92熏0x82熏0xF8熏0x80熏
太阳能景观灯
0x90熏0x88熏0x83熏0xC6熏0xA1熏0x86熏
0x8E 熏0xFF妖鸦//数码管段码void delay穴uint i雪//延时函数邀
while穴i--雪鸦妖
void keydown穴雪//按键扫描函数邀
char a=0鸦key=0x0f鸦
拉链鞋
if穴key 选=0x0f雪//读取按键是否按下邀
delay穴1000雪鸦//延时10ms 进行消抖if穴key 选=0x0f雪//再次检测键盘是否按下邀
key=0XF0鸦//测试列switch穴key雪邀
碳纤维复合芯导线
case穴0x0E雪押keycolumn=0xE0鸦break鸦//测试1列case穴0X0D雪押keycolumn=0XD0鸦break鸦//测试2列case穴0X0B雪押keycolumn=0xB0鸦break鸦//测试3列case穴0X07雪押keycolumn=0x70鸦break鸦//测试4列妖
key=0X0F //测试行switch穴key雪邀
case穴0XE0雪押keyrow=0X0E鸦break鸦//测试A 行case穴0XD0雪押keyrow=0X0D鸦break鸦//测试B 行case穴0XB0雪押keyrow=0X0B鸦break鸦//测试C 行case穴0X70雪押keyrow=0X07鸦break鸦//测试D 行妖妖
while穴穴a<50雪&&穴key 选=0xf0雪雪//检测按键松手检测
delay穴1000雪鸦a++鸦妖
妖妖
void dissmg穴雪//数码管显示函数邀
keyvalue=keyrow |keycolumn鸦//行列值或运算
if 穴keyvalue==0xB7雪//P1口检测运算结果是否与运算结果匹配
smg=duan眼0演鸦
//数码管显示字符‘0’
if 穴keyvalue==0xEB雪//P1口检测运算结果是否与运算结果匹配邀
smg=duan眼1演鸦//数码管显示字符‘1’妖
......
if 穴keyvalue==0x77雪//P1口检测运算结果是否与运算结果匹配邀
smg=duan眼15演鸦//数码管显示字符‘F ’妖
void main穴雪邀
while穴1雪邀
keydown穴雪鸦dissmg穴雪鸦妖妖
2.3仿真结果
以上程序用Keil 软件编译无误后用Proteus 软件仿真,仿真结果如图3所示。
图3仿真结果
猿结束语
在使用如图1的方法时,通过调整数组成员的顺序,也可以实现矩阵键盘的任意编码,但是需要谨慎设计其排序,而当键盘编码无规律调整时,又需对数组成员的顺序进行重新设计。而用本文介绍的编程方法,直观易用,根据表格进行配对,不易出错,便于实现对键盘的任意编码。
参考文献
[1]张毅刚.单片机原理及接口技术眼M ].2版.北京:人民邮电出版社,2015:140-143
[2]范红刚.51单片机自学笔记[M ].北京:北京航空航天大学出版社,2011:220-221
[3]谭艳.单片机矩阵按键扫描程序设计[J ].数字化用户,2013(9):44
[4]陈铭.单片机单片机矩阵式键盘的设计[J ].工业控制计算机,2016,29(1):99-100[5]朱清慧,张凤蕊,翟天嵩,等.Proteus 教程押电子线路设计、制版与仿
真[M ].北京:清华大学出版社,2008:164-167
[收稿日期:2018.3.27
]
表3
行列配对值
142

本文发布于:2024-09-21 19:36:35,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/329898.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:键盘   矩阵   按键   扫描   单片机
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议