这样写有问题吗?我实在不知道哪的问题,就是运行不了
sbit KEY_SET = P1^3;
sbit KEY_UP = P1^2;
sbit KEY_DOWN = P1^0;
/*********************************************
;文件名:keyscan();
;功 能:按键扫描函数
;输 入:无
;输 出:;调 用:无
;*********************************************/
uchar keyscan(void)
{
if(KEY_SET==0||KEY_UP==0||KEY_DOWN==0) //有任一键按下,进入按键检测
{
keystar=1; //进入计时器,开始计时
if((KEY_SET==0)&&keytemp>=20) set_down=1; //设置键按下20ms
if((KEY_UP==0)&&keytemp>=20) up_down=1;
if((KEY_DOWN==0)&&keytemp>=20) down_down=1;
if((KEY_SET==0)&&keytemp>=2000) //2S 设置键被长按
{
set_down=0;
set_down_long=1;
}
if((KEY_UP==0)&&keytemp>=2000)
{
up_down=0;
up_down_long=1;
}
if((KEY_SET==0)&&keytemp>=2000) //2S
{
down_down=0;
down_down_long=1;
}
}
else //松手等待按键抬起
{
if((KEY_SET==1)&&(set_down==1))
{
set_down=0;
set_shot_flag=1; //一个完整的按键操作完成
}
if((KEY_SET==1)&&(set_down_long==1))
{
set_down_long=0;
set_long_flag=1; //一个完整的长按键操作完成
}
if((KEY_UP==1)&&(up_down==1))
{
up_down=0;
up_shot_flag=1;
}
if((KEY_UP==1)&&(up_down_long==1))
{
up_down_long=0;
up_long_flag=1;
}
if((KEY_DOWN==1)&&(down_down==1))
{
down_down=0;
down_shot_flag=1;
}
if((KEY_DOWN==1)&&(down_down_long==1))
{
down_down_long=0;
down_long_flag=1;
}
keystar=0;
}
// return key_flag;
}
定时时器10sm扫一次
if (keystar)
{
keytemp++;
if (keytemp>=30000) keytemp=30000; //3S
}
else
{
keytemp=0;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
m=100
for(n=0;m<n;n++)
{
if(key==0)
{
m++
de(10)//10ms
}
}
if(m>102)
{
if(m>700)//按的时间大于2秒
{
长按处理
}
e~~~~~
{
知按处理
}
}
一周热门 更多>