#define data_pin 2 //data_pin 1-го регистра #define st_pin 3 //latch_pin общий #define sh_pin 4 //clock_pin 1-го регистра #define data_pin2 5 //data_pin 2-го регистра #define sh_pin2 6 //clock_pin 2-го регистра byte pic0[8] { 0b01111111, 0b10111111, 0b11011111, 0b11101111, 0b11110111, 0b11111011, 0b11111101, 0b11111110 }; //массив pic0 не трогаем, по нему отключаются логические единицы на сроках byte pic[8] { 0b10111011, 0b11101110, 0b00000000, 0b10111011, 0b11101110, 0b00000000, 0b10111011, 0b11101110 }; //в этом массиве создаем картинку построчно, единицы обозначают зажженные светодиоды, нули - погашенные byte cifra[10][8] { { B00001110, B00011011, B00011011, B00011011, B00011011, B00011011, B00001110, B00000000 }, { B00000010, B00000110, B00001110, B00000110, B00000110, B00000110, B00000110, B00000000 }, { B00001110, B00011011, B00000011, B00000110, B00001100, B00011000, B00011111, B00000000 }, { B00001110, B00011011, B00000011, B00001110, B00000011, B00011011, B00001110, B00000000 }, { B00000011, B00000111, B00001111, B00011011, B00011111, B00000011, B00000011, B00000000 }, { B00011111, B00011000, B00011110, B00000011, B00000011, B00011011, B00001110, B00000000 }, { B00001110, B00011011, B00011000, B00011110, B00011011, B00011011, B00001110, B00000000 }, { B00011111, B00000011, B00000110, B00001100, B00001100, B00001100, B00001100, B00000000 }, { B00001110, B00011011, B00011011, B00001110, B00011011, B00011011, B00001110, B00000000 }, { B00001110, B00011011, B00011011, B00001111, B00000011, B00011011, B00001110, B00000000 }, }; //в этом массиве хранятся изображния цифр void setup() { //включаем передачу данных по последовательному порту Serial.begin(9600); //задаем режим OUTPUT ( выход ) for ( int i = 2; i < 7; i++) { pinMode(i, OUTPUT); } } void loop() { //output(массив с изображением); if (Serial.available() > 0) { //ожидание доступных данных в com порте int cif = Serial.read() - '0'; //считывние данных из com порта output(cifra[cif]); //вывод цифры } obnulenie(); } void obnulenie() { //в этом блоке гаснет вся матрица, при необходимости - использовать digitalWrite(st_pin, 0); shiftOut(data_pin, sh_pin, MSBFIRST, 0b11111111); shiftOut(data_pin2, sh_pin2, MSBFIRST, 0b00000000); digitalWrite(st_pin, 1); } void output(byte picture[8]) { //в этом блоке осуществляется вывод изображения на экран длительностью в 1 секунду (125*8мс) for (int kadr = 0; kadr < 125; kadr++) { for (int i = 7; i > -1; i--) { //в этом цикле осуществляется вывод изображения, хранящегося в массиве ( выводится в обратном порядке чтобы изображение было в нормальной ориентации, при необходимости поменять на for (int i=0; i<8; i++)) digitalWrite(st_pin, 0); shiftOut(data_pin, sh_pin, MSBFIRST, pic0[i]); shiftOut(data_pin2, sh_pin2, MSBFIRST, picture[i]); digitalWrite(st_pin, 1); delay(1); } } }