找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

关于单片机按键控制的几句简单代码,求详解

查看数: 3352 | 评论数: 12 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-10-29 09:51

正文摘要:

单片机源程序如下: if里面,为啥要这样写就可以检测sw是否按下呢,不理解呢。应该怎么理解好,还有好几个if,不知道怎么理解。求指点,感谢!~

回复

ID:978535 发表于 2021-11-6 14:58
多层if嵌套是为了消除按键按下时产生的抖动,建议去看一下有关键盘章节的学习视频
ID:556568 发表于 2021-11-3 17:32
都是判断当前按键状态,按下前是1.那么按下后就是0,程序就运行到了按键按下的那里,再次检测就是消抖,程序最后再检测就可以判断按键是否松开。
ID:339654 发表于 2021-11-3 08:13
你要自己思考,改动这个程序,看看自己改动与原程序的区别,这样就容易摸清楚了
ID:974245 发表于 2021-11-2 22:29
nbhmwj 发表于 2021-11-1 11:10
首先,要清楚开关按下和松开过程中的电信号变化情况,一般会有十几ms的抖动时间,如下图

其次,程序指令 ...

谢谢答主!感谢╰(*︶`*)╯
ID:198543 发表于 2021-11-1 11:10
首先,要清楚开关按下和松开过程中的电信号变化情况,一般会有十几ms的抖动时间,如下图

其次,程序指令一般都很快,微秒级的,故循环查询时不延时处理会多次得到结果或高或低电平,会检测不到你想要的情况。
其它,如上面所说,不讲程序了
ID:964308 发表于 2021-10-29 15:38
注释都写出来了,!SW是一个表达式,P2端口自带上拉也就是不按时高电平,不满足if条件,按下时低电平,满足if条件,执行if里的语句

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

ID:624769 发表于 2021-10-29 11:57
你这里两个问题:
一、 !SW : "非SW"的意思  即: 当SW=1 时  !SW = 0,  当SW=0 时  !SW = 1.

二、 if,while 问题:     
1)if(!SW) :      如果,!SW 成立(结果为1)时, 那么,执行以下语句,否则跳过。
2) while(!SW) : 当  !SW 成立(结果为1)时, 则在此处循环,否则结束循环。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

ID:975955 发表于 2021-10-29 11:29
SW代表P2.0口的状态,开关按下,端口就是低电平,所以在括号里面判断SW是否为低电平,也就是0,如果SW是0,!SW就是1了,好几个if是为了隔一段时间重复判断一次啊,也就是连续好几次判断都是按下,则说明真的按下了,也就是用这种方式消抖

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

ID:208313 发表于 2021-10-29 11:15
低有效,按键端口默认为高电平,当按下之后,端口获取低电平,sw=0;!sw=1;在if()条件语句中,为真运行,什么时候为真呢?非0条件,可以理解为1有效,所以按键按下,sw=0;if(!sw)满足条件执行条件语句中内容,延时是预防消抖

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

ID:213173 发表于 2021-10-29 11:11
都是判断真假,if(!SW) SW=0为真,while(!SW)SW=1为假。
ID:908826 发表于 2021-10-29 11:08
那几个检测按键的就是为了按键消抖,sw摁下是0,取反就是1,if(为真)会执行,一直到while(!sw)相当于while(1)会一直在这循环等待,直到松开按键sw=1,while(!sw)相当于while(0),跳出这个while循环

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

ID:73435 发表于 2021-10-29 10:54
你觉得应该怎么写,跟他的区别在哪儿

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

Powered by 单片机教程网

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