This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

lcd_8bits

I'm using the LCD_4bits project to display data (MCBSTM32 board) but when I change the LCD with another (phico d-0 94v-0) "">www.datasheetarchive.com/LM2780A2C40HN-datasheet.html" i can't display data.
I need to change the pin assignement in order to use the 8bits-mode.
can you help me.

Parents
  • thanks Erik.
    this the lcd_8bits.c

    /**********************************************************************/
    /* Includes ------*/
    #include "lcd.h"
    #include "stm32f10x_conf.h"
    #include "stm32f10x.h"
    #include "LCD_8bits.h"
    /* Private functions ----------*/
    /*******************************
    * Function Name : LCD_Init
    * Description : Initialisation routine for Alphanumeric Display.
    * Input param : NONE
    * Return : None
    ******************************/
    void LCD_Init(void)
    { /*Start First Line Of LCD*/ WriteCommand(START_ONE); /*Start Second Line Of LCD*/ WriteCommand(START_TWO); /*function set-2 line display, 5*7 dots format display mode*/ WriteCommand(FUNCTION_SET); /*Display off*/ WriteCommand(DISPLAY_OFF); /*Display on,cursor off,cursor blink off*/ WriteCommand(DISPLAY_SETTINGS); /*Entry mode set-Increment and no display shift*/ WriteCommand(ENTRY_MODESET); /*clear display*/ WriteCommand(CLR_DISPLAY); /*Return home Command, sets the cursor at the beginning of the first line*/ WriteCommand(RETURN_HOME);
    } /***********************************
    * Function Name : WriteCommand
    * Description : Writes a command to the LCD
    * Input param : u8_Command i.e the command to be sent to LCD
    * Return : None
    ************************************/
    void WriteCommand( u8 u8_Command)
    { u8 u8_Cmd; u16 u16_TempVar=0; /*take RS low for Command*/ RESET_RS; //GPIO_WriteBit(GPIOA, GPIO_Pin_12, Bit_RESET); u8_Cmd =u8_Command; /*This retains the value of RS and Enable while sending the Command to the data pins*/ u16_TempVar=u16_TempVar | (u16)u8_Cmd; /********************For port C*******************/ if( (u16_TempVar) & (DATA_LINE_0) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_RESET); }

    if( (u16_TempVar) & (DATA_LINE_1) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_2, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_2, Bit_RESET); } /****************For port D***********************/ if( (u16_TempVar) & (DATA_LINE_2) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_3, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_3, Bit_RESET); } /*******************For port B**********************/ if( (u16_TempVar) & (DATA_LINE_3) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_4, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_4, Bit_RESET); }

    if( (u16_TempVar) & (DATA_LINE_4) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_RESET); }

    if( (u16_TempVar) & (DATA_LINE_5) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_6, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_6, Bit_RESET); }

    if( (u16_TempVar) & (DATA_LINE_6) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_7, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_7, Bit_RESET); }

    if( (u16_TempVar) & (DATA_LINE_7) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_8, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_8, Bit_RESET); } /*****************************************/ /* take E high to enable data to be send to the LCD*/ SET_ENABLE; Delay(MS_ONE); //ST1208S_Delay(10,210); /*takes E low*/ RESET_ENABLE; Delay(MS_ONE); //ST1208S_Delay(10,210);
    } /**********************************
    * Function Name : WriteData
    * Description : Writes a data to the LCD
    * Input param : u8_Data i.e the data to be written on LCD
    * Return : None
    ***************************************/
    void WriteData(u8 u8_Data)
    { u8 u8_Data1; /*Take RS high for data*/ RESET_RW; SET_RS; //GPIO_WriteBit(GPIOA, GPIO_Pin_12, Bit_SET); u8_Data1=u8_Data; /*This retains the value of RS and Enable while sending the data to the data pins*/ /**********************For port C********************/ if( (u8_Data1) & (DATA_LINE_0) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_RESET); }

    if( (u8_Data1) & (DATA_LINE_1) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_2, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_2, Bit_RESET); }

    /********************************For port D*********************************/ if( (u8_Data1) & (DATA_LINE_2) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_3, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_3, Bit_RESET); } /*********************For port B******************/ if( (u8_Data1) & (DATA_LINE_3) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_4, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_4, Bit_RESET); }

    if( (u8_Data1) & (DATA_LINE_4) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_RESET); }

    if( (u8_Data1) & (DATA_LINE_5) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_6, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_6, Bit_RESET); }

    if( (u8_Data1) & (DATA_LINE_6) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_7, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_7, Bit_RESET); }

    if( (u8_Data1) & (DATA_LINE_7) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_8, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_8, Bit_RESET); } /****************************/ /*take E high*/ SET_ENABLE; Delay(MS_ONE); //ST1208S_Delay(10,210); /*take E low*/ RESET_ENABLE; Delay(MS_ONE); //ST1208S_Delay(10,210);
    } /******************************
    * Function Name : ChangeLine
    * Description : Puts the cursor on 1st position of line 1 or 2 by
    * setting DDRAM address
    * Input param : line number
    * Return : None
    ********************************/
    void ChangeLine(u8 u8_line)
    { switch(u8_line) { case 1:WriteCommand(LINEONE_HOME);/*address of the 1st position of 1st line*/ break; case 2:WriteCommand(LINETWO_HOME);/*address of the 1st position of 2nd line*/ break; }
    } /***************************************
    * Function Name : WriteString
    * Description : writes the string to the LCD
    * Input param : pointer to character string
    * Return : None
    ****************************/
    void WriteString(u8 *pu8_StringForLCD)
    { while(*pu8_StringForLCD!='\0') { WriteData(*pu8_StringForLCD); pu8_StringForLCD++; }
    } /******************************************
    * Function Name : ClrDisplay
    * Description : Clear the display of LCD
    * Input param : NONE
    * Return : NONE
    ***********************************/
    void ClrDisplay(void)
    { /*take RS low for sending Command*/ RESET_RS; Delay(MS_ONE); //ST1208S_Delay(10,210); WriteCommand(CLR_DISPLAY); Delay(MS_ONE); //ST1208S_Delay(10,210);

    }
    /******************************/

