more advancement on the lcd_oled.c and ssd1306.c more functions have been ported and drwa line is working

master
kerem yollu 2 years ago
parent f330f8fe9a
commit d1a570b8df

@ -113,7 +113,7 @@ uint8_t lcd_oled_display()
ssd1306_i2c_command(&i2c_device,SSD1306_PAGEADDR);
ssd1306_i2c_command(&i2c_device,0); // Page start address (0 = reset)
ssd1306_i2c_command(&i2c_device,7); // Page end address
uint8_t i2cDataLenght = 1; // Co = 0, D/C = 0
uint16_t address = SSD1306_I2C_ADDRESS; // Co = 0, D/C = 0
uint8_t reg = 0x40;
@ -125,6 +125,12 @@ uint8_t lcd_oled_display()
//Better to send all buffer
//Should be optimized
}
/*
uint16_t i2cDataLenght = (LCD_OLED_SIZE_X * SSD1306_LCDHEIGHT / 8) -1 ; // Co = 0, D/C = 0
uint16_t address = SSD1306_I2C_ADDRESS; // Co = 0, D/C = 0
uint8_t reg = 0x40;
i2c_write(&i2c_device, &address, &reg, &display_buffer, &i2cDataLenght);
*/
}
void lcd_oled_print_char(uint16_t x, uint16_t y, uint8_t c, uint8_t color)
@ -142,7 +148,7 @@ void lcd_oled_print_char(uint16_t x, uint16_t y, uint8_t c, uint8_t color)
if (i == 5)
line = 0x0;
else
line = pgm_read_byte(font + (c * 5) + i);
line = (*(const uint8_t *)(font + (c * 5) + i));
for (j = 0; j < 8; j++) {
if (line & 0x1) {
if (size == 1) // default size
@ -192,3 +198,71 @@ void lcd_oled_draw_pixel(uint16_t x, uint16_t y, uint8_t color)
break;
}
}
void lcd_oled_print_text(uint16_t x, uint16_t y, uint8_t *text, uint16_t length, uint8_t color)
{
uint8_t pos, i = 0;
for (i = 0; i < length; i++)
{
pos = x + (i * 6);
lcd_oled_print_char(pos,y,text[i],color);
}
}
void lcd_oled_draw_line(uint16_t x, uint16_t y, uint16_t angle, uint16_t lenght, uint8_t color)
{
int16_t i = 0;
switch(angle)
{
case 0:
case 360:
for(i = 0; i < lenght; i++)
{
lcd_oled_draw_pixel(x+i,y,color);
}
break;
case 45:
for(i = 0; i < lenght; i++)
{
lcd_oled_draw_pixel(x+i,y-i,color);
}
break;
case 90:
for(i = 0; i < lenght; i++)
{
lcd_oled_draw_pixel(x,y-i,color);
}
break;
case 135:
for(i = 0; i < lenght; i++)
{
lcd_oled_draw_pixel(x-i,y-i,color);
}
break;
case 180:
for(i = 0; i < lenght; i++)
{
lcd_oled_draw_pixel(x-i,y,color);
}
break;
case 225:
for(i = 0; i < lenght; i++)
{
lcd_oled_draw_pixel(x-i,y+i,color);
}
break;
case 270:
for(i = 0; i < lenght; i++)
{
lcd_oled_draw_pixel(x,y+i,color);
}
break;
case 315:
for(i = 0; i < lenght; i++)
{
lcd_oled_draw_pixel(x+i,y+i,color);
}
break;
}
}

@ -53,7 +53,7 @@ void lcd_oled_scroll_down(uint16_t start, uint16_t stop);
void lcd_oled_set_font(uint8_t *font, uint8_t size, uint8_t spacing);
void lcd_oled_print_char(uint16_t x, uint16_t y, uint8_t c, uint8_t color);
void lcd_oled_print_text(uint16_t x, uint16_t y, uint8_t *text, uint16_t lenght, uint8_t color);
void lcd_oled_print_text(uint16_t x, uint16_t y, uint8_t *text, uint16_t length, uint8_t color);
void lcd_oled_print_cursor(uint8_t blink);
void lcd_oled_goto_pos(uint16_t x, uint16_t y);

