Fork of Silabs MemoryLCD library

Dependents:   demoUI whrmDemoUI Host_Software_MAX32664GWEB_HR_EXTENDED Host_Software_MAX32664GWEC_SpO2_HR-_EXTE ... more

C++ library for Sharp Microelectronics 1.28 inch LCD TFT, LS013B7DH03, SPI bus. Forked from Silicon Labs MemoryLCD display driver.

Committer:
srodk
Date:
Tue Jun 09 14:48:20 2015 +0000
Revision:
5:26851f9655cf
Parent:
0:a0faa86660d4
Child:
11:0f8ae10b308d
Added circle function

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Steven Cooreman 0:a0faa86660d4 1 /* mbed GraphicsDisplay Display Library Base Class
Steven Cooreman 0:a0faa86660d4 2 * Copyright (c) 2007-2009 sford
Steven Cooreman 0:a0faa86660d4 3 * Released under the MIT License: http://mbed.org/license/mit
Steven Cooreman 0:a0faa86660d4 4 */
Steven Cooreman 0:a0faa86660d4 5
Steven Cooreman 0:a0faa86660d4 6 #include "GraphicsDisplay.h"
Steven Cooreman 0:a0faa86660d4 7
Steven Cooreman 0:a0faa86660d4 8 const unsigned char FONT8x8[97][8] = {
Steven Cooreman 0:a0faa86660d4 9 {0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00}, // columns, rows, num_bytes_per_char
Steven Cooreman 0:a0faa86660d4 10 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // space 0x20
Steven Cooreman 0:a0faa86660d4 11 {0x30,0x78,0x78,0x30,0x30,0x00,0x30,0x00}, // !
Steven Cooreman 0:a0faa86660d4 12 {0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00}, // "
Steven Cooreman 0:a0faa86660d4 13 {0x6C,0x6C,0xFE,0x6C,0xFE,0x6C,0x6C,0x00}, // #
Steven Cooreman 0:a0faa86660d4 14 {0x18,0x3E,0x60,0x3C,0x06,0x7C,0x18,0x00}, // $
Steven Cooreman 0:a0faa86660d4 15 {0x00,0x63,0x66,0x0C,0x18,0x33,0x63,0x00}, // %
Steven Cooreman 0:a0faa86660d4 16 {0x1C,0x36,0x1C,0x3B,0x6E,0x66,0x3B,0x00}, // &
Steven Cooreman 0:a0faa86660d4 17 {0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00}, // '
Steven Cooreman 0:a0faa86660d4 18 {0x0C,0x18,0x30,0x30,0x30,0x18,0x0C,0x00}, // (
Steven Cooreman 0:a0faa86660d4 19 {0x30,0x18,0x0C,0x0C,0x0C,0x18,0x30,0x00}, // )
Steven Cooreman 0:a0faa86660d4 20 {0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00}, // *
Steven Cooreman 0:a0faa86660d4 21 {0x00,0x30,0x30,0xFC,0x30,0x30,0x00,0x00}, // +
Steven Cooreman 0:a0faa86660d4 22 {0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x30}, // ,
Steven Cooreman 0:a0faa86660d4 23 {0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00}, // -
Steven Cooreman 0:a0faa86660d4 24 {0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00}, // .
Steven Cooreman 0:a0faa86660d4 25 {0x03,0x06,0x0C,0x18,0x30,0x60,0x40,0x00}, // / (forward slash)
Steven Cooreman 0:a0faa86660d4 26 {0x3E,0x63,0x63,0x6B,0x63,0x63,0x3E,0x00}, // 0 0x30
Steven Cooreman 0:a0faa86660d4 27 {0x18,0x38,0x58,0x18,0x18,0x18,0x7E,0x00}, // 1
Steven Cooreman 0:a0faa86660d4 28 {0x3C,0x66,0x06,0x1C,0x30,0x66,0x7E,0x00}, // 2
Steven Cooreman 0:a0faa86660d4 29 {0x3C,0x66,0x06,0x1C,0x06,0x66,0x3C,0x00}, // 3
Steven Cooreman 0:a0faa86660d4 30 {0x0E,0x1E,0x36,0x66,0x7F,0x06,0x0F,0x00}, // 4
Steven Cooreman 0:a0faa86660d4 31 {0x7E,0x60,0x7C,0x06,0x06,0x66,0x3C,0x00}, // 5
Steven Cooreman 0:a0faa86660d4 32 {0x1C,0x30,0x60,0x7C,0x66,0x66,0x3C,0x00}, // 6
Steven Cooreman 0:a0faa86660d4 33 {0x7E,0x66,0x06,0x0C,0x18,0x18,0x18,0x00}, // 7
Steven Cooreman 0:a0faa86660d4 34 {0x3C,0x66,0x66,0x3C,0x66,0x66,0x3C,0x00}, // 8
Steven Cooreman 0:a0faa86660d4 35 {0x3C,0x66,0x66,0x3E,0x06,0x0C,0x38,0x00}, // 9
Steven Cooreman 0:a0faa86660d4 36 {0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x00}, // :
Steven Cooreman 0:a0faa86660d4 37 {0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x30}, // ;
Steven Cooreman 0:a0faa86660d4 38 {0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x00}, // <
Steven Cooreman 0:a0faa86660d4 39 {0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00}, // =
Steven Cooreman 0:a0faa86660d4 40 {0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x00}, // >
Steven Cooreman 0:a0faa86660d4 41 {0x3C,0x66,0x06,0x0C,0x18,0x00,0x18,0x00}, // ?
Steven Cooreman 0:a0faa86660d4 42 {0x3E,0x63,0x6F,0x69,0x6F,0x60,0x3E,0x00}, // @ 0x40
Steven Cooreman 0:a0faa86660d4 43 {0x18,0x3C,0x66,0x66,0x7E,0x66,0x66,0x00}, // A
Steven Cooreman 0:a0faa86660d4 44 {0x7E,0x33,0x33,0x3E,0x33,0x33,0x7E,0x00}, // B
Steven Cooreman 0:a0faa86660d4 45 {0x1E,0x33,0x60,0x60,0x60,0x33,0x1E,0x00}, // C
Steven Cooreman 0:a0faa86660d4 46 {0x7C,0x36,0x33,0x33,0x33,0x36,0x7C,0x00}, // D
Steven Cooreman 0:a0faa86660d4 47 {0x7F,0x31,0x34,0x3C,0x34,0x31,0x7F,0x00}, // E
Steven Cooreman 0:a0faa86660d4 48 {0x7F,0x31,0x34,0x3C,0x34,0x30,0x78,0x00}, // F
Steven Cooreman 0:a0faa86660d4 49 {0x1E,0x33,0x60,0x60,0x67,0x33,0x1F,0x00}, // G
Steven Cooreman 0:a0faa86660d4 50 {0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x00}, // H
Steven Cooreman 0:a0faa86660d4 51 {0x3C,0x18,0x18,0x18,0x18,0x18,0x3C,0x00}, // I
Steven Cooreman 0:a0faa86660d4 52 {0x0F,0x06,0x06,0x06,0x66,0x66,0x3C,0x00}, // J
Steven Cooreman 0:a0faa86660d4 53 {0x73,0x33,0x36,0x3C,0x36,0x33,0x73,0x00}, // K
Steven Cooreman 0:a0faa86660d4 54 {0x78,0x30,0x30,0x30,0x31,0x33,0x7F,0x00}, // L
Steven Cooreman 0:a0faa86660d4 55 {0x63,0x77,0x7F,0x7F,0x6B,0x63,0x63,0x00}, // M
Steven Cooreman 0:a0faa86660d4 56 {0x63,0x73,0x7B,0x6F,0x67,0x63,0x63,0x00}, // N
Steven Cooreman 0:a0faa86660d4 57 {0x3E,0x63,0x63,0x63,0x63,0x63,0x3E,0x00}, // O
Steven Cooreman 0:a0faa86660d4 58 {0x7E,0x33,0x33,0x3E,0x30,0x30,0x78,0x00}, // P 0x50
Steven Cooreman 0:a0faa86660d4 59 {0x3C,0x66,0x66,0x66,0x6E,0x3C,0x0E,0x00}, // Q
Steven Cooreman 0:a0faa86660d4 60 {0x7E,0x33,0x33,0x3E,0x36,0x33,0x73,0x00}, // R
Steven Cooreman 0:a0faa86660d4 61 {0x3C,0x66,0x30,0x18,0x0C,0x66,0x3C,0x00}, // S
Steven Cooreman 0:a0faa86660d4 62 {0x7E,0x5A,0x18,0x18,0x18,0x18,0x3C,0x00}, // T
Steven Cooreman 0:a0faa86660d4 63 {0x66,0x66,0x66,0x66,0x66,0x66,0x7E,0x00}, // U
Steven Cooreman 0:a0faa86660d4 64 {0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00}, // V
Steven Cooreman 0:a0faa86660d4 65 {0x63,0x63,0x63,0x6B,0x7F,0x77,0x63,0x00}, // W
Steven Cooreman 0:a0faa86660d4 66 {0x63,0x63,0x36,0x1C,0x1C,0x36,0x63,0x00}, // X
Steven Cooreman 0:a0faa86660d4 67 {0x66,0x66,0x66,0x3C,0x18,0x18,0x3C,0x00}, // Y
Steven Cooreman 0:a0faa86660d4 68 {0x7F,0x63,0x46,0x0C,0x19,0x33,0x7F,0x00}, // Z
Steven Cooreman 0:a0faa86660d4 69 {0x3C,0x30,0x30,0x30,0x30,0x30,0x3C,0x00}, // [
Steven Cooreman 0:a0faa86660d4 70 {0x60,0x30,0x18,0x0C,0x06,0x03,0x01,0x00}, // \ (back slash)
Steven Cooreman 0:a0faa86660d4 71 {0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00}, // ]
Steven Cooreman 0:a0faa86660d4 72 {0x08,0x1C,0x36,0x63,0x00,0x00,0x00,0x00}, // ^
Steven Cooreman 0:a0faa86660d4 73 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF}, // _
Steven Cooreman 0:a0faa86660d4 74 {0x18,0x18,0x0C,0x00,0x00,0x00,0x00,0x00}, // ` 0x60
Steven Cooreman 0:a0faa86660d4 75 {0x00,0x00,0x3C,0x06,0x3E,0x66,0x3B,0x00}, // a
Steven Cooreman 0:a0faa86660d4 76 {0x70,0x30,0x3E,0x33,0x33,0x33,0x6E,0x00}, // b
Steven Cooreman 0:a0faa86660d4 77 {0x00,0x00,0x3C,0x66,0x60,0x66,0x3C,0x00}, // c
Steven Cooreman 0:a0faa86660d4 78 {0x0E,0x06,0x3E,0x66,0x66,0x66,0x3B,0x00}, // d
Steven Cooreman 0:a0faa86660d4 79 {0x00,0x00,0x3C,0x66,0x7E,0x60,0x3C,0x00}, // e
Steven Cooreman 0:a0faa86660d4 80 {0x1C,0x36,0x30,0x78,0x30,0x30,0x78,0x00}, // f
Steven Cooreman 0:a0faa86660d4 81 {0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x7C}, // g
Steven Cooreman 0:a0faa86660d4 82 {0x70,0x30,0x36,0x3B,0x33,0x33,0x73,0x00}, // h
Steven Cooreman 0:a0faa86660d4 83 {0x18,0x00,0x38,0x18,0x18,0x18,0x3C,0x00}, // i
Steven Cooreman 0:a0faa86660d4 84 {0x06,0x00,0x06,0x06,0x06,0x66,0x66,0x3C}, // j
Steven Cooreman 0:a0faa86660d4 85 {0x70,0x30,0x33,0x36,0x3C,0x36,0x73,0x00}, // k
Steven Cooreman 0:a0faa86660d4 86 {0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00}, // l
Steven Cooreman 0:a0faa86660d4 87 {0x00,0x00,0x66,0x7F,0x7F,0x6B,0x63,0x00}, // m
Steven Cooreman 0:a0faa86660d4 88 {0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x00}, // n
Steven Cooreman 0:a0faa86660d4 89 {0x00,0x00,0x3C,0x66,0x66,0x66,0x3C,0x00}, // o
Steven Cooreman 0:a0faa86660d4 90 {0x00,0x00,0x6E,0x33,0x33,0x3E,0x30,0x78}, // p
Steven Cooreman 0:a0faa86660d4 91 {0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x0F}, // q
Steven Cooreman 0:a0faa86660d4 92 {0x00,0x00,0x6E,0x3B,0x33,0x30,0x78,0x00}, // r
Steven Cooreman 0:a0faa86660d4 93 {0x00,0x00,0x3E,0x60,0x3C,0x06,0x7C,0x00}, // s
Steven Cooreman 0:a0faa86660d4 94 {0x08,0x18,0x3E,0x18,0x18,0x1A,0x0C,0x00}, // t
Steven Cooreman 0:a0faa86660d4 95 {0x00,0x00,0x66,0x66,0x66,0x66,0x3B,0x00}, // u
Steven Cooreman 0:a0faa86660d4 96 {0x00,0x00,0x66,0x66,0x66,0x3C,0x18,0x00}, // v
Steven Cooreman 0:a0faa86660d4 97 {0x00,0x00,0x63,0x6B,0x7F,0x7F,0x36,0x00}, // w
Steven Cooreman 0:a0faa86660d4 98 {0x00,0x00,0x63,0x36,0x1C,0x36,0x63,0x00}, // x
Steven Cooreman 0:a0faa86660d4 99 {0x00,0x00,0x66,0x66,0x66,0x3E,0x06,0x7C}, // y
Steven Cooreman 0:a0faa86660d4 100 {0x00,0x00,0x7E,0x4C,0x18,0x32,0x7E,0x00}, // z
Steven Cooreman 0:a0faa86660d4 101 {0x0E,0x18,0x18,0x70,0x18,0x18,0x0E,0x00}, // {
Steven Cooreman 0:a0faa86660d4 102 {0x0C,0x0C,0x0C,0x00,0x0C,0x0C,0x0C,0x00}, // |
Steven Cooreman 0:a0faa86660d4 103 {0x70,0x18,0x18,0x0E,0x18,0x18,0x70,0x00}, // }
Steven Cooreman 0:a0faa86660d4 104 {0x3B,0x6E,0x00,0x00,0x00,0x00,0x00,0x00}, // ~
Steven Cooreman 0:a0faa86660d4 105 {0x1C,0x36,0x36,0x1C,0x00,0x00,0x00,0x00}}; // DEL
Steven Cooreman 0:a0faa86660d4 106
Steven Cooreman 0:a0faa86660d4 107 GraphicsDisplay::GraphicsDisplay(const char *name):TextDisplay(name) {
Steven Cooreman 0:a0faa86660d4 108 foreground((uint16_t)Black);
Steven Cooreman 0:a0faa86660d4 109 background((uint16_t)White);
Steven Cooreman 0:a0faa86660d4 110 // current pixel location
Steven Cooreman 0:a0faa86660d4 111 _x = 0;
Steven Cooreman 0:a0faa86660d4 112 _y = 0;
Steven Cooreman 0:a0faa86660d4 113 // window settings
Steven Cooreman 0:a0faa86660d4 114 _x1 = 0;
Steven Cooreman 0:a0faa86660d4 115 _x2 = 0;
Steven Cooreman 0:a0faa86660d4 116 _y1 = 0;
Steven Cooreman 0:a0faa86660d4 117 _y2 = 0;
Steven Cooreman 0:a0faa86660d4 118 }
Steven Cooreman 0:a0faa86660d4 119
Steven Cooreman 0:a0faa86660d4 120 void GraphicsDisplay::character(int column, int row, int value) {
Steven Cooreman 0:a0faa86660d4 121 blitbit(column * 8, row * 8, 8, 8, (char*)&(FONT8x8[value - 0x1F][0]));
Steven Cooreman 0:a0faa86660d4 122 }
Steven Cooreman 0:a0faa86660d4 123
Steven Cooreman 0:a0faa86660d4 124 void GraphicsDisplay::window(int x, int y, int w, int h) {
Steven Cooreman 0:a0faa86660d4 125 // current pixel location
Steven Cooreman 0:a0faa86660d4 126 _x = x;
Steven Cooreman 0:a0faa86660d4 127 _y = y;
Steven Cooreman 0:a0faa86660d4 128 // window settings
Steven Cooreman 0:a0faa86660d4 129 _x1 = x;
Steven Cooreman 0:a0faa86660d4 130 _x2 = x + w - 1;
Steven Cooreman 0:a0faa86660d4 131 _y1 = y;
Steven Cooreman 0:a0faa86660d4 132 _y2 = y + h - 1;
Steven Cooreman 0:a0faa86660d4 133 }
Steven Cooreman 0:a0faa86660d4 134
Steven Cooreman 0:a0faa86660d4 135 void GraphicsDisplay::putp(int colour) {
Steven Cooreman 0:a0faa86660d4 136 // put pixel at current pixel location
Steven Cooreman 0:a0faa86660d4 137 pixel(_x, _y, colour);
Steven Cooreman 0:a0faa86660d4 138 // update pixel location based on window settings
Steven Cooreman 0:a0faa86660d4 139 _x++;
Steven Cooreman 0:a0faa86660d4 140 if(_x > _x2) {
Steven Cooreman 0:a0faa86660d4 141 _x = _x1;
Steven Cooreman 0:a0faa86660d4 142 _y++;
Steven Cooreman 0:a0faa86660d4 143 if(_y > _y2) {
Steven Cooreman 0:a0faa86660d4 144 _y = _y1;
Steven Cooreman 0:a0faa86660d4 145 }
Steven Cooreman 0:a0faa86660d4 146 }
Steven Cooreman 0:a0faa86660d4 147 }
Steven Cooreman 0:a0faa86660d4 148
Steven Cooreman 0:a0faa86660d4 149 void GraphicsDisplay::fill(int x, int y, int w, int h, int colour) {
Steven Cooreman 0:a0faa86660d4 150 window(x, y, w, h);
Steven Cooreman 0:a0faa86660d4 151 for(int i=0; i<w*h; i++) {
Steven Cooreman 0:a0faa86660d4 152 putp(colour);
Steven Cooreman 0:a0faa86660d4 153 }
Steven Cooreman 0:a0faa86660d4 154 }
srodk 5:26851f9655cf 155
srodk 5:26851f9655cf 156 void GraphicsDisplay::circle(int x, int y, int r,int colour){
srodk 5:26851f9655cf 157 int ce = -r;
srodk 5:26851f9655cf 158 int cx = r;
srodk 5:26851f9655cf 159 int cy = 0;
srodk 5:26851f9655cf 160 while(cx >= cy){
srodk 5:26851f9655cf 161 pixel(x+cx,y+cy,colour);
srodk 5:26851f9655cf 162 pixel(x-cx,y-cy,colour);
srodk 5:26851f9655cf 163 pixel(x-cx,y+cy,colour);
srodk 5:26851f9655cf 164 pixel(x+cx,y-cy,colour);
srodk 5:26851f9655cf 165 pixel(x+cy,y+cx,colour);
srodk 5:26851f9655cf 166 pixel(x-cy,y+cx,colour);
srodk 5:26851f9655cf 167 pixel(x-cy,y-cx,colour);
srodk 5:26851f9655cf 168 pixel(x+cy,y-cx,colour);
srodk 5:26851f9655cf 169 ce += 2*cy++ + 1;
srodk 5:26851f9655cf 170 if(ce >= 0){
srodk 5:26851f9655cf 171 ce -= 2*cx---1;
srodk 5:26851f9655cf 172 }
srodk 5:26851f9655cf 173
srodk 5:26851f9655cf 174 }
srodk 5:26851f9655cf 175
srodk 5:26851f9655cf 176 }
Steven Cooreman 0:a0faa86660d4 177
Steven Cooreman 0:a0faa86660d4 178 void GraphicsDisplay::cls() {
Steven Cooreman 0:a0faa86660d4 179 fill(0, 0, width(), height(), _background);
Steven Cooreman 0:a0faa86660d4 180 }
Steven Cooreman 0:a0faa86660d4 181
Steven Cooreman 0:a0faa86660d4 182 void GraphicsDisplay::blit(int x, int y, int w, int h, const int *colour) {
Steven Cooreman 0:a0faa86660d4 183 window(x, y, w, h);
Steven Cooreman 0:a0faa86660d4 184 for(int i=0; i<w*h; i++) {
Steven Cooreman 0:a0faa86660d4 185 putp(colour[i]);
Steven Cooreman 0:a0faa86660d4 186 }
Steven Cooreman 0:a0faa86660d4 187 }
Steven Cooreman 0:a0faa86660d4 188
Steven Cooreman 0:a0faa86660d4 189 void GraphicsDisplay::blitbit(int x, int y, int w, int h, const char* colour) {
Steven Cooreman 0:a0faa86660d4 190 window(x, y, w, h);
Steven Cooreman 0:a0faa86660d4 191 for(int i = 0; i < w*h; i++) {
Steven Cooreman 0:a0faa86660d4 192 char byte = colour[i >> 3];
Steven Cooreman 0:a0faa86660d4 193 int offset = i & 0x7;
Steven Cooreman 0:a0faa86660d4 194 int c = ((byte << (offset)) & 0x80) ? _foreground : _background;
Steven Cooreman 0:a0faa86660d4 195 putp(c);
Steven Cooreman 0:a0faa86660d4 196 }
Steven Cooreman 0:a0faa86660d4 197 }
Steven Cooreman 0:a0faa86660d4 198
Steven Cooreman 0:a0faa86660d4 199 int GraphicsDisplay::columns() {
Steven Cooreman 0:a0faa86660d4 200 return width() / 8;
Steven Cooreman 0:a0faa86660d4 201 }
Steven Cooreman 0:a0faa86660d4 202
Steven Cooreman 0:a0faa86660d4 203 int GraphicsDisplay::rows() {
Steven Cooreman 0:a0faa86660d4 204 return height() / 8;
Steven Cooreman 0:a0faa86660d4 205 }
Steven Cooreman 0:a0faa86660d4 206