单片机矩阵键盘扫描的两种方式

发布者:剑戟辉煌最新更新时间:2014-01-27 来源: dqjsw关键字:单片机  矩阵键盘  扫描 手机看文章 扫描二维码
随时随地手机看文章

 
单片机矩阵键盘扫描的两种方式:
第一种:逐行扫描法,就是一行一行的扫描。实现代码如下(键盘连接P2口):

#define NO_KEY 0XFF
#define KEY_LO()  P2 &= 0XF0
#define KEY_HI()  P2 |= 0X0F
#define KEY_L(i)  P2 &= ~(1<#define KEY_RD()  ((P2>>4) & 0x0f)

UINT8 OnceKey(void)
{
 UINT8 line = 0;
 UINT8 key = NO_KEY;//key value
 KEY_LO();
 if (KEY_RD() == 0X0F)
 {
  KEY_HI();
  return NO_KEY;
 }

 for (line=0; line<4; line ++)
 {
  KEY_HI();
  KEY_L(line);
  key = KEY_RD();
  switch (key)
  {
   case ROW_FIRST:
    key = 4*line + 0;
    break;
   case ROW_SECOND:
    key = 4*line + 1;
    break;
   case ROW_THIRD:
    key = 4*line + 2;
    break;
   case ROW_FOURTH:
    key = 4*line +3;
    break;
   default :
    key = 0x0f;
    break;
  }
  if (key < 0x10)
  {
   return key;
  }
 }
 return NO_KEY;
}

第二种,线性反转法。就是行和列分别读出。实现代码如下:

#define CVT(i) ((i)==(~1)&0x0f)? 0: ((i)==(~2)&0x0f)? 1: ((i)==(~4)&0x0f)? 2: ((i)==(~8)&0x0f)? 3: 4;

#define KEY0_3HI() P2 |= 0X0F
#define KEY0_3LO() P2 &= 0XF0
#define KEY4_7HI() P2 |= 0XF0
#define KEY4_7LO() P2 &= 0X0F
#define KEY0_3RD() (P2 & 0X0F)
#define KEY4_7RF() ((P2>>4) & 0X0F)

