本帖最后由 艺术家58 于 2013-5-15 00:51 编辑
下面的程序没调试过,应该能行。
u8 KEY_Scan(void)
{
static u8 key_up=1;//可以读取按键状态标志
u8 ide=0,key_toggle;
key_toggle=KEY0; //KEY0没有按下,可以扫描KEY1~3按键状态并置返回值的相应位
while(key_toggle) /*因为初始话 让他们KEY值都为1,然后用KEY0来控制其他三个KEY的输入输出
刚开始key_toggle==1 KEY1~3输入 如果按次KEY0(KEY==0)这是输出ide
*/
{
if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3 ==0))
{
delay_ms(10);//去抖动
if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3 ==0))
{
if(KEY3==0)
{
ide=ide | 0x04; //置返回值的第2位KEY3为第三位,KEY2为第二位,KEY1为第一位
}
else if(KEY2==0)
{
ide=ide | 0x02; // 置返回值的第1位
}
else if(KEY1==0)
{
ide=ide | 0x01; // 置返回值的第0位 //这样ide就有KEY1~3的状态值
} //这样就能实现八个灯的值
else if(KEY0==0) //这时看是否按下KEY0退出按键扫描程序
{
key_toggle=0;key_up=0; //退出循环,不再读按键状态,其实key_up可以不用
}
}
}
else
{ key_up=1; }
}
return ide;
} |