找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3330|回复: 6
打印 上一主题 下一主题
收起左侧

单片机独立按键松手检测程序问题

[复制链接]
跳转到指定楼层
楼主
ID:378659 发表于 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;

}

}

}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:460962 发表于 2019-6-3 13:53 | 只看该作者
unsigned char can(void)不是没带返回值的函数吗
回复

使用道具 举报

板凳
ID:316613 发表于 2019-6-3 14:11 | 只看该作者
while里面改成 KEY==0  试试
回复

使用道具 举报

地板
ID:293363 发表于 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;
}
}
}
回复

使用道具 举报

5#
ID:445996 发表于 2019-6-3 18:36 | 只看该作者
switch(can())  can()是没有值的 也就是说直接default:break;执行这一行
回复

使用道具 举报

6#
ID:452821 发表于 2019-6-3 19:16 | 只看该作者
按键弹起之后一定会返回0的值,应该把return 0;删了就可以了
回复

使用道具 举报

7#
ID:554275 发表于 2019-6-4 00:57 | 只看该作者
返回太快了,手还没离开按键,已经返回许多许多次了,这里的松手检测代码几乎运行不到。
case 1: P1 = !P1; while(1); break;//停在这儿看下结果
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表