Reply
  • thanks Erik.
    this the lcd_8bits.c

    /**********************************************************************/
    /* Includes ------*/
    #include "lcd.h"
    #include "stm32f10x_conf.h"
    #include "stm32f10x.h"
    #include "LCD_8bits.h"
    /* Private functions ----------*/
    /*******************************
    * Function Name : LCD_Init
    * Description : Initialisation routine for Alphanumeric Display.
    * Input param : NONE
    * Return : None
    ******************************/
    void LCD_Init(void)
    { /*Start First Line Of LCD*/ WriteCommand(START_ONE); /*Start Second Line Of LCD*/ WriteCommand(START_TWO); /*function set-2 line display, 5*7 dots format display mode*/ WriteCommand(FUNCTION_SET); /*Display off*/ WriteCommand(DISPLAY_OFF); /*Display on,cursor off,cursor blink off*/ WriteCommand(DISPLAY_SETTINGS); /*Entry mode set-Increment and no display shift*/ WriteCommand(ENTRY_MODESET); /*clear display*/ WriteCommand(CLR_DISPLAY); /*Return home Command, sets the cursor at the beginning of the first line*/ WriteCommand(RETURN_HOME);
    } /***********************************
    * Function Name : WriteCommand
    * Description : Writes a command to the LCD
    * Input param : u8_Command i.e the command to be sent to LCD
    * Return : None
    ************************************/
    void WriteCommand( u8 u8_Command)
    { u8 u8_Cmd; u16 u16_TempVar=0; /*take RS low for Command*/ RESET_RS; //GPIO_WriteBit(GPIOA, GPIO_Pin_12, Bit_RESET); u8_Cmd =u8_Command; /*This retains the value of RS and Enable while sending the Command to the data pins*/ u16_TempVar=u16_TempVar | (u16)u8_Cmd; /********************For port C*******************/ if( (u16_TempVar) & (DATA_LINE_0) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_RESET); }

    if( (u16_TempVar) & (DATA_LINE_1) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_2, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_2, Bit_RESET); } /****************For port D***********************/ if( (u16_TempVar) & (DATA_LINE_2) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_3, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_3, Bit_RESET); } /*******************For port B**********************/ if( (u16_TempVar) & (DATA_LINE_3) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_4, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_4, Bit_RESET); }

    if( (u16_TempVar) & (DATA_LINE_4) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_RESET); }

    if( (u16_TempVar) & (DATA_LINE_5) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_6, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_6, Bit_RESET); }

    if( (u16_TempVar) & (DATA_LINE_6) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_7, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_7, Bit_RESET); }

    if( (u16_TempVar) & (DATA_LINE_7) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_8, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_8, Bit_RESET); } /*****************************************/ /* take E high to enable data to be send to the LCD*/ SET_ENABLE; Delay(MS_ONE); //ST1208S_Delay(10,210); /*takes E low*/ RESET_ENABLE; Delay(MS_ONE); //ST1208S_Delay(10,210);
    } /**********************************
    * Function Name : WriteData
    * Description : Writes a data to the LCD
    * Input param : u8_Data i.e the data to be written on LCD
    * Return : None
    ***************************************/
    void WriteData(u8 u8_Data)
    { u8 u8_Data1; /*Take RS high for data*/ RESET_RW; SET_RS; //GPIO_WriteBit(GPIOA, GPIO_Pin_12, Bit_SET); u8_Data1=u8_Data; /*This retains the value of RS and Enable while sending the data to the data pins*/ /**********************For port C********************/ if( (u8_Data1) & (DATA_LINE_0) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_RESET); }

    if( (u8_Data1) & (DATA_LINE_1) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_2, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_2, Bit_RESET); }

    /********************************For port D*********************************/ if( (u8_Data1) & (DATA_LINE_2) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_3, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_3, Bit_RESET); } /*********************For port B******************/ if( (u8_Data1) & (DATA_LINE_3) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_4, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_4, Bit_RESET); }

    if( (u8_Data1) & (DATA_LINE_4) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_RESET); }

    if( (u8_Data1) & (DATA_LINE_5) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_6, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_6, Bit_RESET); }

    if( (u8_Data1) & (DATA_LINE_6) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_7, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_7, Bit_RESET); }

    if( (u8_Data1) & (DATA_LINE_7) ) { GPIO_WriteBit(GPIOA, GPIO_Pin_8, Bit_SET); } else { GPIO_WriteBit(GPIOA, GPIO_Pin_8, Bit_RESET); } /****************************/ /*take E high*/ SET_ENABLE; Delay(MS_ONE); //ST1208S_Delay(10,210); /*take E low*/ RESET_ENABLE; Delay(MS_ONE); //ST1208S_Delay(10,210);
    } /******************************
    * Function Name : ChangeLine
    * Description : Puts the cursor on 1st position of line 1 or 2 by
    * setting DDRAM address
    * Input param : line number
    * Return : None
    ********************************/
    void ChangeLine(u8 u8_line)
    { switch(u8_line) { case 1:WriteCommand(LINEONE_HOME);/*address of the 1st position of 1st line*/ break; case 2:WriteCommand(LINETWO_HOME);/*address of the 1st position of 2nd line*/ break; }
    } /***************************************
    * Function Name : WriteString
    * Description : writes the string to the LCD
    * Input param : pointer to character string
    * Return : None
    ****************************/
    void WriteString(u8 *pu8_StringForLCD)
    { while(*pu8_StringForLCD!='\0') { WriteData(*pu8_StringForLCD); pu8_StringForLCD++; }
    } /******************************************
    * Function Name : ClrDisplay
    * Description : Clear the display of LCD
    * Input param : NONE
    * Return : NONE
    ***********************************/
    void ClrDisplay(void)
    { /*take RS low for sending Command*/ RESET_RS; Delay(MS_ONE); //ST1208S_Delay(10,210); WriteCommand(CLR_DISPLAY); Delay(MS_ONE); //ST1208S_Delay(10,210);

    }
    /******************************/

