

#define DATA_PORT DDRB        // Порт B Шина данных
#define LCD_STATUS PINB
#define LCD_PORT PORTB
#define WR PORTD.B0           // Порт D Канал ввода команды
#define RD PORTD.B1
#define CE PORTD.B2
#define CD PORTD.B3
#define RS PORTD.B4
#define FS PORTD.B5

int i ;
char y ;

unsigned char GetStatusLCD(void)
{
unsigned char i;
  DATA_PORT=0;            // Установка Шины на вход
   WR=1 ;                     // Установка запроса статуса
   CD=1 ;
   RD=0 ;
   CE=0 ;
   i=LCD_STATUS;
   WR=1 ;                     // Установка запроса статуса
   CD=1 ;
   RD=1 ;
   CE=1 ;
   DATA_PORT=0xFF;
   return i;

}
void Status_8()
{
while((GetStatusLCD()&0x08)!=0x08);
}
void Status_3()
{
while((GetStatusLCD()&0x03)!=0x03);
}
void Send8LCD(unsigned char cmd, unsigned char bt)
{
char i;
 if (cmd)
 CD=1;
 else
 CD=0;
 CE=0;
 WR=0;
 LCD_PORT=bt;
CE=1;
 WR=1;
 CD=1;
 Status_3();  //
}
void Send3LCD(unsigned char cmd, unsigned char bt)
{
char i;
 if (cmd)
 CD=1;
 else
 CD=0;
 CE=0;
 WR=0;
 LCD_PORT=bt;
 CE=1;
 WR=1;
 CD=1;
 Status_8();
}
void SetAddrLCD(unsigned int addr)
{
Send8LCD(0,(unsigned char)addr);
Send8LCD(0,(unsigned char)(addr>>8));
Send8LCD(1,0x24);
return;
}
void SendCharXYLCD(unsigned char X,unsigned char Y,unsigned char bt)
{
SetAddrLCD((unsigned int)+(unsigned int)X+(unsigned int)Y*0x28);
Send8LCD(0,bt);
Send8LCD(1,0xc4);
}
void Reset()
{
 int set;
 set=2560;
SetAddrLCD(0x0000);
while(1)
{
Send3LCD(1,0xb0);
Status_8();
Send8LCD(0,0xff);
set--;
if (set==0)return;
}
}
void Program()
{
Y=1;
SendCharXYLCD(Y,32,0b11111110);
SendCharXYLCD(Y,33,0b11111101);
SendCharXYLCD(Y,34,0b11111100);
SendCharXYLCD(Y,35,0b11111011);
SendCharXYLCD(Y,36,0b11111011);
SendCharXYLCD(Y,37,0b11111000);
SendCharXYLCD(Y,38,0b11111011);
SendCharXYLCD(Y,39,0b11111011);
SendCharXYLCD(Y,40,0b11111100);
SendCharXYLCD(Y,48,0b00000000);
Y=2;
SendCharXYLCD(Y,13,0b11111110);
SendCharXYLCD(Y,14,0b11111001);
SendCharXYLCD(Y,15,0b11110111);
SendCharXYLCD(Y,29,0b11110000);
SendCharXYLCD(Y,30,0b11001110);
SendCharXYLCD(Y,31,0b00111101);
SendCharXYLCD(Y,32,0b11111011);
SendCharXYLCD(Y,33,0b11100111);
SendCharXYLCD(Y,34,0b00000000);
SendCharXYLCD(Y,37,0b01111111);
SendCharXYLCD(Y,38,0b10111111);
SendCharXYLCD(Y,39,0b10111110);
SendCharXYLCD(Y,40,0b01111110);
SendCharXYLCD(Y,41,0b10000001);
SendCharXYLCD(Y,48,0b00000000);
Y=3;
SendCharXYLCD(Y,13,0b01111111);
SendCharXYLCD(Y,14,0b10011111);
SendCharXYLCD(Y,15,0b11100111);
SendCharXYLCD(Y,16,0b11111001);
SendCharXYLCD(Y,17,0b11111110);
SendCharXYLCD(Y,27,0b11111000);
SendCharXYLCD(Y,28,0b00000111);
SendCharXYLCD(Y,33,0b11111000);
SendCharXYLCD(Y,34,0b00000111);
SendCharXYLCD(Y,35,0b11011100);
SendCharXYLCD(Y,36,0b10110000);
SendCharXYLCD(Y,37,0b01100111);
SendCharXYLCD(Y,38,0b01001111);
SendCharXYLCD(Y,39,0b11011111);
SendCharXYLCD(Y,40,0b10011111);
SendCharXYLCD(Y,41,0b10011110);
SendCharXYLCD(Y,42,0b10011111);
SendCharXYLCD(Y,43,0b11011111);
SendCharXYLCD(Y,44,0b11001111);
SendCharXYLCD(Y,45,0b11100111);
SendCharXYLCD(Y,46,0b11110000);
SendCharXYLCD(Y,47,0b11111100);
SendCharXYLCD(Y,48,0b00000000);
Y=4;
SendCharXYLCD(Y,17,0b01111111);
SendCharXYLCD(Y,18,0b10011111);
SendCharXYLCD(Y,19,0b11100111);
SendCharXYLCD(Y,20,0b11111001);
SendCharXYLCD(Y,21,0b11111110);
SendCharXYLCD(Y,26,0b11000000);
SendCharXYLCD(Y,27,0b00111111);
SendCharXYLCD(Y,33,0b00111111);
SendCharXYLCD(Y,34,0b11001111);
SendCharXYLCD(Y,35,0b01110011);
SendCharXYLCD(Y,36,0b00011101);
SendCharXYLCD(Y,37,0b11001101);
SendCharXYLCD(Y,38,0b11100110);
SendCharXYLCD(Y,39,0b11110110);
SendCharXYLCD(Y,40,0b11110010);
SendCharXYLCD(Y,41,0b11110010);
SendCharXYLCD(Y,42,0b11110011);
SendCharXYLCD(Y,43,0b11110111);
SendCharXYLCD(Y,44,0b11100111);
SendCharXYLCD(Y,45,0b11001111);
SendCharXYLCD(Y,46,0b00011111);
SendCharXYLCD(Y,47,0b01111111);
SendCharXYLCD(Y,48,0b00000000);

SendCharXYLCD(5,48,0b00000000);
SendCharXYLCD(6,48,0b00000000);
SendCharXYLCD(7,48,0b00000000);
SendCharXYLCD(8,48,0b00000000);
SendCharXYLCD(9,48,0b00000000);
SendCharXYLCD(10,48,0b00000000);
SendCharXYLCD(11,48,0b00000000);
SendCharXYLCD(12,48,0b00000000);
SendCharXYLCD(13,48,0b00000000);
SendCharXYLCD(14,48,0b00111111);
Y=5;
SendCharXYLCD(Y,21,0b01111111);
SendCharXYLCD(Y,22,0b10011111);
SendCharXYLCD(Y,23,0b11100111);
SendCharXYLCD(Y,24,0b11110010);
SendCharXYLCD(Y,25,0b10000001);
SendCharXYLCD(Y,26,0b01111010);
SendCharXYLCD(Y,27,0b11111001);
SendCharXYLCD(Y,28,0b11110111);
SendCharXYLCD(Y,29,0b11110111);
SendCharXYLCD(Y,30,0b11101111);
SendCharXYLCD(Y,31,0b11101111);
SendCharXYLCD(Y,32,0b11101111);
SendCharXYLCD(Y,33,0b11101111);
SendCharXYLCD(Y,34,0b11101111);
SendCharXYLCD(Y,35,0b11101111);
SendCharXYLCD(Y,36,0b11100000);
SendCharXYLCD(Y,37,0b11101111);
SendCharXYLCD(Y,38,0b11101111);
SendCharXYLCD(Y,39,0b11110111);
SendCharXYLCD(Y,40,0b11110111);
SendCharXYLCD(Y,41,0b11111011);
SendCharXYLCD(Y,42,0b00000000);
Y=6;
SendCharXYLCD(Y,20,0b11111110);
SendCharXYLCD(Y,21,0b11111001);
SendCharXYLCD(Y,22,0b11100111);
SendCharXYLCD(Y,23,0b10011111);
SendCharXYLCD(Y,24,0b01011111);
SendCharXYLCD(Y,25,0b10011111);
SendCharXYLCD(Y,26,0b00000000);
SendCharXYLCD(Y,36,0b00000000);
SendCharXYLCD(Y,42,0b00000000);
Y=7;
SendCharXYLCD(Y,17,0b11111110);
SendCharXYLCD(Y,18,0b11100001);
SendCharXYLCD(Y,19,0b10011111);
SendCharXYLCD(Y,20,0b01111111);
SendCharXYLCD(Y,26,0b00000000);
SendCharXYLCD(Y,28,0b11100011);
SendCharXYLCD(Y,36,0b00000000);
SendCharXYLCD(Y,42,0b00000000);
Y=8;
SendCharXYLCD(Y,17,0b00000000);
SendCharXYLCD(Y,18,0b11111010);
SendCharXYLCD(Y,19,0b11111010);
SendCharXYLCD(Y,20,0b11110101);
SendCharXYLCD(Y,21,0b11110101);
SendCharXYLCD(Y,22,0b11101011);
SendCharXYLCD(Y,23,0b11101011);
SendCharXYLCD(Y,24,0b11010111);
SendCharXYLCD(Y,25,0b11010111);
SendCharXYLCD(Y,26,0b00110000);
SendCharXYLCD(Y,27,0b10101111);
SendCharXYLCD(Y,28,0b10101111);
SendCharXYLCD(Y,29,0b01011111);
SendCharXYLCD(Y,30,0b01011111);
SendCharXYLCD(Y,31,0b01011111);
SendCharXYLCD(Y,32,0b01011111);
SendCharXYLCD(Y,33,0b01011111);
SendCharXYLCD(Y,34,0b01011111);
SendCharXYLCD(Y,35,0b01011111);
SendCharXYLCD(Y,36,0b01000000);
SendCharXYLCD(Y,37,0b10101111);
SendCharXYLCD(Y,38,0b10101111);
SendCharXYLCD(Y,39,0b10110111);
SendCharXYLCD(Y,40,0b11010111);
SendCharXYLCD(Y,41,0b11010111);
SendCharXYLCD(Y,42,0b00000000);
Y=9;
SendCharXYLCD(Y,17,0b00000000);
SendCharXYLCD(Y,26,0b00000000);
SendCharXYLCD(Y,36,0b00000000);
SendCharXYLCD(Y,42,0b00000000);
Y=10;
SendCharXYLCD(Y,17,0b00000111);
SendCharXYLCD(Y,18,0b11110001);
SendCharXYLCD(Y,19,0b11110110);
SendCharXYLCD(Y,20,0b11111011);
SendCharXYLCD(Y,21,0b11111011);
SendCharXYLCD(Y,22,0b11110101);
SendCharXYLCD(Y,23,0b11110110);
SendCharXYLCD(Y,24,0b11101110);
SendCharXYLCD(Y,25,0b11101110);
SendCharXYLCD(Y,26,0b00000000);
SendCharXYLCD(Y,28,0b11100011);
SendCharXYLCD(Y,33,0b11111110);
SendCharXYLCD(Y,34,0b11111110);
SendCharXYLCD(Y,35,0b11111101);
SendCharXYLCD(Y,36,0b00000011);
SendCharXYLCD(Y,37,0b11110111);
SendCharXYLCD(Y,38,0b11110110);
SendCharXYLCD(Y,39,0b11101110);        Работает до этого места остальное отключил специально чтоб видеть хоть какойто результат

//SendCharXYLCD(Y,40,0b11101100); 
//SendCharXYLCD(Y,41,0b11101100);
//SendCharXYLCD(Y,42,0b00011100);
//SendCharXYLCD(Y,43,0b11111110);
//SendCharXYLCD(Y,44,0b11111110);
Y=11;
//SendCharXYLCD(Y,19,0b01111111);
//SendCharXYLCD(Y,20,0b10111111);
//SendCharXYLCD(Y,21,0b11011111);
//SendCharXYLCD(Y,22,0b11101111);
//SendCharXYLCD(Y,23,0b11110111);
//SendCharXYLCD(Y,24,0b11111001);
//SendCharXYLCD(Y,25,0b11111110);
//SendCharXYLCD(Y,26,0b01111111);
//SendCharXYLCD(Y,27,0b01111111);
//SendCharXYLCD(Y,28,0b10111111);
//SendCharXYLCD(Y,29,0b11011111);
//SendCharXYLCD(Y,30,0b11011111);
//SendCharXYLCD(Y,31,0b10111111);
//SendCharXYLCD(Y,32,0b01111111);
//SendCharXYLCD(Y,33,0b10000001);
//SendCharXYLCD(Y,34,0b01111110);
//SendCharXYLCD(Y,35,0b11100011);
//SendCharXYLCD(Y,36,0b10000000);
//SendCharXYLCD(Y,37,0b00111110);
//SendCharXYLCD(Y,38,0b01111111);
//SendCharXYLCD(Y,41,0b11110111);
//SendCharXYLCD(Y,44,0b01111111);
//SendCharXYLCD(Y,45,0b00111110);
//SendCharXYLCD(Y,46,0b10000000);
//SendCharXYLCD(Y,47,0b11100011);
Y=12;
//SendCharXYLCD(Y,13,0b11100000);
//SendCharXYLCD(Y,14,0b11011111);
//SendCharXYLCD(Y,15,0b10111111);
//SendCharXYLCD(Y,16,0b10111111);
//SendCharXYLCD(Y,17,0b10111111);
//SendCharXYLCD(Y,18,0b10111111);
//SendCharXYLCD(Y,19,0b10111111);
//SendCharXYLCD(Y,20,0b10111111);
//SendCharXYLCD(Y,22,0b10111111);
//SendCharXYLCD(Y,23,0b10111111);
//SendCharXYLCD(Y,24,0b01111111);
//SendCharXYLCD(Y,25,0b01111111);
//SendCharXYLCD(Y,26,0b00011111);
//SendCharXYLCD(Y,34,0b11100000);
//SendCharXYLCD(Y,35,0b10011111);
//SendCharXYLCD(Y,36,0b11101111);
//SendCharXYLCD(Y,37,0b01101111);
//SendCharXYLCD(Y,38,0b00110111);
//SendCharXYLCD(Y,39,0b10110111);
//SendCharXYLCD(Y,40,0b10010100);
//SendCharXYLCD(Y,41,0b10010011);
//SendCharXYLCD(Y,42,0b10011111);
//SendCharXYLCD(Y,43,0b10111111);
//SendCharXYLCD(Y,44,0b00111111);
//SendCharXYLCD(Y,45,0b01111111);
Y=13;
//SendCharXYLCD(Y,13,0b01111111);
//SendCharXYLCD(Y,26,0b00011111);
//SendCharXYLCD(Y,27,0b11101111);
//SendCharXYLCD(Y,28,0b11110111);
//SendCharXYLCD(Y,29,0b11110111);
//SendCharXYLCD(Y,30,0b11110111);
//SendCharXYLCD(Y,31,0b11110111);
//SendCharXYLCD(Y,32,0b11110111);
//SendCharXYLCD(Y,33,0b11110111);
//SendCharXYLCD(Y,34,0b00000011);
//SendCharXYLCD(Y,35,0b11111011);
//SendCharXYLCD(Y,36,0b11111011);
//SendCharXYLCD(Y,37,0b11111011);
//SendCharXYLCD(Y,38,0b11111011);
//SendCharXYLCD(Y,39,0b11111011);
//SendCharXYLCD(Y,40,0b00000111);
return;
}

void Init()
{

DDRD=0xff;
PORTD=0xFF;    //  Все розряды порта D выход
FS=0;
Reset();
Reset();
RS=0;
for (i=0;i<30;i++);
RS=1;

Status_3();; //
SetAddrLCD(0x0000);
Send8LCD(1,0x42);       //GRAPHIC HOME

SetAddrLCD(0x0028);
Send8LCD(1,0x43); //GRAPHIC AREA

SetAddrLCD(0x1700);
Send8LCD(1,0x40);

SetAddrLCD(0x0028);
Send8LCD(1,0x41);


Send8LCD(1,0x98);
return;
}
void main(void)
{
Init();
Program();
}