历史上的今天
返回首页

历史上的今天

今天是:2025年06月22日(星期日)

2018年06月22日 | 单片机矩阵键盘的实现

2018-06-22 来源:eefocus

行扫描法
  行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。
判断键盘中有无键按下 将全部行线置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。

  判断闭合键所在的位置 在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。


   列线输入端P1.0~P1.3通过电阻接正电源,行线P1.4~P1.7所接的单片机的I/O口作为输出端。将输入端置为高电平,输出端置为低电平。这样,当按键没有按下时,所有的输入端无变化,代表无键按下。一旦有键按下,则输入线就受输出线的影响被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。


/*************************C语言键盘扫描子函数************************/  

uchar KeyV()  

{  uchar Key,a;  

   P3=0x0f;                 //确定P3.0~P3.3为输入线,P3.4~P3.7为输出线。  

   if(P3==0x0f) return(0);      //无键按下返回0.  

   else  

    { mling(6);               //调用延时函数,去前沿键抖  

      for(a=0;a<4;a++)  

        { P3=_cror_(0x7f,a);   //计算键值,依次将输出线置低电平,检查输入线。  

          if(P30==0) break;   //P30表示p3.0口引脚。预先定义,以下类同  

          if(P31==0) break;  

          if(P32==0) break;  

          if(P33==0) break;  

        }  Key=P3;          //取得键值  

      for(;P3!=0x0f;P3=0x0f) ;  //等待按键释放,去后沿键抖  

      return(Key);            //带键值返回  

  }  

计算后变量Key得到的键值对照:
【0 0xee】 【1 0xed】 【2 0xeb】 【3 0xe7】 【4 0xde】 【5 0xdd】 【6 0xdb】 【7 0xd7】
【8 0xbe】 【9 0xbd】 【A 0xbb】 【B 0xb7】 【C 0x7e】 【D 0x7d】 【E 0x7b】 【F 0x77】


推荐阅读

史海拾趣

Benchmarq Microelectronics Inc公司的发展小趣事

在半导体行业中,供应链的稳定性和可靠性对企业的发展至关重要。Benchmarq Microelectronics Inc深知这一点,因此始终注重供应链管理和合作伙伴关系的建立。公司与多家知名供应商建立了长期稳定的合作关系,确保原材料的稳定供应和质量可控。同时,公司还加强库存管理和物流配送,确保产品能够及时、准确地送达客户手中。这些努力不仅提升了公司的运营效率和市场竞争力,还为客户提供了更加便捷、高效的服务。

上海晶丰明源(BPS)公司的发展小趣事

上海晶丰明源半导体股份有限公司的创立,标志着中国在半导体领域的又一重要布局。公司自成立之初,就专注于电源管理芯片的研发与销售,凭借对技术的深入理解和市场需求的敏锐洞察,迅速在行业中崭露头角。初步发展阶段,晶丰明源通过不断优化产品设计、提升生产工艺,逐步赢得了客户的信任,并在市场上占据了一席之地。

AAT [Advanced Analog Technology, Inc.]公司的发展小趣事

作为一家有社会责任感的企业,晶丰明源始终注重可持续发展。公司积极履行环保责任,采用环保材料和工艺,减少生产过程中的污染排放。同时,公司还关注员工福利和社区建设,为员工提供良好的工作环境和福利待遇,积极参与社会公益活动,为社区的和谐发展做出了贡献。

这五个故事从不同角度展现了上海晶丰明源(BPS)公司在电子行业中的发展历程和成就。从创立到上市、从技术突破到市场拓展、从应对挑战到履行社会责任,晶丰明源始终坚持以市场为导向、以技术为核心的发展理念,不断追求卓越和创新,为电子行业的发展做出了重要贡献。

ANSHAN [Anshan Suly Electronics]公司的发展小趣事

随着产品质量的不断提升和市场需求的不断扩大,ANSHAN公司开始积极拓展国内外市场。公司通过与国内外知名企业建立合作关系,参加国际电子产品展览会等方式,不断提升品牌知名度和影响力。同时,公司还注重售后服务体系建设,为客户提供全方位、高效的服务支持。这些举措有效提升了公司的市场竞争力,使ANSHAN成为电子行业中备受瞩目的品牌。

GWM Associates公司的发展小趣事
前置放大器通常具有较高的增益,能够将微弱的信号有效放大,提高信号的可感知性和分析能力。
Digital Core Design公司的发展小趣事

1996年,Core Design推出了其标志性作品《古墓丽影》。这款游戏以其独特的女主角Lara Croft和精心设计的游戏世界吸引了全球玩家的关注。Lara Croft成为游戏界最具代表性的女性角色之一,而《古墓丽影》系列也成为Core Design最成功的游戏系列之一。这款游戏的成功不仅为Core Design带来了巨大的经济收益,也使其在全球游戏市场上赢得了极高的声誉。

问答坊 | AI 解惑

OTP语音芯片资料

OTP语音芯片资料…

查看全部问答>

请教程序错误

设计四个开关控制一盏灯的逻辑电路,要求合任一开关,灯亮;断任一开关,灯灭。(即任一开关的合断改变原来灯亮灭的状态) 在QUARTUS 2  里面怎么编译 SUBDESIGN t3_2 (   k0,k1,k2,k3:INPUT;   out: OUTPUT; ...…

查看全部问答>

KeilC51语言使用技巧及实战中文资料

KeilC51语言使用技巧及实战中文资料…

查看全部问答>

本来有wince平台下的智能输入法,包括拼音、笔画、数字、及字母输入法。

本人有wince平台下的智能输入法,包括拼音、笔画、数字、及字母输入法。有源代码,有意者请联系t9ime_wince@163.com,非诚勿扰!…

查看全部问答>

求助!各位大虾,这个函数到底该怎么用~~

[DllImport(\"Btdrt.dll\", SetLastError=true)] public static extern int BthReadLocalAddr(byte[] pba); 这个函数得到的本地DeviceID也是一组byte数组,为了向人们显示出来,我们要把它变为String:     string text1 = \"\";   ...…

查看全部问答>

settimer()的取值问题?

settimer()最多可以设定多长时间啊?我看函数定义,时间参数是毫秒,类型是UINT,着这样算,最多只能设65535毫秒,就一分钟多几秒,这也太少了吧, 不知有没有时间范围更长的定时器啊?比如可以设定几小时的时间?、…

查看全部问答>

期待您的帮助~在CE下如何获取主板 HD CPU的序列号呢~

小弟使用VS2005的VB开发CE5下的程序 现在想读取主板上的一些信息用来加密~主板序列号 硬盘序列号 CPU序列号什么的都可以~但可惜的是CE下不像XP有WMI可以很方便的调用~想知道各位大侠是怎么解决这方面的问题的~…

查看全部问答>

申请两片给我!

申请两片给我!:D :D…

查看全部问答>

请教高手,关于149的地址数据复用总线问题

我用的是149的片子,想用它读取时钟日历芯片DS12C887里面的时间信息。DS12C887的通讯方式是AD0~AD7的地址数据复用线,据我所知,149的片子没有这种地址数据线,得用虚拟的方式,我想用P4口接AD0~AD7(当然要经过电源转换),用P5口的0、1、2来控制 ...…

查看全部问答>

51单片机及其应用常见的资料

51单片机及其应用常见的资料,很有好处…

查看全部问答>