按键K1.控制4个流水灯轮流闪烁。按键按下一次换一个灯闪烁。现在遇到的问题是:我按下按键的判断时间跟灯闪烁的延时时间一样。例如,我把灯的闪烁改成1s一次,按键就也会跟着变成要按1s才会换下个灯亮。我把判断按键放进延时,然后在有按键按下时让他延时一下。但是我一加下面这个注释123的延时。就会导致整个delay02的时间延长,从而导致灯的闪烁不符合我要的时间。求大神给个解决让按键判断时间跟灯闪烁延时时间分开的法子。
#include<reg52.h>
sbit K1=P1^0;
sbit L1=P1^4;
sbit L2=P1^5;
sbit L3=P1^6;
sbit L4=P1^7;
unsigned char i,j,k,a,b,c,d,;
void delay02s()
{
unsigned char i,j,k;
for(i=20;i>0;i--)
for(j=20;j>0;j--)
for(k=248;k>0;k--)//;
{
if(K1==0)
{
a++;
if(a==4)
{
a=0;
}
for(b=10;b>0;b--)//1
for(c=40;c>0;c--)//2
for(d=248;d>0;d--);//3.一加这个延时就会导致整个延时变长。
return;//程序运行到这里会马上跳回主函数。
}
}
}
void main()
{
a=0;
while(1)
{
if(a==0)
{
L4=1;//初始化其他灯的状态,保持只有一个灯闪烁,其他灭。
L1=~L1;
delay02s();
}
if(a==1)
{
L1=1;
L2=~L2;
if(K==1){
delay02s();}
}
if(a==2)
{
L2=1;
L3=~L3;
delay02s();
}
if(a==3)
{
L3=1;
L4=~L4;
delay02s();
}
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
void main()
{
unsigned char shift=0x11;
while(1)
{
if(k1==1)//按一下按钮,马上放开
{
if(shift==0)shift=0x11;
P1=shift;
delay20ms();
shift<<=1;
}
}
}
可以试试上面的,delay20ms,自己写。
用参数传递解决,xx表示多少个20MS,在delay02s(u8 num)函数里面再加个for(;num > 0; num --){把你程序包含在里面},同时提醒你一下,你是空函数,不需要返回
一周热门 更多>