Usar LCD 1602A con F28027

0

Quiero conectar C2000 Piccolo LAUNCHXL-F28027 y LCD 1602A. Y ya encontré este ejemplo: enlace . Descargué el código fuente y conecté los pines como se muestra en el ejemplo, después de eso usé exactamente el mismo código:

#define RS  GPIO_Number_12
#define E   GPIO_Number_19

#define D0  GPIO_Number_0
#define D1  GPIO_Number_1
#define D2  GPIO_Number_2
#define D3  GPIO_Number_3
#define D4  GPIO_Number_4
#define D5  GPIO_Number_5
#define D6  GPIO_Number_16
#define D7  GPIO_Number_17
GPIO_Handle myGpio;


/* Initializes LCD */
void InitializeLCD(void)
{

    GPIO_setHigh(myGpio, E);
    LCDDelay1600();
    LCDDelay1600();
    LCDDelay1600();
    LCDDelay1600();

    WriteCommandLCD(0x38);          //Command to select 8 bit interface
    LCDDelay1600();

    WriteCommandLCD(0x38);          //Command to select 8 bit interface
    LCDDelay();                     //Small delay

    WriteCommandLCD(0x38);          //Command to select 8 bit interface
    LCDDelay();


    WriteCommandLCD(0x08);          //Command to off cursor,display off
    WriteCommandLCD(0x01);          //Command to Clear LCD
    LCDDelay1600();
    WriteCommandLCD(0x06);          //Command for setting entry mode

    WriteCommandLCD(0x0f);          //Command to on cursor,blink cursor
    WriteCommandLCD(0x02);          //Command return the cursor to home
    LCDDelay1600();
    DisplayLCD(1, "hello");

}


/* Writes a command byte to LCD */
void WriteCommandLCD(unsigned char CommandByte)
{
    GPIO_setLow(myGpio, RS);        //Clear RS pin to write command
    SendByte(CommandByte);
    LCDDelay();                     //Small delay
}


/* Send a byte of data to LCD */
void SendByte(unsigned char Value)
{
    unsigned char temp;


    if((Value & 0x01) == 0x01)
        GPIO_setHigh(myGpio, D0);
    else
        GPIO_setLow(myGpio, D0);


    if((Value & 0x02) == 0x02)
        GPIO_setHigh(myGpio, D1);
    else
        GPIO_setLow(myGpio, D1);


    if((Value & 0x04) == 0x04)
        GPIO_setHigh(myGpio, D2);
    else
        GPIO_setLow(myGpio, D2);

    if((Value & 0x08) == 0x08)
        GPIO_setHigh(myGpio, D3);
    else
        GPIO_setLow(myGpio, D3);

    if((Value & 0x10) == 0x10)
        GPIO_setHigh(myGpio, D4);
    else
        GPIO_setLow(myGpio, D4);


    if((Value & 0x20) == 0x20)
        GPIO_setHigh(myGpio, D5);
    else
        GPIO_setLow(myGpio, D5);


    if((Value & 0x40) == 0x40)
        GPIO_setHigh(myGpio, D6);
    else
        GPIO_setLow(myGpio, D6);


    if((Value & 0x80) == 0x80)
        GPIO_setHigh(myGpio, D7);
    else
        GPIO_setLow(myGpio, D7);


    GPIO_setHigh(myGpio, E);            //Set E pin to select LCD
    for(temp=0;temp<5; temp++);
    GPIO_setLow(myGpio, E);             //Clear E pin to deselect LCD
    LCDDelay();                         //Small delay

}

/* Writes a Data byte to LCD */
void WriteDataLCD(unsigned char DataByte)
{
    GPIO_setHigh(myGpio, RS);           //Set RS pin to 1 to write Data
    SendByte(DataByte);
    LCDDelay();                         //Small delay
}


/* Small delay */
void LCDDelay(void)
{
    DELAY_US(500);
}

/* Big delay */
void LCDDelay1600(void)
{
    DELAY_US(16000);
}


/* Makes cursor visible */
void CursorON(void)
{
    WriteCommandLCD(0x0f);          //Command to switch on cursor
}



/* Makes cursor invisible */
void CursorOFF(void)
{
    WriteCommandLCD(0x0c);          //Command to switch off cursor
}


/* Displays a message on LCD */
void DisplayLCD(char LineNumber,char *Message)
{
    int a;
    if(LineNumber ==1)
    {   //First Line
        WriteCommandLCD(0x80);      //Select the first line
    }
    else
    {   //Second line
        WriteCommandLCD(0xc0);      //Select the second line
    }
    for(a=0;a<16;a++)
    {
        WriteDataLCD(*Message);     //Display a character
        Message++;                  //Increment pointer
    }
    return;
}

void main(){
    InitializeLCD();
}

Pero después de la ejecución de este código, absolutamente nada ha cambiado en la pantalla LCD: solo veo varios rectángulos en la primera línea (como en el caso del encendido después). Creo que es porque lm016l se usa en el ejemplo, pero yo uso 1602A . ¿Podría ser? En caso afirmativo, ¿qué funciones debo cambiar y exactamente cómo debo cambiarlas? Dame información completa si puedes, porque soy un principiante en esto y es muy difícil entender lo que necesito exactamente.

¡Gracias!

UPD:

Encontré un microcontrolador para el LCD 1602A, es KS0066U. Estoy en lo cierto Entonces, si es así, también encontré KS0066U hoja de datos con la "INICIALIZACIÓN POR INSTRUCCIÓN. 1) Modo de interfaz de 8 bits ... ", verifíquelo (página 26).

Usando esta instrucción, creé este código:

#define RS  GPIO_Number_12
#define E   GPIO_Number_19

#define D0  GPIO_Number_0
#define D1  GPIO_Number_1
#define D2  GPIO_Number_2
#define D3  GPIO_Number_3
#define D4  GPIO_Number_4
#define D5  GPIO_Number_5
#define D6  GPIO_Number_16
#define D7  GPIO_Number_17

    GPIO_Handle myGpio1;

    //...

     void function_set(){
        GPIO_setLow(myGpio1, RS);
        GPIO_setLow(myGpio1, D7);
        GPIO_setLow(myGpio1, D6);
        GPIO_setHigh(myGpio1, D5);
        GPIO_setHigh(myGpio1, D4);
        GPIO_setHigh(myGpio1, D3);
        GPIO_setHigh(myGpio1, D2);
    }

    void display_control(){
        GPIO_setLow(myGpio1, RS);
        GPIO_setLow(myGpio1, D7);
        GPIO_setLow(myGpio1, D6);
        GPIO_setLow(myGpio1, D5);
        GPIO_setLow(myGpio1, D4);
        GPIO_setHigh(myGpio1, D3);
        GPIO_setHigh(myGpio1, D2);
        GPIO_setHigh(myGpio1, D1);
        GPIO_setHigh(myGpio1, D0);
    }

    void display_clear(){
        GPIO_setLow(myGpio1, RS);
        GPIO_setLow(myGpio1, D7);
        GPIO_setLow(myGpio1, D6);
        GPIO_setLow(myGpio1, D5);
        GPIO_setLow(myGpio1, D4);
        GPIO_setLow(myGpio1, D3);
        GPIO_setLow(myGpio1, D2);
        GPIO_setLow(myGpio1, D1);
        GPIO_setHigh(myGpio1, D0);
    }

    void entry_mode(){
        GPIO_setLow(myGpio1, RS);
        GPIO_setLow(myGpio1, D7);
        GPIO_setLow(myGpio1, D6);
        GPIO_setLow(myGpio1, D5);
        GPIO_setLow(myGpio1, D4);
        GPIO_setLow(myGpio1, D3);
        GPIO_setHigh(myGpio1, D2);
        GPIO_setHigh(myGpio1, D1);
        GPIO_setHigh(myGpio1, D0);
    }
    void main(void) {
        myGpio1 = GPIO_init((void *)GPIO_BASE_ADDR, sizeof(GPIO_Obj));//default initialization

            DELAY_US(31000);
            function_set();
            DELAY_US(1500);
            display_control();
            DELAY_US(1500);
            display_clear();
            DELAY_US(20300);
    }

Pero tampoco cambia nada.

¿Qué me estoy perdiendo (tenga en cuenta que soy realmente un novato)?

UPD2: Nuevo código completo, pero aún no da nada:

#include "DSP28x_Project.h"     // Device Headerfile and Examples Include File
#include "clk.h"
#include "flash.h"
#include "gpio.h"
#include "pie.h"
#include "pll.h"
#include "wdog.h"
#include "LCD.h"
#include "Keypad.h"

#define RS  GPIO_Number_12
#define E   GPIO_Number_19
#define D0  GPIO_Number_0
#define D1  GPIO_Number_1
#define D2  GPIO_Number_2
#define D3  GPIO_Number_3
#define D4  GPIO_Number_4
#define D5  GPIO_Number_5
#define D6  GPIO_Number_16
#define D7  GPIO_Number_17

GPIO_Handle myGpio1;

void enable(void)        //This enable E pin,whenever you send command/data to the pin
{
     GPIO_setLow(myGpio1,E);
     DELAY_US(1000);
     GPIO_setHigh(myGpio1,E);
}
void function_set(void)  //function set as you declared
{
      GPIO_setLow(myGpio1, RS);
      GPIO_setLow(myGpio1, D7);
      GPIO_setLow(myGpio1, D6);
      GPIO_setHigh(myGpio1, D5);
      GPIO_setHigh(myGpio1, D4);
      GPIO_setHigh(myGpio1, D3);
      GPIO_setHigh(myGpio1, D2);
}
void display_control(void)
{
      GPIO_setLow(myGpio1, RS);
      GPIO_setLow(myGpio1, D7);
      GPIO_setLow(myGpio1, D6);
      GPIO_setLow(myGpio1, D5);
      GPIO_setLow(myGpio1, D4);
      GPIO_setHigh(myGpio1, D3);
      GPIO_setHigh(myGpio1, D2);
      GPIO_setHigh(myGpio1, D1);
      GPIO_setHigh(myGpio1, D0);
}
void entry_mode(void)     //entry mode to make increment or decrement DDRAM
{
      GPIO_setLow(myGpio1, RS);
      GPIO_setLow(myGpio1, D7);
      GPIO_setLow(myGpio1, D6);
      GPIO_setLow(myGpio1, D5);
      GPIO_setLow(myGpio1, D4);
      GPIO_setLow(myGpio1, D3);
      GPIO_setHigh(myGpio1, D2);
      GPIO_setHigh(myGpio1, D1);
      GPIO_setHigh(myGpio1, D0);
}
void clear_display(void)  //clear the display
{
       GPIO_setLow(myGpio1, RS);
       GPIO_setLow(myGpio1, D7);
       GPIO_setLow(myGpio1, D6);
       GPIO_setLow(myGpio1, D5);
       GPIO_setLow(myGpio1, D4);
       GPIO_setLow(myGpio1, D3);
       GPIO_setLow(myGpio1, D2);
       GPIO_setLow(myGpio1, D1);
       GPIO_setHigh(myGpio1, D0);
}
void initialization(void){
    GPIO_setPullUp(myGpio1, GPIO_Number_0, GPIO_PullUp_Enable);
    GPIO_setLow(myGpio1, GPIO_Number_0);
    GPIO_setMode(myGpio1, GPIO_Number_0, GPIO_0_Mode_GeneralPurpose);
    GPIO_setDirection(myGpio1, GPIO_Number_0, GPIO_Direction_Output);

    GPIO_setPullUp(myGpio1, GPIO_Number_1, GPIO_PullUp_Enable);
    GPIO_setLow(myGpio1, GPIO_Number_1);
    GPIO_setMode(myGpio1, GPIO_Number_1, GPIO_1_Mode_GeneralPurpose);
    GPIO_setDirection(myGpio1, GPIO_Number_1, GPIO_Direction_Output);

    GPIO_setPullUp(myGpio1, GPIO_Number_2, GPIO_PullUp_Enable);
    GPIO_setLow(myGpio1, GPIO_Number_2);
    GPIO_setMode(myGpio1, GPIO_Number_2, GPIO_2_Mode_GeneralPurpose);
    GPIO_setDirection(myGpio1, GPIO_Number_2, GPIO_Direction_Output);

    GPIO_setPullUp(myGpio1, GPIO_Number_3, GPIO_PullUp_Enable);
    GPIO_setLow(myGpio1, GPIO_Number_3);
    GPIO_setMode(myGpio1, GPIO_Number_3, GPIO_3_Mode_GeneralPurpose);
    GPIO_setDirection(myGpio1, GPIO_Number_3, GPIO_Direction_Output);

    GPIO_setPullUp(myGpio1, GPIO_Number_4, GPIO_PullUp_Enable);
    GPIO_setLow(myGpio1, GPIO_Number_4);
    GPIO_setMode(myGpio1, GPIO_Number_4, GPIO_4_Mode_GeneralPurpose);
    GPIO_setDirection(myGpio1, GPIO_Number_4, GPIO_Direction_Output);

    GPIO_setPullUp(myGpio1, GPIO_Number_5, GPIO_PullUp_Enable);
    GPIO_setLow(myGpio1, GPIO_Number_5);
    GPIO_setMode(myGpio1, GPIO_Number_5, GPIO_5_Mode_GeneralPurpose);
    GPIO_setDirection(myGpio1, GPIO_Number_5, GPIO_Direction_Output);

    GPIO_setPullUp(myGpio1, GPIO_Number_16, GPIO_PullUp_Enable);
    GPIO_setLow(myGpio1, GPIO_Number_16);
    GPIO_setMode(myGpio1, GPIO_Number_16, GPIO_16_Mode_GeneralPurpose);
    GPIO_setDirection(myGpio1, GPIO_Number_16, GPIO_Direction_Output);

    GPIO_setPullUp(myGpio1, GPIO_Number_17, GPIO_PullUp_Enable);
    GPIO_setLow(myGpio1, GPIO_Number_17);
    GPIO_setMode(myGpio1, GPIO_Number_17, GPIO_17_Mode_GeneralPurpose);
    GPIO_setDirection(myGpio1, GPIO_Number_17, GPIO_Direction_Output);



    GPIO_setPullUp(myGpio1, GPIO_Number_12, GPIO_PullUp_Enable);
    GPIO_setLow(myGpio1, GPIO_Number_12);
    GPIO_setMode(myGpio1, GPIO_Number_12, GPIO_12_Mode_GeneralPurpose);
    GPIO_setDirection(myGpio1, GPIO_Number_12, GPIO_Direction_Output);

    GPIO_setPullUp(myGpio1, GPIO_Number_19, GPIO_PullUp_Enable);
    GPIO_setLow(myGpio1, GPIO_Number_19);
    GPIO_setMode(myGpio1, GPIO_Number_19, GPIO_19_Mode_GeneralPurpose);
    GPIO_setDirection(myGpio1, GPIO_Number_19, GPIO_Direction_Output);
}
void main()
{
     InitSysCtrl();

     myGpio1 = GPIO_init((void *)GPIO_BASE_ADDR, sizeof(GPIO_Obj));
     initialization();

    GPIO_setLow(myGpio1,E);  //declare the enable pin as HIGH first

      function_set();
      enable();      //set this to enable the LED with given data to the pins
      DELAY_US(50);  //need some delay of 39us,roughly 50us
      display_control(); //to customize the display you need
      enable();
      DELAY_US(50);  //again need 39us ,roughly 50us
      entry_mode();
      enable();    //makes to enable the LED with given data
      DELAY_US(50);
      GPIO_setHigh(myGpio1,RS);  //This displays letter A
      GPIO_setHigh(myGpio1,D7);
      GPIO_setLow(myGpio1,D6);
      GPIO_setLow(myGpio1,D5);
      GPIO_setLow(myGpio1,D4);
      GPIO_setLow(myGpio1,D3);
      GPIO_setLow(myGpio1,D2);
      GPIO_setLow(myGpio1,D1);
      GPIO_setHigh(myGpio1,D0);
      enable();
      DELAY_US(5000000);// letter A stays for 5 seconds in the display
      clear_display(); //clears the display
      DELAY_US(3000);  //need to wait 1.39ms roughly 3ms
}

UPD3:

#include "DSP28x_Project.h"     // Device Headerfile and Examples Include File
#include "clk.h"
#include "flash.h"
#include "gpio.h"
#include "pie.h"
#include "pll.h"
#include "wdog.h"
#include "LCD.h"
#include "Keypad.h"

#define RS  GPIO_Number_12
#define E   GPIO_Number_19
#define D0  GPIO_Number_0
#define D1  GPIO_Number_1
#define D2  GPIO_Number_2
#define D3  GPIO_Number_3
#define D4  GPIO_Number_4
#define D5  GPIO_Number_5
#define D6  GPIO_Number_16
#define D7  GPIO_Number_17

GPIO_Handle myGpio1;
interrupt void xint1_isr(void);


void enabl(void)        //This enable E pin,whenever you send command/data to the pin
{
     GPIO_setLow(myGpio1,E);
     DELAY_US(10000);
     GPIO_setHigh(myGpio1,E);
}
void function_set(void)  //function set as you declared
{
      GPIO_setLow(myGpio1, RS);
      GPIO_setLow(myGpio1, D7);
      GPIO_setLow(myGpio1, D6);
      GPIO_setHigh(myGpio1, D5);
      GPIO_setLow(myGpio1, D4);

        DELAY_US(20000);
        enabl();      //set this to enable the LED with given data to the pins
        DELAY_US(20000);  //need some delay of 39us,roughly 50us

      GPIO_setLow(myGpio1, RS);
      GPIO_setLow(myGpio1, D7);
      GPIO_setLow(myGpio1, D6);
      GPIO_setHigh(myGpio1, D5);
      GPIO_setLow(myGpio1, D4);

        DELAY_US(20000);
        enabl();      //set this to enable the LED with given data to the pins
        DELAY_US(20000);  //need some delay of 39us,roughly 50us

      GPIO_setLow(myGpio1, RS);
      GPIO_setHigh(myGpio1, D7);
      GPIO_setHigh(myGpio1, D6);

      DELAY_US(20000);
      enabl();      //set this to enable the LED with given data to the pins
      DELAY_US(20000);

}
void display_control(void)
{
      GPIO_setLow(myGpio1, RS);
      GPIO_setLow(myGpio1, D7);
      GPIO_setLow(myGpio1, D6);
      GPIO_setLow(myGpio1, D5);
      GPIO_setLow(myGpio1, D4);

      DELAY_US(20000);
      enabl();      //set this to enable the LED with given data to the pins
      DELAY_US(20000);

      GPIO_setLow(myGpio1, RS);
      GPIO_setHigh(myGpio1, D7);
      GPIO_setHigh(myGpio1, D6);
      GPIO_setHigh(myGpio1, D5);
      GPIO_setHigh(myGpio1, D4);

      DELAY_US(20000);
      enabl();      //set this to enable the LED with given data to the pins
      DELAY_US(20000);

}

void display_clear(void)  //clear the display
{
       GPIO_setLow(myGpio1, RS);
       GPIO_setLow(myGpio1, D7);
       GPIO_setLow(myGpio1, D6);
       GPIO_setLow(myGpio1, D5);
       GPIO_setLow(myGpio1, D4);

      DELAY_US(20000);
      enabl();      //set this to enable the LED with given data to the pins
      DELAY_US(20000);

       GPIO_setLow(myGpio1, RS);
       GPIO_setLow(myGpio1, D7);
       GPIO_setLow(myGpio1, D6);
       GPIO_setLow(myGpio1, D5);
       GPIO_setHigh(myGpio1, D4);

      DELAY_US(20000);
      enabl();      //set this to enable the LED with given data to the pins
      DELAY_US(20000);
}

void entry_mode(void)     //entry mode to make increment or decrement DDRAM
{
      GPIO_setLow(myGpio1, RS);
      GPIO_setLow(myGpio1, D7);
      GPIO_setLow(myGpio1, D6);
      GPIO_setLow(myGpio1, D5);
      GPIO_setLow(myGpio1, D4);

      DELAY_US(20000);
      enabl();      //set this to enable the LED with given data to the pins
      DELAY_US(20000);

      GPIO_setLow(myGpio1, RS);
      GPIO_setLow(myGpio1, D7);
      GPIO_setHigh(myGpio1, D6);
      GPIO_setHigh(myGpio1, D5);
      GPIO_setHigh(myGpio1, D4);

      DELAY_US(20000);
      enabl();      //set this to enable the LED with given data to the pins
      DELAY_US(20000);

}

