各位大虾,这样做按键扫描行不行的通;后面我还要显示按键值0-9和实现“确认”与“取消”功能按键界面,我还不确信这样行不行,是不是最好的
#define cancel 0x01
#define comfirm 0x02
#define function_array 0x03
#define null 0
#define uchar unsigned char
#define uint unsigned int
//uint8 disp_code[4],key_buf[4],room_buf[4];
//uint8 idata data_buff[16],idata call_number_buf[12];
/********************************************************************************************
* 函数名称:Key_Idle()
* 功 能:键盘松开
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void Key_idle()
{
while( ( P1 & 0x0f ) != 0x0f );
}
//*****************************************************************************************
//函数名称:Key_scan()按键输入扫描
//入口参数:无
//出口参数:无
//******************************************************************************************/
uchar Key_scan()
{
uchar line,lie,value;
int key;
P1=0x0f;
line=P1&&0x0f;
if(line!=0x0f)
{
delay(50);
if(line!=0x0f)
line=P1&&0x0f;
 1=line|0xf0;
lie=P1&&0xf0;
if(lie!=0xf0)
{
delay(50);
if(lie!=0xf0)
lie=P1&&0xf0;
value=line+lie;
}
}
Key_idle();
switch(value)
{
case 0xd7: key=0;break;
case 0xee: key=1;break;
case 0xce: key=2;break;
case 0xbe: key=3;break;
case 0xed: key=4;break;
case 0xdd: key=5;break;
case 0xbd: key=6;break;
case 0xeb: key=7;break;
case 0xdb: key=8;break;
case 0xbb: key=9;break; //0-9
case 0xe7: return comfirm;break; //确认键
case 0xd7: return cancel;break; //取消健
default : return null;
}
} |