www.pudn.com > key4X4.rar > key4X4.h, change:2006-08-27,size:3464b
/*----------------------模块说明---------------------------*/
/* 模块名 :key4x4.h
模块功能:检查4*4键盘,找到所按下的键的键值(0~F)
注意事项: 模块中包含头文件key_io.h、Delay.h
设计人: LXB 2005.8.2 /N.S
测试人: LXB
测试结果:程序运行正常
最后修改日期: 2005.8.11 */
#include <key_io.h>
//#include <Delay.h>
/**********键盘子程序说明:与单片机接口为p1口,利用高四位送扫描值,*******/
/**********低四位按位判断是哪个键按下,找到后返回按键所对应的偏移量*******/
//#define dat P1
//sbit key_1=P1^0;
//sbit key_2=P1^1;
//sbit key_3=P1^2;
//sbit key_4=P1^3;
/******调用之前先对函数进行定义**********/
/*****************检查有没有键按下子程序***********************/
//有键按下返回1,无键按下返回0
unsigned char testkey();
/******************扫描是哪个键按下子程序***********************/
//找到所按键的键值,并返回
unsigned char keyscan(void);
/************键盘子程序,有键按下,找到所按下键,并将键值返回***********/
//无键按下返回ffH
unsigned char key_0()
{ if (testkey()==1)
return keyscan(); //返回键值
else return 0xff; //返回ffH
}
/******函数功能描述***************/
unsigned char testkey()
{ unsigned char jia,rejia;
unsigned char h;
dat=0x0f;
jia=dat;
if(jia==0x0f) h=0;
else
{ delaynms(100); // 延时消抖
rejia=dat;
if (rejia==jia)h=1; // 确实有键按下,返回1
else h=0; // 与键按下返回0
}
return h;
}
/******************扫描是哪个键按下子程序***********************/
unsigned char keyscan(void)
{ unsigned char pos;
unsigned char i,k;
bit d,z,s;
k=0;i=0;z=0;s=0;
pos=0xf7;
do{i=k;
d=1;
pos<=1; // 查找具体是哪个键按下
pos=(pos | 0x0f);
dat=pos;
if(key_1==0)
{ while(d)
{ if(key_1==1)
{d=0;
i += 0; // 与硬件配合起来,对于同一列的键偏移量彼此相差4
z=1;
s=1;
}
}
}
else if(key_2==0)
{ while(d)
{ if(key_2==1)
{d=0;
i += 4; // 与硬件配合起来,对于同一列的键偏移量彼此相差4
z=1;
}
}
}
else if(key_3==0)
{ while(d)
{ if(key_3==1)
{d=0;
i += 8; // 与硬件配合起来,对于同一列的键偏移量彼此相差4
z=1;
}
}
}
else if(key_4==0)
{ while(d)
{ if(key_4==1)
{d=0;
i += 12; // 与硬件配合起来,对于同一列的键偏移量彼此相差4
z=1;
}
}
}
} while((++k != 4)&&(z==0));
if((i==3)&&(s==0)) return (0xff);
else return i;
}