Re: Работа с графическими ЖКИ на контроллере KS0108 и аналог
Добавлено: Вс май 15, 2011 01:20:54
яж на предыдущей страничке описывал порядок подачи сигналов для инициализации дисплея, попробуйте его.
Здесь можно немножко помяукать :)
https://radiokot.ru/forum/
У меня точно такой же дисплей недавно появился.shurikss123 писал(а):приветик всем!
Вопрос в студию, заказал недавно диспл wg12864A (part no. WG12864A-CFH-T#N) с RGB подсветкой а теперь когда он пришёл, рву волосы в частности не могу найти на него даташит, с схемой на 22 пина везде на 20 пинов, некто не подскажет что за фигня, как его подключать как посветкой управлять?
У STM32 есть пины толерантные к 5В, поэтому никаких проблем с подключением нет.Binary писал(а): Только работать я его пока не заставил((
Кто-нибудь пробовал его согласовывать с 3.3-вольтовой логикой?
Вы бы тогда еще конкретные цифры привели. Какую максимальную скорость прорисовки экрана удалось получить? а скорость вывода 1 байта? да не плохо бы еще и свои исходники показать для этих случаев.shurikss123 писал(а):В общем погонял я его попробовал, и сказал тфу. если честно его не везде можно использовать, медленный(очень), и те кто задумал делать на нем осциллограф, лучше не надо ничего не увидите на макс, его скорости.
делаю так два рисунка на одном одна половина на другом другая и в цикл рисовать по очереди и смотрите на его тормозаBerZerK-ku писал(а):А по конкретней? Просто сам периодически работаю с этим дисплеем, перерисовки страничек не замечаю. Флаг занятости проверяю.
Присмотрелся к дисплею по внимательнее, действительно недостатков хватает.shurikss123 писал(а):делаю так два рисунка на одном одна половина на другом другая и в цикл рисовать по очереди и смотрите на его тормоза
Я делаю это так:SkyFly писал(а):Расскажите пожалуйста по порядку для чего каждая строка инициализации?
Код: Выделить всё
uchar Init_lcd(void)
{
// инициализация дисплея
// возвращает 0 в конце
// вызов раз в 200 мкс
static uchar delay = 0;
static uchar step = 0;
if (step > 1)
{
if (CheckFlag())
return step;
}
switch(step)
{
case 0:
{
step = 1;
StBit(PORT_RST, LCD_RST); // установим RST
delay = 25;
}
break;
case 1:
{
if (delay > 0) // небольшая пауза после установки сигнала RST
delay--;
else
step = 2;
}
break;
case 2:
WriteLCD(COM, 0xb8, LCD_CS); // установка 0-ой страницы
step++;
break;
case 3:
WriteLCD(COM, 0x40, LCD_CS); // установка 0-ой строчки
step++;
break;
case 4:
WriteLCD(COM,0xc0,LCD_CS); // верхняя 0-ая строка
step++;
break;
case 5:
WriteLCD(COM,0x3f,LCD_CS); // включение дисплея
step = 0;
break;
}
return step;
}
static bool CheckFlag(void)
{
// Проверка флага занятости
// false - занято, true - норм
uchar data;
CrBit(PORT_RS, LCD_RS);
DDRA = 0;
StBit(PORT_CS, LCD_CS);
StBit(PORT_RW, LCD_RW);
_NOP();
_NOP();
StBit(PORT_E, LCD_E);
_NOP();
_NOP();
data = PINA;
CrBit(PORT_E, LCD_E);
_NOP();
//_delay_us(2);
CrBit(PORT_CS, LCD_CS);
StBit(PORT_E, LCD_E);
DDRA=0xff;
return (data & 0x80);
}