void initialization(void){
    GPIO_setPullUp(myGpio1, GPIO_Number_0, GPIO_PullUp_Enable);
    GPIO_setLow(myGpio1, GPIO_Number_0);
    GPIO_setMode(myGpio1, GPIO_Number_0, GPIO_0_Mode_GeneralPurpose);
    GPIO_setDirection(myGpio1, GPIO_Number_0, GPIO_Direction_Output);

    GPIO_setPullUp(myGpio1, GPIO_Number_1, GPIO_PullUp_Enable);
    GPIO_setLow(myGpio1, GPIO_Number_1);
    GPIO_setMode(myGpio1, GPIO_Number_1, GPIO_1_Mode_GeneralPurpose);
    GPIO_setDirection(myGpio1, GPIO_Number_1, GPIO_Direction_Output);

    GPIO_setPullUp(myGpio1, GPIO_Number_2, GPIO_PullUp_Enable);
    GPIO_setLow(myGpio1, GPIO_Number_2);
    GPIO_setMode(myGpio1, GPIO_Number_2, GPIO_2_Mode_GeneralPurpose);
    GPIO_setDirection(myGpio1, GPIO_Number_2, GPIO_Direction_Output);

    GPIO_setPullUp(myGpio1, GPIO_Number_3, GPIO_PullUp_Enable);
    GPIO_setLow(myGpio1, GPIO_Number_3);
    GPIO_setMode(myGpio1, GPIO_Number_3, GPIO_3_Mode_GeneralPurpose);
    GPIO_setDirection(myGpio1, GPIO_Number_3, GPIO_Direction_Output);

    GPIO_setPullUp(myGpio1, GPIO_Number_4, GPIO_PullUp_Enable);
    GPIO_setLow(myGpio1, GPIO_Number_4);
    GPIO_setMode(myGpio1, GPIO_Number_4, GPIO_4_Mode_GeneralPurpose);
    GPIO_setDirection(myGpio1, GPIO_Number_4, GPIO_Direction_Output);

    GPIO_setPullUp(myGpio1, GPIO_Number_5, GPIO_PullUp_Enable);
    GPIO_setLow(myGpio1, GPIO_Number_5);
    GPIO_setMode(myGpio1, GPIO_Number_5, GPIO_5_Mode_GeneralPurpose);
    GPIO_setDirection(myGpio1, GPIO_Number_5, GPIO_Direction_Output);

    GPIO_setPullUp(myGpio1, GPIO_Number_16, GPIO_PullUp_Enable);
    GPIO_setLow(myGpio1, GPIO_Number_16);
    GPIO_setMode(myGpio1, GPIO_Number_16, GPIO_16_Mode_GeneralPurpose);
    GPIO_setDirection(myGpio1, GPIO_Number_16, GPIO_Direction_Output);

    GPIO_setPullUp(myGpio1, GPIO_Number_17, GPIO_PullUp_Enable);
    GPIO_setLow(myGpio1, GPIO_Number_17);
    GPIO_setMode(myGpio1, GPIO_Number_17, GPIO_17_Mode_GeneralPurpose);
    GPIO_setDirection(myGpio1, GPIO_Number_17, GPIO_Direction_Output);



    GPIO_setPullUp(myGpio1, GPIO_Number_12, GPIO_PullUp_Enable);
    GPIO_setLow(myGpio1, GPIO_Number_12);
    GPIO_setMode(myGpio1, GPIO_Number_12, GPIO_12_Mode_GeneralPurpose);
    GPIO_setDirection(myGpio1, GPIO_Number_12, GPIO_Direction_Output);

    GPIO_setPullUp(myGpio1, GPIO_Number_19, GPIO_PullUp_Enable);
    GPIO_setLow(myGpio1, GPIO_Number_19);
    GPIO_setMode(myGpio1, GPIO_Number_19, GPIO_19_Mode_GeneralPurpose);
    GPIO_setDirection(myGpio1, GPIO_Number_19, GPIO_Direction_Output);
}


