4x4矩阵键盘扫描程序式键盘实时性最强的扫描方式什么方式

  矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,上图中,列线通过接正,并将行线所接的的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输出端都是高,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。具体的识别及编程方法如下所述。  2、矩阵式键盘的按键识别方法  确定矩阵式键盘上何键被按下介绍一种“行扫描法”。  行扫描法 行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。  1、判断键盘中有无键按下 将全部行线Y0-Y3置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。  2、判断闭合键所在的位置 在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。  下面给出一个具体的例子:  图仍如上所示。8031单片机的P1口用作键盘I/O口,键盘的列线接到P1口的低4位,键盘的行线接到P1口的高4位。列线P1.0-P1.3分别接有4个到正电源+5V,并把列线P1.0-P1.3设置为输入线,行线P1.4-P.17设置为输出线。4根行线和4根列线形成16个相交点。  1、检测当前是否有键被按下。检测的方法是P1.4-P1.7输出全“0”,读取P1.0-P1.3的状态,若P1.0-P1.3为全“1”,则无键闭合,否则有键闭合。  2、去除键抖动。当检测到有键按下后,延时一段时间再做下一步的检测判断。  3、若有键被按下,应识别出是哪一个键闭合。方法是对键盘的行线进行扫描。P1.4-P1.7按下述4种组合依次输出:   P1.7 1 1 1 0   P1.6 1 1 0 1   P1.5 1 0 1 1   P1.4 0 1 1 1  在每组行输出时读取P1.0-P1.3,若全为“1”,则表示为“0”这一行没有键闭合,否则有键闭合。由此得到闭合键的行值和列值,然后可采用计算法或查表法将闭合键的行值和列值转换成所定义的键值  4、为了保证键每闭合一次CPU仅作一次处理,必须却除键释放时的抖动。&  键盘扫描程序:  从以上分析得到键盘扫描程序的流程图如图2所示。程序如下S: MOV P1,#0FHMOV A,P1ANL A,#0FHCJNE A,#0FH,NEXT1SJMP NEXT3NEXT1: ACALL D20MSMOV A,#0EFHNEXT2: MOV R1,AMOV P1,AMOV A,P1ANL A,#0FHCJNE A,#0FH,KCODE;MOV A,R1SETB CRLC AJC NEXT2NEXT3: MOV R0,#00HRETKCODE: MOV B,#0FBHNEXT4: RRC AINC BJC NEXT4MOV A,R1SWAP ANEXT5: RRC AINC BINC BINC BINC BJC NEXT5NEXT6: MOV A,P1ANL A,#0FHCJNE A,#0FH,NEXT6MOV R0,#0FFHRET  键盘处理程序就作这么一个简单的介绍,实际上,键盘、显示处理是很复杂的,它往往占到一个应用程序的大部份代码,可见其重要性,但说到,这种复杂并不来自于单片机的本身,而是来自于操作者的习惯等等问题,因此,在编写键盘处理程序之前,最好先把它从逻辑上理清,然后用适当的算法表示出来,最后再去写代码,这样,才能快速有效地写好代码。 
