找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2320|回复: 3
收起左侧

请教个跳出循环问题

[复制链接]
ID:65643 发表于 2014-11-6 08:00 | 显示全部楼层 |阅读模式
当按某个 按键后,对应 mode 运行,但接着按 其它按键时,不能立刻跳出循环。例:按 S3 后执行 mode3();, 再按 S1 不会立刻执行 mode。#include <reg52.h>
#define uchar unsigned  char
#define uint  unsigned  int

sbit s1 = P1^0;
sbit s2 = P1^1;
sbit s3 = P1^2;
sbit led1 = P0^0;
sbit led2 = P0^1;
sbit led3 = P0^2;

void delay (uint x)   // 延时 1ms (晶振 12M)
{
    unsigned char a,b,c;
    for(c=x; c>0; c--)
        for(b=142; b>0; b--)
            for(a=2; a>0; a--);
}

void mode1()
{
            while(1)
            {
                        led1 = ~led1;
                        delay(200);

if((s1==0)||(s2==0)||(s3==0))break;
            }
}

void mode2()
{
            while(1)
            {
                        led1 = 0;
                        delay(500);
                        led2 = 0;
                        delay(500);
                        led1 = 1;
                        led2 = 1;
                        delay(500);

if((s1==0)||(s2==0)||(s3==0))break;
            }
}

void mode3()
{
            while(1)
            {
                        led1 = 0;
                        delay(500);
                        led2 = 0;
                        delay(500);
                        led3 = 0;
                        delay(500);
                        led1 = 1;
                        led2 = 1;
                        led3 = 1;
                        delay(500);

if((s1==0)||(s2==0)||(s3==0))break;
            }
}

void mian(void)
{
            P1 = 0xff;
            P0 = 0xff;

while(1)
            {
                        if (s1 == 0)
                        {
                                    delay(5);
                                    if (s1 == 0)
                                                mode1();
                        }

if (s2 == 0)
                        {
                                    delay(5);
                                    if (s2 == 0)
                                                mode2();
                        }

if (s3 == 0)
                        {
                                    delay(5);
                                    if (s3 == 0)
                                                mode3();
                        }
            }
}
回复

使用道具 举报

ID:65643 发表于 2014-11-6 10:57 | 显示全部楼层
明白 发表于 2014-11-6 09:51
因为while(1)循环的时间太长

怎么解决这问题呢?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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