void main()
{
     InitSysCtrl();

     myGpio1 = GPIO_init((void *)GPIO_BASE_ADDR, sizeof(GPIO_Obj));
     initialization();

      DELAY_US(20000);

      GPIO_setHigh(myGpio1,E);  //declare the enable pin as HIGH first
      DELAY_US(20000);

      function_set();

      display_control(); //to customize the display you need

      display_clear();

      entry_mode();

      GPIO_setHigh(myGpio1,RS);  //This displays letter A
      GPIO_setHigh(myGpio1,D7);
      GPIO_setLow(myGpio1,D6);
      GPIO_setLow(myGpio1,D5);
      GPIO_setLow(myGpio1,D4);
      GPIO_setLow(myGpio1,D3);
      GPIO_setLow(myGpio1,D2);
      GPIO_setLow(myGpio1,D1);
      GPIO_setHigh(myGpio1,D0);
      enabl();
      DELAY_US(5000000);// letter A stays for 5 seconds in the display

      display_clear(); //clears the display
      DELAY_US(20000);  //need to wait 1.39ms roughly 3ms
      enabl();

}
    
pregunta don-prog

1 respuesta

1

Bien, encontré el problema donde te golpearon. Es el pin de Habilitación. Cometiste un error en el pin de habilitación. El Pin de Habilitación se debe declarar ALTO en primer lugar. Siempre que pases comandos, solo necesitas hacer el pin de Habilitación BAJO por solo una pequeña cantidad de tiempo (generalmente 1 ms) y luego debe hacerlo ALTO. De modo que el pasador de Habilitación solo debe ir BAJO cada vez que pase los bits en los pasadores de la pantalla LCD. Todo el tiempo, debe permanecer ALTO. Por lo tanto, rehago su programa. como

    #define RS  GPIO_Number_12
    #define E   GPIO_Number_19
    #define D0  GPIO_Number_0
    #define D1  GPIO_Number_1
    #define D2  GPIO_Number_2
    #define D3  GPIO_Number_3
    #define D4  GPIO_Number_4
    #define D5  GPIO_Number_5
    #define D6  GPIO_Number_16
    #define D7  GPIO_Number_17
    
    GPIO_Handle myGpio1;
    GPIO_setLow(myGpio1,E);  //declare the enable pin as HIGH first
    
    void enable(void)        //This enable E pin,whenever you send command/data to the pin   
    {
         GPIO_setLow(myGpio1,E);
         dELAY_US(1000);
         GPIO_setHigh(myGpio1,E);
    }
    void function_set(void)  //function set as you declared
    {
          GPIO_setLow(myGpio1, RS);
          GPIO_setLow(myGpio1, D7);
          GPIO_setLow(myGpio1, D6);
          GPIO_setHigh(myGpio1, D5);
          GPIO_setHigh(myGpio1, D4);
          GPIO_setHigh(myGpio1, D3);
          GPIO_setHigh(myGpio1, D2);
    }
    void display_control(void)  
    {
          GPIO_setLow(myGpio1, RS);
          GPIO_setLow(myGpio1, D7);
          GPIO_setLow(myGpio1, D6);
          GPIO_setLow(myGpio1, D5);
          GPIO_setLow(myGpio1, D4);
          GPIO_setHigh(myGpio1, D3);
          GPIO_setHigh(myGpio1, D2);
          GPIO_setHigh(myGpio1, D1);
          GPIO_setHigh(myGpio1, D0);
    }
    void entry_mode(void)     //entry mode to make increment or decrement DDRAM
    {
          GPIO_setLow(myGpio1, RS);
          GPIO_setLow(myGpio1, D7);
          GPIO_setLow(myGpio1, D6);
          GPIO_setLow(myGpio1, D5);
          GPIO_setLow(myGpio1, D4);
          GPIO_setLow(myGpio1, D3);
          GPIO_setHigh(myGpio1, D2);
          GPIO_setHigh(myGpio1, D1);
          GPIO_setHigh(myGpio1, D0);
    }
    void clear_display(void)  //clear the display
    {
           GPIO_setLow(myGpio1, RS);
           GPIO_setLow(myGpio1, D7);
           GPIO_setLow(myGpio1, D6);
           GPIO_setLow(myGpio1, D5);
           GPIO_setLow(myGpio1, D4);
           GPIO_setLow(myGpio1, D3);
           GPIO_setLow(myGpio1, D2);
           GPIO_setLow(myGpio1, D1);
           GPIO_setHigh(myGpio1, D0);
    }
    void main()
    {
          function_set();
          enable();      //set this to enable the LED with given data to the pins
          DELAY_US(50);  //need some delay of 39us,roughly 50us 
          display_control(); //to customize the display you need  
          enable();       
          DELAY_US(50);  //again need 39us ,roughly 50us
          entry_mode();
          enable();    //makes to enable the LED with given data
          DELAY_US(50); 
          GPIO_setHigh(myGpio1,RS);  //This displays letter A
          GPIO_setHigh(myGpio1,D7);
          GPIO_setLow(myGpio1,D6);
          GPIO_setLow(myGpio1,D5);
          GPIO_setLow(myGpio1,D4);
          GPIO_setLow(myGpio1,D3);
          GPIO_setLow(myGpio1,D2);
          GPIO_setLow(myGpio1,D1);
          GPIO_setHIGH(myGpio1,D0);
          enable();
          DELAY_US(5000000);// letter A stays for 5 seconds in the display
          clear_display(); //clears the display
          DELAY_US(3000);  //need to wait 1.39ms roughly 3ms  
    }
    
      El lugar en el que cometiste el error es que no hiciste que el pin de activación se agote durante un instante y luego lo hagas ALTO. Por lo tanto, este programa anterior mostrará A durante 5 segundos y borra la pantalla LCD. de main () y continúa. Lo mismo que he hecho en el procesador AVR. Eche un vistazo. Si lo entiende, está bien.
    int rs =12;
    int rw =11;
    int e =10;
    void enabl()   //enable LCD for instant
    {
        digitalWrite(e,LOW);
        delay(1);
        digitalWrite(e,HIGH);
    }
    void setup()
    {
       DDRD=0xFF;   //make the portD as output
       digitalWrite(e,HIGH); //initially E with HIGH
       pinMode(rs,OUTPUT);  //declaring the pins as output
       pinMode(rw,OUTPUT);
       pinMode(e,OUTPUT);
    }
    void loop()
    {
       digitalWrite(rw,LOW);  //function set
       digitalWrite(rs,LOW);
       PORTD=B00111000;
       enabl();
       delayMicroseconds(50);  //display control
       digitalWrite(rw,LOW);
       digitalWrite(rs,LOW);
       PORTD=B00001111;
       enabl();
       delay(50);
       digitalWrite(rs,HIGH);  //Letter A
       PORTD=0x41;
       enabl();
       delay(1);
       digitalWrite(rs,HIGH);  //letter A
       PORTD=0x41;
       enabl();
       delay(1);
       digitalWrite(rs,HIGH);  //letter D
       PORTD=0x44;
       enabl();
       delay(1);
       digitalWrite(rs,HIGH);  //letter A
       PORTD=0x41;
       enabl();
       delay(1);
       digitalWrite(rs,HIGH);  //letter R
       PORTD=0x52;
       enabl();
       delay(1);
       digitalWrite(rs,HIGH);  //letter S
       PORTD=0x53;
       enabl();
       delay(1);
       digitalWrite(rs,HIGH);  //letter H
       PORTD=0x48;
       enabl();
       delay(1);
       digitalWrite(rs,HIGH);  //symbol @
       PORTD=0x40;
       enabl();
       delay(1);
       digitalWrite(rs,HIGH);  //space bar  
       PORTD=0x20;
       enabl();
       delay(1);
       digitalWrite(rs,HIGH);  //symbol delta(may vary with LCD to LCD)
       PORTD=B01111111;
       enabl();
       delay(4000);            //wait for 4 seconds to stay on display
       digitalWrite(rs,LOW);  //clear display()
       PORTD=0x01;
       enabl();
       delay(3000);           
    }
    

    La salida de la pantalla es como esta

    Puede ser que pueda simplificar este programa, pero cuando aprendí por primera vez, lo hice así para comprender en profundidad lo que sucederá si cambio un valor pequeño y además me gusta programar en ensamblador en lugar de que C.
respondido por el Aadarsh

Lea otras preguntas en las etiquetas