UINT8  OnceKey(void)
{
 UINT8 line = NO_KEY;
 UINT8 row = NO_KEY;
 UINT8 key;
 KEY0_3HI();
 KEY4_7LO();
 line = KEY0_3RD();//读入行的值
 if (0x0f == line)
 {
  key = NO_KEY;
 }
 else
 {
  KEY0_3LO();
  KEY4_7HI();
  row = KEY4_7RD();//读入列的值
  if (0x0f == row)
  {
   key = NO_KEY;
  } 
  else
  {
   key = CVT(line)*4 + CVT(row);
  }
 }
 KEY0_3HI();
 KEY4_7HI();
 return key;

关键字:单片机  矩阵键盘  扫描 引用地址:单片机矩阵键盘扫描的两种方式

上一篇:单片机实现PCB探测系统
下一篇:学习单片机需要做什么?

推荐阅读最新更新时间:2024-03-16 13:34

基于光电传感器的智能灯控系统的设计与实现
  0 引言   当今社会人们更加注重节能环保,照明这一领域,特别是在公共场所也发生了很大的变化。现在的声光控制灯属于新型建筑照明系统,这种系统应用在楼道上还比较实用,但现在我们学校将该系统应用在洗手间里,我们体验到它给我们带来的不便。由于每个人上洗手间的时间长短不一样,而且不会一直会有大的声音,该系统如果控制着灯一直亮着或者亮的时间太长,这样就达不到节能的效果,但如果亮的时间太短,还在洗衣手间的人就会产生恐惧心理,因而,若该系统用于洗手间,很有必要进行改进。   1 系统总体设计   本设计的改进之处是设计一个具有计数功能的模块,我们可以使用对射型光电传感器,如图1所示在洗手间的进口处设置两个发射源和两个接收
[电源管理]
基于光电传感器的智能灯控系统的设计与实现
锂离子电池智能充电器硬件的设计
  锂离子电池具有较高的能量重量和能量体积比,无记忆效应,可重复充电次数多,使用寿命长,价格也越来越低。一个良好的充电器可使电池具有较长的寿命。利用C8051F310单片机设计的智能充电器,具有较高的测量精度,可很好的控制充电电流的大小,适时的调整,并可根据充电的状态判断充电的时间,及时终止充电,以避免电池的过充。   本文讨论使用C8051F310器件设计锂离子电池充电器的。利用PWM脉宽调制产生可用软件控制的充电电源,以适应不同阶段的充电电流的要求。温度传感器对电池温度进行监测,并通过AD转换和相关计算检测电池充电电压和电流,以判断电池到达哪个阶段。使电池具有更长的使用寿命,更有效的充电方法。    设计过程   1 充电
[电源管理]
单片机红外线遥控开关实验 Proteus仿真加源程序
单片机用红外线来遥控一个开关实验的仿真原理图 单片机源程序: //---------------------------------------------------------------------------------------------------------------------------------- //程序名: HW6-3.c //程序功能:红外线遥控开关程序 // ---------------------------------------------------------------------------------------------------------------------
[单片机]
<font color='red'>单片机</font>红外线遥控开关实验 Proteus仿真加源程序
直流电动机的调速 用单片机产生PWM控制
上一篇文章已经讲解了直流电机的驱动,怎么使它正转,反转和停止,并详细的说了一下H桥原理。今天这里写一下怎么用单片机控制直流电机的速度。 直流调速器就是调节直流电动机速度的设备,上端和交流电源连接,下端和直流电动机连接,直流调速器将交流电转化成两路输出直流电源,一路输入给直流电机砺磁(定子),一路输入给直流电机电枢(转子),直流调速器通过控制电枢直流电压来调节直流电动机转速。同时直流电动机给调速器一个反馈电流,调速器根据反馈电流来判断直流电机的转速情况,必要时修正电枢电压输出,以此来再次调节电机的转速。 直流电机的调速方案一般有下列3种方式: 1、改变电枢电压; 2、改变激磁绕组电压; 3、改变电枢回路电阻。
[单片机]
基于AVR单片机atmega32的PID和PWM液体流量控制系统研究
1. 引言 液体流量控制通常采用电磁阀实现,近年来,电磁阀的结构和控制方式发生了很大的变 化,随着计算机进入控制领域,以及新型的电力电子功率元器件的不断出现,使采用全控制的开关功率元件进行脉宽调制(pulse width modulation ,简称PWM)控制方式得到了广泛的应用。这种控制方式很容易在单片机中实现,从而为电磁阀的控制数字化提供了契机。 将偏差的比例(proportion)、积分(integral)、微分(differential)通过线性组合构成控制量,用这一控制量对被控对象进行控制,这样的控制器称PID控制器。PID控制器最早出现在模拟控制系统中,传统的模拟PID控制器是通过硬件(电子元件、气动和液压元件)来实现
[单片机]
基于AVR<font color='red'>单片机</font>atmega32的PID和PWM液体流量控制系统研究
功能连接MRI扫描可以识别各种神经病症
  大多数脑相关疾病是通过患者经历的症状来辨别的。由于美国华盛顿大学的研究人员正在研究的功能连接 MRI (fc MRI ),或许会成为能映射出大脑相互关系的新技术,可能有助于发现引发脑疾病的不寻常模式。下面就随嵌入式小编一起来了解一下相关内容吧。   该研究团队重点研究了各个志愿者大脑线路的“根本性差异”。该研究负责人Steven Petersen博士在一份声明中表示:“这是朝着实现功能连接 MRI 的临床用途迈出的一步。在开发基于fcMRI的诊断测试之前,我们需要知道它实际测量的是什么。我们在这里展示的并非测量大脑的想法,而是测量大脑是如何系统化的。这也为临床测试打开了一个新的篇章。”   在这项研究中,九个志愿者通过MRI
[嵌入式]
Atmel推出新一代的低功耗8位AVR MCU
全球微控制器(MCU)及触控技术解决方案领域的领导者Atmel公司 近日在2014慕尼黑国际电子展上推出了新一代8位megaAVR MCU系列,配备4KB至16KB闪存,并提供新一代增强特性,其中包括更多模拟功能以及面向最新的低功耗消费、工业、白色家电和物联网应用的特性。 自mega168系列于2002年推出以来,Atmel已售出了近10亿件该系列MCU,该系列已成为当今市场上最受欢迎的Atmel 8位AVR MCU。8位megaAVR MCU适用于从爱好者、DIY和创客社区到专业人士、资深设计人员的各级工程师,是汽车、工业、消费电子、白色家电等各类应用的理想选择。Atmel的新一代megaAVR MCU具备前几代产品的所有
[单片机]
单片机控制的便携式篮球计时器设计
  引言   本设计利用单片机AT89C51完成了计时的功能,详细地介绍了系统硬件与软件的设计过程,设计由AT89C51编程控制Led七段数码管作显示的篮球计时系统。该系统具有赛程时间设定,计时启功,暂停,报警,24 s及复位等功能。   1 系统原理   篮球比赛计时的准确性和计时的精确度是要求很高的,而单片机在这方面有着出色的表现。该系统采用频率为12 MHz的芯片,整个系统由按键、计时显示、报警,箭头方向等部分组成。该系统组成方框图如图1所示。      单片机是该系统电路的核心组成部分,系统的各种功能都是在单片机内通过编程来实现。单片机选用AT89C51。它的X1(19脚)和X2(18脚)外接12MHz
[单片机]
<font color='red'>单片机</font>控制的便携式篮球计时器设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved