|
這個程序現(xiàn)在可以通過按鍵k3切換led模式,但是只能在上一個模式程序執(zhí)行完之后才可以通過按鍵K3切換到下一個模式,我想知道如才可在上一個led模式執(zhí)行的時候,按下按鍵k3就可以切換到下一個模式,希望大家?guī)臀腋囊幌鲁绦颍疫想知道為什么按鍵的延時不能再中斷中使用,我中斷的程序關(guān)于對按鍵的處理對嗎,謝謝。
#include<reg52.h>
sbit beep=P1^5;
sbit k1=P3^1;
sbit k3=P3^2;
sbit led=P2^0;
#define N P2
typedef unsigned int ui;
typedef unsigned char uc;
uc num;
void delay(ui i)
{
while(i--);
}
void fmq()//蜂鳴器
{
beep=~beep;
delay(100);
}
void led0()//流水燈
{
N=0xff;
N=0xfe;
fmq();
delay(50000);
N=0xfd;
fmq();
delay(50000);
N=0xfb;
fmq();
delay(50000);
N=0xf7;
fmq();
delay(50000);
N=0xef;
fmq();
delay(50000);
N=0xdf;
fmq();
delay(50000);
N=0xbf;
fmq();
delay(50000);
N=0x7f;
fmq();
delay(50000);
}
void led1()//led對稱亮
{
N=0x7e;
fmq();
delay(35000);
delay(35000);
N=0xbd;
fmq();
delay(35000);
delay(35000);
N=0xdb;
fmq();
delay(35000);
delay(35000);
N=0xe7;
fmq();
delay(35000);
delay(35000);
N=0xe7;
fmq();
delay(35000);
delay(35000);
N=0xdb;
fmq();
delay(35000);
delay(35000);
N=0xbd;
fmq();
delay(35000);
delay(35000);
N=0x7e;
fmq();
delay(35000);
delay(35000);
}
void led2()//led分別單雙數(shù)亮
{
N=0xaa;
fmq();
delay(50000);
delay(50000);
N=0x55;
fmq();
delay(50000);
delay(50000);
}
void led3()//通過按鍵k1使led一個一個亮
{
ui i;
N=0xfe;
while(1)
{
if(k1==0)
{
delay(1000);
if(k1==0)
{
switch(i)
{
case(0):N=0xfd;fmq();i++;break;
case(1):N=0xfb;fmq();i++;break;
case(2):N=0xf7;fmq();i++;break;
case(3):N=0xef;fmq();i++;break;
case(4):N=0xdf;fmq();i++;break;
case(5):N=0xbf;fmq();i++;break;
case(6):N=0x7f;fmq();i++;break;
case(7):N=0xff;fmq();i++;break;
}
while(!k1);
}
}
if(i==8)
{
i=0;
break;
}
}
}
void init()//中斷初始化
{
IT0=1;
EX0=1;
EA=1;
}
void main()
{
init();
while(1);
}
void init0() interrupt 0//中斷程序
{
EX0=0;
delay(1000);
{
while(1)
{
if(k3==0)
{
EX1=0;
switch(num)
{
case(0):led0();num++;break;
case(1):led1();num++;break;
case(2):led2();num++;break;
case(3):led3();num++;break;
case(4):num=0;N=0x00;break;
}
}
while(!k3);
}
}
}
|
|