#include <pic.h>
#pragma config FOSC = INTRCIO        // Oscillator Selection bits (XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF       // Power-up Timer Enable bit (PWRT enabled)
#pragma config MCLRE = OFF      // RA3/MCLR pin function select (RA3/MCLR pin function is digital I/O, MCLR internally tied to VDD)
#pragma config BOREN = OFF      // Brown-out Detect Enable bit (BOD disabled)
#pragma config CP = OFF         // Code Protection bit (Program Memory code protection is disabled)
#pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)
#include <xc.h>
#include <htc.h>
#define _XTAL_FREQ 4000000
#define CSE RC0
#define RST RC1
#define DC RC2
#define DIN RC3
#define SCLK RC4
const unsigned char tab[]={
0x3E, 0x51, 0x49, 0x45, 0x3E,  //0    0
0x00, 0x42, 0x7F, 0x40, 0x00,  //5    1
0x42, 0x61, 0x51, 0x49, 0x46,  //10   2
0x21, 0x41, 0x45, 0x4B, 0x31,  //15   3
0x18, 0x14, 0x12, 0x7F, 0x10,  //20   4
0x27, 0x45, 0x45, 0x45, 0x39,  //25   5
0x3C, 0x4A, 0x49, 0x49, 0x30,  //30   6
0x01, 0x71, 0x09, 0x05, 0x03,  //35   7
0x36, 0x49, 0x49, 0x49, 0x36,  //40   8
0x06, 0x49, 0x49, 0x29, 0x1E,  //45   9
0x00, 0x36, 0x36, 0x00, 0x00,  //50   :
0x14, 0x08, 0x3E, 0x08, 0x14,  //55   *
0x00, 0x00, 0xA0, 0x60, 0x00,  //60   ,
0x7E, 0x11, 0x11, 0x11, 0x7E,  //65   A
0x1F, 0x20, 0x40, 0x20, 0x1F,  //70   V
0x7F, 0x08, 0x04, 0x04, 0x78,  //75   h
0x5C, 0x62, 0x02, 0x62, 0x5C,  //80   Омега
0x7E, 0x11, 0x11, 0x11, 0x7E,// 85 A   значение ASCII кода 192
0x7F, 0x49, 0x49, 0x49, 0x30,// 90 Б
0x7F, 0x49, 0x49, 0x49, 0x36,// 95 B
0x7F, 0x01, 0x01, 0x01, 0x01,// 100 Г
0x60, 0x3E, 0x21, 0x3F, 0x60,// 105 Д
0x7F, 0x49, 0x49, 0x49, 0x41,// 110 Е
0x67, 0x18, 0x7F, 0x18, 0x67,// 115 Ж
0x22, 0x41, 0x49, 0x49, 0x36,// 120 3
0x7F, 0x10, 0x08, 0x04, 0x7F,// 125 И
0x7F, 0x10, 0x09, 0x04, 0x7F,// 130 Й
0x7F, 0x08, 0x14, 0x22, 0x41,// 135 K
0x40, 0x3E, 0x01, 0x01, 0x7E,// 140 Л
0x7F, 0x02, 0x04, 0x02, 0x7F,// 145 M
0x7F, 0x08, 0x08, 0x08, 0x7F,// 150 H
0x3E, 0x41, 0x41, 0x41, 0x3E,// 155 O
0x7F, 0x01, 0x01, 0x01, 0x7F,// 160 П
0x7F, 0x09, 0x09, 0x09, 0x06,// 165 P
0x3E, 0x41, 0x41, 0x41, 0x22,// 170 C
0x01, 0x01, 0x7F, 0x01, 0x01,// 175 T
0x27, 0x48, 0x48, 0x48, 0x3F,// 180 У
0x1E, 0x21, 0x7F, 0x21, 0x1E,// 185 Ф
0x63, 0x14, 0x08, 0x14, 0x63,// 190 X
0x3F, 0x20, 0x20, 0x3F, 0x40,// 195 Ц
0x1F, 0x10, 0x10, 0x10, 0x7F,// 200 Ч
0x7F, 0x40, 0x7F, 0x40, 0x7F,// 205 Ш
0x3F, 0x20, 0x3F, 0x20, 0x7F,// 210 Щ
0x01, 0x7F, 0x44, 0x44, 0x38,// 215 Ъ
0x7F, 0x44, 0x7C, 0x00, 0x7F,// 220 Ы
0x7F, 0x44, 0x44, 0x44, 0x38,// 225 Ь
0x22, 0x41, 0x49, 0x49, 0x3E,// 230 Э
0x7F, 0x08, 0x7F, 0x41, 0x7F,// 235 Ю
0x46, 0x29, 0x19, 0x09, 0x7F,// 240 Я
0x00, 0x00, 0x00, 0x00, 0x00,// 245 пробел
0x00, 0x00, 0x5F, 0x00, 0x00,// 250 !
};
unsigned char adr;
unsigned char simv;
void lcd_gotoxy(unsigned char x, unsigned char y) // Nokia LCD 3310 Position cursor
{   
   lcd_write_8_bit(0x40|(y&0x07));     // Y : 0100 0yyy Y=0-5 possible
   lcd_write_8_bit(0x80|(x&0x7f));     // X : 1xxx xxxx X=0-83 possible
}
void vs(simv)
{
    for(unsigned char j=0; j<5; j++)
        {
        lcd_write_8_bit(tab[simv+j]); // П
        }
        lcd_write_8_bit(0x00);  //пробел-разделитель
}
int lcd_write_8_bit(adr)
{
    for (unsigned char i=8; i>0; i--)
    { CSE = 0; //CSE = 0
    SCLK = 0; //SCLK = 0
    if ((adr & 0b10000000) == 0){
        DIN = 0;}
    else {
        DIN = 1;}
        adr = (adr<<1);
        SCLK = 1;
        CSE = 1;
     }
}
void podgotovka (void);
    void main (void)
    {
    podgotovka();
    while(1)
        {  
        RST = 0;  // RST 100ns // начало инициализации
        __delay_us(0.6);
        RST = 1;
        DC = 0; //D/C = 0
        lcd_write_8_bit (0x21); 
        lcd_write_8_bit (0x13);
        lcd_write_8_bit (0x04);
        lcd_write_8_bit (0xC1);
        lcd_write_8_bit (0x20);
        lcd_write_8_bit (0x0C);     // конец инициализации
     //************************************************************   
        lcd_write_8_bit (0x40);     // начало очистки дисплея
        lcd_write_8_bit (0x80);
        DC = 1;
        for ( int i=504; i>0; i--)
        {
        lcd_write_8_bit (0x00); 
        }                    // конец очистки дисплея
        //*********************************************************
        //вывод символов на экран
        DC = 0;
        lcd_gotoxy(5,3);
        DC = 1;
        vs(160); vs(165); vs(125); vs(95); vs(110); vs(175);
        vs(60); vs(245); vs(145); vs(65); vs(205); vs(65); vs(250);
        
        DC = 0;
        __delay_ms(5000);
        }
        }
       void podgotovka (void)
    {
        TRISA = 0b111111;
        TRISC = 0b000000;
        ANSEL = 0b000000;
        CMCON = 0b111;
        PORTA = 0b000000;
        PORTC = 0b000000;
    }