[an error occurred while processing this directive]
Вторая попытка. Вот несколько вариантов:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Сергей Борщ 09 декабря 2002 г. 20:21
В ответ на: ЖКИ INTECH IMT 1602A по 4-х разрядной шине: не получается отправлено Нечипоренко 09 декабря 2002 г. 19:57

Правда под HC12 и 430, и для "произвольного" индикатора (т.е. работает на всех, которые в столе валяются), но все на С, так что разобраться можно:


#define LCDEnable LCDPort|=_LCDE;
#define LCDDisable LCDPort&=~_LCDE;
#define LCDData LCDPort|=_LCDRS;
#define LCDCommand LCDPort&=~_LCDRS;

void LCDWriteTetrade(unsigned char Command)
{
LCDCommand;
LCDPort&=0x0F;
LCDPort|=((Command)&0xF0);
LCDEnable;
LCDDisable;
}
void LCDWriteCommand(unsigned char Command)
{
LCDWriteTetrade(Command);
LCDWriteTetrade(Command<<4);
LCDData;
}

void LCDInit(void)
{
_DI;
LCDWriteTetrade(0x30); Delay(50 ms);
LCDWriteTetrade(0x30); Delay(50 ms);
LCDWriteTetrade(0x30); Delay(200 mks);
LCDWriteTetrade(0x20); Delay(50 mks);
LCDWriteCommand(CursorOff); Delay(50 mks);
LoadCG(CG);
_EI;
do;while(TMSK1&_LCDTimer);
LCDClearScreen();
}


Основная фишка инициализации по 4-битной шине именно в посылке тетрады 0011 минимум три раза, чтобы из любого режима (8-битного, 4-битного приема первой тетрады, 4-битного приема второй тетрады) привести его в 8-битный режим, в котором он адекватно воспримет тетраду 0010 - перевод в 4-битный режим.
А если не светится - может напряжения контраста не хватает? Он после включения до подачи команд должен засветить несколько первых знакомест.

Есть еще такой вариант:


void LCDWriteChar(unsigned char CharCode)
{
LCDPort&=0x0F;
LCDPort|=((CharCode)&0xF0);
LCDEnable;
LCDDisable;
LCDPort&=0x0F;
LCDPort|=((CharCode<<4)&0xF0);
LCDEnable;
LCDDisable;
Delay(40 mks);
LCDData;
}

void LCDWriteCommand(unsigned char Command)
{
LCDCommand;
LCDWriteChar(Command);
}

void LCDWriteString(char* String)
{ unsigned char tmp;
while (tmp=*String++)
LCDWriteChar(tmp);
}


void LCDInit (void)
{
LCDWriteCommand(0x33);Delay(50 ms);
LCDWriteCommand(0x33);Delay(50 ms);
LCDWriteCommand(0x33);Delay((200-40) mks);
LCDWriteCommand(0x20);
LCDWriteCommand(CursorOff);
LCDWriteCommand(0x48); // write to CG RAM, addres 8
LCDWriteString((char *)&CG);
LCDClearScreen();
}

 

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru