我看到你的键盘程序是这样的,现在不懂的地方请教一下
void KeyScan(void) //键扫描 { unsigned char sccode,recode; KEYPIN_L = KEYPIN_L|0x0f; // P1低四位为列线输入 // KEYPIN_H = KEYPIN_H&0x0f; // P1高四位为行线发全零扫描码 // if ((KEYPIN_L&0x0f) != 0x0f) //有键按下 { key_temp = 键值; //键扫描,获得键值 if (key_temp == key_bak) { key_old++; if (key_old==KEYDELAY) //连续键,不要则把此if屏蔽 { key_ok=1; key_data=fnKeycode(key_temp); //键解码 key_old=KEYDELAY-KEYLOOP; } } else { key_old=0; key_bak=key_temp; } } else //键抬起 { if (key_old) ///这里KEY_OLD == 1??为什么这样?条件会成立吗? { key_ok=1; key_data=fnKeycode(key_temp); //键解码 /* if (key_old==100) //加上时间,不同时间不同功能,与连续键冲突 { bp(1); key_data += 0x10; } if (key_old==200) { bp(2); key_data += 0x20; } */ } key_old=0; } KEYPIN_H = KEYPIN_H|0xf0; ///这里是什么意思呢???? }
你的键盘程序的长按功能是不是等按键抬高才能实现的呢? 还有可否给个简单的例子呢? |