找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2583|回复: 15
收起左侧

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

  [复制链接]
ID:761819 发表于 2020-5-26 17:48 | 显示全部楼层 |阅读模式
51hei.png


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

使用道具 举报

ID:761819 发表于 2020-5-26 17:50 | 显示全部楼层
51hei截图20200526174913.png
回复

使用道具 举报

ID:213173 发表于 2020-5-26 18:22 | 显示全部楼层
等你松手
回复

使用道具 举报

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

使用道具 举报

ID:94031 发表于 2020-5-26 18:39 | 显示全部楼层
回复

使用道具 举报

ID:155507 发表于 2020-5-26 18:58 | 显示全部楼层
按键松手检查  按键已抬起
回复

使用道具 举报

ID:282850 发表于 2020-5-26 19:23 | 显示全部楼层
当kl口线为1时,什么都不做。没有什么意义。
回复

使用道具 举报

ID:342911 发表于 2020-5-26 19:57 | 显示全部楼层
等待用户松开按键

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

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

使用道具 举报

ID:239611 发表于 2020-5-26 20:15 | 显示全部楼层
等待按键释放,当按键一直按下,K1==0,循环等待;当按键释放,K1==1, 结束循环。
回复

使用道具 举报

ID:307407 发表于 2020-5-26 21:00 | 显示全部楼层
按键在按下的时候有大约几个毫秒的抖动,
回复

使用道具 举报

ID:760179 发表于 2020-5-26 21:19 来自手机 | 显示全部楼层
当k1值不为零时,跳出循环
回复

使用道具 举报

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会一直闪。
回复

使用道具 举报

ID:452950 发表于 2020-5-26 21:28 | 显示全部楼层
当K1等于0时循环,当K1等于1时跳出循环。
回复

使用道具 举报

ID:579397 发表于 2020-5-26 21:31 | 显示全部楼层
等待按键释放
回复

使用道具 举报

ID:761989 发表于 2020-5-26 21:34 | 显示全部楼层
最后这个while就是 检测按键k1是否被释放 的作用
回复

使用道具 举报

ID:761989 发表于 2020-5-26 21:36 | 显示全部楼层
最后这个while就是 检测按键k1是否被释放 的作用
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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