找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机C语言程序最后的这个while起什么作用?

  [复制链接]
跳转到指定楼层
楼主
ID:761819 发表于 2020-5-26 17:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式



它这里的while起什么作用啊?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:761819 发表于 2020-5-26 17:50 | 只看该作者

回复

使用道具 举报

板凳
ID:213173 发表于 2020-5-26 18:22 | 只看该作者
等你松手
回复

使用道具 举报

地板
ID:761825 发表于 2020-5-26 18:35 | 只看该作者
您好,意思是当K1=0(!k1=1)的时候程序会在这里无限循环,原地等待;当k1=1时跳出循环,返回主程序。
回复

使用道具 举报

5#
ID:94031 发表于 2020-5-26 18:39 | 只看该作者
回复

使用道具 举报

6#
ID:155507 发表于 2020-5-26 18:58 | 只看该作者
按键松手检查  按键已抬起
回复

使用道具 举报

7#
ID:282850 发表于 2020-5-26 19:23 | 只看该作者
当kl口线为1时,什么都不做。没有什么意义。
回复

使用道具 举报

8#
ID:342911 发表于 2020-5-26 19:57 | 只看该作者
等待用户松开按键

keypress是按键检测函数,k1 == 0时代表按键按下

while中判断条件是“!k1”,也就是按键抬起k1 == 1时,!k为假,才会退出循环,否则一直死循环等待用户松开按键,没有这个处理当按下不放时就会造成不断触发。
回复

使用道具 举报

9#
ID:239611 发表于 2020-5-26 20:15 | 只看该作者
等待按键释放,当按键一直按下,K1==0,循环等待;当按键释放,K1==1, 结束循环。
回复

使用道具 举报

10#
ID:307407 发表于 2020-5-26 21:00 | 只看该作者
按键在按下的时候有大约几个毫秒的抖动,
回复

使用道具 举报

11#
ID:760179 发表于 2020-5-26 21:19 来自手机 | 只看该作者
当k1值不为零时,跳出循环
回复

使用道具 举报

12#
ID:307407 发表于 2020-5-26 21:24 | 只看该作者
楼主你这应该是独立按键防抖动程序,我首先讲一下独立按键扫描原理:
  当按键k1按下时会有几个毫秒的抖动,也就是不会立马为低电平,只有过了这个时间段才会彻底稳定在低电平,当按键松开时k1又会回到高电平。
我再啰嗦一下while语句用法:
  while是一个循环语句,如 while(1); 就是一个死循环语句,程序在里面出不来,我们知道在c语言里规定“0”为假,非“0”为真,这里括号里是“1”,也就是真,那么就相当于 while(真); ,程序是出不来的。
while起什么作用?
  回到楼主的程序,假设程序从21行语句开始,当按键k1按下时,k1为低电平,满足if条件语句,程序进而调到22行,这里的delay语句延时消抖,前面也讲过为什么消抖,程序进而到23行,这里又是一个if语句,但这个if语句不能少。此时按键还没松开,但是已趋于稳定,稳定在低电平,运行的24行……然后到26行,由于此时K1为低电平,我用“0”代替,那么 !k1 为“1”,while(!k1)相当于while(真),程序跳不出去,只有当松开按键改变k1的电平才能跳出这个循环。如果不在这里设置while(!k1),那么程序会一直跑,24行的led会一直闪。
回复

使用道具 举报

13#
ID:452950 发表于 2020-5-26 21:28 | 只看该作者
当K1等于0时循环,当K1等于1时跳出循环。
回复

使用道具 举报

14#
ID:579397 发表于 2020-5-26 21:31 | 只看该作者
等待按键释放
回复

使用道具 举报

15#
ID:761989 发表于 2020-5-26 21:34 | 只看该作者
最后这个while就是 检测按键k1是否被释放 的作用
回复

使用道具 举报

16#
ID:761989 发表于 2020-5-26 21:36 | 只看该作者
最后这个while就是 检测按键k1是否被释放 的作用
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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