Сегодня целый день пробывал запустить LCD (FDCC 1602L) c использованием этой библиотеки.
Получилось запусить только так...
Код
mcu_set_io();
delay_ms(50);
LCD_RQCMD();
LCD_Bus_Write(0x20);
delay_ms(5);
LCD_Bus_Write(0x20);
LCD_Bus_Write(0x80);
delay_ms(5);
LCD_Bus_Write(0x00);
LCD_Bus_Write(0xC0);
delay_ms(5);
LCD_Bus_Write(0x00);
LCD_Bus_Write(0x60);
delay_ms(5);
LCD_RQDATA();
LCD_Bus_Write(0x30);
LCD_Bus_Write(0x50);
Код
void LCD_Bus_Write(UCHAR data)
{
LCD_RQWR();
UCHAR temp;
temp = data & 0xf0;
LCD_PORTDATA &= 0x0f;
LCD_PORTDATA |= temp;
LCD_STARTSTB();
NOP();
LCD_ENDSTB();
/* SWAP(data);
temp = data & 0xf0;
LCD_PORTDATA &= 0x0f;
LCD_PORTDATA |= temp;
LCD_STARTSTB();
NOP();
LCD_ENDSTB();
*/
}
Т.е. дисплей запускается если на него подавать сначала старшую тетраду, потом отдельно командой младушю тетраду, а так чтобы использовать закоментированный код, не получается....
Код
SWAP(data);
temp = data & 0xf0;
LCD_PORTDATA &= 0x0f;
LCD_PORTDATA |= temp;
LCD_STARTSTB();
NOP();
LCD_ENDSTB();
Народ подскажите в чем может быть трабла. Однозначно что в выводе младшей тетрады.... Все уже проверил неоднократно...
LCD весит на PORTC
RS -> PC0
RD/RW -> PC1
E -> PC2
DW4..DW7 -> PC4..PC7
Тестировал как в Proteus так и на железке...