//判断是否有键按下,有返回1,否则返回0 uint8 KeyRead(void) {
key=key_pin; key|=0x00; if(key==0x7f) return (key_value = browse); else if(key==0xfD) return (key_value=mater); else if(key==0xfB) return (key_value = conver); else if(key==0xf7) return (key_value=impact); else if(key == 0xef ) return (key_value = del); else if(key == 0xbf) return (key_value = time); else { return 0; } }
// P1口行列式键盘 // //---------------------------------------------------------------------------// void KeyScan(void) //键扫描 { unsigned char sccode,recode; key_temp = KeyRead(); //键扫描,获得键值 if (key_temp != 0) //有键按下 { if (key_temp == key_bak) { key_old++; if (key_old==KEYDELAY) //连续键,不要则把此if屏蔽 { key_ok=1; key_data=key_value; //键解码 key_old=KEYDELAY-KEYLOOP; } } else { key_old=0; key_bak=key_temp; } } else //键抬起 { if (key_old) { key_ok=1; key_data=key_value; //键解码 if (key_old==2000) //加上时间,不同时间不同功能,与连续键冲突 {
long_flag = 1;//在这里设个标志位 ,在主程序扫描得到长按功能 } /* if (key_old==200) { bp(2); key_data += 0x20;////这里为什么要加0X20呢?不懂 } */ } key_old=0; }
key = key|0xff; //这里我不懂得怎么样改啊 }
上面这个程序我是按照你的修改的,但我的长按功能不行.不知为什么呢....帮我看看吗?我的是一个IO接一按键的.....
|