Chinaunix首页 | 论坛 | 博客
  • 博客访问: 47377
  • 博文数量: 10
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 20
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-17 23:37
文章分类

全部博文(10)

文章存档

2014年(9)

2013年(1)

我的朋友

分类: 嵌入式

2013-08-16 01:20:44

/*
**************矩阵按键**************
* Func: 行列扫描法矩阵按键函数
* Author:i_love_linux
* Data:  8/16/2013 00:50 
* Version:V1.0
*/
unsigned char Matrix_Key(void)
{
     unsigned char key_row,key_col;//行与列的个数
     unsigned char tmp;//临时的中间变量
         for(key_row = 0 , key_col=0 ; key_row < 4 ; key++){ //逐行扫描
              P0 = ~(1 << key_row); //往key_row行上送低电平其它行送高电平(如果不是key_row当前行有按键按下则列先状态不会改变还是全高)
                tmp = P0&0xf0; //读取端口的状态(取列线的状态)
              if(tmp != 0xf0){ //判断列线状态是否改变(如果当前行没有按键按下其它行上有按键按下tmp=0xff,条件不成立再次循环)。
                    while(tmp & (1 << key_col+4))//判断那一列有按键按下(与1相与保持不变,与0相与为0)
                             key_col++;
                      P0 = 0xf0;

                      tmp = P0&0xf0;//再次读取列线状态
                     while(tmp != 0xf0);//等待按键的抬起
                     return key_row*4+key_col;//返回键值
              }        
         }
}
阅读(2090) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~