Children
  • and this the lcd_8bits.h

    /*****************************/
    /* Includes --------------------*/
    //#include "stm32f10x_type.h"
    #include "stm32f10x_gpio.h"
    /* Macro Definitions ----------*/
    #define SET_RS (GPIO_WriteBit(GPIOC, GPIO_Pin_2, Bit_SET));
    #define RESET_RS (GPIO_WriteBit(GPIOC, GPIO_Pin_2, Bit_RESET));
    #define SET_ENABLE (GPIO_WriteBit(GPIOC, GPIO_Pin_10, Bit_SET));
    #define RESET_ENABLE (GPIO_WriteBit(GPIOC, GPIO_Pin_10, Bit_RESET));
    #define SET_RW (GPIO_WriteBit(GPIOC, GPIO_Pin_9, Bit_SET));
    #define RESET_RW (GPIO_WriteBit(GPIOC, GPIO_Pin_9, Bit_RESET));
    /* private define-----------------*/
    #define LINEONE (1)// line one of 16X2 alphanumeric display
    #define LINETWO (2)// line two of 16X2 alphanumeric display
    #define LINETWO_HOME (0xc0)
    #define LINEONE_HOME (0x80)
    #define START_ONE (0x33)
    #define START_TWO (0x32)
    #define FUNCTION_SET (0x38)
    #define DISPLAY_OFF (0x08)
    #define DISPLAY_SETTINGS (0x0E)
    #define ENTRY_MODESET (0x06)
    #define CLR_DISPLAY (0x01)
    #define RETURN_HOME (0x02)
    #define MS_FIVE (0x0032)
    #define MS_FIFTEEN (0x0096)
    #define MS_EIGHTY (0x0320)
    #define VH_OnTime (0x0015)
    #define VH_OffTime (0x0004)
    #define FIVE_SEC (0xC350)
    #define MS_ONE (0x000A)
    #define ONE_SEC (0x2710)
    #define TWO_SEC (0x4E20)
    #define TEN_MILLI_SEC (0x0064)
    #define MS_P19 (0x0019)
    /*data line defination-----------------*/
    #define DATA_LINE_0 (0x0001)
    #define DATA_LINE_1 (0x0002)
    #define DATA_LINE_2 (0x0004)
    #define DATA_LINE_3 (0x0008)
    #define DATA_LINE_4 (0x0010)
    #define DATA_LINE_5 (0x0020)
    #define DATA_LINE_6 (0x0040)
    #define DATA_LINE_7 (0x0080)
    /* Exported functions ---------------- */
    /* LCD functions */
    void LCD_Init(void);
    void ClrDisplay(void);
    void WriteCommand(u8);
    void WriteData(u8);
    void ChangeLine(u8);
    void WriteString(u8 *);
    void Delay(u32);
    //-----------

    I'am using MCBSTM32 board and an lcd (phico d-0 94v-0).