/*
**************矩阵按键**************
* 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) |