OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2165|回复: 4

独立按键松手检测的问题,求解

[复制链接]

17

主题

77

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
263
金钱
263
注册时间
2019-4-28
在线时间
66 小时
发表于 2019-6-3 11:37:26 | 显示全部楼层 |阅读模式
1金钱


为什么不能取反(stm32上同样,所以用51试试也不行)

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 11=~P1;break;//不能实现取反操作
default:break;
}


}
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2019-6-3 16:19:27 | 显示全部楼层
32不是51, 不能这样直接取舟的

假如你用的是PA5, 取反是这样的

GPIOA->ODR ^= (1<<5);
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2019-6-3 16:23:44 | 显示全部楼层
32不是51, 不能这样直接取舟的

假如你用的是PA5, 取反是这样的

GPIOA->ODR ^= (1<<5);
回复

使用道具 举报

0

主题

45

帖子

0

精华

高级会员

Rank: 4

积分
624
金钱
624
注册时间
2018-5-24
在线时间
120 小时
发表于 2019-6-3 17:09:42 | 显示全部楼层
STM32不支持,
也可以使用位带的方法,例如
#define LED1 PBout(5)// PB5
LED1= !LED1;
回复

使用道具 举报

2

主题

582

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2690
金钱
2690
注册时间
2014-5-23
在线时间
188 小时
发表于 2019-6-3 18:16:03 | 显示全部楼层
你这个return已经跳出函数了,后面检测松手没有意义了,你这个取反的意义是什么?
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-17 11:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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