求 51 单片机,某IO口为低电平时,才能执行程序

下面是电路图和程序:
目前程序:按依次按下SW1-SW2-SW3,D1-D2-D3 依次常亮,最后D6亮,顺序错 D5亮。
我想在此程序上增加2个功能:
1. K1 为低电平时, D4 常亮, 此时 K1 为低电平时(如K1为高电平,程序不工作),此程序才能工作。

2. K1为低电平变为高电平时,D4 灭。程序恢复为初始状态。
帮忙的朋友帮写一下,谢谢

#include <reg52.h> //包含单片机寄存器的头文件
#define uint unsigned int
#define uchar unsigned char
sbit D1=P1^0;
sbit D2=P1^1;
sbit D3=P1^2;
sbit D4=P1^3;
sbit D5=P1^5;
sbit D6=P1^7;
sbit SW1=P3^4;
sbit SW2=P3^5;
sbit SW3=P3^6;
sbit SW4=P3^7;
sbit K1=P3^3;
//--------------------------------------------
void delay(int x) //函数功能:延时一段时间
{
int i;
while(x--)for(i=115;i>0;i--);
}
//--------------------------------------------
void main()
{
D1=D2=D3=D5=D6=1; //关闭

while(1)
{
//------------------------------------------------------------------------
D1=D2=D3=1; //关闭
while(1)
{
while((SW1==1)&&(SW2==1)&&(SW3==1)&&(SW4==1)); //等待按键
delay(10); //延时
if((SW1==0)||(SW2==0)||(SW3==0)||(SW4==0))break; //有任意一个按键,就跳出循环
}
if (SW1==0)
{
D1=0;while(SW1==0); //D1亮、等待释放
}
else
{
D5=0;while((SW2==0)||(SW3==0)||(SW4==0)); //D5亮、等待释放
}
//------------------------------------------------------------------------
D1=D2=D3=1; //关闭
while(1)
{
while((SW1==1)&&(SW2==1)&&(SW3==1)&&(SW4==1)); //等待按键
delay(10);
if((SW1==0)||(SW2==0)||(SW3==0)||(SW4==0))break; //有任意一个按键,就跳出循环 //加上一个延时
}
if (SW2 == 0)
{
D2=0;while(SW2==0); //D2亮、等待释放
}
else
{
D5=0;while((SW1==0)||(SW3==0)||(SW4==0)); //D5亮、等待释放
}

//------------------------------------------------------------------------
D1=D2=D3=1; //关闭
while(1)
{
while((SW1==1)&&(SW2==1)&&(SW3==1)&&(SW4==1)); //等待按键
delay(10);
if((SW1==0)||(SW2==0)||(SW3==0)||(SW4==0))break; //有任意一个按键,就跳出循环 //加上一个延时
}
if (SW3==0)
{
D3=0;while(SW4==0);D6=0; //D3亮、等待释放、D6亮
}
else
{D5 =0;while((SW1==0)||(SW2==0)||(SW3==0));} //D5亮、等待释放
//------------------------------------------------------------------------
}
}

第1个回答  2014-08-02
#include <reg52.h> //包含单片机寄存器的头文件
#define uint unsigned int
#define uchar unsigned char
#define u16 unsigned int
#define u8 unsigned char

sfr WDTRST=0xa6;
sbit D1=P1^0;
sbit D2=P1^1;
sbit D3=P1^2;
sbit D4=P1^3;
sbit D5=P1^5;
sbit D6=P1^7;
sbit SW1=P3^4;
sbit SW2=P3^5;
sbit SW3=P3^6;
sbit SW4=P3^7;
sbit K1=P3^3;

//--------------------------------------------
void delay(int x) //函数功能:延时一段时间
{
int i;
while(x--)for(i=115;i>0;i--);
}

//--------------------------------------------
void main()
{
D1=D2=D3=D5=D6=1; //关闭
while(1)//K1为高不运行程序
{
if(K1==0)
{
delay(20);
if(K1==0)//为低运行
{
break;
}
}
}
TMOD=0x01;
TH0=-1000/256;
TL0=-1000%256;
EA=1;
ET0=1;
TR0=1;

while(1)
{
//------------------------------------------------------------------------
D1=D2=D3=1; //关闭
while(1)
{
while((SW1==1)&&(SW2==1)&&(SW3==1)&&(SW4==1)); //等待按键
delay(10); //延时
if((SW1==0)||(SW2==0)||(SW3==0)||(SW4==0))break; //有任意一个按键,就跳出循环
}
if (SW1==0)
{
D1=0;while(SW1==0); //D1亮、等待释放
}
else
{
D5=0;while((SW2==0)||(SW3==0)||(SW4==0)); //D5亮、等待释放
}
//------------------------------------------------------------------------
D1=D2=D3=1; //关闭
while(1)
{
while((SW1==1)&&(SW2==1)&&(SW3==1)&&(SW4==1)); //等待按键
delay(10);
if((SW1==0)||(SW2==0)||(SW3==0)||(SW4==0))break; //有任意一个按键,就跳出循环 //加上一个延时
}
if (SW2 == 0)
{
D2=0;while(SW2==0); //D2亮、等待释放
}
else
{
D5=0;while((SW1==0)||(SW3==0)||(SW4==0)); //D5亮、等待释放
}

//------------------------------------------------------------------------
D1=D2=D3=1; //关闭
while(1)
{
while((SW1==1)&&(SW2==1)&&(SW3==1)&&(SW4==1)); //等待按键
delay(10);
if((SW1==0)||(SW2==0)||(SW3==0)||(SW4==0))break; //有任意一个按键,就跳出循环 //加上一个延时
}
if (SW3==0)
{
D3=0;while(SW4==0);D6=0; //D3亮、等待释放、D6亮
}
else
{D5 =0;while((SW1==0)||(SW2==0)||(SW3==0));} //D5亮、等待释放
//------------------------------------------------------------------------

}
}

void time0()interrupt 1
{
if(!K1)
{
D4=0;
}
else
{
D4=1;
WDTRST=0x1e;//软件复位
WDTRST=0xe1;
while(1);
}
}本回答被提问者采纳
第2个回答  2014-08-02
这程序是我编写的。追问

是去年你给编的,用着可好了。谢谢

相似回答