7 changed files with 609 additions and 4 deletions
-
1.clang_complete
-
5Makefile
-
8README.md
-
476fonts/tom_thumb.h
-
25include/st7735_font.h
-
13main.c
-
85st7735_font.c
@ -1,5 +1,6 @@ |
|||
-Iinclude |
|||
-Iimages |
|||
-Ifonts |
|||
-I/usr/avr/include |
|||
-D__AVR_ATmega8__ |
|||
-DF_CPU=16000000 |
|||
|
@ -0,0 +1,476 @@ |
|||
/** |
|||
** The original 3x5 font is licensed under the 3-clause BSD license: |
|||
** |
|||
** Copyright 1999 Brian J. Swetland |
|||
** Copyright 1999 Vassilii Khachaturov |
|||
** Portions (of vt100.c/vt100.h) copyright Dan Marks |
|||
** |
|||
** All rights reserved. |
|||
** |
|||
** Redistribution and use in source and binary forms, with or without |
|||
** modification, are permitted provided that the following conditions |
|||
** are met: |
|||
** 1. Redistributions of source code must retain the above copyright |
|||
** notice, this list of conditions, and the following disclaimer. |
|||
** 2. Redistributions in binary form must reproduce the above copyright |
|||
** notice, this list of conditions, and the following disclaimer in the |
|||
** documentation and/or other materials provided with the distribution. |
|||
** 3. The name of the authors may not be used to endorse or promote products |
|||
** derived from this software without specific prior written permission. |
|||
** |
|||
** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
|||
** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
|||
** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
|||
** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
|||
** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
|||
** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
|||
** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|||
** |
|||
** Modifications to Tom Thumb for improved readability are from Robey Pointer, |
|||
** see: |
|||
** http://robey.lag.net/2010/01/23/tiny-monospace-font.html |
|||
** |
|||
** The original author does not have any objection to relicensing of Robey |
|||
** Pointer's modifications (in this file) in a more permissive license. See |
|||
** the discussion at the above blog, and also here: |
|||
** http://opengameart.org/forumtopic/how-to-submit-art-using-the-3-clause-bsd-license |
|||
** |
|||
** Feb 21, 2016: Conversion from Linux BDF --> Adafruit GFX font, |
|||
** with the help of this Python script: |
|||
** https://gist.github.com/skelliam/322d421f028545f16f6d |
|||
** William Skellenger (williamj@skellenger.net) |
|||
** Twitter: @skelliam |
|||
** |
|||
*/ |
|||
|
|||
#include "st7735_font.h" |
|||
|
|||
#define TOMTHUMB_USE_EXTENDED 0 |
|||
|
|||
const uint8_t TomThumbBitmaps[] PROGMEM = { |
|||
0x00, /* 0x20 space */ |
|||
0x80, 0x80, 0x80, 0x00, 0x80, /* 0x21 exclam */ |
|||
0xA0, 0xA0, /* 0x22 quotedbl */ |
|||
0xA0, 0xE0, 0xA0, 0xE0, 0xA0, /* 0x23 numbersign */ |
|||
0x60, 0xC0, 0x60, 0xC0, 0x40, /* 0x24 dollar */ |
|||
0x80, 0x20, 0x40, 0x80, 0x20, /* 0x25 percent */ |
|||
0xC0, 0xC0, 0xE0, 0xA0, 0x60, /* 0x26 ampersand */ |
|||
0x80, 0x80, /* 0x27 quotesingle */ |
|||
0x40, 0x80, 0x80, 0x80, 0x40, /* 0x28 parenleft */ |
|||
0x80, 0x40, 0x40, 0x40, 0x80, /* 0x29 parenright */ |
|||
0xA0, 0x40, 0xA0, /* 0x2A asterisk */ |
|||
0x40, 0xE0, 0x40, /* 0x2B plus */ |
|||
0x40, 0x80, /* 0x2C comma */ |
|||
0xE0, /* 0x2D hyphen */ |
|||
0x80, /* 0x2E period */ |
|||
0x20, 0x20, 0x40, 0x80, 0x80, /* 0x2F slash */ |
|||
0x60, 0xA0, 0xA0, 0xA0, 0xC0, /* 0x30 zero */ |
|||
0x40, 0xC0, 0x40, 0x40, 0x40, /* 0x31 one */ |
|||
0xC0, 0x20, 0x40, 0x80, 0xE0, /* 0x32 two */ |
|||
0xC0, 0x20, 0x40, 0x20, 0xC0, /* 0x33 three */ |
|||
0xA0, 0xA0, 0xE0, 0x20, 0x20, /* 0x34 four */ |
|||
0xE0, 0x80, 0xC0, 0x20, 0xC0, /* 0x35 five */ |
|||
0x60, 0x80, 0xE0, 0xA0, 0xE0, /* 0x36 six */ |
|||
0xE0, 0x20, 0x40, 0x80, 0x80, /* 0x37 seven */ |
|||
0xE0, 0xA0, 0xE0, 0xA0, 0xE0, /* 0x38 eight */ |
|||
0xE0, 0xA0, 0xE0, 0x20, 0xC0, /* 0x39 nine */ |
|||
0x80, 0x00, 0x80, /* 0x3A colon */ |
|||
0x40, 0x00, 0x40, 0x80, /* 0x3B semicolon */ |
|||
0x20, 0x40, 0x80, 0x40, 0x20, /* 0x3C less */ |
|||
0xE0, 0x00, 0xE0, /* 0x3D equal */ |
|||
0x80, 0x40, 0x20, 0x40, 0x80, /* 0x3E greater */ |
|||
0xE0, 0x20, 0x40, 0x00, 0x40, /* 0x3F question */ |
|||
0x40, 0xA0, 0xE0, 0x80, 0x60, /* 0x40 at */ |
|||
0x40, 0xA0, 0xE0, 0xA0, 0xA0, /* 0x41 A */ |
|||
0xC0, 0xA0, 0xC0, 0xA0, 0xC0, /* 0x42 B */ |
|||
0x60, 0x80, 0x80, 0x80, 0x60, /* 0x43 C */ |
|||
0xC0, 0xA0, 0xA0, 0xA0, 0xC0, /* 0x44 D */ |
|||
0xE0, 0x80, 0xE0, 0x80, 0xE0, /* 0x45 E */ |
|||
0xE0, 0x80, 0xE0, 0x80, 0x80, /* 0x46 F */ |
|||
0x60, 0x80, 0xE0, 0xA0, 0x60, /* 0x47 G */ |
|||
0xA0, 0xA0, 0xE0, 0xA0, 0xA0, /* 0x48 H */ |
|||
0xE0, 0x40, 0x40, 0x40, 0xE0, /* 0x49 I */ |
|||
0x20, 0x20, 0x20, 0xA0, 0x40, /* 0x4A J */ |
|||
0xA0, 0xA0, 0xC0, 0xA0, 0xA0, /* 0x4B K */ |
|||
0x80, 0x80, 0x80, 0x80, 0xE0, /* 0x4C L */ |
|||
0xA0, 0xE0, 0xE0, 0xA0, 0xA0, /* 0x4D M */ |
|||
0xA0, 0xE0, 0xE0, 0xE0, 0xA0, /* 0x4E N */ |
|||
0x40, 0xA0, 0xA0, 0xA0, 0x40, /* 0x4F O */ |
|||
0xC0, 0xA0, 0xC0, 0x80, 0x80, /* 0x50 P */ |
|||
0x40, 0xA0, 0xA0, 0xE0, 0x60, /* 0x51 Q */ |
|||
0xC0, 0xA0, 0xE0, 0xC0, 0xA0, /* 0x52 R */ |
|||
0x60, 0x80, 0x40, 0x20, 0xC0, /* 0x53 S */ |
|||
0xE0, 0x40, 0x40, 0x40, 0x40, /* 0x54 T */ |
|||
0xA0, 0xA0, 0xA0, 0xA0, 0x60, /* 0x55 U */ |
|||
0xA0, 0xA0, 0xA0, 0x40, 0x40, /* 0x56 V */ |
|||
0xA0, 0xA0, 0xE0, 0xE0, 0xA0, /* 0x57 W */ |
|||
0xA0, 0xA0, 0x40, 0xA0, 0xA0, /* 0x58 X */ |
|||
0xA0, 0xA0, 0x40, 0x40, 0x40, /* 0x59 Y */ |
|||
0xE0, 0x20, 0x40, 0x80, 0xE0, /* 0x5A Z */ |
|||
0xE0, 0x80, 0x80, 0x80, 0xE0, /* 0x5B bracketleft */ |
|||
0x80, 0x40, 0x20, /* 0x5C backslash */ |
|||
0xE0, 0x20, 0x20, 0x20, 0xE0, /* 0x5D bracketright */ |
|||
0x40, 0xA0, /* 0x5E asciicircum */ |
|||
0xE0, /* 0x5F underscore */ |
|||
0x80, 0x40, /* 0x60 grave */ |
|||
0xC0, 0x60, 0xA0, 0xE0, /* 0x61 a */ |
|||
0x80, 0xC0, 0xA0, 0xA0, 0xC0, /* 0x62 b */ |
|||
0x60, 0x80, 0x80, 0x60, /* 0x63 c */ |
|||
0x20, 0x60, 0xA0, 0xA0, 0x60, /* 0x64 d */ |
|||
0x60, 0xA0, 0xC0, 0x60, /* 0x65 e */ |
|||
0x20, 0x40, 0xE0, 0x40, 0x40, /* 0x66 f */ |
|||
0x60, 0xA0, 0xE0, 0x20, 0x40, /* 0x67 g */ |
|||
0x80, 0xC0, 0xA0, 0xA0, 0xA0, /* 0x68 h */ |
|||
0x80, 0x00, 0x80, 0x80, 0x80, /* 0x69 i */ |
|||
0x20, 0x00, 0x20, 0x20, 0xA0, 0x40, /* 0x6A j */ |
|||
0x80, 0xA0, 0xC0, 0xC0, 0xA0, /* 0x6B k */ |
|||
0xC0, 0x40, 0x40, 0x40, 0xE0, /* 0x6C l */ |
|||
0xE0, 0xE0, 0xE0, 0xA0, /* 0x6D m */ |
|||
0xC0, 0xA0, 0xA0, 0xA0, /* 0x6E n */ |
|||
0x40, 0xA0, 0xA0, 0x40, /* 0x6F o */ |
|||
0xC0, 0xA0, 0xA0, 0xC0, 0x80, /* 0x70 p */ |
|||
0x60, 0xA0, 0xA0, 0x60, 0x20, /* 0x71 q */ |
|||
0x60, 0x80, 0x80, 0x80, /* 0x72 r */ |
|||
0x60, 0xC0, 0x60, 0xC0, /* 0x73 s */ |
|||
0x40, 0xE0, 0x40, 0x40, 0x60, /* 0x74 t */ |
|||
0xA0, 0xA0, 0xA0, 0x60, /* 0x75 u */ |
|||
0xA0, 0xA0, 0xE0, 0x40, /* 0x76 v */ |
|||
0xA0, 0xE0, 0xE0, 0xE0, /* 0x77 w */ |
|||
0xA0, 0x40, 0x40, 0xA0, /* 0x78 x */ |
|||
0xA0, 0xA0, 0x60, 0x20, 0x40, /* 0x79 y */ |
|||
0xE0, 0x60, 0xC0, 0xE0, /* 0x7A z */ |
|||
0x60, 0x40, 0x80, 0x40, 0x60, /* 0x7B braceleft */ |
|||
0x80, 0x80, 0x00, 0x80, 0x80, /* 0x7C bar */ |
|||
0xC0, 0x40, 0x20, 0x40, 0xC0, /* 0x7D braceright */ |
|||
0x60, 0xC0, /* 0x7E asciitilde */ |
|||
#if (TOMTHUMB_USE_EXTENDED) |
|||
0x80, 0x00, 0x80, 0x80, 0x80, /* 0xA1 exclamdown */ |
|||
0x40, 0xE0, 0x80, 0xE0, 0x40, /* 0xA2 cent */ |
|||
0x60, 0x40, 0xE0, 0x40, 0xE0, /* 0xA3 sterling */ |
|||
0xA0, 0x40, 0xE0, 0x40, 0xA0, /* 0xA4 currency */ |
|||
0xA0, 0xA0, 0x40, 0xE0, 0x40, /* 0xA5 yen */ |
|||
0x80, 0x80, 0x00, 0x80, 0x80, /* 0xA6 brokenbar */ |
|||
0x60, 0x40, 0xA0, 0x40, 0xC0, /* 0xA7 section */ |
|||
0xA0, /* 0xA8 dieresis */ |
|||
0x60, 0x80, 0x60, /* 0xA9 copyright */ |
|||
0x60, 0xA0, 0xE0, 0x00, 0xE0, /* 0xAA ordfeminine */ |
|||
0x40, 0x80, 0x40, /* 0xAB guillemotleft */ |
|||
0xE0, 0x20, /* 0xAC logicalnot */ |
|||
0xC0, /* 0xAD softhyphen */ |
|||
0xC0, 0xC0, 0xA0, /* 0xAE registered */ |
|||
0xE0, /* 0xAF macron */ |
|||
0x40, 0xA0, 0x40, /* 0xB0 degree */ |
|||
0x40, 0xE0, 0x40, 0x00, 0xE0, /* 0xB1 plusminus */ |
|||
0xC0, 0x40, 0x60, /* 0xB2 twosuperior */ |
|||
0xE0, 0x60, 0xE0, /* 0xB3 threesuperior */ |
|||
0x40, 0x80, /* 0xB4 acute */ |
|||
0xA0, 0xA0, 0xA0, 0xC0, 0x80, /* 0xB5 mu */ |
|||
0x60, 0xA0, 0x60, 0x60, 0x60, /* 0xB6 paragraph */ |
|||
0xE0, 0xE0, 0xE0, /* 0xB7 periodcentered */ |
|||
0x40, 0x20, 0xC0, /* 0xB8 cedilla */ |
|||
0x80, 0x80, 0x80, /* 0xB9 onesuperior */ |
|||
0x40, 0xA0, 0x40, 0x00, 0xE0, /* 0xBA ordmasculine */ |
|||
0x80, 0x40, 0x80, /* 0xBB guillemotright */ |
|||
0x80, 0x80, 0x00, 0x60, 0x20, /* 0xBC onequarter */ |
|||
0x80, 0x80, 0x00, 0xC0, 0x60, /* 0xBD onehalf */ |
|||
0xC0, 0xC0, 0x00, 0x60, 0x20, /* 0xBE threequarters */ |
|||
0x40, 0x00, 0x40, 0x80, 0xE0, /* 0xBF questiondown */ |
|||
0x40, 0x20, 0x40, 0xE0, 0xA0, /* 0xC0 Agrave */ |
|||
0x40, 0x80, 0x40, 0xE0, 0xA0, /* 0xC1 Aacute */ |
|||
0xE0, 0x00, 0x40, 0xE0, 0xA0, /* 0xC2 Acircumflex */ |
|||
0x60, 0xC0, 0x40, 0xE0, 0xA0, /* 0xC3 Atilde */ |
|||
0xA0, 0x40, 0xA0, 0xE0, 0xA0, /* 0xC4 Adieresis */ |
|||
0xC0, 0xC0, 0xA0, 0xE0, 0xA0, /* 0xC5 Aring */ |
|||
0x60, 0xC0, 0xE0, 0xC0, 0xE0, /* 0xC6 AE */ |
|||
0x60, 0x80, 0x80, 0x60, 0x20, 0x40, /* 0xC7 Ccedilla */ |
|||
0x40, 0x20, 0xE0, 0xC0, 0xE0, /* 0xC8 Egrave */ |
|||
0x40, 0x80, 0xE0, 0xC0, 0xE0, /* 0xC9 Eacute */ |
|||
0xE0, 0x00, 0xE0, 0xC0, 0xE0, /* 0xCA Ecircumflex */ |
|||
0xA0, 0x00, 0xE0, 0xC0, 0xE0, /* 0xCB Edieresis */ |
|||
0x40, 0x20, 0xE0, 0x40, 0xE0, /* 0xCC Igrave */ |
|||
0x40, 0x80, 0xE0, 0x40, 0xE0, /* 0xCD Iacute */ |
|||
0xE0, 0x00, 0xE0, 0x40, 0xE0, /* 0xCE Icircumflex */ |
|||
0xA0, 0x00, 0xE0, 0x40, 0xE0, /* 0xCF Idieresis */ |
|||
0xC0, 0xA0, 0xE0, 0xA0, 0xC0, /* 0xD0 Eth */ |
|||
0xC0, 0x60, 0xA0, 0xE0, 0xA0, /* 0xD1 Ntilde */ |
|||
0x40, 0x20, 0xE0, 0xA0, 0xE0, /* 0xD2 Ograve */ |
|||
0x40, 0x80, 0xE0, 0xA0, 0xE0, /* 0xD3 Oacute */ |
|||
0xE0, 0x00, 0xE0, 0xA0, 0xE0, /* 0xD4 Ocircumflex */ |
|||
0xC0, 0x60, 0xE0, 0xA0, 0xE0, /* 0xD5 Otilde */ |
|||
0xA0, 0x00, 0xE0, 0xA0, 0xE0, /* 0xD6 Odieresis */ |
|||
0xA0, 0x40, 0xA0, /* 0xD7 multiply */ |
|||
0x60, 0xA0, 0xE0, 0xA0, 0xC0, /* 0xD8 Oslash */ |
|||
0x80, 0x40, 0xA0, 0xA0, 0xE0, /* 0xD9 Ugrave */ |
|||
0x20, 0x40, 0xA0, 0xA0, 0xE0, /* 0xDA Uacute */ |
|||
0xE0, 0x00, 0xA0, 0xA0, 0xE0, /* 0xDB Ucircumflex */ |
|||
0xA0, 0x00, 0xA0, 0xA0, 0xE0, /* 0xDC Udieresis */ |
|||
0x20, 0x40, 0xA0, 0xE0, 0x40, /* 0xDD Yacute */ |
|||
0x80, 0xE0, 0xA0, 0xE0, 0x80, /* 0xDE Thorn */ |
|||
0x60, 0xA0, 0xC0, 0xA0, 0xC0, 0x80, /* 0xDF germandbls */ |
|||
0x40, 0x20, 0x60, 0xA0, 0xE0, /* 0xE0 agrave */ |
|||
0x40, 0x80, 0x60, 0xA0, 0xE0, /* 0xE1 aacute */ |
|||
0xE0, 0x00, 0x60, 0xA0, 0xE0, /* 0xE2 acircumflex */ |
|||
0x60, 0xC0, 0x60, 0xA0, 0xE0, /* 0xE3 atilde */ |
|||
0xA0, 0x00, 0x60, 0xA0, 0xE0, /* 0xE4 adieresis */ |
|||
0x60, 0x60, 0x60, 0xA0, 0xE0, /* 0xE5 aring */ |
|||
0x60, 0xE0, 0xE0, 0xC0, /* 0xE6 ae */ |
|||
0x60, 0x80, 0x60, 0x20, 0x40, /* 0xE7 ccedilla */ |
|||
0x40, 0x20, 0x60, 0xE0, 0x60, /* 0xE8 egrave */ |
|||
0x40, 0x80, 0x60, 0xE0, 0x60, /* 0xE9 eacute */ |
|||
0xE0, 0x00, 0x60, 0xE0, 0x60, /* 0xEA ecircumflex */ |
|||
0xA0, 0x00, 0x60, 0xE0, 0x60, /* 0xEB edieresis */ |
|||
0x80, 0x40, 0x80, 0x80, 0x80, /* 0xEC igrave */ |
|||
0x40, 0x80, 0x40, 0x40, 0x40, /* 0xED iacute */ |
|||
0xE0, 0x00, 0x40, 0x40, 0x40, /* 0xEE icircumflex */ |
|||
0xA0, 0x00, 0x40, 0x40, 0x40, /* 0xEF idieresis */ |
|||
0x60, 0xC0, 0x60, 0xA0, 0x60, /* 0xF0 eth */ |
|||
0xC0, 0x60, 0xC0, 0xA0, 0xA0, /* 0xF1 ntilde */ |
|||
0x40, 0x20, 0x40, 0xA0, 0x40, /* 0xF2 ograve */ |
|||
0x40, 0x80, 0x40, 0xA0, 0x40, /* 0xF3 oacute */ |
|||
0xE0, 0x00, 0x40, 0xA0, 0x40, /* 0xF4 ocircumflex */ |
|||
0xC0, 0x60, 0x40, 0xA0, 0x40, /* 0xF5 otilde */ |
|||
0xA0, 0x00, 0x40, 0xA0, 0x40, /* 0xF6 odieresis */ |
|||
0x40, 0x00, 0xE0, 0x00, 0x40, /* 0xF7 divide */ |
|||
0x60, 0xE0, 0xA0, 0xC0, /* 0xF8 oslash */ |
|||
0x80, 0x40, 0xA0, 0xA0, 0x60, /* 0xF9 ugrave */ |
|||
0x20, 0x40, 0xA0, 0xA0, 0x60, /* 0xFA uacute */ |
|||
0xE0, 0x00, 0xA0, 0xA0, 0x60, /* 0xFB ucircumflex */ |
|||
0xA0, 0x00, 0xA0, 0xA0, 0x60, /* 0xFC udieresis */ |
|||
0x20, 0x40, 0xA0, 0x60, 0x20, 0x40, /* 0xFD yacute */ |
|||
0x80, 0xC0, 0xA0, 0xC0, 0x80, /* 0xFE thorn */ |
|||
0xA0, 0x00, 0xA0, 0x60, 0x20, 0x40, /* 0xFF ydieresis */ |
|||
0x00, /* 0x11D gcircumflex */ |
|||
0x60, 0xC0, 0xE0, 0xC0, 0x60, /* 0x152 OE */ |
|||
0x60, 0xE0, 0xC0, 0xE0, /* 0x153 oe */ |
|||
0xA0, 0x60, 0xC0, 0x60, 0xC0, /* 0x160 Scaron */ |
|||
0xA0, 0x60, 0xC0, 0x60, 0xC0, /* 0x161 scaron */ |
|||
0xA0, 0x00, 0xA0, 0x40, 0x40, /* 0x178 Ydieresis */ |
|||
0xA0, 0xE0, 0x60, 0xC0, 0xE0, /* 0x17D Zcaron */ |
|||
0xA0, 0xE0, 0x60, 0xC0, 0xE0, /* 0x17E zcaron */ |
|||
0x00, /* 0xEA4 uni0EA4 */ |
|||
0x00, /* 0x13A0 uni13A0 */ |
|||
0x80, /* 0x2022 bullet */ |
|||
0xA0, /* 0x2026 ellipsis */ |
|||
0x60, 0xE0, 0xE0, 0xC0, 0x60, /* 0x20AC Euro */ |
|||
0xE0, 0xA0, 0xA0, 0xA0, 0xE0, /* 0xFFFD uniFFFD */ |
|||
#endif /* (TOMTHUMB_USE_EXTENDED) */ |
|||
}; |
|||
|
|||
|
|||
/* {offset, width, height, advance cursor, x offset, y offset} */ |
|||
const GFXglyph TomThumbGlyphs[] PROGMEM = { |
|||
{ 0, 8, 1, 2, 0, -5 }, /* 0x20 space */ |
|||
{ 1, 8, 5, 2, 0, -5 }, /* 0x21 exclam */ |
|||
{ 6, 8, 2, 4, 0, -5 }, /* 0x22 quotedbl */ |
|||
{ 8, 8, 5, 4, 0, -5 }, /* 0x23 numbersign */ |
|||
{ 13, 8, 5, 4, 0, -5 }, /* 0x24 dollar */ |
|||
{ 18, 8, 5, 4, 0, -5 }, /* 0x25 percent */ |
|||
{ 23, 8, 5, 4, 0, -5 }, /* 0x26 ampersand */ |
|||
{ 28, 8, 2, 2, 0, -5 }, /* 0x27 quotesingle */ |
|||
{ 30, 8, 5, 3, 0, -5 }, /* 0x28 parenleft */ |
|||
{ 35, 8, 5, 3, 0, -5 }, /* 0x29 parenright */ |
|||
{ 40, 8, 3, 4, 0, -5 }, /* 0x2A asterisk */ |
|||
{ 43, 8, 3, 4, 0, -4 }, /* 0x2B plus */ |
|||
{ 46, 8, 2, 3, 0, -2 }, /* 0x2C comma */ |
|||
{ 48, 8, 1, 4, 0, -3 }, /* 0x2D hyphen */ |
|||
{ 49, 8, 1, 2, 0, -1 }, /* 0x2E period */ |
|||
{ 50, 8, 5, 4, 0, -5 }, /* 0x2F slash */ |
|||
{ 55, 8, 5, 4, 0, -5 }, /* 0x30 zero */ |
|||
{ 60, 8, 5, 3, 0, -5 }, /* 0x31 one */ |
|||
{ 65, 8, 5, 4, 0, -5 }, /* 0x32 two */ |
|||
{ 70, 8, 5, 4, 0, -5 }, /* 0x33 three */ |
|||
{ 75, 8, 5, 4, 0, -5 }, /* 0x34 four */ |
|||
{ 80, 8, 5, 4, 0, -5 }, /* 0x35 five */ |
|||
{ 85, 8, 5, 4, 0, -5 }, /* 0x36 six */ |
|||
{ 90, 8, 5, 4, 0, -5 }, /* 0x37 seven */ |
|||
{ 95, 8, 5, 4, 0, -5 }, /* 0x38 eight */ |
|||
{ 100, 8, 5, 4, 0, -5 }, /* 0x39 nine */ |
|||
{ 105, 8, 3, 2, 0, -4 }, /* 0x3A colon */ |
|||
{ 108, 8, 4, 3, 0, -4 }, /* 0x3B semicolon */ |
|||
{ 112, 8, 5, 4, 0, -5 }, /* 0x3C less */ |
|||
{ 117, 8, 3, 4, 0, -4 }, /* 0x3D equal */ |
|||
{ 120, 8, 5, 4, 0, -5 }, /* 0x3E greater */ |
|||
{ 125, 8, 5, 4, 0, -5 }, /* 0x3F question */ |
|||
{ 130, 8, 5, 4, 0, -5 }, /* 0x40 at */ |
|||
{ 135, 8, 5, 4, 0, -5 }, /* 0x41 A */ |
|||
{ 140, 8, 5, 4, 0, -5 }, /* 0x42 B */ |
|||
{ 145, 8, 5, 4, 0, -5 }, /* 0x43 C */ |
|||
{ 150, 8, 5, 4, 0, -5 }, /* 0x44 D */ |
|||
{ 155, 8, 5, 4, 0, -5 }, /* 0x45 E */ |
|||
{ 160, 8, 5, 4, 0, -5 }, /* 0x46 F */ |
|||
{ 165, 8, 5, 4, 0, -5 }, /* 0x47 G */ |
|||
{ 170, 8, 5, 4, 0, -5 }, /* 0x48 H */ |
|||
{ 175, 8, 5, 4, 0, -5 }, /* 0x49 I */ |
|||
{ 180, 8, 5, 4, 0, -5 }, /* 0x4A J */ |
|||
{ 185, 8, 5, 4, 0, -5 }, /* 0x4B K */ |
|||
{ 190, 8, 5, 4, 0, -5 }, /* 0x4C L */ |
|||
{ 195, 8, 5, 4, 0, -5 }, /* 0x4D M */ |
|||
{ 200, 8, 5, 4, 0, -5 }, /* 0x4E N */ |
|||
{ 205, 8, 5, 4, 0, -5 }, /* 0x4F O */ |
|||
{ 210, 8, 5, 4, 0, -5 }, /* 0x50 P */ |
|||
{ 215, 8, 5, 4, 0, -5 }, /* 0x51 Q */ |
|||
{ 220, 8, 5, 4, 0, -5 }, /* 0x52 R */ |
|||
{ 225, 8, 5, 4, 0, -5 }, /* 0x53 S */ |
|||
{ 230, 8, 5, 4, 0, -5 }, /* 0x54 T */ |
|||
{ 235, 8, 5, 4, 0, -5 }, /* 0x55 U */ |
|||
{ 240, 8, 5, 4, 0, -5 }, /* 0x56 V */ |
|||
{ 245, 8, 5, 4, 0, -5 }, /* 0x57 W */ |
|||
{ 250, 8, 5, 4, 0, -5 }, /* 0x58 X */ |
|||
{ 255, 8, 5, 4, 0, -5 }, /* 0x59 Y */ |
|||
{ 260, 8, 5, 4, 0, -5 }, /* 0x5A Z */ |
|||
{ 265, 8, 5, 4, 0, -5 }, /* 0x5B bracketleft */ |
|||
{ 270, 8, 3, 4, 0, -4 }, /* 0x5C backslash */ |
|||
{ 273, 8, 5, 4, 0, -5 }, /* 0x5D bracketright */ |
|||
{ 278, 8, 2, 4, 0, -5 }, /* 0x5E asciicircum */ |
|||
{ 280, 8, 1, 4, 0, -1 }, /* 0x5F underscore */ |
|||
{ 281, 8, 2, 3, 0, -5 }, /* 0x60 grave */ |
|||
{ 283, 8, 4, 4, 0, -4 }, /* 0x61 a */ |
|||
{ 287, 8, 5, 4, 0, -5 }, /* 0x62 b */ |
|||
{ 292, 8, 4, 4, 0, -4 }, /* 0x63 c */ |
|||
{ 296, 8, 5, 4, 0, -5 }, /* 0x64 d */ |
|||
{ 301, 8, 4, 4, 0, -4 }, /* 0x65 e */ |
|||
{ 305, 8, 5, 4, 0, -5 }, /* 0x66 f */ |
|||
{ 310, 8, 5, 4, 0, -4 }, /* 0x67 g */ |
|||
{ 315, 8, 5, 4, 0, -5 }, /* 0x68 h */ |
|||
{ 320, 8, 5, 2, 0, -5 }, /* 0x69 i */ |
|||
{ 325, 8, 6, 4, 0, -5 }, /* 0x6A j */ |
|||
{ 331, 8, 5, 4, 0, -5 }, /* 0x6B k */ |
|||
{ 336, 8, 5, 4, 0, -5 }, /* 0x6C l */ |
|||
{ 341, 8, 4, 4, 0, -4 }, /* 0x6D m */ |
|||
{ 345, 8, 4, 4, 0, -4 }, /* 0x6E n */ |
|||
{ 349, 8, 4, 4, 0, -4 }, /* 0x6F o */ |
|||
{ 353, 8, 5, 4, 0, -4 }, /* 0x70 p */ |
|||
{ 358, 8, 5, 4, 0, -4 }, /* 0x71 q */ |
|||
{ 363, 8, 4, 4, 0, -4 }, /* 0x72 r */ |
|||
{ 367, 8, 4, 4, 0, -4 }, /* 0x73 s */ |
|||
{ 371, 8, 5, 4, 0, -5 }, /* 0x74 t */ |
|||
{ 376, 8, 4, 4, 0, -4 }, /* 0x75 u */ |
|||
{ 380, 8, 4, 4, 0, -4 }, /* 0x76 v */ |
|||
{ 384, 8, 4, 4, 0, -4 }, /* 0x77 w */ |
|||
{ 388, 8, 4, 4, 0, -4 }, /* 0x78 x */ |
|||
{ 392, 8, 5, 4, 0, -4 }, /* 0x79 y */ |
|||
{ 397, 8, 4, 4, 0, -4 }, /* 0x7A z */ |
|||
{ 401, 8, 5, 4, 0, -5 }, /* 0x7B braceleft */ |
|||
{ 406, 8, 5, 2, 0, -5 }, /* 0x7C bar */ |
|||
{ 411, 8, 5, 4, 0, -5 }, /* 0x7D braceright */ |
|||
{ 416, 8, 2, 4, 0, -5 }, /* 0x7E asciitilde */ |
|||
#if (TOMTHUMB_USE_EXTENDED) |
|||
{ 418, 8, 5, 2, 0, -5 }, /* 0xA1 exclamdown */ |
|||
{ 423, 8, 5, 4, 0, -5 }, /* 0xA2 cent */ |
|||
{ 428, 8, 5, 4, 0, -5 }, /* 0xA3 sterling */ |
|||
{ 433, 8, 5, 4, 0, -5 }, /* 0xA4 currency */ |
|||
{ 438, 8, 5, 4, 0, -5 }, /* 0xA5 yen */ |
|||
{ 443, 8, 5, 2, 0, -5 }, /* 0xA6 brokenbar */ |
|||
{ 448, 8, 5, 4, 0, -5 }, /* 0xA7 section */ |
|||
{ 453, 8, 1, 4, 0, -5 }, /* 0xA8 dieresis */ |
|||
{ 454, 8, 3, 4, 0, -5 }, /* 0xA9 copyright */ |
|||
{ 457, 8, 5, 4, 0, -5 }, /* 0xAA ordfeminine */ |
|||
{ 462, 8, 3, 3, 0, -5 }, /* 0xAB guillemotleft */ |
|||
{ 465, 8, 2, 4, 0, -4 }, /* 0xAC logicalnot */ |
|||
{ 467, 8, 1, 3, 0, -3 }, /* 0xAD softhyphen */ |
|||
{ 468, 8, 3, 4, 0, -5 }, /* 0xAE registered */ |
|||
{ 471, 8, 1, 4, 0, -5 }, /* 0xAF macron */ |
|||
{ 472, 8, 3, 4, 0, -5 }, /* 0xB0 degree */ |
|||
{ 475, 8, 5, 4, 0, -5 }, /* 0xB1 plusminus */ |
|||
{ 480, 8, 3, 4, 0, -5 }, /* 0xB2 twosuperior */ |
|||
{ 483, 8, 3, 4, 0, -5 }, /* 0xB3 threesuperior */ |
|||
{ 486, 8, 2, 3, 0, -5 }, /* 0xB4 acute */ |
|||
{ 488, 8, 5, 4, 0, -5 }, /* 0xB5 mu */ |
|||
{ 493, 8, 5, 4, 0, -5 }, /* 0xB6 paragraph */ |
|||
{ 498, 8, 3, 4, 0, -4 }, /* 0xB7 periodcentered */ |
|||
{ 501, 8, 3, 4, 0, -3 }, /* 0xB8 cedilla */ |
|||
{ 504, 8, 3, 2, 0, -5 }, /* 0xB9 onesuperior */ |
|||
{ 507, 8, 5, 4, 0, -5 }, /* 0xBA ordmasculine */ |
|||
{ 512, 8, 3, 3, 0, -5 }, /* 0xBB guillemotright */ |
|||
{ 515, 8, 5, 4, 0, -5 }, /* 0xBC onequarter */ |
|||
{ 520, 8, 5, 4, 0, -5 }, /* 0xBD onehalf */ |
|||
{ 525, 8, 5, 4, 0, -5 }, /* 0xBE threequarters */ |
|||
{ 530, 8, 5, 4, 0, -5 }, /* 0xBF questiondown */ |
|||
{ 535, 8, 5, 4, 0, -5 }, /* 0xC0 Agrave */ |
|||
{ 540, 8, 5, 4, 0, -5 }, /* 0xC1 Aacute */ |
|||
{ 545, 8, 5, 4, 0, -5 }, /* 0xC2 Acircumflex */ |
|||
{ 550, 8, 5, 4, 0, -5 }, /* 0xC3 Atilde */ |
|||
{ 555, 8, 5, 4, 0, -5 }, /* 0xC4 Adieresis */ |
|||
{ 560, 8, 5, 4, 0, -5 }, /* 0xC5 Aring */ |
|||
{ 565, 8, 5, 4, 0, -5 }, /* 0xC6 AE */ |
|||
{ 570, 8, 6, 4, 0, -5 }, /* 0xC7 Ccedilla */ |
|||
{ 576, 8, 5, 4, 0, -5 }, /* 0xC8 Egrave */ |
|||
{ 581, 8, 5, 4, 0, -5 }, /* 0xC9 Eacute */ |
|||
{ 586, 8, 5, 4, 0, -5 }, /* 0xCA Ecircumflex */ |
|||
{ 591, 8, 5, 4, 0, -5 }, /* 0xCB Edieresis */ |
|||
{ 596, 8, 5, 4, 0, -5 }, /* 0xCC Igrave */ |
|||
{ 601, 8, 5, 4, 0, -5 }, /* 0xCD Iacute */ |
|||
{ 606, 8, 5, 4, 0, -5 }, /* 0xCE Icircumflex */ |
|||
{ 611, 8, 5, 4, 0, -5 }, /* 0xCF Idieresis */ |
|||
{ 616, 8, 5, 4, 0, -5 }, /* 0xD0 Eth */ |
|||
{ 621, 8, 5, 4, 0, -5 }, /* 0xD1 Ntilde */ |
|||
{ 626, 8, 5, 4, 0, -5 }, /* 0xD2 Ograve */ |
|||
{ 631, 8, 5, 4, 0, -5 }, /* 0xD3 Oacute */ |
|||
{ 636, 8, 5, 4, 0, -5 }, /* 0xD4 Ocircumflex */ |
|||
{ 641, 8, 5, 4, 0, -5 }, /* 0xD5 Otilde */ |
|||
{ 646, 8, 5, 4, 0, -5 }, /* 0xD6 Odieresis */ |
|||
{ 651, 8, 3, 4, 0, -4 }, /* 0xD7 multiply */ |
|||
{ 654, 8, 5, 4, 0, -5 }, /* 0xD8 Oslash */ |
|||
{ 659, 8, 5, 4, 0, -5 }, /* 0xD9 Ugrave */ |
|||
{ 664, 8, 5, 4, 0, -5 }, /* 0xDA Uacute */ |
|||
{ 669, 8, 5, 4, 0, -5 }, /* 0xDB Ucircumflex */ |
|||
{ 674, 8, 5, 4, 0, -5 }, /* 0xDC Udieresis */ |
|||
{ 679, 8, 5, 4, 0, -5 }, /* 0xDD Yacute */ |
|||
{ 684, 8, 5, 4, 0, -5 }, /* 0xDE Thorn */ |
|||
{ 689, 8, 6, 4, 0, -5 }, /* 0xDF germandbls */ |
|||
{ 695, 8, 5, 4, 0, -5 }, /* 0xE0 agrave */ |
|||
{ 700, 8, 5, 4, 0, -5 }, /* 0xE1 aacute */ |
|||
{ 705, 8, 5, 4, 0, -5 }, /* 0xE2 acircumflex */ |
|||
{ 710, 8, 5, 4, 0, -5 }, /* 0xE3 atilde */ |
|||
{ 715, 8, 5, 4, 0, -5 }, /* 0xE4 adieresis */ |
|||
{ 720, 8, 5, 4, 0, -5 }, /* 0xE5 aring */ |
|||
{ 725, 8, 4, 4, 0, -4 }, /* 0xE6 ae */ |
|||
{ 729, 8, 5, 4, 0, -4 }, /* 0xE7 ccedilla */ |
|||
{ 734, 8, 5, 4, 0, -5 }, /* 0xE8 egrave */ |
|||
{ 739, 8, 5, 4, 0, -5 }, /* 0xE9 eacute */ |
|||
{ 744, 8, 5, 4, 0, -5 }, /* 0xEA ecircumflex */ |
|||
{ 749, 8, 5, 4, 0, -5 }, /* 0xEB edieresis */ |
|||
{ 754, 8, 5, 3, 0, -5 }, /* 0xEC igrave */ |
|||
{ 759, 8, 5, 3, 0, -5 }, /* 0xED iacute */ |
|||
{ 764, 8, 5, 4, 0, -5 }, /* 0xEE icircumflex */ |
|||
{ 769, 8, 5, 4, 0, -5 }, /* 0xEF idieresis */ |
|||
{ 774, 8, 5, 4, 0, -5 }, /* 0xF0 eth */ |
|||
{ 779, 8, 5, 4, 0, -5 }, /* 0xF1 ntilde */ |
|||
{ 784, 8, 5, 4, 0, -5 }, /* 0xF2 ograve */ |
|||
{ 789, 8, 5, 4, 0, -5 }, /* 0xF3 oacute */ |
|||
{ 794, 8, 5, 4, 0, -5 }, /* 0xF4 ocircumflex */ |
|||
{ 799, 8, 5, 4, 0, -5 }, /* 0xF5 otilde */ |
|||
{ 804, 8, 5, 4, 0, -5 }, /* 0xF6 odieresis */ |
|||
{ 809, 8, 5, 4, 0, -5 }, /* 0xF7 divide */ |
|||
{ 814, 8, 4, 4, 0, -4 }, /* 0xF8 oslash */ |
|||
{ 818, 8, 5, 4, 0, -5 }, /* 0xF9 ugrave */ |
|||
{ 823, 8, 5, 4, 0, -5 }, /* 0xFA uacute */ |
|||
{ 828, 8, 5, 4, 0, -5 }, /* 0xFB ucircumflex */ |
|||
{ 833, 8, 5, 4, 0, -5 }, /* 0xFC udieresis */ |
|||
{ 838, 8, 6, 4, 0, -5 }, /* 0xFD yacute */ |
|||
{ 844, 8, 5, 4, 0, -4 }, /* 0xFE thorn */ |
|||
{ 849, 8, 6, 4, 0, -5 }, /* 0xFF ydieresis */ |
|||
{ 855, 8, 1, 2, 0, -1 }, /* 0x11D gcircumflex */ |
|||
{ 856, 8, 5, 4, 0, -5 }, /* 0x152 OE */ |
|||
{ 861, 8, 4, 4, 0, -4 }, /* 0x153 oe */ |
|||
{ 865, 8, 5, 4, 0, -5 }, /* 0x160 Scaron */ |
|||
{ 870, 8, 5, 4, 0, -5 }, /* 0x161 scaron */ |
|||
{ 875, 8, 5, 4, 0, -5 }, /* 0x178 Ydieresis */ |
|||
{ 880, 8, 5, 4, 0, -5 }, /* 0x17D Zcaron */ |
|||
{ 885, 8, 5, 4, 0, -5 }, /* 0x17E zcaron */ |
|||
{ 890, 8, 1, 2, 0, -1 }, /* 0xEA4 uni0EA4 */ |
|||
{ 891, 8, 1, 2, 0, -1 }, /* 0x13A0 uni13A0 */ |
|||
{ 892, 8, 1, 2, 0, -3 }, /* 0x2022 bullet */ |
|||
{ 893, 8, 1, 4, 0, -1 }, /* 0x2026 ellipsis */ |
|||
{ 894, 8, 5, 4, 0, -5 }, /* 0x20AC Euro */ |
|||
{ 899, 8, 5, 4, 0, -5 }, /* 0xFFFD uniFFFD */ |
|||
#endif /* (TOMTHUMB_USE_EXTENDED) */ |
|||
}; |
|||
|
|||
const GFXfont TomThumb PROGMEM = { |
|||
(uint8_t *)TomThumbBitmaps, |
|||
(GFXglyph *)TomThumbGlyphs, |
|||
0x20, 0x7E, 6 }; |
@ -0,0 +1,25 @@ |
|||
#ifndef _ST7735_FONT_H_ |
|||
#define _ST7735_FONT_H_ |
|||
|
|||
#include <stdint.h> |
|||
#include <avr/pgmspace.h> |
|||
|
|||
typedef struct { // Data stored PER GLYPH |
|||
uint16_t bitmapOffset; // Pointer into GFXfont->bitmap |
|||
uint8_t width, height; // Bitmap dimensions in pixels |
|||
uint8_t xAdvance; // Distance to advance cursor (x axis) |
|||
int8_t xOffset, yOffset; // Dist from cursor pos to UL corner |
|||
} GFXglyph; |
|||
|
|||
typedef struct { // Data stored for FONT AS A WHOLE: |
|||
uint8_t *bitmap; // Glyph bitmaps, concatenated |
|||
GFXglyph *glyph; // Glyph array |
|||
uint8_t first, last; // ASCII extents |
|||
uint8_t yAdvance; // Newline distance (y axis) |
|||
} GFXfont; |
|||
|
|||
|
|||
|
|||
void st7735_draw_text(int8_t x, int8_t y, char *text, const GFXfont *p_font, uint8_t size, uint16_t color); |
|||
|
|||
#endif |
@ -0,0 +1,85 @@ |
|||
#include "st7735_font.h" |
|||
|
|||
#include <string.h> |
|||
#include <avr/pgmspace.h> |
|||
|
|||
#include "st7735.h" |
|||
|
|||
|
|||
|
|||
void st7735_draw_char(int16_t x, int16_t y, const GFXglyph *glyph, const GFXfont *font, |
|||
uint8_t size, uint16_t color) { |
|||
if(size < 1) { |
|||
return; |
|||
} |
|||
|
|||
// Clipping will be done by fill rect if necessary |
|||
|
|||
uint8_t *bitmap = font->bitmap; |
|||
uint16_t bo = glyph->bitmapOffset; |
|||
uint8_t bits = 0, bit = 0; |
|||
uint16_t set_pixels = 0; |
|||
|
|||
uint8_t cur_x, cur_y; |
|||
for(cur_y = 0; cur_y < glyph->height; cur_y++) { |
|||
for(cur_x = 0; cur_x < glyph->width; cur_x++) { |
|||
if(bit == 0) { |
|||
bits = pgm_read_byte(&bitmap[bo++]); |
|||
bit = 0x80; |
|||
} |
|||
|
|||
if(bits & bit) { |
|||
set_pixels++; |
|||
} else if (set_pixels > 0) { |
|||
st7735_fill_rect(x + (glyph->xOffset + cur_x-set_pixels) * size, |
|||
y + (glyph->yOffset+cur_y) * size, |
|||
size * set_pixels, |
|||
size, |
|||
color); |
|||
set_pixels=0; |
|||
} |
|||
|
|||
bit >>= 1; |
|||
} |
|||
|
|||
// Draw rest of line |
|||
if (set_pixels > 0) { |
|||
st7735_fill_rect(x + (glyph->xOffset + cur_x-set_pixels) * size, |
|||
y + (glyph->yOffset + cur_y) * size, |
|||
size * set_pixels, |
|||
size, |
|||
color); |
|||
set_pixels=0; |
|||
} |
|||
} |
|||
} |
|||
|
|||
|
|||
void st7735_draw_text(int8_t x, int8_t y, char *text, const GFXfont *p_font, |
|||
uint8_t size, uint16_t color) { |
|||
|
|||
int16_t cursor_x = x; |
|||
int16_t cursor_y = y; |
|||
|
|||
GFXfont font; |
|||
memcpy_P(&font, p_font, sizeof(GFXfont)); |
|||
|
|||
|
|||
for(uint16_t text_pos = 0; text_pos < strlen(text); text_pos++) { |
|||
char c = text[text_pos]; |
|||
|
|||
if(c == '\n') { |
|||
cursor_x = x; |
|||
cursor_y += font.yAdvance * size; |
|||
} |
|||
else if(c >= font.first && c <= font.last && c != '\r') { |
|||
GFXglyph glyph; |
|||
memcpy_P(&glyph, &font.glyph[c - font.first], sizeof(GFXglyph)); |
|||
|
|||
st7735_draw_char(cursor_x, cursor_y, &glyph, &font, size, color); |
|||
cursor_x += glyph.xAdvance * size; |
|||
} |
|||
|
|||
} |
|||
|
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue