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

下面是电路图和程序:目前程序:按依次按下SW1-SW2-SW3,D1-D2-D3依次常亮,最后D6亮,顺序错D5亮。我想在此程序上增加2个功能:1.K1为低电平时,D4常... 下面是电路图和程序:
目前程序:按依次按下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亮、等待释放
//------------------------------------------------------------------------
}
}
展开
 我来答
赢皮大8
2014-08-02 · TA获得超过889个赞
知道小有建树答主
回答量:991
采纳率:75%
帮助的人:517万
展开全部
#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);
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做而论道
高能答主

2014-08-02 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
这程序是我编写的。
追问
是去年你给编的,用着可好了。谢谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式