原创 第十九课 按键之五 矩阵按键之查表扫描

2009-6-2 16:41 4312 2 2 分类: MCU/ 嵌入式

第十九课 按键之五 矩阵按键之查表扫描


点击开大图


程序讲解(矩阵按键头文件)


/*--------------------------------------------------------------*/
//4*4矩阵键盘的设计
//Time: 21:04 2009-4-28


/*--------------------------------------------------------------*/
#ifndef __Key_Board_H__
#define __Key_Board_H__


/*--------------------------------------------------------------*/
//键盘接口定义
#define key_port P2      



/*--------------------------------------------------------------*/
//键盘键值码 可根据实际情况更改
unsigned char code key_table[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,
        0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};



/*--------------------------------------------------------------*/
//延时5000+0us 函数定义
void delay5ms(void)
{
    unsigned char i,j;
    for(i=185;i>0;i--)
    for(j=12;j>0;j--);
}



/*--------------------------------------------------------------*/
//键盘查表扫描
unsigned char key_scan(void)
{
 unsigned char i, key_code;
 key_port = 0x0f;         //此时 key_port = P2=00001111,S1按下,数据变成00001110
 if(key_port != 0x0f)    //key_port = P2=00001110满足if条件
 {
  delay5ms();               //延时消斗
  if(key_port != 0x0f)   //再次判断
  {
   key_code = key_port;  //数据暂存key_code = key_port=00001110
   key_port = 0xf0;         //此时 key_port = P2=11110000,S1按下,数据变成11100000
   key_code |= key_port; //key_code = 00001110 | 11100000=11101110 即 0xee
   for(i = 0; i < 16; i++)    //判断key_code=0xee对应key_table 的哪个数,即用i标记
   {                                  //对应的按键
    if(key_table == key_code) break;  //取出按下S1产生的数据对应的key_table 
   }                                                       //表中的i
   while(key_port != 0xf0);                    
  }
 }
 return (i);              //返回按下S1对应的i值
}


/*--------------------------------------------------------------*/
#endif


本节重点


1、和选择法大同小异,但较之精简!

文章评论0条评论)

登录后参与讨论
相关推荐阅读
lmjxf 2010-12-08 22:18
台达PLC监控
台达PLC监控网上有很多例子,自己也照着弄了个,挺方便的,分享下串口数据格式:COM1,9600,8,N,1  ...
lmjxf 2010-06-27 16:36
基于NIOS II和FPGA无线小车控制系统的设计
   主控制台以Cyclone II系列的EP2C8Q208C8为核心,通过nRF24L01进行无线通讯,来控制以ATmega8为微处理器的两轮小车,可以实现小车按控制平台发送的控制信息来准确运动。所...
lmjxf 2009-11-13 15:58
51开发板已经销售完了,谢谢大家的支持!
51开发板已经销售完了,谢谢大家的支持!...
lmjxf 2009-09-28 16:13
51开发板十一大放送!!!赶快行动吧!!!
  51开发板十一大放送!  赶快行动吧!!!   开发板硬件介绍: http://group.ednchina.com/2031/24972.aspx  开发板实物图片总汇: http://grou...
lmjxf 2009-09-13 19:02
nios II 实验五 数码管显示数字钟(定时器实现 外部中断调节)
#include "system.h"                      //包含基本的硬件描述信息#include "altera_avalon_timer_regs.h"    //定义内...
lmjxf 2009-09-13 18:57
nios II 实验四 PIO外部中断
#include "system.h"                      //包含基本的硬件描述信息#include "altera_avalon_timer_regs.h"    //定义内...
广告
我要评论
0
2
1
2
3
4
5
6
7
8
9
0
广告
关闭 热点推荐上一条 /5 下一条