commit
4dcb901544
4
Makefile
4
Makefile
|
@ -2,7 +2,7 @@ AVRMCU ?= atmega8
|
||||||
F_CPU ?= 16000000
|
F_CPU ?= 16000000
|
||||||
ISPPORT ?= /dev/kaboard
|
ISPPORT ?= /dev/kaboard
|
||||||
|
|
||||||
VERSION = 0.1
|
VERSION = 0.2
|
||||||
|
|
||||||
HEADERS = include/spi.h include/st7735.h include/st7735initcmds.h
|
HEADERS = include/spi.h include/st7735.h include/st7735initcmds.h
|
||||||
HEADERS += images/logo_bw.h images/logo.h include/st7735_gfx.h
|
HEADERS += images/logo_bw.h images/logo.h include/st7735_gfx.h
|
||||||
|
@ -19,7 +19,7 @@ SIZE = avr-size
|
||||||
SRC_TMP = $(subst ../,,$(SRC))
|
SRC_TMP = $(subst ../,,$(SRC))
|
||||||
OBJ = $(SRC_TMP:%.c=$(OBJDIR)/$(AVRMCU)/%.o)
|
OBJ = $(SRC_TMP:%.c=$(OBJDIR)/$(AVRMCU)/%.o)
|
||||||
|
|
||||||
CFLAGS = -I include -I images -I fonts -Os -Wall -Wstrict-prototypes
|
CFLAGS = -I include -I images -I fonts -Os -Wall -Wstrict-prototypes --std=c99
|
||||||
CFLAGS += -ffunction-sections -fdata-sections
|
CFLAGS += -ffunction-sections -fdata-sections
|
||||||
CFLAGS += -fshort-enums -fpack-struct -funsigned-char -funsigned-bitfields
|
CFLAGS += -fshort-enums -fpack-struct -funsigned-char -funsigned-bitfields
|
||||||
CFLAGS += -mmcu=$(AVRMCU) -DF_CPU=$(F_CPU)UL -DVERSION=$(VERSION)
|
CFLAGS += -mmcu=$(AVRMCU) -DF_CPU=$(F_CPU)UL -DVERSION=$(VERSION)
|
||||||
|
|
43
README.md
43
README.md
|
@ -11,7 +11,50 @@ and parts of https://github.com/adafruit/Adafruit-GFX-Library/
|
||||||
Tweaks
|
Tweaks
|
||||||
------
|
------
|
||||||
|
|
||||||
|
By LongHairedHacker:
|
||||||
|
|
||||||
* Uses my own bitmap format for fullcolor and monochrome bitmaps
|
* Uses my own bitmap format for fullcolor and monochrome bitmaps
|
||||||
* Faster line drawing based on: https://github.com/adafruit/Adafruit-GFX-Library/pull/36
|
* Faster line drawing based on: https://github.com/adafruit/Adafruit-GFX-Library/pull/36
|
||||||
* Faster font rendering based on https://github.com/adafruit/Adafruit-GFX-Library/issues/69
|
* Faster font rendering based on https://github.com/adafruit/Adafruit-GFX-Library/issues/69
|
||||||
* Refactored draw_char function that does not load glyph struct twice
|
* Refactored draw_char function that does not load glyph struct twice
|
||||||
|
|
||||||
|
By Massey101:
|
||||||
|
|
||||||
|
* Added support for bitmap clipping
|
||||||
|
* Added JAYCAR screen for XC4629 support
|
||||||
|
|
||||||
|
|
||||||
|
Usage
|
||||||
|
-----
|
||||||
|
|
||||||
|
Connect the display to the following PINS:
|
||||||
|
|
||||||
|
JAYCAR screen and ATMEGA328:
|
||||||
|
+--------+--------+
|
||||||
|
| Screen | AVR |
|
||||||
|
+--------+--------+
|
||||||
|
| VCC | 5V |
|
||||||
|
+--------+--------+
|
||||||
|
| GND | GND |
|
||||||
|
+--------+--------+
|
||||||
|
| CS | PB2 |
|
||||||
|
+--------+--------+
|
||||||
|
| RESET | PD7 |
|
||||||
|
+--------+--------+
|
||||||
|
| A0 | PD6 |
|
||||||
|
+--------+--------+
|
||||||
|
| SDA | PB3 |
|
||||||
|
+--------+--------+
|
||||||
|
| SCK | PB5 |
|
||||||
|
+--------+--------+
|
||||||
|
| LED | 3.3V |
|
||||||
|
+--------+--------+
|
||||||
|
|
||||||
|
|
||||||
|
1. Set the environment variables for:
|
||||||
|
- `AVRMCU` - Your avr chip
|
||||||
|
- `F_CPU` - Your clock speed
|
||||||
|
- `ISPPORT` - programming device
|
||||||
|
2. Modify `include/st7735.h:st7735_type` to your screen. (I have no idea how to
|
||||||
|
figure out which is which)
|
||||||
|
3. Run `make flash`
|
||||||
|
|
|
@ -16,10 +16,11 @@ enum ST7735_DISPLAY_TYPE {
|
||||||
ST7735_RED_18_GREENTAB,
|
ST7735_RED_18_GREENTAB,
|
||||||
ST7735_RED_18_REDTAB,
|
ST7735_RED_18_REDTAB,
|
||||||
ST7735_RED_18_BLACKTAB,
|
ST7735_RED_18_BLACKTAB,
|
||||||
ST7735_RED144_GREENTAB
|
ST7735_RED144_GREENTAB,
|
||||||
|
ST7735_RED144_JAYCAR
|
||||||
};
|
};
|
||||||
|
|
||||||
static const enum ST7735_DISPLAY_TYPE st7735_type = ST7735_RED_18_BLACKTAB;
|
static const enum ST7735_DISPLAY_TYPE st7735_type = ST7735_RED144_JAYCAR;
|
||||||
|
|
||||||
|
|
||||||
// ST7735 commands
|
// ST7735 commands
|
||||||
|
|
7
main.c
7
main.c
|
@ -6,10 +6,7 @@
|
||||||
#include "st7735_gfx.h"
|
#include "st7735_gfx.h"
|
||||||
#include "st7735_font.h"
|
#include "st7735_font.h"
|
||||||
|
|
||||||
//#include "logo.h"
|
|
||||||
#include "logo_bw.h"
|
#include "logo_bw.h"
|
||||||
|
|
||||||
//#include "tom_thumb.h"
|
|
||||||
#include "free_sans.h"
|
#include "free_sans.h"
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
|
@ -19,9 +16,7 @@ int main(void) {
|
||||||
st7735_set_orientation(ST7735_LANDSCAPE);
|
st7735_set_orientation(ST7735_LANDSCAPE);
|
||||||
st7735_fill_rect(0, 0, 160, 128, ST7735_COLOR_BLACK);
|
st7735_fill_rect(0, 0, 160, 128, ST7735_COLOR_BLACK);
|
||||||
|
|
||||||
st7735_draw_mono_bitmap(16, 4, &logo_bw, ST7735_COLOR_WHITE, ST7735_COLOR_BLACK);
|
st7735_draw_mono_bitmap(16, 4, (PGM_P) logo_bw, ST7735_COLOR_WHITE, ST7735_COLOR_BLACK);
|
||||||
|
|
||||||
//st7735_draw_bitmap(10, 10, &logo);
|
|
||||||
|
|
||||||
|
|
||||||
for(uint8_t x = 8; x <= 160; x += 8) {
|
for(uint8_t x = 8; x <= 160; x += 8) {
|
||||||
|
|
105
st7735.c
105
st7735.c
|
@ -132,12 +132,22 @@ void st7735_init() {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ST7735_RED144_GREENTAB:
|
case ST7735_RED144_GREENTAB:
|
||||||
st7735_run_command_list(st7735_red_init1);
|
|
||||||
st7735_run_command_list(st7735_red_init_green1442);
|
|
||||||
st7735_run_command_list(st7735_red_init3);
|
|
||||||
st7735_height = st7735_default_height_144;
|
st7735_height = st7735_default_height_144;
|
||||||
st7735_column_start = 2;
|
st7735_column_start = 2;
|
||||||
st7735_row_start = 3;
|
st7735_row_start = 3;
|
||||||
|
st7735_run_command_list(st7735_red_init1);
|
||||||
|
st7735_run_command_list(st7735_red_init_green1442);
|
||||||
|
st7735_run_command_list(st7735_red_init3);
|
||||||
|
st7735_width = st7735_default_width;
|
||||||
|
st7735_height = st7735_default_height_144;
|
||||||
|
break;
|
||||||
|
case ST7735_RED144_JAYCAR:
|
||||||
|
st7735_height = st7735_default_height_144;
|
||||||
|
st7735_column_start = 32;
|
||||||
|
st7735_row_start = 0;
|
||||||
|
st7735_run_command_list(st7735_red_init1);
|
||||||
|
st7735_run_command_list(st7735_red_init_green1442);
|
||||||
|
st7735_run_command_list(st7735_red_init3);
|
||||||
st7735_width = st7735_default_width;
|
st7735_width = st7735_default_width;
|
||||||
st7735_height = st7735_default_height_144;
|
st7735_height = st7735_default_height_144;
|
||||||
break;
|
break;
|
||||||
|
@ -168,11 +178,19 @@ void st7735_set_orientation(enum ST7735_ORIENTATION orientation) {
|
||||||
|
|
||||||
st7735_width = st7735_default_width;
|
st7735_width = st7735_default_width;
|
||||||
|
|
||||||
if(st7735_type == ST7735_RED144_GREENTAB) {
|
if(
|
||||||
st7735_height = st7735_default_height_144;
|
st7735_type == ST7735_RED144_GREENTAB ||
|
||||||
|
st7735_type == ST7735_RED144_JAYCAR
|
||||||
|
) {
|
||||||
|
st7735_height = st7735_default_height_144;
|
||||||
} else {
|
} else {
|
||||||
st7735_height = st7735_default_height_18;
|
st7735_height = st7735_default_height_18;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(st7735_type == ST7735_RED144_JAYCAR) {
|
||||||
|
st7735_column_start = 0;
|
||||||
|
st7735_row_start = 32;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
@ -183,13 +201,20 @@ void st7735_set_orientation(enum ST7735_ORIENTATION orientation) {
|
||||||
st7735_write_data(MADCTL_MY | MADCTL_MV | MADCTL_BGR);
|
st7735_write_data(MADCTL_MY | MADCTL_MV | MADCTL_BGR);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(st7735_type == ST7735_RED144_GREENTAB) {
|
if(
|
||||||
|
st7735_type == ST7735_RED144_GREENTAB ||
|
||||||
|
st7735_type == ST7735_RED144_JAYCAR
|
||||||
|
) {
|
||||||
st7735_width = st7735_default_height_144;
|
st7735_width = st7735_default_height_144;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
st7735_width = st7735_default_height_18;
|
st7735_width = st7735_default_height_18;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(st7735_type == ST7735_RED144_JAYCAR) {
|
||||||
|
st7735_column_start = 32;
|
||||||
|
}
|
||||||
|
|
||||||
st7735_height = st7735_default_width;
|
st7735_height = st7735_default_width;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -202,11 +227,19 @@ void st7735_set_orientation(enum ST7735_ORIENTATION orientation) {
|
||||||
|
|
||||||
st7735_width = st7735_default_width;
|
st7735_width = st7735_default_width;
|
||||||
|
|
||||||
if(st7735_type == ST7735_RED144_GREENTAB) {
|
if(
|
||||||
|
st7735_type == ST7735_RED144_GREENTAB ||
|
||||||
|
st7735_type == ST7735_RED144_JAYCAR
|
||||||
|
) {
|
||||||
st7735_height = st7735_default_height_144;
|
st7735_height = st7735_default_height_144;
|
||||||
} else {
|
} else {
|
||||||
st7735_height = st7735_default_height_18;
|
st7735_height = st7735_default_height_18;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(st7735_type == ST7735_RED144_JAYCAR) {
|
||||||
|
st7735_column_start = 0;
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ST7735_LANDSCAPE_INV:
|
case ST7735_LANDSCAPE_INV:
|
||||||
|
@ -216,12 +249,19 @@ void st7735_set_orientation(enum ST7735_ORIENTATION orientation) {
|
||||||
st7735_write_data(MADCTL_MX | MADCTL_MV | MADCTL_BGR);
|
st7735_write_data(MADCTL_MX | MADCTL_MV | MADCTL_BGR);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (st7735_type == ST7735_RED144_GREENTAB) {
|
if(
|
||||||
|
st7735_type == ST7735_RED144_GREENTAB ||
|
||||||
|
st7735_type == ST7735_RED144_JAYCAR
|
||||||
|
) {
|
||||||
st7735_width = st7735_default_height_144;
|
st7735_width = st7735_default_height_144;
|
||||||
} else {
|
} else {
|
||||||
st7735_width = st7735_default_height_18;
|
st7735_width = st7735_default_height_18;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(st7735_type == ST7735_RED144_JAYCAR) {
|
||||||
|
st7735_column_start = 0;
|
||||||
|
}
|
||||||
|
|
||||||
st7735_height = st7735_default_width;
|
st7735_height = st7735_default_width;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -287,29 +327,36 @@ void st7735_fill_rect(uint8_t x, uint8_t y, uint8_t w, uint8_t h, uint16_t color
|
||||||
|
|
||||||
|
|
||||||
void st7735_draw_bitmap(uint8_t x, uint8_t y, PGM_P bitmap) {
|
void st7735_draw_bitmap(uint8_t x, uint8_t y, PGM_P bitmap) {
|
||||||
if(x >= st7735_width || y >= st7735_height) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t w = pgm_read_word(bitmap);
|
uint8_t w = pgm_read_word(bitmap);
|
||||||
bitmap += 2;
|
bitmap += 2;
|
||||||
uint8_t h = pgm_read_word(bitmap);
|
uint8_t h = pgm_read_word(bitmap);
|
||||||
bitmap += 2;
|
bitmap += 2;
|
||||||
|
uint8_t max_x = x + w - 1;
|
||||||
|
uint8_t max_y = y + h - 1;
|
||||||
|
|
||||||
if((x + w - 1) >= st7735_width) {
|
if(x >= st7735_width || y >= st7735_height) {
|
||||||
return;
|
|
||||||
}
|
|
||||||
if((y + h - 1) >= st7735_height) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
st7735_set_addr_win(x, y, x + w - 1, y + h - 1);
|
if(max_x >= st7735_width) {
|
||||||
|
max_x = st7735_width - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(max_y >= st7735_height) {
|
||||||
|
max_y = st7735_height - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
st7735_set_addr_win(x, y, max_x, max_y);
|
||||||
|
|
||||||
st7735_set_rs();
|
st7735_set_rs();
|
||||||
spi_unset_cs();
|
spi_unset_cs();
|
||||||
|
|
||||||
for(uint8_t i = 0; i < h; i++) {
|
for(uint8_t i = 0; i < h; i++) {
|
||||||
for(uint8_t j = 0; j < w; j++) {
|
for(uint8_t j = 0; j < w; j++) {
|
||||||
|
if((x + j) >= st7735_width || (y + i) >= st7735_height) {
|
||||||
|
bitmap += 2;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
uint16_t color = pgm_read_word(bitmap);
|
uint16_t color = pgm_read_word(bitmap);
|
||||||
st7735_write_color(color);
|
st7735_write_color(color);
|
||||||
bitmap += 2;
|
bitmap += 2;
|
||||||
|
@ -322,19 +369,22 @@ void st7735_draw_bitmap(uint8_t x, uint8_t y, PGM_P bitmap) {
|
||||||
void st7735_draw_mono_bitmap(uint8_t x, uint8_t y, PGM_P bitmap, uint16_t color_set, uint16_t color_unset) {
|
void st7735_draw_mono_bitmap(uint8_t x, uint8_t y, PGM_P bitmap, uint16_t color_set, uint16_t color_unset) {
|
||||||
uint8_t w = pgm_read_byte(bitmap++);
|
uint8_t w = pgm_read_byte(bitmap++);
|
||||||
uint8_t h = pgm_read_byte(bitmap++);
|
uint8_t h = pgm_read_byte(bitmap++);
|
||||||
|
uint8_t max_x = x + w - 1;
|
||||||
|
uint8_t max_y = y + h - 1;
|
||||||
|
|
||||||
if(x >= st7735_width || y >= st7735_height) {
|
if(x >= st7735_width || y >= st7735_height) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if((x + w - 1) >= st7735_width) {
|
if(max_x >= st7735_width) {
|
||||||
return;
|
max_x = st7735_width - 1;
|
||||||
}
|
|
||||||
if((y + h - 1) >= st7735_height) {
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
st7735_set_addr_win(x, y, x + w - 1, y + h - 1);
|
if(max_y >= st7735_height) {
|
||||||
|
max_y = st7735_height - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
st7735_set_addr_win(x, y, max_x, max_y);
|
||||||
|
|
||||||
st7735_set_rs();
|
st7735_set_rs();
|
||||||
spi_unset_cs();
|
spi_unset_cs();
|
||||||
|
@ -347,6 +397,10 @@ void st7735_draw_mono_bitmap(uint8_t x, uint8_t y, PGM_P bitmap, uint16_t color_
|
||||||
byte = pgm_read_byte(bitmap++);
|
byte = pgm_read_byte(bitmap++);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if((x + j) >= st7735_width || (y + i) >= st7735_height) {
|
||||||
|
bit_pos++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if(byte & (1 << (bit_pos % 8))) {
|
if(byte & (1 << (bit_pos % 8))) {
|
||||||
st7735_write_color(color_set);
|
st7735_write_color(color_set);
|
||||||
}
|
}
|
||||||
|
@ -358,5 +412,4 @@ void st7735_draw_mono_bitmap(uint8_t x, uint8_t y, PGM_P bitmap, uint16_t color_
|
||||||
}
|
}
|
||||||
|
|
||||||
spi_set_cs();
|
spi_set_cs();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue