
void lcd_set_pixel(x, y)
{    
    address = y * 30 + (x >> 3); // convert x y into sequential address (30 columns)
    lcd_write_data(address & 0x0ff); // write lower byte first
    lcd_write_data(address >> 8); // write upper byte
    lcd_write_command(LCD_ADDRESS_POINTER_SET); // position cursor at that address
    lcd_write_command(LCD_DATA_READ_NO_INCREMENT); // read current byte
    data = lcd_bit_to_byte(7 - (x % 8));
    data = data | lcd_read_data(); // read existing byte( my pixel + 7 neighbours)
    lcd_write_data(data);
    lcd_write_command(LCD_DATA_WRITE_NO_INCREMENT);
}
