Цитата(T00T @ Jan 6 2016, 00:29)

Наверно что то в lcdSendNibble(). Тока не пойму что не работает.
наверное потому что в порт от D7 записывается бит от D5.
SET(LCD_D7_PORT,LCD_D5_BIT);
чтобы вот этого вот онанизма, с указыванием везде и портов и масок, избежать, давно придуманы т.н. макросы Волкова, когда и порт и маска и активный уровень (и еще чего угодно, на что фантазии хватит) указываются в одном единственном дефайне через запятую.
#define LCD_D7 D,1<<6,H
а потом используется как
if (data & 0x08) ON(LCD_D7); else OFF(LCD_D7);
Код
#define _setL(port,mask) do { PORT##port &= ~mask; } while(0)
#define _setH(port,mask) do { PORT##port |= mask; } while(0)
#define _clrL(port,mask) do { PORT##port |= mask; } while(0)
#define _clrH(port,mask) do { PORT##port &= ~mask; } while(0)
#define _bitL(port,mask) (!(PIN##port & mask))
#define _bitH(port,mask) (!!(PIN##port & mask))
#define _dir_out(port,mask,val) do { DDR##port |= mask; } while(0)
#define _dir_in(port,mask,val) do { DDR##port &= ~mask; } while(0)
#define _set(port,mask,val) _set##val(port,mask)
#define _clr(port,mask,val) _clr##val(port,mask)
#define _bit(port,mask,val) _bit##val(port,mask)
////////////////////////////////////////////////////////////////////////////////////
#define dir_out(x) _dir_out(x)
#define dir_in(x) _dir_in(x)
#define on(x) _set(x)
#define off(x) _clr(x)
#define active(x) _bit(x)
#define toggle(x) _inv(x)