找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1826|回复: 12
收起左侧

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

  [复制链接]
ID:974245 发表于 2021-10-29 09:51 | 显示全部楼层 |阅读模式
单片机源程序如下:
屏幕截图 2021-10-29 094943.png 屏幕截图 2021-10-29 094728.png
if里面,为啥要这样写就可以检测sw是否按下呢,不理解呢。应该怎么理解好,还有好几个if,不知道怎么理解。求指点,感谢!~
回复

使用道具 举报

ID:73435 发表于 2021-10-29 10:54 | 显示全部楼层
你觉得应该怎么写,跟他的区别在哪儿
回复

使用道具 举报

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:213173 发表于 2021-10-29 11:11 | 显示全部楼层
都是判断真假,if(!SW) SW=0为真,while(!SW)SW=1为假。
回复

使用道具 举报

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

评分

参与人数 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: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:964308 发表于 2021-10-29 15:38 来自手机 | 显示全部楼层
注释都写出来了,!SW是一个表达式,P2端口自带上拉也就是不按时高电平,不满足if条件,按下时低电平,满足if条件,执行if里的语句

评分

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

查看全部评分

回复

使用道具 举报

ID:198543 发表于 2021-11-1 11:10 | 显示全部楼层
首先,要清楚开关按下和松开过程中的电信号变化情况,一般会有十几ms的抖动时间,如下图
51hei.png
其次,程序指令一般都很快,微秒级的,故循环查询时不延时处理会多次得到结果或高或低电平,会检测不到你想要的情况。
其它,如上面所说,不讲程序了
回复

使用道具 举报

ID:974245 发表于 2021-11-2 22:29 来自手机 | 显示全部楼层
nbhmwj 发表于 2021-11-1 11:10
首先,要清楚开关按下和松开过程中的电信号变化情况,一般会有十几ms的抖动时间,如下图

其次,程序指令 ...

谢谢答主!感谢╰(*︶`*)╯
回复

使用道具 举报

ID:339654 发表于 2021-11-3 08:13 | 显示全部楼层
你要自己思考,改动这个程序,看看自己改动与原程序的区别,这样就容易摸清楚了
回复

使用道具 举报

ID:556568 发表于 2021-11-3 17:32 | 显示全部楼层
都是判断当前按键状态,按下前是1.那么按下后就是0,程序就运行到了按键按下的那里,再次检测就是消抖,程序最后再检测就可以判断按键是否松开。
回复

使用道具 举报

ID:978535 发表于 2021-11-6 14:58 | 显示全部楼层
多层if嵌套是为了消除按键按下时产生的抖动,建议去看一下有关键盘章节的学习视频
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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