[an error occurred while processing this directive]
|
Помочь может:
1. Уменьшение длины шлейфа
2. Отделение в шлейфе линий данных от линий управления парой линий GND для уменьшения наводок с линий данных на линии управления
3. Можно попробовать пуллапные резисторы поставить НА СТОРОНЕ ЖКИ на линии управления 2-6кОм
Больше вроде ничего особо не помню про него
Процедуры работы с ним, может поможет:
void LCDInit(void) //инициализирует контроллер ЖКИ
{
SSCEN = 0; //отключаем SPI
LCDOn = 1; //отрубаем LCD
DLCDOn = 1; //порт - на выход
InitLCDPins();
LCDOn = 0; //включаем ЖКИ/* while((ReadLCDStat()&0x03)==0); //устанавливаем начальный адрес текста
WriteLCDData(0);
while((ReadLCDStat()&0x03)==0); //ждем готовности контроллера
WriteLCDData(0);
while((ReadLCDStat()&0x03)==0); //ждем готовности контроллера
WriteLCDCommand(0x40);*/while((ReadLCDStat()&0x03)==0); //устанавливаем адрес начала графики 0000
WriteLCDData(0);
while((ReadLCDStat()&0x03)==0); //ждем готовности контроллера
WriteLCDData(0);
while((ReadLCDStat()&0x03)==0); //ждем готовности контроллера
WriteLCDCommand(0x42);/* while((ReadLCDStat()&0x03)==0); //устанавливаем область вывода текста
WriteLCDData(LCDWidth/8);
while((ReadLCDStat()&0x03)==0); //ждем готовности контроллера
WriteLCDData(0);
while((ReadLCDStat()&0x03)==0); //ждем готовности контроллера
WriteLCDCommand(0x41);*/while((ReadLCDStat()&0x03)==0); //устанавливаем область вывода графики
WriteLCDData(LCDWidth/8);
while((ReadLCDStat()&0x03)==0); //ждем готовности контроллера
WriteLCDData(0);
while((ReadLCDStat()&0x03)==0); //ждем готовности контроллера
WriteLCDCommand(0x43);/*while((ReadLCDStat()&0x03)==0); //устанавливаем смещение
WriteLCDData(0x02);
while((ReadLCDStat()&0x03)==0); //ждем готовности контроллера
WriteLCDData(0);
while((ReadLCDStat()&0x03)==0); //ждем готовности контроллера
WriteLCDCommand(0x22);*/while((ReadLCDStat()&0x03)==0); //ждем готовности контроллера
WriteLCDCommand(0x80); //Режимwhile((ReadLCDStat()&0x03)==0); //ждем готовности контроллера
WriteLCDCommand(0x98); //Включаем графику, выключаем текстLCDOn = 1;
}
void InitLCDPins(void) //Инициализирует ноги для работы с LCD
{
LCD_RD = LCD_WR = LCD_CD = 1;
DLCD_RD = DLCD_WR = DLCD_CD = 1;
}ubyte ReadLCDStat(void) //считывает и возвращает статус LCD
{
ubyte ttt;
LCD_CD = 1; //читаем в режиме команд
DP3 &= 0xFC03; //настраиваем шину данных на ввод
LCD_RD = 0;
ttt = (P3&0x03FC)>>2;
LCD_RD = 1;
return ttt;
}void WriteLCDData(ubyte Data) //передает данные в LCD
{
LCD_CD = 0;
DP3 |= 0x03FC; //настраиваем шину на вывод
LCD_WR = 0;
P3 = (P3&0xFC00)|(Data << 2); //выставляем данные
LCD_WR = 1; //защелкиваем их
}void WriteLCDCommand(ubyte Data) //передает данные в LCD
{
LCD_CD = 1;
DP3 |= 0x03FC; //настраиваем шину на вывод
P3 = (P3&0xFC00)|(Data << 2); //выставляем данные
LCD_WR = 0;
LCD_WR = 1; //защелкиваем их
}void LCDRefresh(void) //обновляет содержимое экрана
{
uword Counter;
uword cnt;InitLCDPins();
LCDOn = 0; //включаем LCDwhile((ReadLCDStat()&0x03)==0); //устанавливаем начальный адрес
WriteLCDData(0);
while((ReadLCDStat()&0x03)==0); //ждем готовности контроллера
WriteLCDData(0);
while((ReadLCDStat()&0x03)==0); //ждем готовности контроллера
WriteLCDCommand(0x24);
while((ReadLCDStat()&0x03)==0); //ждем готовности контроллера
WriteLCDCommand(0xB0); //команда потоковой передачи данныхfor (Counter=0;Counter
cnt = 0;
while((ReadLCDStat()&0x08)==0)if(cnt++==32768)return; //ждем готовности контроллера
WriteLCDData(VideoRAM[Counter]); //передаем данные
};while((ReadLCDStat()&0x08)==0); //ждем готовности контроллера
WriteLCDCommand(0xB2); //Завершаем передачу
LCDOn = 1; //выключаем LCD
}
E-mail: info@telesys.ru