void lcdPutChar(char_t c) { if(c == '\r') { lcdColumn = 0; } else if(c == '\n') { lcdColumn = 0; lcdLine++; } else if(lcdLine < 2 && lcdColumn < 19) { //Set cursor if(lcdLine == 0) OLED_set_cursor(FIRST_LINE, lcdColumn); else OLED_set_cursor(SECOND_LINE, lcdColumn); //Display current character OLED_write_char(c); //Advance the cursor position if(++lcdColumn >= 19) { lcdColumn = 0; lcdLine++; } } }
/***************************************************************************//** OLED_init() See "oled.h" for details of how to use this function. */ void OLED_init(void ) { uint8_t oled_init_sequence1[] = { OLED_COMMAND_CODE, CMD_DISPLAY_NON_INV, OLED_COMMAND_CODE, CMD_DISPLAY_ALL_OFF, OLED_COMMAND_CODE, CMD_MIRROR_HORI_ON, OLED_COMMAND_CODE, CMD_MIRROR_VERT_OFF, OLED_COMMAND_CODE, CMD_HORI_SCRL_OFF, OLED_COMMAND_CODE, CMD_CONTRAST, OLED_COMMAND_CODE, CONTRAST_DEFAULT, OLED_COMMAND_CODE, CMD_ARECOL_LPM, OLED_COMMAND_CODE, CMD_ARECOL_MONO^CMD_LPM_OFF }; uint8_t oled_init_sequence2[] = { OLED_COMMAND_CODE, CMD_START_LINE, OLED_COMMAND_CODE, CMD_PANEL_ON }; MSS_I2C_init( g_p_oled_i2c, OLED_SLAVE_ADDRESS, MSS_I2C_PCLK_DIV_60 ); MSS_I2C_write( g_p_oled_i2c, OLED_SLAVE_ADDRESS, oled_init_sequence1, sizeof(oled_init_sequence1), MSS_I2C_RELEASE_BUS ); MSS_I2C_wait_complete( g_p_oled_i2c ); OLED_clear_display(BOTH_LINES); MSS_I2C_write( g_p_oled_i2c, OLED_SLAVE_ADDRESS, oled_init_sequence2, sizeof(oled_init_sequence2), MSS_I2C_RELEASE_BUS ); MSS_I2C_wait_complete( g_p_oled_i2c ); OLED_set_cursor( FIRST_LINE, FIRST_CHARACTER ); }
/***************************************************************************//** OLED_write_data() See "oled.h" for details of how to use this function. */ void OLED_write_data(struct oled_data* data, oled_no_of_line LINES) { uint8_t line; uint8_t char_offset; char *string; switch(LINES) { case FIRST_LINE: { OLED_clear_display(FIRST_LINE); line = data->line1; char_offset = data->char_offset1; string = data->string1; } case SECOND_LINE: { OLED_clear_display(SECOND_LINE); line = data->line2; char_offset = data->char_offset2; string = data->string2; } case BOTH_LINES: { OLED_clear_display(BOTH_LINES); line = data->line1; char_offset = data->char_offset1; string = data->string1; OLED_set_cursor(line,char_offset); OLED_write_string(string); line = data->line2; char_offset = data->char_offset2; string = data->string2; } OLED_set_cursor(line,char_offset); OLED_write_string(string); OLED_contrast(data->contrast_val); } }
/***************************************************************************//** OLED_clear_display() See "oled.h" for details of how to use this function. */ void OLED_clear_display( oled_no_of_line LINES ) { uint8_t i, j,start_line,end_line; uint8_t clear_8_columns[] = { OLED_DATA_CODE, 0x00, OLED_DATA_CODE, 0x00, OLED_DATA_CODE, 0x00, OLED_DATA_CODE, 0x00, OLED_DATA_CODE, 0x00, OLED_DATA_CODE, 0x00, OLED_DATA_CODE, 0x00, OLED_DATA_CODE, 0x00 }; switch(LINES) { case FIRST_LINE: { start_line = FIRST_LINE; end_line = FIRST_LINE; } case SECOND_LINE: { start_line = SECOND_LINE; end_line = SECOND_LINE; } case BOTH_LINES: { start_line = FIRST_LINE; end_line = SECOND_LINE; } } for( j = start_line; j <= end_line; ++j ) { OLED_set_cursor( j, FIRST_CHARACTER ); for( i = 0; i < 13; ++i ) { MSS_I2C_write( g_p_oled_i2c, OLED_SLAVE_ADDRESS, clear_8_columns, sizeof(clear_8_columns), MSS_I2C_RELEASE_BUS ); MSS_I2C_wait_complete( g_p_oled_i2c ); } } }