Проблемы с интерфейсом Pic16f1829 с ЖК-дисплеем - PullRequest
0 голосов
/ 06 ноября 2018

Привет! Я связываю интерфейс ЖК-дисплея с контроллером PIC, мой код компилируется хорошо, но на экране ничего не отображается, иногда мигает только пятый квадрат, я использую MPLAB X IDE и скомпилирован с XC8. 1.- Код заголовка для ЖК-дисплея

    void Lcd_Port(char a)
    {
        if (a & 1)
            D4 = 1;
        else
            D4 = 0;
        if (a & 2)
            D5 = 1;
        else
            D5 = 0;
        if (a & 4)
            D6 = 1;
        else
            D6 = 0;
        if (a & 8)
            D7 = 1;
        else
           D7 = 0;
    }

    void Lcd_Cmd(char a)
    {
        RS = 0;             // D0 to D7 interpreted as 
        Lcd_Port(a);
        EN  = 1;            // LCD Enable
        __delay_ms(4);
        EN  = 0;             // LCD Disable
        a = a<<4   
        Lcd_Port(a);
        EN  = 1;            // LCD Enable
        __delay_ms(4);
        EN  = 0;             // LCD Disable
    }

    Lcd_Clear()
    {
        Lcd_Cmd(0);
        Lcd_Cmd(1);
    }

    void Lcd_Set_Cursor(char a, char b)
    {
        char temp,z,y;
        if (a == 1)
        {
            temp = 0x80 + b - 1;
             z = temp>>4;
             y = temp & 0x0F;
             Lcd_Cmd(z);
             Lcd_Cmd(y);
         }
         else if (a == 2)
         {
             temp = 0xC0 + b - 1;
             z = temp>>4;
             y = temp & 0x0F;
             Lcd_Cmd(z);
             Lcd_Cmd(y);
         }
     }

     void Lcd_Init()
     {
         Lcd_Port(0x00);
         __delay_ms(20);
         Lcd_Cmd(0x03);
         __delay_ms(5);
         Lcd_Cmd(0x03);
         __delay_ms(11);
         Lcd_Cmd(0x03);
         Lcd_Cmd(0x02);
         Lcd_Cmd(0x02);
         Lcd_Cmd(0x08);
         Lcd_Cmd(0x00);
         Lcd_Cmd(0x0C);
         Lcd_Cmd(0x00);
         Lcd_Cmd(0x06);
     }

     void Lcd_Write_Char(char a)
     {
         RS = 1;
         char temp,y;
         temp = a&0x0F;
         y = a&0xF0;
         RS = 1;             // D to D7 interpreted as 
         Lcd_Port(y>>4);     //Data transfer
         EN = 1;
         __delay_us(40);
         EN = 0;
         Lcd_Port(temp);
         EN = 1;
         __delay_us(40);
         EN = 0;
     }

     void Lcd_Write_String(char *a)
     {
         int i;
         for (i=0; a[i]!='\0'; i++)
             Lcd_Write_Char(a[i]);
     }

Не уверен насчет этой последней части

    void Lcd_Shift_Right()
    {
        Lcd_Cmd(0x01);
        Lcd_Cmd(0x0C);
    }

    void Lcd_Shift_Left()
    {
        Lcd_Cmd(0x01);
        Lcd_Cmd(0x08);
    }

Я уверен, что проблема в заголовочном файле, так как все подключено правильно и код компилируется без проблем. Я попытался возиться с задержками и частотой, я спросил своего профессора, и он сказал, что проблема может быть связана с порядком битов, хотя я не слишком уверен, как это происходит. Помощь будет очень признателен

...