51单片机一键控制一个LED,每按一下按键LED闪烁一种频率,共闪烁三种频率.有好的答案加

2024-10-31 05:38:11
推荐回答(4个)
回答1:

#include

unsigned char n = 0;

sbit key = P3^4;
sbit led = P1^0;

void delay()
{
unsigned int i, j;
for(i = 0; i < 100; i++) for(j = 0; j < 500; j++);
}

void readkey(void)
{
unsigned char i, j;
if(!key) {
for(i = 0; i < 10; i++)
for(j = 0; j < 120; j++); //延时消抖
if(!key) {
while(!key); //等待按键释放
n++;
n %= 4; //n = 0~3
}
}
}

main()
{
while(1) {
switch(n) {
case 0: led = 1; readkey(); break; //熄灭
case 1: delay(); readkey(); //慢速闪烁
case 2: delay(); readkey(); //中速闪烁
case 3: delay(); readkey(); led = ~led; //快速闪烁
}
}
}

回答2:

在在校大学生吧?自己写吧。
一个子程序负责按键检测和计数:int KeyPressScan(void );
在程序里定义一个按键计数,KeyPressCnt,初始化为0,每按下一次+1,
if(4== KeyPressCnt) KeyPressCnt =0;
第一次按下返回1,第二次按下返回2,第三次按下返回3,第试次按下返回0;

另一个子程序负责检查当前的KeyPressCnt,并按相应值闪灯即可。

很简单的,相信你自己就可以搞定。

在检测按键次数的时候注意,要等按键松开后才算一次按键!

回答3:

#include
#define uchar unsigned char
sbit key=P3^4;
sbit led=P1^0;
uchar timeCnt=0;
void delay( unsigned int t)
{
uchar i,j;
for(i=t;i>0;i--)
for(j=250;j>0;j--);
}

void shanshuo1()
{
led=0;
delay(500);
led=1;
delay(500);
}

void shanshuo2()
{
led=0;
delay(1000);
led=1;
delay(1000);
}

void shanshuo3()
{
led=0;
delay(1500);
led=1;
delay(1500);
}
void main()
{
while(1)
{
if(key==0)
{
timeCnt++;
if(timeCnt==4) timeCnt=0;
}
if(timeCnt==1) shanshuo1();
if(timeCnt==2) shanshuo2();
if(timeCnt==3) shanshuo3();
}
}

回答4:

你好!
   是c语言还是汇编,私信说明一下