求 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亮、等待释放
//------------------------------------------------------------------------
}
} 展开
目前程序:按依次按下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亮、等待释放
//------------------------------------------------------------------------
}
} 展开
2个回答
展开全部
#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);
}
}
#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);
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询