Рассматриваются способ подключения нескольких семи-сегментных сегментных индикаторов и более 10 кнопок непосредственно к плате Ардуино. Способ — "общая шина" и "коммутационная матрица".
Подключение одного семи-сегментного индикатора к Ардуино
Рис. 1. Схема подключения одного семи-сегментного индикатора к Ардуино
Общая шина
Подключение нескольких цифровых семи-сегментных индикаторов.
Рис. 1. Схема подключения четырёх семи-сегментных индикаторов к Ардуино
fhfyiu
int a = 2; int b = 3; int c = 4; int d = 5; int e = 6; int f = 7; int g = 8;
int s1 = 9; int s2 = 10; int s3 = 11; int s4 = 12;
int l1, l2, l3, l4;
int n = 0;
byte segment(int n) {
byte x;
switch (n) {
case 0:
x = 0b11111110;
break;
case 1:
x = 0b00011000;
break;
case 2:
x = 0b01101111;
break;
case 3:
x = 0b00111111;
break;
case 4:
x = 0b10011011;
break;
case 5:
x = 0b10110111;
break;
case 6:
x = 0b11110111;
break;
case 7:
x = 0b00011110;
break;
case 8:
x = 0b11111111;
break;
case 9:
x = 0b10111111;
break;
}
return x;
}
void led(int y) {
int z1, z2, z3, z4;
z1 = y % 10;
z4 = y / 1000;
z3 = (y - 1000 * z4) / 100;
z2 = (y - 1000 * z4 - 100 * z3) / 10;
l1 = segment(z1);
l2 = segment(z2);
l3 = segment(z3);
l4 = segment(z4);
}
void setup() {
Serial.begin(9600);
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
}
void loop() {
n++;
if (n == 10000) {
n = 0;
}
led(n);
delay(100);
}
void yield() {
PORTD = l1;
digitalWrite(g, l1 & 1);
digitalWrite(s1, HIGH);
delayMicroseconds(500);
digitalWrite(s1, LOW);
PORTD = l2;
digitalWrite(g, l2 & 1);
digitalWrite(s2, HIGH);
delayMicroseconds(500);
digitalWrite(s2, LOW);
PORTD = l3;
digitalWrite(g, l3 & 1);
digitalWrite(s3, HIGH);
delayMicroseconds(500);
digitalWrite(s3, LOW);
PORTD = l4;
digitalWrite(g, l4 & 1);
digitalWrite(s4, HIGH);
delayMicroseconds(500);
digitalWrite(s4, LOW);
}
Подключение нескольких цифровых семи-сегментных индикаторов.
int a = 2; int b = 3; int c = 4; int d = 5; int e = 6; int f = 7; int g = 8;
int s1 = 9; int s2 = 10; int s3 = 11; int s4 = 12;
int l1, l2, l3, l4;
byte x[] = {0b11111110, 0b00011000, 0b01101111, 0b00111111, 0b10011011,
0b10110111, 0b11110111, 0b00011110, 0b11111111, 0b10111111
};
int dutyH = 10;
int dutyL = 500;
int n = 0;
void led(int y) {
int z1, z2, z3, z4;
z1 = y % 10;
z4 = y / 1000;
z3 = (y - 1000 * z4) / 100;
z2 = (y - 1000 * z4 - 100 * z3) / 10;
l1 = x[z1];
l2 = x[z2];
l3 = x[z3];
l4 = x[z4];
}
void setup() {
Serial.begin(9600);
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
}
void loop() {
n++;
if (n == 10000) {
n = 0;
}
led(n);
delay(100);
}
void yield() {
PORTD = l1;
digitalWrite(g, l1 & 1);
digitalWrite(s1, HIGH);
delayMicroseconds(dutyH);
digitalWrite(s1, LOW);
delayMicroseconds(dutyL);
PORTD = l2;
digitalWrite(g, l2 & 1);
digitalWrite(s2, HIGH);
delayMicroseconds(dutyH);
digitalWrite(s2, LOW);
delayMicroseconds(dutyL);
PORTD = l3;
digitalWrite(g, l3 & 1);
digitalWrite(s3, HIGH);
delayMicroseconds(dutyH);
digitalWrite(s3, LOW);
delayMicroseconds(dutyL);
PORTD = l4;
digitalWrite(g, l4 & 1);
digitalWrite(s4, HIGH);
delayMicroseconds(dutyH);
digitalWrite(s4, LOW);
delayMicroseconds(dutyL);
}
Подключение нескольких цифровых семи-сегментных индикаторов.
int a = 2; int b = 3; int c = 4; int d = 5; int e = 6; int f = 7; int g = 8;
int s[] = {9, 10, 11, 12};
int l[4];
byte x[] = {0b11111110, 0b00011000, 0b01101111, 0b00111111, 0b10011011,
0b10110111, 0b11110111, 0b00011110, 0b11111111, 0b10111111
};
int dutyH = 50;
int dutyL = 500;
int n = 0;
void led(int y) {
int z1, z2, z3, z4;
z1 = y % 10;
z4 = y / 1000;
z3 = (y - 1000 * z4) / 100;
z2 = (y - 1000 * z4 - 100 * z3) / 10;
l[0] = x[z1];
l[1] = x[z2];
l[2] = x[z3];
l[3] = x[z4];
}
void setup() {
Serial.begin(9600);
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
for (int i = 0; i < 4; i++) {
pinMode(s[i], OUTPUT);
digitalWrite(s[i], LOW);
}
}
void loop() {
n++;
if (n == 10000) {
n = 0;
}
led(n);
delay(100);
}
void yield() {
for (int i = 0; i < 4; i++) {
PORTD = l[i];
digitalWrite(g, l[i] & 1);
digitalWrite(s[i], HIGH);
delayMicroseconds(dutyH);
digitalWrite(s[i], LOW);
delayMicroseconds(dutyL);
}
}
Подключение нескольких цифровых семи-сегментных индикаторов.
Коммутационная матрица
Подключение четырёх кнопок