|
键盘中断法 行扫描 只能扫描一行的键值,急!!!求救!!!
[复制链接]
问题是:当hcode初始为一个值(0xef或0xdf..)时只能扫描这一行的键值,其他行按键按下无用
//4*3键盘,行扫描方法
#include
#include "delay.h"
#define uint unsigned int;
#define uchar unsigned char;
uchar hcode,lcode;
uint i;
/**************************************************************
函数名: scan_key();
输入: 无
输出: uchar
功能: 判断4*3矩形键盘是否有键按下,如果有,返回键值
**************************************************************/
uchar scan_key(void)
{
if(( P1 & 0x0f) != 0x0f) //判断是否有键按下
{
delay10ms(); //延时去抖
if(( P1 & 0x0f) != 0x0f)
{
hcode =0xef;
for(i= 0; i < 4 ;i ++)
{
P1 = hcode; //行扫描初值
delay_1ms();
if( ( P1 & 0x0f ) != 0x0f) //判断本行是否有按键按下
{
lcode = ( P1 & 0x0f ) | 0xf0;
return ( hcode & lcode ); //返回按键码值
}
else
{
hcode = (hcode<<1) |0x01;
}
}
}
}
return(0);
}
|
|