[an error occurred while processing this directive]
|
Правда под 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();
}
Есть еще такой вариант:
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