4*4的矩阵键盘要求节省IO口如74ls165能实现外部中断功能的原理图邮箱:lvshuhaowan@163.com... 4*4的矩阵键盘 要求节省IO口 如74ls165 能实现外部中断功能的原理图 邮箱:lvshuhaowan@163.com
按键扫描,把I/0口的高低位相加
void Keyscan(void)
{
uchar r, c,key_value;
KEY_DATA = 0xf0; // 发全0行列扫描码,列线输入
key_value=KEY_DATA;
if( key_value!= 0xf0) // 若有键按下
{
delay_ms(4);
if(key_value!=0xf0)
{
r=key_value; //保存行输入码
KEY_DATA=0x0f; // 发全0行列扫描码,列线输入
key_value=KEY_DATA;
if(key_value!=0x0f) // 若有键按下
{
c=key_value; //保存列输入码
}
//键盘编码
}
key=(r+c);
}
}
利用上面所加的结果,生成键码表,S=0到S=15,
在主函数中,依据S的值做你想完成的操作
uchar KeyDeal(uchar Key)
{
if(Key!=0)
{
switch(Key)
{
case 0xe7: S=0; break;
case 0xeb: S=1; break;
case 0xed: S=2; break;
case 0xee: S=3; break;
case 0xd7: S=4; break;
case 0xdb: S=5; break;
case 0xdd: S=6; break;
case 0xde: S=7; break;
case 0xb7: S=8; break;
case 0xbb: S=9; break;
case 0xbd: S=10; break;
case 0xbe: S=11; break;
case 0x77: S=12; break;
case 0x7B: S=13; break;
case 0x7D: S=14; break;
case 0x7E: S=15; break;
}
}
return (S); // 返回键编码
}