标题: 单片机C语言程序最后的这个while起什么作用? [打印本页]

作者: 一口一个大胖子    时间: 2020-5-26 17:48
标题: 单片机C语言程序最后的这个while起什么作用?



它这里的while起什么作用啊?

作者: 一口一个大胖子    时间: 2020-5-26 17:50


作者: wulin    时间: 2020-5-26 18:22
等你松手
作者: 江湖兔子    时间: 2020-5-26 18:35
您好,意思是当K1=0(!k1=1)的时候程序会在这里无限循环,原地等待;当k1=1时跳出循环,返回主程序。
作者: xuyaqi    时间: 2020-5-26 18:39
一口一个大胖子 发表于 2020-5-26 17:50

等待按键K1抬起。
作者: angmall    时间: 2020-5-26 18:58
按键松手检查  按键已抬起
作者: f556    时间: 2020-5-26 19:23
当kl口线为1时,什么都不做。没有什么意义。
作者: muzhi    时间: 2020-5-26 19:57
等待用户松开按键

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

while中判断条件是“!k1”,也就是按键抬起k1 == 1时,!k为假,才会退出循环,否则一直死循环等待用户松开按键,没有这个处理当按下不放时就会造成不断触发。
作者: botgs    时间: 2020-5-26 20:15
等待按键释放,当按键一直按下,K1==0,循环等待;当按键释放,K1==1, 结束循环。
作者: 丿小候鸟    时间: 2020-5-26 21:00
按键在按下的时候有大约几个毫秒的抖动,
作者: chengp    时间: 2020-5-26 21:19
当k1值不为零时,跳出循环
作者: 丿小候鸟    时间: 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会一直闪。
作者: xxpp2011    时间: 2020-5-26 21:28
当K1等于0时循环,当K1等于1时跳出循环。
作者: 405616736    时间: 2020-5-26 21:31
等待按键释放
作者: YTTYL    时间: 2020-5-26 21:34
最后这个while就是 检测按键k1是否被释放 的作用
作者: YTTYL    时间: 2020-5-26 21:36
最后这个while就是 检测按键k1是否被释放 的作用




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1