Вт окт 04, 2016 05:31:10
unsigned char i;
unsigned char j;
unsigned char n;
int Max7219_pinCLK = 10; // назначение пина тактовых импульсов (у ATM328 это 16-й вывод)
int Max7219_pinCS = 9; // назначение пина импульсов загрузки (у ATM328 это 15-й вывод)
int Max7219_pinDIN = 8; // назначение пина вывода данных (у ATM328 это 14-й вывод)
unsigned char disp1[33][8] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // рисунок сердца по кадрам (только данные)
0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00,
0x00, 0x80, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00,
0x40, 0x80, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00,
0x60, 0x80, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00,
0x60, 0x90, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00,
0x60, 0x90, 0x88, 0x40, 0x40, 0x00, 0x00, 0x00,
0x60, 0x90, 0x88, 0x44, 0x40, 0x00, 0x00, 0x00,
0x60, 0x90, 0x88, 0x44, 0x44, 0x00, 0x00, 0x00,
0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x00, 0x00,
0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x10, 0x00,
0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x10, 0x20,
0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x10, 0x60,
0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x90, 0x60,
0x60, 0x90, 0x88, 0x44, 0x44, 0x88, 0x90, 0x60 // рисунок сердца по кадрам (только данные)
};
unsigned char disp2[16][2] = {
0x05, 0x40, // рисунок сердца по строкам (адрес строки, данные)
0x04, 0x40,
0x03, 0x80,
0x02, 0x80,
0x01, 0x40,
0x01, 0x60,
0x02, 0x90,
0x03, 0x88,
0x04, 0x44,
0x05, 0x44,
0x06, 0x08,
0x07, 0x10,
0x08, 0x20,
0x08, 0x60,
0x07, 0x90,
0x06, 0x88, // рисунок сердца по строкам (адрес строки, данные)
};
void Write_Max7219_byte(unsigned char DATA) { // подпрограмма записи байта DATA от старшего бита
unsigned char i;
digitalWrite(Max7219_pinCS, LOW);
for (i = 8; i >= 1; i--) {
digitalWrite(Max7219_pinCLK, LOW);
digitalWrite(Max7219_pinDIN, DATA & 0x80);
DATA = DATA << 1;
digitalWrite(Max7219_pinCLK, HIGH);
}
}
void Write_Max7219(unsigned char address, unsigned char dat) { // подпрограмма записи байта адреса и байта данных
digitalWrite(Max7219_pinCS, LOW); // установка сигнала CS (пин 9) в логический 0
for (n = 1; n < 5; n++) { // повторяем для 4-х матричных модулей
Write_Max7219_byte(address); // запись байта адреса в индикатор (в регистр сдвига)
Write_Max7219_byte(dat); // запись байта данных в индикатор (в регистр сдвига)
}
digitalWrite(Max7219_pinCS, HIGH); // установка сигнала CS (пин 9) в логическую 1 (защёлкивание)
}
void Init_MAX7219(void) { // подпрограмма инициализации MAX7219
Write_Max7219(0x09, 0x00); // регистр управления режимом декодирования данных - отключено
Write_Max7219(0x0a, 0x03); // регистр настройки яркости - 7/32 (меньше четверти)
Write_Max7219(0x0b, 0x07); // регистр количества активных индикаторов - максимум (8)
Write_Max7219(0x0c, 0x01); // режим работы: 0 - shutdown, 1 - включено
Write_Max7219(0x0f, 0x00); // регистр тестирования - не отображать тест
}
void setup() { // установка пинов в режим вывода
pinMode(Max7219_pinCLK, OUTPUT);
pinMode(Max7219_pinCS, OUTPUT);
pinMode(Max7219_pinDIN, OUTPUT);
delay(50);
Init_MAX7219(); // обращение к подпрограмме инициализации
}
void loop() {
//рисуем сердце по кадрам
for (j = 0; j < 17; j++) {
for (i = 1; i < 9; i++)
Write_Max7219(i, disp1[j][i - 1]);
delay(100);
}
delay(500);
//все стираем
for (i = 1; i < 9; i++) { // i для 4-х модулей - строка снизу вверх (сердца на боку)
Write_Max7219(i, 0x00);
delay(100);
}
delay(500);
//рисуем сердце по строкам
for (j = 0; j < 16; j++) {
Write_Max7219(disp2[j][0], disp2[j][1]);
delay(100);
}
delay(500);
//все закрашиваем
for (i = 1; i < 9; i++) { // i для сердца - столбец справа налево
Write_Max7219(i, 0xFF);
delay(100);
}
//все стираем
for (i = 1; i < 9; i++) {
Write_Max7219(i, 0x00);
delay(100);
}
//пауза
delay(800); // вроде в миллисекундах
}
// based on an orginal sketch by Arduino forum member "danigom"
// h t t p://forum.arduino.cc/index.php?action=profile;u=188950
// Русифицированная "бегущая строка" для светодиодных матриц 8х8 с чипом MAX7219.
// Вот скетч, который слепил "danigom" (см выше).
// А вот кириллица, которая в длинном массиве хранится, в скетче, который слепил "danigom".
// А вот Николай, которому мёду с утра не давай, а дай лишь добавить вот эту кириллицу,
// которая в длинном массиве хранится, к скетчу, который слепил "danigom"...
// Русифицированная версия называется "Велосипед". На странице обсуждения мне сказали, что я изобретаю велосипед
// и я подумал: зачем строке пешком бежать? - пусть едет на велосипеде :) Обсуждали тут:
// h t t p://arduino.ru/forum/programmirovanie/i-snova-pro-begushchuyu-stroku-na-svetodiodnykh-matritsakh-dlya-novichkov
// В строке scrollText можно использовать русские и английские буквы и другие стандартные символы, вводимые
// с русскоязычной клавиатуры, в любой последовательности.
#include <avr/pgmspace.h>
#include <LedControl.h>
const int numDevices = 4; // number of MAX7219s used (количество соединённых матриц 8х8)
const long scrollDelay = 75; // adjust scrolling speed (задержка сдвига текста в мс)
const unsigned char interval = 1; // интервал между символами (в исходном варианте было только число,
// на 1 превышающее ширину символа)
unsigned long bufferLong [16] = {0};
LedControl lc=LedControl(8,10,9,numDevices); // Номера выводов платы Arduino Uno, на которые поступают
// сигналы DIN, CLK, CS (можно выбрать другие)
const unsigned char scrollText[] PROGMEM = {
" -=* The quick brown fox still jumps, но это её проблемы, а пока съешь же ещё этих мягких французских булок, да выпей чаю. А если не хватит, закуси круассанами, лягушачьими лапками, e.t.c... *=- "};
void setup(){
for (int x=0; x<numDevices; x++){
lc.shutdown(x,false); //The MAX72XX is in power-saving mode on startup
lc.setIntensity(x,3); // Set the brightness to default value
lc.clearDisplay(x); // and clear the display
}
}
void loop(){
scrollMessage(scrollText);
// scrollFont(); // тестовая подпрограмма вывода всего шрифта
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const unsigned char font5x7[] PROGMEM = { // Numeric Font Matrix (Arranged as 7x font data + 1x kerning data)
B00000000, //Space (Char 0x20) // Массив шрифта переделан на 8х, чтобы высота текста была 8 точек,
B00000000, // вместо 7, при этомпоявилась возможность правильно расположить
B00000000, // символы с "подстрочными" элементами (в т.ч. английские);
B00000000, // также вместо 1x kerning data можно задать свой интервал.
B00000000,
B00000000,
B00000000,
B00000000,
5 + interval,
B10000000, //!
B10000000,
B10000000,
B10000000,
B00000000,
B00000000,
B10000000,
B00000000,
1 + interval,
B10100000, //"
B10100000,
B10100000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
3 + interval,
B01010000, //#
B01010000,
B11111000,
B01010000,
B11111000,
B01010000,
B01010000,
B00000000,
5 + interval,
B00100000, //$
B01111000,
B10100000,
B01110000,
B00101000,
B11110000,
B00100000,
B00000000,
5 + interval,
B11000000, //%
B11001000,
B00010000,
B00100000,
B01000000,
B10011000,
B00011000,
B00000000,
5 + interval,
B01100000, //&
B10010000,
B10100000,
B01000000,
B10101000,
B10010000,
B01101000,
B00000000,
5 + interval,
B11000000, //'
B01000000,
B10000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
2 + interval,
B00100000, //(
B01000000,
B10000000,
B10000000,
B10000000,
B01000000,
B00100000,
B00000000,
3 + interval,
B10000000, //)
B01000000,
B00100000,
B00100000,
B00100000,
B01000000,
B10000000,
B00000000,
3 + interval,
B00000000, //*
B00100000,
B10101000,
B01110000,
B10101000,
B00100000,
B00000000,
B00000000,
5 + interval,
B00000000, //+
B00100000,
B00100000,
B11111000,
B00100000,
B00100000,
B00000000,
B00000000,
5 + interval,
B00000000, //,
B00000000,
B00000000,
B00000000,
B00000000,
B11000000,
B01000000,
B10000000,
2 + interval,
B00000000, //-
B00000000,
B00000000,
B11111000,
B00000000,
B00000000,
B00000000,
B00000000,
5 + interval,
B00000000, //.
B00000000,
B00000000,
B00000000,
B00000000,
B11000000,
B11000000,
B00000000,
2 + interval,
B00000000, ///
B00001000,
B00010000,
B00100000,
B01000000,
B10000000,
B00000000,
B00000000,
5 + interval,
B01110000, //0
B10001000,
B10011000,
B10101000,
B11001000,
B10001000,
B01110000,
B00000000,
5 + interval,
B01000000, //1
B11000000,
B01000000,
B01000000,
B01000000,
B01000000,
B11100000,
B00000000,
3 + interval,
B01110000, //2
B10001000,
B00001000,
B00010000,
B00100000,
B01000000,
B11111000,
B00000000,
5 + interval,
B11111000, //3
B00010000,
B00100000,
B00010000,
B00001000,
B10001000,
B01110000,
B00000000,
5 + interval,
B00010000, //4
B00110000,
B01010000,
B10010000,
B11111000,
B00010000,
B00010000,
B00000000,
5 + interval,
B11111000, //5
B10000000,
B11110000,
B00001000,
B00001000,
B10001000,
B01110000,
B00000000,
5 + interval,
B00110000, //6
B01000000,
B10000000,
B11110000,
B10001000,
B10001000,
B01110000,
B00000000,
5 + interval,
B11111000, //7
B10001000,
B00001000,
B00010000,
B00100000,
B00100000,
B00100000,
B00000000,
5 + interval,
B01110000, //8
B10001000,
B10001000,
B01110000,
B10001000,
B10001000,
B01110000,
B00000000,
5 + interval,
B01110000, //9
B10001000,
B10001000,
B01111000,
B00001000,
B00010000,
B01100000,
B00000000,
5 + interval,
B00000000, //:
B11000000,
B11000000,
B00000000,
B11000000,
B11000000,
B00000000,
B00000000,
2 + interval,
B00000000, //;
B11000000,
B11000000,
B00000000,
B11000000,
B01000000,
B10000000,
B00000000,
2 + interval,
B00010000, //<
B00100000,
B01000000,
B10000000,
B01000000,
B00100000,
B00010000,
B00000000,
4 + interval,
B00000000, //=
B00000000,
B11111000,
B00000000,
B11111000,
B00000000,
B00000000,
B00000000,
5 + interval,
B10000000, //>
B01000000,
B00100000,
B00010000,
B00100000,
B01000000,
B10000000,
B00000000,
4 + interval,
B01110000, //?
B10001000,
B00001000,
B00010000,
B00100000,
B00000000,
B00100000,
B00000000,
5 + interval,
B01110000, //@
B10001000,
B00001000,
B01101000,
B10101000,
B10101000,
B01110000,
B00000000,
5 + interval,
B01110000, //A
B10001000,
B10001000,
B10001000,
B11111000,
B10001000,
B10001000,
B00000000,
5 + interval,
B11110000, //B
B10001000,
B10001000,
B11110000,
B10001000,
B10001000,
B11110000,
B00000000,
5 + interval,
B01110000, //C
B10001000,
B10000000,
B10000000,
B10000000,
B10001000,
B01110000,
B00000000,
5 + interval,
B11100000, //D
B10010000,
B10001000,
B10001000,
B10001000,
B10010000,
B11100000,
B00000000,
5 + interval,
B11111000, //E
B10000000,
B10000000,
B11110000,
B10000000,
B10000000,
B11111000,
B00000000,
5 + interval,
B11111000, //F
B10000000,
B10000000,
B11110000,
B10000000,
B10000000,
B10000000,
B00000000,
5 + interval,
B01110000, //G
B10001000,
B10000000,
B10111000,
B10001000,
B10001000,
B01111000,
B00000000,
5 + interval,
B10001000, //H
B10001000,
B10001000,
B11111000,
B10001000,
B10001000,
B10001000,
B00000000,
5 + interval,
B11100000, //I
B01000000,
B01000000,
B01000000,
B01000000,
B01000000,
B11100000,
B00000000,
3 + interval,
B00111000, //J
B00010000,
B00010000,
B00010000,
B00010000,
B10010000,
B01100000,
B00000000,
5 + interval,
B10001000, //K
B10010000,
B10100000,
B11000000,
B10100000,
B10010000,
B10001000,
B00000000,
5 + interval,
B10000000, //L
B10000000,
B10000000,
B10000000,
B10000000,
B10000000,
B11111000,
B00000000,
5 + interval,
B10001000, //M
B11011000,
B10101000,
B10101000,
B10001000,
B10001000,
B10001000,
B00000000,
5 + interval,
B10001000, //N
B10001000,
B11001000,
B10101000,
B10011000,
B10001000,
B10001000,
B00000000,
5 + interval,
B01110000, //O
B10001000,
B10001000,
B10001000,
B10001000,
B10001000,
B01110000,
B00000000,
5 + interval,
B11110000, //P
B10001000,
B10001000,
B11110000,
B10000000,
B10000000,
B10000000,
B00000000,
5 + interval,
B01110000, //Q
B10001000,
B10001000,
B10001000,
B10101000,
B10010000,
B01101000,
B00000000,
5 + interval,
B11110000, //R
B10001000,
B10001000,
B11110000,
B10100000,
B10010000,
B10001000,
B00000000,
5 + interval,
B01111000, //S
B10000000,
B10000000,
B01110000,
B00001000,
B00001000,
B11110000,
B00000000,
5 + interval,
B11111000, //T
B00100000,
B00100000,
B00100000,
B00100000,
B00100000,
B00100000,
B00000000,
5 + interval,
B10001000, //U
B10001000,
B10001000,
B10001000,
B10001000,
B10001000,
B01110000,
B00000000,
5 + interval,
B10001000, //V
B10001000,
B10001000,
B10001000,
B10001000,
B01010000,
B00100000,
B00000000,
5 + interval,
B10001000, //W
B10001000,
B10001000,
B10101000,
B10101000,
B10101000,
B01010000,
B00000000,
5 + interval,
B10001000, //X
B10001000,
B01010000,
B00100000,
B01010000,
B10001000,
B10001000,
B00000000,
5 + interval,
B10001000, //Y
B10001000,
B10001000,
B01010000,
B00100000,
B00100000,
B00100000,
B00000000,
5 + interval,
B11111000, //Z
B00001000,
B00010000,
B00100000,
B01000000,
B10000000,
B11111000,
B00000000,
5 + interval,
B11100000, //[
B10000000,
B10000000,
B10000000,
B10000000,
B10000000,
B11100000,
B00000000,
3 + interval,
B00000000, //(Backward Slash)
B10000000,
B01000000,
B00100000,
B00010000,
B00001000,
B00000000,
B00000000,
5 + interval,
B11100000, //]
B00100000,
B00100000,
B00100000,
B00100000,
B00100000,
B11100000,
B00000000,
3 + interval,
B00100000, //^
B01010000,
B10001000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
5 + interval,
B00000000, //_
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B11111000,
B00000000,
5 + interval,
B10000000, //`
B01000000,
B00100000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
3 + interval,
B00000000, //a
B00000000,
B01110000,
B00001000,
B01111000,
B10001000,
B01111000,
B00000000,
5 + interval,
B10000000, //b
B10000000,
B10110000,
B11001000,
B10001000,
B10001000,
B11110000,
B00000000,
5 + interval,
B00000000, //c
B00000000,
B01110000,
B10001000,
B10000000,
B10001000,
B01110000,
B00000000,
5 + interval,
B00001000, //d
B00001000,
B01101000,
B10011000,
B10001000,
B10001000,
B01111000,
B00000000,
5 + interval,
B00000000, //e
B00000000,
B01110000,
B10001000,
B11111000,
B10000000,
B01110000,
B00000000,
5 + interval,
B00110000, //f
B01001000,
B01000000,
B11100000,
B01000000,
B01000000,
B01000000,
B00000000,
5 + interval,
B00000000, //g
B00000000,
B01110000,
B10001000,
B10001000,
B01111000,
B00001000,
B01110000,
5 + interval,
B10000000, //h
B10000000,
B10110000,
B11001000,
B10001000,
B10001000,
B10001000,
B00000000,
5 + interval,
B01000000, //i
B00000000,
B11000000,
B01000000,
B01000000,
B01000000,
B11100000,
B00000000,
3 + interval,
B00010000, //j
B00000000,
B00110000,
B00010000,
B00010000,
B10010000,
B01100000,
B00000000,
4 + interval,
B10000000, //k
B10000000,
B10010000,
B10100000,
B11000000,
B10100000,
B10010000,
B00000000,
4 + interval,
B11000000, //l
B01000000,
B01000000,
B01000000,
B01000000,
B01000000,
B11100000,
B00000000,
3 + interval,
B00000000, //m
B00000000,
B11010000,
B10101000,
B10101000,
B10001000,
B10001000,
B00000000,
5 + interval,
B00000000, //n
B00000000,
B10110000,
B11001000,
B10001000,
B10001000,
B10001000,
B00000000,
5 + interval,
B00000000, //o
B00000000,
B01110000,
B10001000,
B10001000,
B10001000,
B01110000,
B00000000,
5 + interval,
B00000000, //p
B00000000,
B11110000,
B10001000,
B10001000,
B11110000,
B10000000,
B10000000,
5 + interval,
B00000000, //q
B00000000,
B01101000,
B10011000,
B10011000,
B01101000,
B00001000,
B00001000,
5 + interval,
B00000000, //r
B00000000,
B10110000,
B11001000,
B10000000,
B10000000,
B10000000,
B00000000,
5 + interval,
B00000000, //s
B00000000,
B01110000,
B10000000,
B01110000,
B00001000,
B11110000,
B00000000,
5 + interval,
B01000000, //t
B01000000,
B11100000,
B01000000,
B01000000,
B01001000,
B00110000,
B00000000,
5 + interval,
B00000000, //u
B00000000,
B10001000,
B10001000,
B10001000,
B10011000,
B01101000,
B00000000,
5 + interval,
B00000000, //v
B00000000,
B10001000,
B10001000,
B10001000,
B01010000,
B00100000,
B00000000,
5 + interval,
B00000000, //w
B00000000,
B10001000,
B10101000,
B10101000,
B10101000,
B01010000,
B00000000,
5 + interval,
B00000000, //x
B00000000,
B10001000,
B01010000,
B00100000,
B01010000,
B10001000,
B00000000,
5 + interval,
B00000000, //y
B00000000,
B10001000,
B10001000,
B10001000,
B01111000,
B00001000,
B01110000,
5 + interval,
B00000000, //z
B00000000,
B11111000,
B00010000,
B00100000,
B01000000,
B11111000,
B00000000,
5 + interval,
B00100000, //{
B01000000,
B01000000,
B10000000,
B01000000,
B01000000,
B00100000,
B00000000,
3 + interval,
B10000000, //|
B10000000,
B10000000,
B10000000,
B10000000,
B10000000,
B10000000,
B00000000,
1 + interval,
B10000000, //}
B01000000,
B01000000,
B00100000,
B01000000,
B01000000,
B10000000,
B00000000,
3 + interval,
B00000000, //~
B00000000,
B00000000,
B01101000,
B10010000,
B00000000,
B00000000,
B00000000,
5 + interval,
B01100000, // (Char 0x7F)
B10010000,
B10010000,
B01100000,
B00000000,
B00000000,
B00000000,
B00000000,
5 + interval,
B01010000, // Ё русская (Char D0x01)
B11111000,
B10000000,
B11110000,
B10000000,
B10000000,
B11111000,
B00000000,
5 + interval,
B00111000, // А русская (Char D0x90)
B01001000,
B10001000,
B10001000,
B11111000,
B10001000,
B10001000,
B00000000,
5 + interval,
B11111000, // Б русская (Char D0x91)
B10001000,
B10000000,
B11110000,
B10001000,
B10001000,
B11110000,
B00000000,
5 + interval,
B11110000, // В русская (Char D0x92)
B10001000,
B10001000,
B11110000,
B10001000,
B10001000,
B11110000,
B00000000,
5 + interval,
B11111000, // Г русская (Char D0x93)
B10001000,
B10000000,
B10000000,
B10000000,
B10000000,
B10000000,
B00000000,
5 + interval,
B00111000, // Д русская (Char D0x94)
B01001000,
B01001000,
B01001000,
B01001000,
B01001000,
B11111100,
B10000100,
6 + interval,
B11111000, // Е русская (Char D0x95)
B10000000,
B10000000,
B11110000,
B10000000,
B10000000,
B11111000,
B00000000,
5 + interval,
B10101000, // Ж русская (Char D0x96)
B10101000,
B01110000,
B00100000,
B01110000,
B10101000,
B10101000,
B00000000,
5 + interval,
B01110000, // З русская (Char D0x97)
B10001000,
B00001000,
B00110000,
B00001000,
B10001000,
B01110000,
B00000000,
5 + interval,
B10001000, // И русская (Char D0x98)
B10001000,
B10011000,
B10101000,
B11001000,
B10001000,
B10001000,
B00000000,
5 + interval,
B10101000, // Й русская (Char D0x99)
B10001000,
B10011000,
B10101000,
B11001000,
B10001000,
B10001000,
B00000000,
5 + interval,
B10001000, // К русская (Char D0x9a)
B10010000,
B10100000,
B11000000,
B10100000,
B10010000,
B10001000,
B00000000,
5 + interval,
B00011000, // Л русская (Char D0x9b)
B00101000,
B01001000,
B01001000,
B01001000,
B01001000,
B10001000,
B00000000,
5 + interval,
B10000100, // М русская (Char D0x9c)
B11001100,
B10110100,
B10000100,
B10000100,
B10000100,
B10000100,
B00000000,
6 + interval,
B10001000, // Н русская (Char D0x9d)
B10001000,
B10001000,
B11111000,
B10001000,
B10001000,
B10001000,
B00000000,
5 + interval,
B01110000, // О русская (Char D0x9e)
B10001000,
B10001000,
B10001000,
B10001000,
B10001000,
B01110000,
B00000000,
5 + interval,
B11111000, // П русская (Char D0x9f)
B10001000,
B10001000,
B10001000,
B10001000,
B10001000,
B10001000,
B00000000,
5 + interval,
B11110000, // Р русская (Char D0xA0)
B10001000,
B10001000,
B10001000,
B11110000,
B10000000,
B10000000,
B00000000,
5 + interval,
B01110000, // С русская (Char D0xA1)
B10001000,
B10000000,
B10000000,
B10000000,
B10001000,
B01110000,
B00000000,
5 + interval,
B11111000, // Т русская (Char D0xA2)
B10101000,
B00100000,
B00100000,
B00100000,
B00100000,
B00100000,
B00000000,
5 + interval,
B10001000, // У русская (Char D0xA3)
B10001000,
B10001000,
B10001000,
B01010000,
B00100000,
B11000000,
B00000000,
5 + interval,
B00100000, // Ф русская (Char D0xA4)
B01110000,
B10101000,
B10101000,
B01110000,
B00100000,
B00100000,
B00000000,
5 + interval,
B10001000, // Х русская (Char D0xA5)
B10001000,
B01010000,
B00100000,
B01010000,
B10001000,
B10001000,
B00000000,
5 + interval,
B10010000, // Ц русская (Char D0xA6)
B10010000,
B10010000,
B10010000,
B10010000,
B10010000,
B11111000,
B00001000,
5 + interval,
B10001000, // Ч русская (Char D0xA7)
B10001000,
B10001000,
B10001000,
B01111000,
B00001000,
B00001000,
B00000000,
5 + interval,
B10001000, // Ш русская (Char D0xA8)
B10101000,
B10101000,
B10101000,
B10101000,
B10101000,
B11111000,
B00000000,
5 + interval,
B10001000, // Щ русская (Char D0xA9)
B10101000,
B10101000,
B10101000,
B10101000,
B10101000,
B11111100,
B00000100,
6 + interval,
B11000000, // Ъ русская (Char D0xAA)
B01000000,
B01000000,
B01110000,
B01001000,
B01001000,
B01110000,
B00000000,
5 + interval,
B10001000, // Ы русская (Char D0xAB)
B10001000,
B10001000,
B11101000,
B10011000,
B10011000,
B11101000,
B00000000,
6 + interval,
B10000000, // Ь русская (Char D0xAC)
B10000000,
B10000000,
B11100000,
B10010000,
B10010000,
B11100000,
B00000000,
4 + interval,
B01110000, // Э русская (Char D0xAD)
B10001000,
B00001000,
B01111000,
B00001000,
B10001000,
B01110000,
B00000000,
5 + interval,
B10011000, // Ю русская (Char D0xAE)
B10100100,
B10100100,
B11100100,
B10100100,
B10100100,
B10011000,
B00000000,
6 + interval,
B01111000, // Я русская (Char D0xAF)
B10001000,
B10001000,
B01111000,
B00101000,
B01001000,
B10001000,
B00000000,
5 + interval,
B00000000, // а русская (Char D0xB0)
B00000000,
B01110000,
B00001000,
B01111000,
B10001000,
B01111000,
B00000000,
5 + interval,
B00111000, // б русская (Char D0xB1)
B01000000,
B10110000,
B11001000,
B10001000,
B10001000,
B01110000,
B00000000,
5 + interval,
B00000000, // в русская (Char D0xB2)
B00000000,
B11110000,
B10001000,
B11110000,
B10001000,
B11110000,
B00000000,
5 + interval,
B00000000, // г русская (Char D0xB3)
B00000000,
B01110000,
B00001000,
B01110000,
B10000000,
B01110000,
B00000000,
5 + interval,
B11100000, // д русская (Char D0xB4)
B00010000,
B01101000,
B10011000,
B10001000,
B10001000,
B01110000,
B00000000,
5 + interval,
B00000000, // е русская (Char D0xB5)
B00000000,
B01110000,
B10001000,
B11111000,
B10000000,
B01110000,
B00000000,
5 + interval,
B00000000, // ж русская (Char D0xB6)
B00000000,
B10101000,
B10101000,
B01110000,
B10101000,
B10101000,
B00000000,
5 + interval,
B00000000, // з русская (Char D0xB7)
B00000000,
B01110000,
B10001000,
B00110000,
B10001000,
B01110000,
B00000000,
5 + interval,
B00000000, // и русская (Char D0xB8)
B00000000,
B10001000,
B10001000,
B10001000,
B10011000,
B01101000,
B00000000,
5 + interval,
B00010000, // й русская (Char D0xB9)
B00100000,
B10001000,
B10001000,
B10001000,
B10011000,
B01101000,
B00000000,
5 + interval,
B00000000, // к русская (Char D0xBA)
B00000000,
B10010000,
B10100000,
B11000000,
B10100000,
B10010000,
B00000000,
4 + interval,
B00000000, // л русская (Char D0xBB)
B00000000,
B00111000,
B01001000,
B01001000,
B01001000,
B10001000,
B00000000,
5 + interval,
B00000000, // м русская (Char D0xBC)
B00000000,
B10001000,
B11011000,
B10101000,
B10001000,
B10001000,
B00000000,
5 + interval,
B00000000, // н русская (Char D0xBD)
B00000000,
B10001000,
B10001000,
B11111000,
B10001000,
B10001000,
B00000000,
5 + interval,
B00000000, // о русская (Char D0xBE)
B00000000,
B01110000,
B10001000,
B10001000,
B10001000,
B01110000,
B00000000,
5 + interval,
B00000000, // п русская (Char D0xBF)
B00000000,
B10110000,
B11001000,
B10001000,
B10001000,
B10001000,
B00000000,
5 + interval,
B00000000, // р русская (Char D1x80)
B00000000,
B10110000,
B11001000,
B10001000,
B11001000,
B10110000,
B10000000,
5 + interval,
B00000000, // с русская (Char D1x81)
B00000000,
B01110000,
B10001000,
B10000000,
B10001000,
B01110000,
B00000000,
5 + interval,
B00000000, // т русская (Char D1x82)
B00000000,
B11010000,
B10101000,
B10101000,
B10101000,
B10101000,
B00000000,
5 + interval,
B00000000, // у русская (Char D1x83)
B00000000,
B10001000,
B01001000,
B00101000,
B00010000,
B00100000,
B01000000,
5 + interval,
B00000000, // ф русская (Char D1x84)
B00000000,
B00100000,
B01110000,
B10101000,
B10101000,
B01110000,
B00100000,
5 + interval,
B00000000, // х русская (Char D1x85)
B00000000,
B10001000,
B01010000,
B00100000,
B01010000,
B10001000,
B00000000,
5 + interval,
B00000000, // ц русская (Char D1x86)
B00000000,
B10010000,
B10010000,
B10010000,
B10010000,
B01101000,
B00001000,
5 + interval,
B00000000, // ч русская (Char D1x87)
B00000000,
B10010000,
B10010000,
B01110000,
B00010000,
B00010000,
B00000000,
4 + interval,
B00000000, // ш русская (Char D1x88)
B00000000,
B10001000,
B10101000,
B10101000,
B10101000,
B01110000,
B00000000,
5 + interval,
B00000000, // щ русская (Char D1x89)
B00000000,
B10001000,
B10101000,
B10101000,
B10101000,
B01110100,
B00000100,
6 + interval,
B00000000, // ъ русская (Char D1x8A)
B00000000,
B11000000,
B01000000,
B01110000,
B01001000,
B01110000,
B00000000,
5 + interval,
B00000000, // ы русская (Char D1x8B)
B00000000,
B10001000,
B10001000,
B11101000,
B10011000,
B11101000,
B00000000,
5 + interval,
B00000000, // ь русская (Char D1x8C)
B00000000,
B10000000,
B10000000,
B11100000,
B10010000,
B11100000,
B00000000,
4 + interval,
B00000000, // э русская (Char D1x8D)
B00000000,
B01110000,
B10001000,
B00111000,
B10001000,
B01110000,
B00000000,
5 + interval,
B00000000, // ю русская (Char D1x8E)
B00000000,
B10011000,
B10100100,
B11100100,
B10100100,
B10011000,
B00000000,
6 + interval,
B00000000, // я русская (Char D1x8F)
B00000000,
B01111000,
B10001000,
B01111000,
B00101000,
B11001000,
B00000000,
5 + interval,
B01010000, // ё русская (Char D1x91)
B00000000,
B01110000,
B10001000,
B11111000,
B10000000,
B01110000,
B00000000,
5 + interval,
};
void scrollFont() {
for (int counter=0x20;counter<0x83;counter++){
loadBufferLong(counter);
delay(200);
}
}
// Scroll Message
void scrollMessage(const unsigned char * messageString) {
int counter = 0;
int myChar = 0;
int CharRange = 0;
do {
// read back a char
myChar = pgm_read_byte_near(messageString + counter);
if (myChar < 0x20 || myChar > 0xbf) // байт не выводится, т.к. либо не включён в шрифт,
{
if (myChar == 0xd0 || myChar == 0xd1) // либо это первый байт русских символов
{
CharRange = myChar - 0xd0 + 1 ; // запоминается признак первого байта русских символов
}
}
else if (myChar == 0x80) // второй байт русского символа
{
myChar = myChar + 49 ; // код 0xd180 - буква р в UTF-8
if (myChar != 0 && CharRange ==2){loadBufferLong(myChar);
}
CharRange = 0 ; // признак обнуляется после вывода второго байта символа
}
else if (myChar == 0x81)
{
switch (CharRange) {
case 1: // код 0xd081 - буква Ё в UTF-8
myChar = myChar - 1 ;
break;
case 2: // код 0xd181 - буква с в UTF-8
myChar = myChar + 49 ;
break;
}
if (myChar != 0){loadBufferLong(myChar);
CharRange = 0 ;
}
}
else if (myChar > 0x81 && myChar < 0x90) // русские буквы т - я (0xd182 - 0xd18f в UTF-8)
{
myChar = myChar + 49 ;
if (myChar != 0){loadBufferLong(myChar);
CharRange = 0 ;
}
}
else if (myChar > 0x8f && myChar < 0xc0)
{
switch (CharRange) {
case 1: // русские буквы А - Я (0xd090 - 0xd0af в UTF-8)
myChar = myChar - 15 ; // и русские буквы а - п (0xd0b0 - 0xd0bf в UTF-8)
break;
case 2: // код 0xd191 - буква ё в UTF-8
myChar = myChar + 48 ;
break;
}
if (myChar != 0){loadBufferLong(myChar);
CharRange = 0 ;
}
}
else // английские буквы и прочие символы (0x20 - 0x7f в UTF-8)
{
if (myChar != 0){loadBufferLong(myChar);
CharRange = 0 ;
}
}
counter++;
}
while (myChar != 0);
}
// Load character into scroll buffer
void loadBufferLong(int ascii){
if (ascii >= 0x0020 && ascii <=0x00ff){
for (int a=0;a<8;a++){ // Loop 7 times for a 5x7 font
// Index into character table to get row data
unsigned long c = pgm_read_byte_near(font5x7 + ((ascii - 0x20) * 9) + a);
unsigned long x = bufferLong [a*2]; // Load current scroll buffer
x = x | c; // OR the new character onto end of current
bufferLong [a*2] = x; // Store in buffer
}
// Index into character table for kerning data
byte count = pgm_read_byte_near(font5x7 +((ascii - 0x20) * 9) + 8);
for (byte x=0; x<count;x++){
rotateBufferLong();
printBufferLong();
delay(scrollDelay);
}
}
}
// Rotate the buffer
void rotateBufferLong(){
for (int a=0;a<8;a++){ // Loop 7 times for a 5x7 font
unsigned long x = bufferLong [a*2]; // Get low buffer entry
byte b = bitRead(x,31); // Copy high order bit that gets lost in rotation
x = x<<1; // Rotate left one bit
bufferLong [a*2] = x; // Store new low buffer
x = bufferLong [a*2+1]; // Get high buffer entry
x = x<<1; // Rotate left one bit
bitWrite(x,0,b); // Store saved bit
bufferLong [a*2+1] = x; // Store new high buffer
}
}
// Display Buffer on LED matrix
void printBufferLong(){
for (int a=0;a<8;a++){ // Loop 7 times for a 5x7 font
unsigned long x = bufferLong [a*2+1]; // Get high buffer entry
byte y = x; // Mask off first character
lc.setRow(3,a,y); // Send row to relevent MAX7219 chip
x = bufferLong [a*2]; // Get low buffer entry
y = (x>>24); // Mask off second character
lc.setRow(2,a,y); // Send row to relevent MAX7219 chip
y = (x>>16); // Mask off third character
lc.setRow(1,a,y); // Send row to relevent MAX7219 chip
y = (x>>8); // Mask off forth character
lc.setRow(0,a,y); // Send row to relevent MAX7219 chip
}
}
Вт окт 04, 2016 23:06:52
Чт окт 06, 2016 06:13:41
Чт окт 06, 2016 18:28:19
Чт окт 06, 2016 21:06:59
Вс окт 09, 2016 08:04:26
// based on an orginal sketch by Arduino forum member "danigom"
// h t t p://forum.arduino.cc/index.php?action=profile;u=188950
// Русифицированная "бегущая строка" для светодиодных матриц 8х8 с чипом MAX7219.
// Вот скетч, который слепил "danigom" (см выше).
// А вот кириллица, которая в длинном массиве хранится, в скетче, который слепил "danigom".
// А вот Николай, которому мёду с утра не давай, а дай лишь добавить вот эту кириллицу,
// которая в длинном массиве хранится, к скетчу, который слепил "danigom"...
// Русифицированная версия называется "Велосипед V.1.01." На странице обсуждения мне сказали, что я изобретаю
// велосипед и я подумал: зачем строке пешком бежать? - пусть едет на велосипеде :) Обсуждали тут: h t t p://
// arduino.ru/forum/programmirovanie/i-snova-pro-begushchuyu-stroku-na-svetodiodnykh-matritsakh-dlya-novichkov
// В строке scrollText можно использовать русские и английские буквы и другие стандартные символы, вводимые
// с русскоязычной клавиатуры, в любой последовательности.
#include <avr/pgmspace.h>
#include <LedControl.h>
const int numDevices = 4; // number of MAX7219s used (количество соединённых матриц 8х8)
const long scrollDelay = 75; // adjust scrolling speed (задержка сдвига текста в мс)
const unsigned char interval = 1; // интервал между символами (в исходном варианте было только число,
// на 1 превышающее ширину символа)
unsigned long bufferLong [16] = {0};
LedControl lc=LedControl(8,10,9,numDevices); // Номера выводов платы Arduino Uno, на которые поступают
// сигналы DIN, CLK, CS (можно выбрать другие)
const unsigned char scrollText[] PROGMEM = {
" -=* ''Велосипед V.1.01.'' The quick brown fox still jumps, но это её проблемы, а пока съешь же ещё этих мягких французских булок, да выпей чаю. А если не хватит, закуси круассанами, лягушачьими лапками, e.t.c... *=- "};
void setup(){
for (int x=0; x<numDevices; x++){
lc.shutdown(x,false); //The MAX72XX is in power-saving mode on startup
lc.setIntensity(x,3); // Set the brightness to default value
lc.clearDisplay(x); // and clear the display
}
}
void loop(){
scrollMessage(scrollText);
// scrollFont(); // тестовая подпрограмма вывода всего шрифта
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const unsigned char font5x7[] PROGMEM = { // Numeric Font Matrix (Arranged as 7x font data + 1x kerning data)
B00000000, //Space (Char 0x20) // Массив шрифта переделан на 8х, чтобы высота текста была 8 точек,
B00000000, // вместо 7, при этом появилась возможность правильно расположить
B00000000, // символы с "подстрочными" элементами (в т.ч. английские);
B00000000, // также вместо 1x kerning data можно задать свой интервал.
B00000000,
B00000000,
B00000000,
B00000000,
5 + interval,
B10000000, //!
B10000000,
B10000000,
B10000000,
B00000000,
B00000000,
B10000000,
B00000000,
1 + interval,
B10100000, //"
B10100000,
B10100000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
3 + interval,
B01010000, //#
B01010000,
B11111000,
B01010000,
B11111000,
B01010000,
B01010000,
B00000000,
5 + interval,
B00100000, //$
B01111000,
B10100000,
B01110000,
B00101000,
B11110000,
B00100000,
B00000000,
5 + interval,
B11000000, //%
B11001000,
B00010000,
B00100000,
B01000000,
B10011000,
B00011000,
B00000000,
5 + interval,
B01100000, //&
B10010000,
B10100000,
B01000000,
B10101000,
B10010000,
B01101000,
B00000000,
5 + interval,
B11000000, //'
B01000000,
B10000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
2 + interval,
B00100000, //(
B01000000,
B10000000,
B10000000,
B10000000,
B01000000,
B00100000,
B00000000,
3 + interval,
B10000000, //)
B01000000,
B00100000,
B00100000,
B00100000,
B01000000,
B10000000,
B00000000,
3 + interval,
B00000000, //*
B00100000,
B10101000,
B01110000,
B10101000,
B00100000,
B00000000,
B00000000,
5 + interval,
B00000000, //+
B00100000,
B00100000,
B11111000,
B00100000,
B00100000,
B00000000,
B00000000,
5 + interval,
B00000000, //,
B00000000,
B00000000,
B00000000,
B00000000,
B11000000,
B01000000,
B10000000,
2 + interval,
B00000000, //-
B00000000,
B00000000,
B11111000,
B00000000,
B00000000,
B00000000,
B00000000,
5 + interval,
B00000000, //.
B00000000,
B00000000,
B00000000,
B00000000,
B11000000,
B11000000,
B00000000,
2 + interval,
B00000000, ///
B00001000,
B00010000,
B00100000,
B01000000,
B10000000,
B00000000,
B00000000,
5 + interval,
B01110000, //0
B10001000,
B10011000,
B10101000,
B11001000,
B10001000,
B01110000,
B00000000,
5 + interval,
B01000000, //1
B11000000,
B01000000,
B01000000,
B01000000,
B01000000,
B11100000,
B00000000,
3 + interval,
B01110000, //2
B10001000,
B00001000,
B00010000,
B00100000,
B01000000,
B11111000,
B00000000,
5 + interval,
B11111000, //3
B00010000,
B00100000,
B00010000,
B00001000,
B10001000,
B01110000,
B00000000,
5 + interval,
B00010000, //4
B00110000,
B01010000,
B10010000,
B11111000,
B00010000,
B00010000,
B00000000,
5 + interval,
B11111000, //5
B10000000,
B11110000,
B00001000,
B00001000,
B10001000,
B01110000,
B00000000,
5 + interval,
B00110000, //6
B01000000,
B10000000,
B11110000,
B10001000,
B10001000,
B01110000,
B00000000,
5 + interval,
B11111000, //7
B10001000,
B00001000,
B00010000,
B00100000,
B00100000,
B00100000,
B00000000,
5 + interval,
B01110000, //8
B10001000,
B10001000,
B01110000,
B10001000,
B10001000,
B01110000,
B00000000,
5 + interval,
B01110000, //9
B10001000,
B10001000,
B01111000,
B00001000,
B00010000,
B01100000,
B00000000,
5 + interval,
B00000000, //:
B11000000,
B11000000,
B00000000,
B11000000,
B11000000,
B00000000,
B00000000,
2 + interval,
B00000000, //;
B11000000,
B11000000,
B00000000,
B11000000,
B01000000,
B10000000,
B00000000,
2 + interval,
B00010000, //<
B00100000,
B01000000,
B10000000,
B01000000,
B00100000,
B00010000,
B00000000,
4 + interval,
B00000000, //=
B00000000,
B11111000,
B00000000,
B11111000,
B00000000,
B00000000,
B00000000,
5 + interval,
B10000000, //>
B01000000,
B00100000,
B00010000,
B00100000,
B01000000,
B10000000,
B00000000,
4 + interval,
B01110000, //?
B10001000,
B00001000,
B00010000,
B00100000,
B00000000,
B00100000,
B00000000,
5 + interval,
B01110000, //@
B10001000,
B00001000,
B01101000,
B10101000,
B10101000,
B01110000,
B00000000,
5 + interval,
B01110000, //A
B10001000,
B10001000,
B10001000,
B11111000,
B10001000,
B10001000,
B00000000,
5 + interval,
B11110000, //B
B10001000,
B10001000,
B11110000,
B10001000,
B10001000,
B11110000,
B00000000,
5 + interval,
B01110000, //C
B10001000,
B10000000,
B10000000,
B10000000,
B10001000,
B01110000,
B00000000,
5 + interval,
B11100000, //D
B10010000,
B10001000,
B10001000,
B10001000,
B10010000,
B11100000,
B00000000,
5 + interval,
B11111000, //E
B10000000,
B10000000,
B11110000,
B10000000,
B10000000,
B11111000,
B00000000,
5 + interval,
B11111000, //F
B10000000,
B10000000,
B11110000,
B10000000,
B10000000,
B10000000,
B00000000,
5 + interval,
B01110000, //G
B10001000,
B10000000,
B10111000,
B10001000,
B10001000,
B01111000,
B00000000,
5 + interval,
B10001000, //H
B10001000,
B10001000,
B11111000,
B10001000,
B10001000,
B10001000,
B00000000,
5 + interval,
B11100000, //I
B01000000,
B01000000,
B01000000,
B01000000,
B01000000,
B11100000,
B00000000,
3 + interval,
B00111000, //J
B00010000,
B00010000,
B00010000,
B00010000,
B10010000,
B01100000,
B00000000,
5 + interval,
B10001000, //K
B10010000,
B10100000,
B11000000,
B10100000,
B10010000,
B10001000,
B00000000,
5 + interval,
B10000000, //L
B10000000,
B10000000,
B10000000,
B10000000,
B10000000,
B11111000,
B00000000,
5 + interval,
B10001000, //M
B11011000,
B10101000,
B10101000,
B10001000,
B10001000,
B10001000,
B00000000,
5 + interval,
B10001000, //N
B10001000,
B11001000,
B10101000,
B10011000,
B10001000,
B10001000,
B00000000,
5 + interval,
B01110000, //O
B10001000,
B10001000,
B10001000,
B10001000,
B10001000,
B01110000,
B00000000,
5 + interval,
B11110000, //P
B10001000,
B10001000,
B11110000,
B10000000,
B10000000,
B10000000,
B00000000,
5 + interval,
B01110000, //Q
B10001000,
B10001000,
B10001000,
B10101000,
B10010000,
B01101000,
B00000000,
5 + interval,
B11110000, //R
B10001000,
B10001000,
B11110000,
B10100000,
B10010000,
B10001000,
B00000000,
5 + interval,
B01111000, //S
B10000000,
B10000000,
B01110000,
B00001000,
B00001000,
B11110000,
B00000000,
5 + interval,
B11111000, //T
B00100000,
B00100000,
B00100000,
B00100000,
B00100000,
B00100000,
B00000000,
5 + interval,
B10001000, //U
B10001000,
B10001000,
B10001000,
B10001000,
B10001000,
B01110000,
B00000000,
5 + interval,
B10001000, //V
B10001000,
B10001000,
B10001000,
B10001000,
B01010000,
B00100000,
B00000000,
5 + interval,
B10001000, //W
B10001000,
B10001000,
B10101000,
B10101000,
B10101000,
B01010000,
B00000000,
5 + interval,
B10001000, //X
B10001000,
B01010000,
B00100000,
B01010000,
B10001000,
B10001000,
B00000000,
5 + interval,
B10001000, //Y
B10001000,
B10001000,
B01010000,
B00100000,
B00100000,
B00100000,
B00000000,
5 + interval,
B11111000, //Z
B00001000,
B00010000,
B00100000,
B01000000,
B10000000,
B11111000,
B00000000,
5 + interval,
B11100000, //[
B10000000,
B10000000,
B10000000,
B10000000,
B10000000,
B11100000,
B00000000,
3 + interval,
B00000000, //(Backward Slash)
B10000000,
B01000000,
B00100000,
B00010000,
B00001000,
B00000000,
B00000000,
5 + interval,
B11100000, //]
B00100000,
B00100000,
B00100000,
B00100000,
B00100000,
B11100000,
B00000000,
3 + interval,
B00100000, //^
B01010000,
B10001000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
5 + interval,
B00000000, //_
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B11111000,
B00000000,
5 + interval,
B10000000, //`
B01000000,
B00100000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
3 + interval,
B00000000, //a
B00000000,
B01110000,
B00001000,
B01111000,
B10001000,
B01111000,
B00000000,
5 + interval,
B10000000, //b
B10000000,
B10110000,
B11001000,
B10001000,
B10001000,
B11110000,
B00000000,
5 + interval,
B00000000, //c
B00000000,
B01110000,
B10001000,
B10000000,
B10001000,
B01110000,
B00000000,
5 + interval,
B00001000, //d
B00001000,
B01101000,
B10011000,
B10001000,
B10001000,
B01111000,
B00000000,
5 + interval,
B00000000, //e
B00000000,
B01110000,
B10001000,
B11111000,
B10000000,
B01110000,
B00000000,
5 + interval,
B00110000, //f
B01001000,
B01000000,
B11100000,
B01000000,
B01000000,
B01000000,
B00000000,
5 + interval,
B00000000, //g
B00000000,
B01110000,
B10001000,
B10001000,
B01111000,
B00001000,
B01110000,
5 + interval,
B10000000, //h
B10000000,
B10110000,
B11001000,
B10001000,
B10001000,
B10001000,
B00000000,
5 + interval,
B01000000, //i
B00000000,
B11000000,
B01000000,
B01000000,
B01000000,
B11100000,
B00000000,
3 + interval,
B00010000, //j
B00000000,
B00110000,
B00010000,
B00010000,
B10010000,
B01100000,
B00000000,
4 + interval,
B10000000, //k
B10000000,
B10010000,
B10100000,
B11000000,
B10100000,
B10010000,
B00000000,
4 + interval,
B11000000, //l
B01000000,
B01000000,
B01000000,
B01000000,
B01000000,
B11100000,
B00000000,
3 + interval,
B00000000, //m
B00000000,
B11010000,
B10101000,
B10101000,
B10001000,
B10001000,
B00000000,
5 + interval,
B00000000, //n
B00000000,
B10110000,
B11001000,
B10001000,
B10001000,
B10001000,
B00000000,
5 + interval,
B00000000, //o
B00000000,
B01110000,
B10001000,
B10001000,
B10001000,
B01110000,
B00000000,
5 + interval,
B00000000, //p
B00000000,
B11110000,
B10001000,
B10001000,
B11110000,
B10000000,
B10000000,
5 + interval,
B00000000, //q
B00000000,
B01101000,
B10011000,
B10011000,
B01101000,
B00001000,
B00001000,
5 + interval,
B00000000, //r
B00000000,
B10110000,
B11001000,
B10000000,
B10000000,
B10000000,
B00000000,
5 + interval,
B00000000, //s
B00000000,
B01110000,
B10000000,
B01110000,
B00001000,
B11110000,
B00000000,
5 + interval,
B01000000, //t
B01000000,
B11100000,
B01000000,
B01000000,
B01001000,
B00110000,
B00000000,
5 + interval,
B00000000, //u
B00000000,
B10001000,
B10001000,
B10001000,
B10011000,
B01101000,
B00000000,
5 + interval,
B00000000, //v
B00000000,
B10001000,
B10001000,
B10001000,
B01010000,
B00100000,
B00000000,
5 + interval,
B00000000, //w
B00000000,
B10001000,
B10101000,
B10101000,
B10101000,
B01010000,
B00000000,
5 + interval,
B00000000, //x
B00000000,
B10001000,
B01010000,
B00100000,
B01010000,
B10001000,
B00000000,
5 + interval,
B00000000, //y
B00000000,
B10001000,
B10001000,
B10001000,
B01111000,
B00001000,
B01110000,
5 + interval,
B00000000, //z
B00000000,
B11111000,
B00010000,
B00100000,
B01000000,
B11111000,
B00000000,
5 + interval,
B00100000, //{
B01000000,
B01000000,
B10000000,
B01000000,
B01000000,
B00100000,
B00000000,
3 + interval,
B10000000, //|
B10000000,
B10000000,
B10000000,
B10000000,
B10000000,
B10000000,
B00000000,
1 + interval,
B10000000, //}
B01000000,
B01000000,
B00100000,
B01000000,
B01000000,
B10000000,
B00000000,
3 + interval,
B00000000, //~
B00000000,
B00000000,
B01101000,
B10010000,
B00000000,
B00000000,
B00000000,
5 + interval,
B01100000, // (Char 0x7F)
B10010000,
B10010000,
B01100000,
B00000000,
B00000000,
B00000000,
B00000000,
5 + interval,
B01010000, // Ё русская (Char D0x01)
B11111000,
B10000000,
B11110000,
B10000000,
B10000000,
B11111000,
B00000000,
5 + interval,
B00111000, // А русская (Char D0x90)
B01001000,
B10001000,
B10001000,
B11111000,
B10001000,
B10001000,
B00000000,
5 + interval,
B11111000, // Б русская (Char D0x91)
B10001000,
B10000000,
B11110000,
B10001000,
B10001000,
B11110000,
B00000000,
5 + interval,
B11110000, // В русская (Char D0x92)
B10001000,
B10001000,
B11110000,
B10001000,
B10001000,
B11110000,
B00000000,
5 + interval,
B11111000, // Г русская (Char D0x93)
B10001000,
B10000000,
B10000000,
B10000000,
B10000000,
B10000000,
B00000000,
5 + interval,
B00111000, // Д русская (Char D0x94)
B01001000,
B01001000,
B01001000,
B01001000,
B01001000,
B11111100,
B10000100,
6 + interval,
B11111000, // Е русская (Char D0x95)
B10000000,
B10000000,
B11110000,
B10000000,
B10000000,
B11111000,
B00000000,
5 + interval,
B10101000, // Ж русская (Char D0x96)
B10101000,
B01110000,
B00100000,
B01110000,
B10101000,
B10101000,
B00000000,
5 + interval,
B01110000, // З русская (Char D0x97)
B10001000,
B00001000,
B00110000,
B00001000,
B10001000,
B01110000,
B00000000,
5 + interval,
B10001000, // И русская (Char D0x98)
B10001000,
B10011000,
B10101000,
B11001000,
B10001000,
B10001000,
B00000000,
5 + interval,
B10101000, // Й русская (Char D0x99)
B10001000,
B10011000,
B10101000,
B11001000,
B10001000,
B10001000,
B00000000,
5 + interval,
B10001000, // К русская (Char D0x9a)
B10010000,
B10100000,
B11000000,
B10100000,
B10010000,
B10001000,
B00000000,
5 + interval,
B00011000, // Л русская (Char D0x9b)
B00101000,
B01001000,
B01001000,
B01001000,
B01001000,
B10001000,
B00000000,
5 + interval,
B10000100, // М русская (Char D0x9c)
B11001100,
B10110100,
B10000100,
B10000100,
B10000100,
B10000100,
B00000000,
6 + interval,
B10001000, // Н русская (Char D0x9d)
B10001000,
B10001000,
B11111000,
B10001000,
B10001000,
B10001000,
B00000000,
5 + interval,
B01110000, // О русская (Char D0x9e)
B10001000,
B10001000,
B10001000,
B10001000,
B10001000,
B01110000,
B00000000,
5 + interval,
B11111000, // П русская (Char D0x9f)
B10001000,
B10001000,
B10001000,
B10001000,
B10001000,
B10001000,
B00000000,
5 + interval,
B11110000, // Р русская (Char D0xA0)
B10001000,
B10001000,
B10001000,
B11110000,
B10000000,
B10000000,
B00000000,
5 + interval,
B01110000, // С русская (Char D0xA1)
B10001000,
B10000000,
B10000000,
B10000000,
B10001000,
B01110000,
B00000000,
5 + interval,
B11111000, // Т русская (Char D0xA2)
B10101000,
B00100000,
B00100000,
B00100000,
B00100000,
B00100000,
B00000000,
5 + interval,
B10001000, // У русская (Char D0xA3)
B10001000,
B10001000,
B10001000,
B01010000,
B00100000,
B11000000,
B00000000,
5 + interval,
B00100000, // Ф русская (Char D0xA4)
B01110000,
B10101000,
B10101000,
B01110000,
B00100000,
B00100000,
B00000000,
5 + interval,
B10001000, // Х русская (Char D0xA5)
B10001000,
B01010000,
B00100000,
B01010000,
B10001000,
B10001000,
B00000000,
5 + interval,
B10010000, // Ц русская (Char D0xA6)
B10010000,
B10010000,
B10010000,
B10010000,
B10010000,
B11111000,
B00001000,
5 + interval,
B10001000, // Ч русская (Char D0xA7)
B10001000,
B10001000,
B10001000,
B01111000,
B00001000,
B00001000,
B00000000,
5 + interval,
B10001000, // Ш русская (Char D0xA8)
B10101000,
B10101000,
B10101000,
B10101000,
B10101000,
B11111000,
B00000000,
5 + interval,
B10001000, // Щ русская (Char D0xA9)
B10101000,
B10101000,
B10101000,
B10101000,
B10101000,
B11111100,
B00000100,
6 + interval,
B11000000, // Ъ русская (Char D0xAA)
B01000000,
B01000000,
B01110000,
B01001000,
B01001000,
B01110000,
B00000000,
5 + interval,
B10001000, // Ы русская (Char D0xAB)
B10001000,
B10001000,
B11101000,
B10011000,
B10011000,
B11101000,
B00000000,
6 + interval,
B10000000, // Ь русская (Char D0xAC)
B10000000,
B10000000,
B11100000,
B10010000,
B10010000,
B11100000,
B00000000,
4 + interval,
B01110000, // Э русская (Char D0xAD)
B10001000,
B00001000,
B01111000,
B00001000,
B10001000,
B01110000,
B00000000,
5 + interval,
B10011000, // Ю русская (Char D0xAE)
B10100100,
B10100100,
B11100100,
B10100100,
B10100100,
B10011000,
B00000000,
6 + interval,
B01111000, // Я русская (Char D0xAF)
B10001000,
B10001000,
B01111000,
B00101000,
B01001000,
B10001000,
B00000000,
5 + interval,
B00000000, // а русская (Char D0xB0)
B00000000,
B01110000,
B00001000,
B01111000,
B10001000,
B01111000,
B00000000,
5 + interval,
B00111000, // б русская (Char D0xB1)
B01000000,
B10110000,
B11001000,
B10001000,
B10001000,
B01110000,
B00000000,
5 + interval,
B00000000, // в русская (Char D0xB2)
B00000000,
B11110000,
B10001000,
B11110000,
B10001000,
B11110000,
B00000000,
5 + interval,
B00000000, // г русская (Char D0xB3)
B00000000,
B01110000,
B00001000,
B01110000,
B10000000,
B01110000,
B00000000,
5 + interval,
B11100000, // д русская (Char D0xB4)
B00010000,
B01101000,
B10011000,
B10001000,
B10001000,
B01110000,
B00000000,
5 + interval,
B00000000, // е русская (Char D0xB5)
B00000000,
B01110000,
B10001000,
B11111000,
B10000000,
B01110000,
B00000000,
5 + interval,
B00000000, // ж русская (Char D0xB6)
B00000000,
B10101000,
B10101000,
B01110000,
B10101000,
B10101000,
B00000000,
5 + interval,
B00000000, // з русская (Char D0xB7)
B00000000,
B01110000,
B10001000,
B00110000,
B10001000,
B01110000,
B00000000,
5 + interval,
B00000000, // и русская (Char D0xB8)
B00000000,
B10001000,
B10001000,
B10001000,
B10011000,
B01101000,
B00000000,
5 + interval,
B00010000, // й русская (Char D0xB9)
B00100000,
B10001000,
B10001000,
B10001000,
B10011000,
B01101000,
B00000000,
5 + interval,
B00000000, // к русская (Char D0xBA)
B00000000,
B10010000,
B10100000,
B11000000,
B10100000,
B10010000,
B00000000,
4 + interval,
B00000000, // л русская (Char D0xBB)
B00000000,
B00111000,
B01001000,
B01001000,
B01001000,
B10001000,
B00000000,
5 + interval,
B00000000, // м русская (Char D0xBC)
B00000000,
B10001000,
B11011000,
B10101000,
B10001000,
B10001000,
B00000000,
5 + interval,
B00000000, // н русская (Char D0xBD)
B00000000,
B10001000,
B10001000,
B11111000,
B10001000,
B10001000,
B00000000,
5 + interval,
B00000000, // о русская (Char D0xBE)
B00000000,
B01110000,
B10001000,
B10001000,
B10001000,
B01110000,
B00000000,
5 + interval,
B00000000, // п русская (Char D0xBF)
B00000000,
B10110000,
B11001000,
B10001000,
B10001000,
B10001000,
B00000000,
5 + interval,
B00000000, // р русская (Char D1x80)
B00000000,
B10110000,
B11001000,
B10001000,
B11001000,
B10110000,
B10000000,
5 + interval,
B00000000, // с русская (Char D1x81)
B00000000,
B01110000,
B10001000,
B10000000,
B10001000,
B01110000,
B00000000,
5 + interval,
B00000000, // т русская (Char D1x82)
B00000000,
B11010000,
B10101000,
B10101000,
B10101000,
B10101000,
B00000000,
5 + interval,
B00000000, // у русская (Char D1x83)
B00000000,
B10001000,
B01001000,
B00101000,
B00010000,
B00100000,
B01000000,
5 + interval,
B00000000, // ф русская (Char D1x84)
B00000000,
B00100000,
B01110000,
B10101000,
B10101000,
B01110000,
B00100000,
5 + interval,
B00000000, // х русская (Char D1x85)
B00000000,
B10001000,
B01010000,
B00100000,
B01010000,
B10001000,
B00000000,
5 + interval,
B00000000, // ц русская (Char D1x86)
B00000000,
B10010000,
B10010000,
B10010000,
B10010000,
B01101000,
B00001000,
5 + interval,
B00000000, // ч русская (Char D1x87)
B00000000,
B10010000,
B10010000,
B01110000,
B00010000,
B00010000,
B00000000,
4 + interval,
B00000000, // ш русская (Char D1x88)
B00000000,
B10001000,
B10101000,
B10101000,
B10101000,
B01110000,
B00000000,
5 + interval,
B00000000, // щ русская (Char D1x89)
B00000000,
B10001000,
B10101000,
B10101000,
B10101000,
B01110100,
B00000100,
6 + interval,
B00000000, // ъ русская (Char D1x8A)
B00000000,
B11000000,
B01000000,
B01110000,
B01001000,
B01110000,
B00000000,
5 + interval,
B00000000, // ы русская (Char D1x8B)
B00000000,
B10001000,
B10001000,
B11101000,
B10011000,
B11101000,
B00000000,
5 + interval,
B00000000, // ь русская (Char D1x8C)
B00000000,
B10000000,
B10000000,
B11100000,
B10010000,
B11100000,
B00000000,
4 + interval,
B00000000, // э русская (Char D1x8D)
B00000000,
B01110000,
B10001000,
B00111000,
B10001000,
B01110000,
B00000000,
5 + interval,
B00000000, // ю русская (Char D1x8E)
B00000000,
B10011000,
B10100100,
B11100100,
B10100100,
B10011000,
B00000000,
6 + interval,
B00000000, // я русская (Char D1x8F)
B00000000,
B01111000,
B10001000,
B01111000,
B00101000,
B11001000,
B00000000,
5 + interval,
B01010000, // ё русская (Char D1x91)
B00000000,
B01110000,
B10001000,
B11111000,
B10000000,
B01110000,
B00000000,
5 + interval,
};
void scrollFont() {
for (int counter=0x20;counter<0xC2;counter++){
loadBufferLong(counter);
delay(200);
}
}
// Scroll Message
void scrollMessage(const unsigned char * messageString) {
int counter = 0;
int myChar = 0;
int CharRange = 0;
do {
// read back a char
myChar = pgm_read_byte_near(messageString + counter);
if (myChar < 0x20 || myChar > 0xbf) // байт не выводится, т.к. либо не включён в шрифт,
{
if (myChar == 0xd0 || myChar == 0xd1){ // либо это первый байт русских символов
CharRange = myChar - 0xd0 + 1 ; // запоминается признак первого байта
}
}
else if (myChar > 0x7f && myChar < 0x90) // второй байт русского символа
{
switch (CharRange) {
case 1: // код 0xd081 - буква Ё в UTF-8
myChar = myChar - 1 ;
break;
case 2: // русские буквы р - я (0xd180 - 0xd18f в UTF-8)
myChar = myChar + 49 ;
break;
}
if (myChar != 0 && myChar < 194){loadBufferLong(myChar);
CharRange = 0 ; // признак обнуляется после вывода второго байта символа
}
}
else if (myChar > 0x8f && myChar < 0xc0)
{
switch (CharRange) {
case 1: // русские буквы А - Я (0xd090 - 0xd0af в UTF-8)
myChar = myChar - 15 ; // и русские буквы а - п (0xd0b0 - 0xd0bf в UTF-8)
break;
case 2: // код 0xd191 - буква ё в UTF-8
myChar = myChar + 48 ;
break;
}
if (myChar != 0 && myChar < 194){loadBufferLong(myChar);
CharRange = 0 ;
}
}
else // английские буквы и прочие символы (0x20 - 0x7f в UTF-8)
{
if (myChar != 0){loadBufferLong(myChar);
CharRange = 0 ;
}
}
counter++;
}
while (myChar != 0);
}
// Load character into scroll buffer
void loadBufferLong(int ascii){
if (ascii >= 0x0020 && ascii <=0x00ff){
for (int a=0;a<8;a++){ // Loop 7 times for a 5x7 font
// Index into character table to get row data
unsigned long c = pgm_read_byte_near(font5x7 + ((ascii - 0x20) * 9) + a);
unsigned long x = bufferLong [a*2]; // Load current scroll buffer
x = x | c; // OR the new character onto end of current
bufferLong [a*2] = x; // Store in buffer
}
// Index into character table for kerning data
byte count = pgm_read_byte_near(font5x7 +((ascii - 0x20) * 9) + 8);
for (byte x=0; x<count;x++){
rotateBufferLong();
printBufferLong();
delay(scrollDelay);
}
}
}
// Rotate the buffer
void rotateBufferLong(){
for (int a=0;a<8;a++){ // Loop 7 times for a 5x7 font
unsigned long x = bufferLong [a*2]; // Get low buffer entry
byte b = bitRead(x,31); // Copy high order bit that gets lost in rotation
x = x<<1; // Rotate left one bit
bufferLong [a*2] = x; // Store new low buffer
x = bufferLong [a*2+1]; // Get high buffer entry
x = x<<1; // Rotate left one bit
bitWrite(x,0,b); // Store saved bit
bufferLong [a*2+1] = x; // Store new high buffer
}
}
// Display Buffer on LED matrix
void printBufferLong(){
for (int a=0;a<8;a++){ // Loop 7 times for a 5x7 font
unsigned long x = bufferLong [a*2+1]; // Get high buffer entry
byte y = x; // Mask off first character
lc.setRow(3,a,y); // Send row to relevent MAX7219 chip
x = bufferLong [a*2]; // Get low buffer entry
y = (x>>24); // Mask off second character
lc.setRow(2,a,y); // Send row to relevent MAX7219 chip
y = (x>>16); // Mask off third character
lc.setRow(1,a,y); // Send row to relevent MAX7219 chip
y = (x>>8); // Mask off forth character
lc.setRow(0,a,y); // Send row to relevent MAX7219 chip
}
}
Пн окт 10, 2016 06:41:17
Пн окт 24, 2016 07:05:20
Пн окт 24, 2016 20:50:46
Вт окт 25, 2016 09:52:30
Ср окт 26, 2016 09:17:29
Чт окт 27, 2016 07:55:59
Ср ноя 23, 2016 22:03:07
Сб ноя 26, 2016 01:53:32
Пн ноя 28, 2016 07:47:44
Вт ноя 29, 2016 01:23:48
Чт дек 01, 2016 12:12:12
Вт дек 27, 2016 13:29:45
Полосатый писал(а):Путь истинный, как мне думается, где-то тут:
8 точек на 4 матрицы = 32 точки.
Максимальная длина переменной в здешнем языке - тоже 32 бита, double precision тут не работает.
Значит надо как-то удваивать буферлонг и затем пропихивать это всё последовательно в матрицы.
У меня нет ни второго модуля, ни такой задачи, поэтому как именно это сделать - это уже не ко мне.
Ср дек 28, 2016 02:55:07
Чт мар 02, 2017 17:07:41