The first commit of the code is up. Right now it does not do any clipping and there are a few optimizations I can do to increase the throughput, I will do those as I put the library to a real test. There is a sample font included, I used my favorite font the original IBM BIOS font.
The library can be found at the following location
Here is the code for the sample in the last video which shows how to draw bitmaps as well. Sorry it is so long, but the bitmaps are just embedded in the code. I have written a little tool that converts any bitmap to a bitmap compatible with this library, if anyone is interested I will clean it up and post it on codeshare… mmm is codeshare alright to share none NETMF utilities?
#include "mbed.h"
#include "LCD_ST7735.h"
#include "font_IBM.h"
const uint16_t frame1[] = {
0x10, 0x10,
0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f, 0x001f, 0x001f,
0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f, 0x001f,
0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f, 0x001f,
0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f,
0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f,
0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f,
0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f,
0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f,
0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f, 0x001f,
0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f, 0x001f, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f,
};
const uint16_t frame2[] = {
0x10, 0x10,
0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f, 0x001f, 0x001f,
0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f, 0x001f,
0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f,
0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f, 0x001f,
0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f, 0x001f, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f,
};
const uint16_t frame3[] = {
0x10, 0x10,
0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f, 0x001f, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f, 0x001f, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f,
0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f, 0x001f,
};
void Marque(LCD_ST7735 &display, char *msg)
{
display.drawString(font_ibm, 4, 10, msg);
char c = msg[0];
memcpy(msg, msg + 1, strlen(msg) - 1);
msg[strlen(msg) - 1] = c;
}
main()
{
LCD_ST7735 n18(
P0_15, // backlight
P0_10, // reset
P0_13, // ds
P0_21, // mosi
P0_22, // miso
P1_15, // clk
P0_11);// cs
n18.drawRect(34, 50, 94, 110, 0x0fe0);
n18.drawCircle(64, 80, 30, 0x001f);
for(int x = 0; x < 128; ++x)
{
n18.drawLine(x, 0, 127 - x, 159, 0xf81f);
}
for(int y = 0; y < 160; ++y)
{
n18.drawLine(0, y, 127, 159 - y, 0xf81f);
}
n18.fillRect(10, 10, 117, 149, 0xfc04, 0x441f);
n18.fillCircle(64, 80, 60, 0xf800, 0x001f);
char msg[] = "Hello mBuino! ";
while (true)
{
Marque(n18, msg);
n18.drawBitmap(56, 72, frame1);
wait_ms(100);
Marque(n18, msg);
n18.drawBitmap(56, 72, frame2);
wait_ms(100);
Marque(n18, msg);
n18.drawBitmap(56, 72, frame3);
wait_ms(100);
Marque(n18, msg);
n18.drawBitmap(56, 72, frame2);
wait_ms(100);
}
}