找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 863|回复: 6
收起左侧

奇怪C语言程序问题,条件不成立了为什么老在循环,那出错了?

[复制链接]
ID:475031 发表于 2022-6-13 12:43 | 显示全部楼层 |阅读模式
KEY1是个指示灯
KEY2是个按钮开关
每扫描按钮开关按15下后,指示灯闪一下,
但下面代码下载单片机测试,按了几下按钮后,也加了延时消抖,没有按到15下,
指示灯就一直交替闪,它不跳出了,不往下面代码走了。
z=0;都清零了。运行一次。就不会再满足z==15这个条件了,
就不会在第一个IF语句里循环了。不知道为什么、。太奇怪了


void main()
{        
        KEY1=1;
        while(1)
        {
               
//////////老在这段循环///////////////
if(z==15)        
{
KEY1=0;
delayms(300);300毫秒延时
KEY1=1;
delay1s(1);//1秒延时
z=0;
}
////////////////////////////////

if(KEY2==0)
        {
        delayms(10);
        if(KEY2==0)
    {
z++;
delayms(100);                                                                 
}
}
}
}

回复

使用道具 举报

ID:426861 发表于 2022-6-13 14:39 | 显示全部楼层
先把下面的给屏蔽了,只保留你要测试的,一点一点测试
回复

使用道具 举报

ID:1015275 发表于 2022-6-13 14:44 | 显示全部楼层
是不是因为z没有初始化
另外两个if语句是不是得上下颠倒一下
小白瞎说的
回复

使用道具 举报

ID:213173 发表于 2022-6-13 14:44 | 显示全部楼层
要有按键松手检测
void main()
{        
        KEY1=1;
        while(1)
        {
                if(z==15)
                {
                        z=0;
                        KEY1=0;
                        delayms(300);//300毫秒延时
                        KEY1=1;
//                        delay1s(1);//1秒延时
                }
                if(KEY2==0)
                {
                        delayms(10);
                        if(KEY2==0)
                        {
                                z++;
//                                delayms(100);
                                while(!KEY2);
                        }
                }
        }
}
回复

使用道具 举报

ID:844772 发表于 2022-6-13 15:17 | 显示全部楼层
程序不全,单纯这些,不应该出现你说反复亮灯的问题。
回复

使用道具 举报

ID:1034355 发表于 2022-6-13 15:21 来自手机 | 显示全部楼层
没有初始化
回复

使用道具 举报

ID:475031 发表于 2022-6-13 16:46 | 显示全部楼层
wulin 发表于 2022-6-13 14:44
要有按键松手检测
void main()
{        

你这可以。解决了我的问题。谢谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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