Ср июн 11, 2014 13:41:00
Ср июн 11, 2014 23:25:18
aleksandr-zh писал(а):хм
я иной алгоритм надумал,как получу ЖКИ - опробую
мне надо крупные шрифты, от 16 точек
Вт июн 17, 2014 19:10:44
Вадиматоричик писал(а):Рад, что этот дисплей приобрел такую популярность. Есть даже статья на хабре http://habrahabr.ru/post/213459/. Попытался по ней написать нормальную библиотеку для работы по SPI. Но столкнулся с проблемой. Если подать "0" (-) на SPB (Для разрешения приема данных) вся цепь замыкается. У меня питается от программатора, так что гаснет все. Программатор в том числе. У кого-нибудь еще такое было? И еще. На дисплее по ссылке GND и VCC, по сравнению с мои дисплеем, на разных местах. Я об этом узнал уже после того, как подключил и цепь замкнулась. Даже и не подумал, что пины могут отличаться по назначению. Видимо, не судьба с SPI мне поработать... Спасибо за примеры. Буду стараться написать еще более компактный код
Чт июн 19, 2014 19:28:03
shads писал(а):aleksandr-zh писал(а):хм
я иной алгоритм надумал,как получу ЖКИ - опробую
мне надо крупные шрифты, от 16 точек
Если нужно выводить шрифт с шириной кратной 8-ми тачкам (8,16,24,32), то буфер не нужен... можно выводить прям в дисплей...
Но если будут шрифты с шириной не кратной 8-ми, то придется через буфер.....
Вт июн 24, 2014 11:21:22
Создается указатель, указывающий на начало массива, потом к нему нужно прибавить (порядковый номер нужного символа в массиве, умноженный на значение размерности символов в массиве), вот вам и начало нужного символа...aleksandr-zh писал(а):есть в памяти программ массив с данными шрифтов. Как обратиться к началу нужного символа? как адресоваться туда?
Вт июн 24, 2014 11:34:38
shads писал(а):Создается указатель, указывающий на начало массива, потом к нему нужно прибавить (порядковый номер нужного символа в массиве, умноженный на значение размерности символов в массиве), вот вам и начало нужного символа...aleksandr-zh писал(а):есть в памяти программ массив с данными шрифтов. Как обратиться к началу нужного символа? как адресоваться туда?
Вт июн 24, 2014 11:44:20
Ждем фоток, с примерчиками сообщений на дисплее ...aleksandr-zh писал(а):Уже давно сделал ))
Вт июн 24, 2014 18:52:47
Вт июн 24, 2014 23:18:42
Ср июн 25, 2014 05:23:46
shads писал(а):На верхней картинке - где коровка - текст явно вместе с картинкой выводится, графически? Т.к. видно, что он не по знакоместам расположен...
Чт июн 26, 2014 00:07:53
За какое время картинка выводится по SPI? Не смотрели?aleksandr-zh писал(а):ЖКИ подключен по SPI
Чт июн 26, 2014 07:24:20
Чт июл 03, 2014 15:34:20
В SPI режиме передача одной команды или 1 байта данных происходит при передачи 24 бит
Протокол передачи данных таков:
Устанавливаем высокий уровень CS
Передаем 4 единицы подряд
Передаем 1 бит RW – чтения или запись
Передаем 1 бит RS – Команда или данные
Передаем 0
Передаем 4 бита старшей половины байта данных
Передаем 4 нуля
Передаем 4 бита младшей половины байта данных
Передаем 4 нуля подряд
Устанавливаем низкий уровень CS
Передаем 4 бита старшей половины байта данных
#define Command 0 //Отправка комманды или данных.
#define Data 1
LCD_OUT(0x30, Command); //8 бит, стандартный набор комманд.
int main( void )
{
Led_init();
SPI_Init();
LCD_TextStandart_Init();
LCD_OutString_std("Loooool)))"+0x00);
while (1)
{
}
}
int main( void )
{
Led_init();
SPI_Init();
LCD_Graf_Init();
LCD_Graf_Clear();
OUT_Graf_String("Èíîãäà ÿ äóìàþ äîëãî("+0x00, 0, 4);
LCD_Graf_Out_char ('I', 2, 2);
OUT_Graf_BUFFER ();
Led_ON;
while (1)
{
}
}
int main( void )
{
Led_init();
SPI_Init();
LCD_Graf_Init();
OUT_Graf_String("Интересная", 1, 3);
OUT_Graf_String("надпись", 5, 4);
LCD_Graf_Out_char (')', 12, 5);
OUT_Graf_Line(Vert, 1, 62, 1);
OUT_Graf_Line(Vert, 1, 62, 126);
OUT_Graf_Line(Horiz, 1, 126, 1);
OUT_Graf_Line(Horiz, 1, 126, 62);
OUT_Graf_BUFFER ();
Led_ON;
while (1)
{
}
}
int main( void )
{
Led_init();
SPI_Init();
LCD_Graf_Init();
OUT_Graf_String("Èíòåðåñíàÿ", 1, 3);
OUT_Graf_String("íàäïèñü", 5, 4);
LCD_Graf_Out_char (')', 12, 5);
OUT_Graf_Prm (1, 1, 127, 63);
OUT_Graf_BUFFER ();
Led_ON;
while (1)
{
}
}
Сб июл 05, 2014 13:35:43
#include "inc\LCD12864.h" //Библиотека работы с LCD.
#include "inc\LCD12864.c"
//
// Bitmap data for Kr
//
//Kr array, size 16 bytes
const uint Kr[16] = {
0x40, 0x3c, 0xa0, 0x42, 0x10, 0x81, 0x1f, 0x99, 0x1f, 0x99,
0x10, 0x81, 0xa0, 0x42, 0x40, 0x3c, };
// Bitmap information for Kr
const BITMAP_INFO KrInfo =
{
7, // Picture Width - 1
15, // Picture Height - 1
0, // RLE Copressed flag, if yes value = 1
16, // Bitmap array size
Kr, // Bitmap point array
};
const uint Kr[16] = {
0x40, 0x3c, 0xa0, 0x42, 0x10, 0x81, 0x1f, 0x99, 0x1f, 0x99,
0x10, 0x81, 0xa0, 0x42, 0x40, 0x3c, };
const BITMAP_INFO KrInfo =
{
7, // Picture Width - 1
15, // Picture Height - 1
0, // RLE Copressed flag, if yes value = 1
16, // Bitmap array size
Kr, // Bitmap point array
};
BITMAP_INFO KrInfo
//Kr array, size 8 byte
const char Kffr[16] = {
0x40, 0x3c, 0xa0, 0x42, 0x10, 0x81, 0x1f, 0x99, 0x1f, 0x99,
0x10, 0x81, 0xa0, 0x42, 0x40, 0x3c, };
// Bitmap information for Kr
const char KrffInfo [] =
{
7, // Pictur высота - 1
15, // Picture ширина - 1
};
int main(void)
{
Led_init();
SPI_Init();
LCD_Graf_Init();
while (1)
{
for (char DvY = 0; DvY < (64-8); DvY=DvY+8) //По оси У. Каждый раз спускаемся на 8 пикселей.
{
for (char DVx = 0; DVx<(128-16); DVx++) //По оси Х. Т.к. картинка 16 пикселей, то делаем отступ, иначе уплывет в никуда.
{
OUT_Graf_PasteJmeg(DVx, DvY, Kffr, KrffInfo); //Смещение по х, по y, имя массива картинки, имя массива параметров.
OUT_Graf_BUFFER (); //Показываем буфер.
Lcd_Clear(); //После каждого наложения чистим буфер.
};
};
};
}
Сб июл 05, 2014 16:21:11
//Режимы вывода символов.
#define FonOFF_InversOFF 0 //Рисует на пустом месте белым по синему, фон не тронут.
#define FonOFF_InversON 1 //Рисует пустым по закрашенному, фон не тронут.
#define FonON_InversOFF 2 //Буква использует весь фон. Рисует по пустому.
#define FonON_InversON 3 //Весь фон, рисует по закрашенному пустотой.
int main(void)
{
SPI_Init();
LCD_Graf_Init();
OUT_Graf_PrmZK(0, 32, 128, 64);
OUT_Graf_String ("FonOFF_InversOFF", 0, 0, FonOFF_InversOFF);
OUT_Graf_String ("FonOFF_InversON", 0, 1, FonOFF_InversON);
OUT_Graf_String ("FonON_InversOFF", 0, 2, FonON_InversOFF);
OUT_Graf_String ("FonON_InversON", 0, 3, FonON_InversON);
OUT_Graf_String ("FonOFF_InversOFF", 0, 4, FonOFF_InversOFF);
OUT_Graf_String ("FonOFF_InversON", 0, 5, FonOFF_InversON);
OUT_Graf_String ("FonON_InversOFF", 0, 6, FonON_InversOFF);
OUT_Graf_String ("FonON_InversON", 0, 7, FonON_InversON);
OUT_Graf_BUFFER();
while (1)
{
}
}
Пн июл 07, 2014 18:30:09
А я все не уймусь...
void LCD_OUT (uint8_t Data_LCD, uint8_t Np_LCD)
{
CS_ON(); //Передача начата.
if (Np_LCD == Data) {SPI_Out_LCD12864_Ap(0xFA);} //Передача данных или комманды.
else {SPI_Out_LCD12864_Ap(0xF8);}
SPI_Out_LCD12864_Ap(Data_LCD & 0xF0); //Старшая половина и 4 "0".
SPI_Out_LCD12864_Ap(Data_LCD << 4); //Младшая и 4 "0".
CS_OFF(); //Передача окончина.
}
//Используем SPI4.
//PE2 - SPI4_SCK.
//PE3 - CS (ногодрыг).
//PE6 - SPI4_MOSI.
Пт июл 11, 2014 14:18:14
Пт июл 11, 2014 19:01:54
Пока ST не напишет нормальную IDE для STM8 - я буду работать над библиотекой под STM32, а учитывая тенденцию на снижение цен 32-х битных мк, возвращяться к 8 мне уже не придется.
Чт июл 24, 2014 17:25:45
Пт июл 25, 2014 14:25:01
Тоже вариант, но к сожалению так полноценную ИДЕ (с окошками рамочками и прочими приколами) не сварганить...WiseLord писал(а):Ввиду использования ATmega16 полного экранного буфера (1кБайт) сделать не получалось, так что буфер немного упрощённый - 128 байт (8 строк длинной 128 пикселов), в который легко вписывается нужный шрифт. Буфер вычитывается из экранной памяти (GDRAM) при переходе на очередную "строку" из восьми.