找回密码
 立即注册

QQ登录

只需一步,快速开始

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

一个看似简单的按键问题,却怎么都弄不明白

[复制链接]
跳转到指定楼层
楼主
ID:1005338 发表于 2022-8-7 21:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想检测KEY键按下4次后,就打开LED灯,程序如下:
        for(i=4;i>0;i--)          //按KEY键4次
        {
                delay_ms(800);
                while(KEY==1);             
                i--;
        }

但程序运行非常不稳定,实际KEY键可能按下2次或者3次,就打开LED了,延时800ms的参数调整为500或者1000或者2000,都是这样。

求高手指点,这到底是为什么?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1005338 发表于 2022-8-8 10:07 | 只看该作者
早上刚睡醒想明白了,自己回一下吧,我这个循环中用了两次:i--,所以只按2下开关就达到4次效果
回复

使用道具 举报

板凳
ID:123289 发表于 2022-8-9 10:11 | 只看该作者
还不错,自己能找到问题。
回复

使用道具 举报

地板
ID:811253 发表于 2022-8-10 16:39 | 只看该作者
这个还有问题吧,试一下长时间按着不放是不是会一次就着了。
回复

使用道具 举报

5#
ID:1042823 发表于 2022-8-24 16:17 | 只看该作者
你这个用if判断不是更加吗?但是要注意消抖
回复

使用道具 举报

6#
ID:372932 发表于 2022-8-27 13:52 来自手机 | 只看该作者
这种程在实际应用中没有意义whlie等待松手这个其它事都别干了。
回复

使用道具 举报

7#
ID:59202 发表于 2022-8-28 19:47 | 只看该作者
在for循环语句中严禁手工修改循环计数变量这是必须严格遵守的规定啊,会造成不可预知的错误的,而且从你的程序看出来你的c语言基础很差啊,还需要好好修炼学习
回复

使用道具 举报

8#
ID:170318 发表于 2022-8-29 08:46 | 只看该作者
换种思维方式实现该功能吧
回复

使用道具 举报

9#
ID:189206 发表于 2022-8-29 16:35 | 只看该作者
用了两次i--,
回复

使用道具 举报

10#
ID:712493 发表于 2022-8-29 20:52 | 只看该作者
xxxevery 发表于 2022-8-28 19:47
在for循环语句中严禁手工修改循环计数变量这是必须严格遵守的规定啊,会造成不可预知的错误的,而且从你的 ...

能说下这个规定出处?另能说明下为什会造成不可预知的错误?这个for循环每个语句执行都是串行的,又不是并行,没超那个计数范围有什么危险?话说那个变量超了范围可以使用?
回复

使用道具 举报

11#
ID:16671 发表于 2022-8-29 22:04 | 只看该作者
for中有i--  while中有加了i--,引起
回复

使用道具 举报

12#
ID:59202 发表于 2022-8-29 22:54 | 只看该作者
在林锐博士的《高质量c++/c编程指南》里有讲到,因为for语句中的循环计数变量的控制是编译器自动生成的语句,如果我们手动又去控制循环计数变量的值就有很大可能与编译器产生的语句有冲突,造成死循环或系统崩溃等现象
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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