标题: 单片机独立按键松手检测程序问题 [打印本页]

作者: 0孙悟空0    时间: 2019-6-3 11:39
标题: 单片机独立按键松手检测程序问题
为什么不能取反,怎么改



unsigned char can(void)

{

if(key_s2 == 0)        //判断是否按下S2

{

delay(5);  //软件消抖

if(key_s2 == 0)//再次判断是否按下S2

{

return 1;//如果在这里用P1=~P1;就可以实现取反

}

while(!key_s2);//松手检测

}

return 0;

}



void main()

{

while(1)

{

switch(can())

{

case 1:P1=~P1;break;//不能实现取反操作

default:break;

}

}

}

作者: tan61398    时间: 2019-6-3 13:53
unsigned char can(void)不是没带返回值的函数吗
作者: QEQWE123    时间: 2019-6-3 14:11
while里面改成 KEY==0  试试
作者: 陈润源home    时间: 2019-6-3 17:53
来,试试这个

#include<reg51.h>
#define uchar unsigned char

uchar m;

void key()
{
   if(k1==0)
{
   delayms(10):
   if(k1==0)
{
   m++;
}
while(!k1);
}
}
void main()
{
  while(1)
{
  key();
  switch(m)
{
  case 1:P1=~P1;break;
default:break;
}
}
}
作者: 许你一世柔情    时间: 2019-6-3 18:36
switch(can())  can()是没有值的 也就是说直接default:break;执行这一行
作者: 尹子归来    时间: 2019-6-3 19:16
按键弹起之后一定会返回0的值,应该把return 0;删了就可以了
作者: liu_qingwei    时间: 2019-6-4 00:57
返回太快了,手还没离开按键,已经返回许多许多次了,这里的松手检测代码几乎运行不到。
case 1: P1 = !P1; while(1); break;//停在这儿看下结果




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1