一、实验任务
该实验的具体任务及要求为在面包板上接4个LED灯,通过程序实现LED依次闪烁并按当前模式循环,并要求按键按下一次,LED灯依次闪烁方向改变,即 LED灯反序循环闪烁。
二、硬件设计
通过电流的方向行连接各元件的正负极,为保障电路安全加上适当电阻值的电阻,再利用按键开关来控制LED灯循环闪烁的方向改变。
三、软件设计
const int KEY=3;
const int LED1=8;
const int LED2=9;
const int LED3=10;
const int LED4=11;
int KEY_count=0;
void setup(){
pinMode(KEY,INPUT_PULLUP);
pinMode(LED1,OUTPUT);
pinMode(LED2,OUTPUT);
pinMode(LED3,OUTPUT);
pinMode(LED4,OUTPUT);
}
void loop()
{
ScanKey();
switch(KEY_count){
case 0:
{digitalWrite(LED1,LOW);
digitalWrite(LED2,LOW);
digitalWrite(LED3,LOW);
digitalWrite(LED4,LOW);
}
break;
case 1:{
digitalWrite(LED1,HIGH);
delay(100);
digitalWrite(LED1,!digitalRead(LED1));
digitalWrite(LED2,HIGH);
delay(100);
digitalWrite(LED2,!digitalRead(LED2));
digitalWrite(LED3,HIGH);
delay(100);
digitalWrite(LED3,!digitalRead(LED3));
digitalWrite(LED4,HIGH);
delay(100);
digitalWrite(LED4,!digitalRead(LED4));
delay(100);}
break;
case 2:{
digitalWrite(LED4,HIGH);
delay(100);
digitalWrite(LED4,!digitalRead(LED4));
digitalWrite(LED3,HIGH);
delay(100);
digitalWrite(LED3,!digitalRead(LED3));
digitalWrite(LED2,HIGH);
delay(100);
digitalWrite(LED2,!digitalRead(LED2));
digitalWrite(LED1,HIGH);
delay(100);
digitalWrite(LED1,!digitalRead(LED1));
delay(100);}
break;
default:
{digitalWrite(LED1,LOW);
digitalWrite(LED2,LOW);
digitalWrite(LED3,LOW);
digitalWrite(LED4,LOW);
KEY_count=0;}
}
}
void ScanKey(){
if (digitalRead(KEY)==LOW){
delay(10);
if(digitalRead(KEY)==LOW)
{KEY_count++;
while(digitalRead(KEY)==LOW);}
}
}
先定义按键,LED灯的引脚及按键计数。
然后编写,当按下按键时,改程序会发生改变的程序。
接下来,利用switch和default,来完成相关LED依次循环闪烁的程序代码。
最后处理按键计数及去抖动的代码。
四、结果分析
1、电路实物
电路实物如图所示,供电电压为五V,电源端有五个输出接口,分别连接到四个LED灯和开关,以此来控制电路并供电。
电路图如图所示:
2、结果分析
不按按键时四个灯全灭,按下第一次按键时,LED灯依次闪烁并按统一顺序循环闪烁,按下第二次按键时,LED灯闪烁次序与第一次相反形成反序闪烁并按照当下闪烁模式循环闪烁,以此类推,每按下一次按键时LED灯循环闪烁方向改变。