@ -337,11 +337,6 @@ void ssd1306_i2c_set_scroll(i2c_t *i2c_dev, uint8_t onOff)
}
}
// Init SSD1306
void ssd1306_begin(i2c_t *i2c_dev, uint16_t i2caddr)
{
}
void ssd1306_invertDisplay(i2c_t *i2c_dev, uint16_t i)
{
@ -361,37 +356,6 @@ void ssd1306_i2c_command(i2c_t *i2c_dev,uint16_t c)
i2c_write(i2c_dev, &address, &control, &c, &i2cDataLenght);
}
void ssd1306_display(i2c_t *i2c_dev)
{
ssd1306_i2c_command(i2c_dev,SSD1306_COLUMNADDR);
ssd1306_i2c_command(i2c_dev,0); // Column start address (0 = reset)
ssd1306_i2c_command(i2c_dev,SSD1306_LCDWIDTH - 1); // Column end address (127
// = reset)
ssd1306_i2c_command(i2c_dev,SSD1306_PAGEADDR);
ssd1306_i2c_command(i2c_dev,0); // Page start address (0 = reset)
#if SSD1306_LCDHEIGHT == 64
ssd1306_i2c_command(i2c_dev,7); // Page end address
#endif
#if SSD1306_LCDHEIGHT == 32
ssd1306_i2c_command(i2c_dev,3); // Page end address
#endif
#if SSD1306_LCDHEIGHT == 16
ssd1306_i2c_command(i2c_dev,1); // Page end address
#endif
uint8_t i2cDataLenght = 1; // Co = 0, D/C = 0
uint16_t address = SSD1306_I2C_ADDRESS; // Co = 0, D/C = 0
uint8_t reg = 0x40;
// I2C
int16_t i;
for (i = 0; i < (SSD1306_LCDWIDTH * SSD1306_LCDHEIGHT / 8); i++) {
i2c_write(i2c_dev, &address, &reg, &buffer[i], &i2cDataLenght);
//This sends byte by byte.
//Better to send all buffer without 0x40 first
//Should be optimized
}
}
// startscrollright
// Activate a right handed scroll for rows start through stop
@ -466,28 +430,6 @@ void ssd1306_stopscroll(i2c_t *i2c_dev)
ssd1306_i2c_command(i2c_dev,SSD1306_DEACTIVATE_SCROLL);
}
// Dim the display
// dim = true: display is dimmed
// dim = false: display is normal
void ssd1306_dim(i2c_t *i2c_dev, uint16_t dim)
{
uint16_t contrast;
if (dim) {
contrast = 0; // Dimmed display
} else {
if (_vccstate == SSD1306_EXTERNALVCC) {
contrast = 0x9F;
} else {
contrast = 0xCF;
}
}
// the range of contrast to too small to be really useful
// it is useful to dim the display
ssd1306_i2c_command(i2c_dev,SSD1306_SETCONTRAST);
ssd1306_i2c_command(i2c_dev,contrast);
}
void ssd1306_drawFastHLineInternal(int16_t x, int16_t y, int16_t w, uint16_t color)
{
@ -831,3 +773,14 @@ void ssd1306_clearDisplay()
{
//Adapted and optimized for oled_lcd.c
}
// Init SSD1306
void ssd1306_begin(i2c_t *i2c_dev, uint16_t i2caddr)
{
//Adapted and optimized for oled_lcd.c
}
void ssd1306_display(i2c_t *i2c_dev)
{
//Adapted and optimized for oled_lcd.c
}

@ -150,7 +150,6 @@ All text above, and the splash screen must be included in any redistribution
void ssd1306_begin(i2c_t *i2c_dev, uint16_t i2caddr);
void ssd1306_i2c_command(i2c_t *i2c_dev,uint16_t c);
void ssd1306_display(i2c_t *i2c_dev);
void ssd1306_invertDisplay(i2c_t *i2c_dev, uint16_t i);
void ssd1306_display(i2c_t *i2c_dev);
@ -163,8 +162,6 @@ void ssd1306_startscrolldiagright(i2c_t *i2c_dev, uint16_t start, uint16_t stop)
void ssd1306_startscrolldiagleft(i2c_t *i2c_dev, uint16_t start, uint16_t stop);
void ssd1306_stopscroll(i2c_t *i2c_dev);
void ssd1306_dim(i2c_t *i2c_dev, uint16_t dim);
void ssd1306_drawPixel(int16_t x, int16_t y, uint16_t color);
void ssd1306_drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color);
@ -188,12 +185,11 @@ void ssd1306_i2c_set_segment_remap(i2c_t *i2c_dev, uint8_t enable);
void ssd1306_i2c_set_com_scan_direction(i2c_t *i2c_dev, uint8_t incremental);
void ssd1306_i2c_set_com_pins(i2c_t *i2c_dev, uint8_t alignment);
void ssd1306_i2c_set_contrast(i2c_t *i2c_dev, uint8_t contrast);
void ssd1306_i2c_set_dimm(i2c_t *i2c_dev, uint8_t dimm);
void ssd1306_i2c_set_prechage_period(i2c_t *i2c_dev, uint8_t period);
void ssd1306_i2c_set_com_deselect_level(i2c_t *i2c_dev, uint8_t voltageLevel);
void ssd1306_i2c_set_display_entire_on(i2c_t *i2c_dev, uint8_t resumeOrForce);
void ssd1306_i2c_set_display_invert_pixel(i2c_t *i2c_dev, uint8_t inverted);
void ssd1306_i2c_set_scroll(i2c_t *i2c_dev, uint8_t onOff);
#endif /* _SSD1306_I2C_H_ */

@ -73,51 +73,20 @@ int main(int argc, char *argv[])
lcd_oled_display(); //Adafruit logo is visible
delayMs(1000);
lcd_oled_clear();
uint8_t text[30]="KED Wellcomes You";
lcd_oled_print_text(0,5,text,18,WHITE);
i = 5;
lcd_oled_print_char(i, 5, 'K' , WHITE);
i += 6;
lcd_oled_print_char(i, 5, 'E' , WHITE);
i += 6;
lcd_oled_print_char(i, 5, 'D' , WHITE);
i += 6;
lcd_oled_print_char(i, 5, ' ' , WHITE);
i += 6;
lcd_oled_print_char(i, 5, 'W' , WHITE);
i += 6;
lcd_oled_print_char(i, 5, 'E' , WHITE);
i += 6;
lcd_oled_print_char(i, 5, 'L' , WHITE);
i += 6;
lcd_oled_print_char(i, 5, 'C' , WHITE);
i += 6;
lcd_oled_print_char(i, 5, 'O' , WHITE);
i += 6;
lcd_oled_print_char(i, 5, 'M' , WHITE);
i += 6;
lcd_oled_print_char(i, 5, 'E' , WHITE);
i += 6;
lcd_oled_print_char(i, 5, 'S' , WHITE);
i += 6;
lcd_oled_print_char(i, 5, ' ' , WHITE);
i += 6;
lcd_oled_print_char(i, 5, 'Y' , WHITE);
i += 6;
lcd_oled_print_char(i, 5, 'O' , WHITE);
i += 6;
lcd_oled_print_char(i, 5, 'U' , WHITE);
for(i = 15; i < 50; i++)
{
lcd_oled_draw_pixel(i,i,WHITE);
}
lcd_oled_draw_line(64, 32, 0, 10, WHITE);
lcd_oled_draw_line(64, 32, 45, 10, WHITE);
lcd_oled_draw_line(64, 32, 90, 10, WHITE);
lcd_oled_draw_line(64, 32, 135, 10, WHITE);
lcd_oled_draw_line(64, 32, 180, 10, WHITE);
lcd_oled_draw_line(64, 32, 225, 10, WHITE);
lcd_oled_draw_line(64, 32, 270, 10, WHITE);
lcd_oled_draw_line(64, 32, 315, 10, WHITE);
for(i = 15; i < 53; i++)
{
lcd_oled_draw_pixel(15,i,WHITE);
}
lcd_oled_display(&i2c_1);
delayMs(2000);
print_Usart(usart2, "\n\r");
print_Usart(usart2, "All Is Working fine ");

@ -67,21 +67,22 @@ void i2c_read(i2c_t *i2c_dev, uint16_t *slaveAddress, uint8_t *registerAddress,
void i2c_write(i2c_t *i2c_dev, uint16_t *slaveAddress, uint8_t *registerAddress, uint8_t *data, uint8_t *dataLenght)
{
i2c_dev->periferalState = i2c_perif_write;
i2c_set_transfer_counter(i2c_dev,2);
uint8_t i = *dataLenght + 1 ;
i2c_dev->periferalState = i2c_perif_write;
i2c_set_transfer_counter(i2c_dev,i);
i2c_send_address_for_write(i2c_dev, slaveAddress);
i2c_send_reg_address(i2c_dev, registerAddress);
i2c_send_data(i2c_dev, data);
for(i = 0; i < *dataLenght; i++)
{
i2c_send_data(i2c_dev, data);
}
while(!i2c_is_transfer_complete(i2c_dev));
i2c_send_stop(i2c_dev);
i2c_send_stop(i2c_dev);
while(!i2c_is_perif_ready(i2c_dev));
}
uint8_t i2c_check_device(i2c_t *i2c_dev, uint16_t *device)
{
uint8_t found = 0;
i2c_dev->periferalState = i2c_perif_write;
i2c_set_transfer_counter(i2c_dev,0);
i2c_send_address_for_write(i2c_dev, device);
@ -99,11 +100,11 @@ uint8_t i2c_check_device(i2c_t *i2c_dev, uint16_t *device)
uint8_t i2c_discover_devices(i2c_t *i2c_dev)
{
uint16_t i = 0;
char pt;
for(i = 0x03; i <= 0x77; i++)
{
i2c_check_device(i2c_dev,&i);
}
return 1;
}

Loading…
Cancel
Save