a.
#include <LedControl.h>
#include <MsTimer2.h>
#define u8 unsigned char
#define u16 unsigned int
u8 led_pin=4;
int pinInterrupt = 2;
u16 count = 0,t=100,jud;
int DIN = 0;
int CS = 1;
int CLK = 3;
LedControl lc=LedControl(DIN,CLK,CS,1);
byte num_0[8]={B00000000,B00000000,B01111100,B01000100,B01111100,B00000000,B00000000,B00000000},
num_1[8]={B00000000,B00000000,B00000000,B01111110,B01111110,B00000000,B00000000,B00000000},
num_2[8]={B00000000,B00000000,B01110100,B01010100,B01010100,B01011100,B00000000,B00000000},
num_3[8]={B00000000,B00000000,B01010100,B01010100,B01010100,B01111100,B00000000,B00000000},
num_4[8]={B00000000,B00000000,B00011100,B00010000,B00010000,B01111100,B00000000,B00000000},
num_5[8]={B00000000,B00000000,B01011100,B01010100,B01010100,B00100100,B00000000,B00000000};
u8 k,flag_1=0;
void onChange()
{
delay(50);
flag_1 = ~flag_1;
}
void wait()
{
while(flag_1);
}
void setup()
{
lc.shutdown(0,false);
lc.clearDisplay(0);
for(led_pin=4;led_pin<14;led_pin++)
{
pinMode(led_pin,OUTPUT);
}
// put your setup code here, to run once:
pinMode(pinInterrupt,INPUT);
attachInterrupt(digitalPinToInterrupt(pinInterrupt),onChange,CHANGE);
MsTimer2::set(100,onTimer);
MsTimer2::start();
lc.shutdown(0,false);
lc.setIntensity(0,3);
lc.clearDisplay(0);
}
u8 a;
void loop()
{
for(led_pin=4;led_pin<14;led_pin++)
{
wait();
digitalWrite(led_pin,LOW);
delay(analogRead(A0));
}
if(led_pin==14)
led_pin=4;
for(led_pin=4;led_pin<14;led_pin++)
{
wait();
digitalWrite(led_pin,HIGH);
delay(analogRead(A0));
}
}
void onTimer()
{
count=analogRead(A0);
count=count/200;
switch(count)
{
case 5:
lc.clearDisplay(0);
for (k=0;k<8;k++)
lc.setRow(0,k,num_5[k]); break;
case 4:
lc.clearDisplay(0);
for (k=0;k<8;k++)
lc.setRow(0,k,num_4[k]); break;
case 3:
lc.clearDisplay(0);
for (k=0;k<8;k++)
lc.setRow(0,k,num_3[k]); break;
case 2:
lc.clearDisplay(0);
for (k=0;k<8;k++)
lc.setRow(0,k,num_2[k]); break;
case 1:
lc.clearDisplay(0);
for (k=0;k<8;k++)
lc.setRow(0,k,num_1[k]); break;
case 0:
lc.clearDisplay(0);
for (k=0;k<8;k++)
lc.setRow(0,k,num_0[k]); break;
}}
望采纳,谢谢!修改完毕!
#
include < LedControl.h > #include < MsTimer2.h > #define u8 unsigned char# define u16 unsigned int
u8 led_pin = 4;
int pinInterrupt = 2;
u16 count = 0, t = 100, jud;
int DIN = 0;
int CS = 1;
int CLK = 3;
LedControl lc = LedControl(DIN, CLK, CS, 1);
byte num_0[8] = {
B00000000, B00000000, B01111100, B01000100, B01111100, B00000000, B00000000, B00000000
},
num_1[8] = {
B00000000, B00000000, B00000000, B01111110, B01111110, B00000000, B00000000, B00000000
},
num_2[8] = {
B00000000, B00000000, B01110100, B01010100, B01010100, B01011100, B00000000, B00000000
},
num_3[8] = {
B00000000, B00000000, B01010100, B01010100, B01010100, B01111100, B00000000, B00000000
},
num_4[8] = {
B00000000, B00000000, B00011100, B00010000, B00010000, B01111100, B00000000, B00000000
},
num_5[8] = {
B00000000, B00000000, B01011100, B01010100, B01010100, B00100100, B00000000, B00000000
};
u8 k, flag_1 = 0;
void onChange()
{
delay(50);
flag_1 = ~flag_1;
}
void wait()
{
while(flag_1);
}
void setup()
{
lc.shutdown(0, false);
lc.clearDisplay(0);
for(led_pin = 4; led_pin < 14; led_pin++)
{
pinMode(led_pin, OUTPUT);
}
// put your setup code here, to run once:
pinMode(pinInterrupt, INPUT);
attachInterrupt(digitalPinToInterrupt(pinInterrupt), onChange, CHANGE);
MsTimer2::set(100, onTimer);
MsTimer2::start();
lc.shutdown(0, false);
lc.setIntensity(0, 3);
lc.clearDisplay(0);
}
u8 a;
void loop()
{
for(led_pin = 4; led_pin < 14; led_pin++)
{
wait();
digitalWrite(led_pin, LOW);
delay(analogRead(A0));
}
if(led_pin == 14) led_pin = 4;
for(led_pin = 4; led_pin < 14; led_pin++)
{
wait();
digitalWrite(led_pin, HIGH);
delay(analogRead(A0));
}
}
void onTimer()
{
count = analogRead(A0);
count = count / 200;
switch(count)
{
case 5:
lc.clearDisplay(0);
for(k = 0; k < 8; k++) lc.setRow(0, k, num_5[k]);
break;
case 4:
lc.clearDisplay(0);
for(k = 0; k < 8; k++) lc.setRow(0, k, num_4[k]);
break;
case 3:
lc.clearDisplay(0);
for(k = 0; k < 8; k++) lc.setRow(0, k, num_3[k]);
break;
case 2:
lc.clearDisplay(0);
for(k = 0; k < 8; k++) lc.setRow(0, k, num_2[k]);
break;
case 1:
lc.clearDisplay(0);
for(k = 0; k < 8; k++) lc.setRow(0, k, num_1[k]);
break;
case 0:
lc.clearDisplay(0);
for(k = 0; k < 8; k++) lc.setRow(0, k, num_0[k]);
break;
}
}