往下看有更多相关资料
本网站试开通微、小企业商家广告业务;维修点推荐项目。收费实惠有效果!欢迎在QQ或邮箱联系!
试试再找找您想看的资料
资料搜索:
查看相关资料 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款
copyright & &广电电器(中国梧州) -all right reserved& 若您有什么意见或建议请mail: & &
地址: 电话:(86)774-2826670& & &&)『矩阵键盘扫描程序』相关搜索
(C)2017 列表网&琼ICP备号-12&增值电信业务经营许可证B2-&一种新型的矩阵键盘扫描方式
(3.78 KB, 下载次数: 10)
21:33 上传
点击文件名下载附件
在线时间210 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 100, 距离下一级还需 100 积分
一粒金砂(中级), 积分 100, 距离下一级还需 100 积分
感觉有点问题 ,51的应该读高电平这边的端口
这都是书本上的资料,也可能有差&
在线时间172 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 90, 距离下一级还需 110 积分
一粒金砂(中级), 积分 90, 距离下一级还需 110 积分
感觉有点问题 ,51的应该读高电平这边的端口
这都是书本上的资料,也可能有差
EEWORLD 官方微信
Powered by
逛了这许久,何不进去瞧瞧?>> 8051单片机上4*4矩阵键盘的扫描方式1
8051单片机上4*4矩阵键盘的扫描方式1
所属分类:
下载地址:
keyborad01.rar文件大小:1.66 kB
分享有礼! 》
请点击右侧的分享按钮,把本代码分享到各社交媒体。
通过您的分享链接访问Codeforge,每来2个新的IP,您将获得0.1 积分的奖励。
通过您的分享链接,每成功注册一个用户,该用户在Codeforge上所获得的每1个积分,您都将获得0.2 积分的分成奖励。
8051单片机上4*4矩阵键盘的扫描方式1-none
Sponsored links
源码文件列表
温馨提示: 点击源码文件名可预览文件内容哦 ^_^
5.21 kB24-09-09 18:54
(提交有效评论获得积分)
评论内容不能少于15个字,不要超出160个字。
评价成功,多谢!
下载keyborad01.rar
CodeForge积分(原CF币)全新升级,功能更强大,使用更便捷,不仅可以用来下载海量源代码马上还可兑换精美小礼品了
您的积分不足,优惠套餐快速获取 30 积分
10积分 / ¥100
30积分 / ¥200原价 ¥300 元
100积分 / ¥500原价 ¥1000 元
订单支付完成后,积分将自动加入到您的账号。以下是优惠期的人民币价格,优惠期过后将恢复美元价格。
支付宝支付宝付款
微信钱包微信付款
更多付款方式:、
您本次下载所消耗的积分将转交上传作者。
同一源码,30天内重复下载,只扣除一次积分。
鲁ICP备号-3 runtime:Elapsed:76.605ms - init:0.1;find:0.6;t:0.4;tags:0.2;related:25.4;comment:0.2; 27.69
登录 CodeForge
还没有CodeForge账号?
Switch to the English version?
^_^"呃 ...
Sorry!这位大神很神秘,未开通博客呢,请浏览一下其他的吧关于矩阵键盘行列扫描的测试实验 - 简书
关于矩阵键盘行列扫描的测试实验
我会时常分享一些51的程序编写方法,有一定基础的可以来看看。如有不当之处,欢迎大家指正,一同进步。
矩阵键盘无非就是两种扫描方式,一为逐行扫描,二为行列一起扫描读取键值。先确定行后确定列的读取方法没有什么可讲的,我针对行列一起扫描来总结一下我常用的一些方法。
学习嵌入式或者说硬件一定是从硬件原理开始,因为矩阵键盘电路原理简单,网上讲解较多,我只附上原理图,重点跟大家交流一下程序部分。下图就是矩阵键盘 由P1口控制,P10~P13为列 P14~P17为行。
矩阵键盘电路原理图
高四位输出低电平,低四位输出高电平,检测低四位不全为高可确定列;反过来高四位输出高电平,低四位输出高电平,高四位不全为高确定行,行列交叉即可获得按键键值。废话不多说,直接上程序,我已经详细注解过了,不懂多看看哈。
/*******************************************************************************
* 函数功能
: 检测有按键按下并读取键值
* 日期地点
*******************************************************************************/
void KeyDown(void)
GPIO_KEY=0x0f;
// 位定义的引脚
if(GPIO_KEY!=0x0f)
//读取按键是否按下
Delay10ms();
//延时10ms进行消抖
if(GPIO_KEY!=0x0f) //再次检测键盘是否按下
GPIO_KEY=0X0F;
switch(GPIO_KEY)
//此段程序只是为了确定列的值 方便在后面进行测试行的时候加减运算 获得具体案件的行列值 从而转换为按键值
case(0X07):
KeyValue=0;//扫描第一列
case(0X0b):
KeyValue=1;//按键第二列 是keyValue=1
case(0X0d): KeyValue=2;//按键第三列
case(0X0e):
KeyValue=3;//按键第四列
//测试行 确定了列以后需要翻转 确定行 交叉确定键值
GPIO_KEY=0XF0; //屏蔽高四位
switch(GPIO_KEY)
//已经进行过
case(0X70):
KeyValue=KeyV//自己去看为什么是 0X70 列的时候又为什么是0X07 硬件相结合
case(0Xb0):
KeyValue=KeyValue+4;
扫描第二行
case(0Xd0): KeyValue=KeyValue+8;
扫描第三行
case(0Xe0):
KeyValue=KeyValue+12; //键值13
扫描第四行
//其实最终返回的键值就是进行过加法运算的
while((a&50)&&(GPIO_KEY!=0xf0))
//检测按键松手检测 松手 按键就是 f0
Delay10ms();
a++;//防止程序死在 while循环里 利用a的值跳出循环,比较不错的双重保险办法
电气工程及其自动化出身,然从事硬件和嵌入式工作,兴趣爱好广泛,分享交流技术之余并与诸君分享生活体悟...

我要回帖

更多关于 矩阵键盘扫描流程图 的文章

 

随机推荐