for rex

Dependencies:   FatFileSystem mbed

Fork of SnakeGame by Pujun Bhatnagar

Committer:
superlova
Date:
Sat Aug 08 09:32:56 2015 +0000
Revision:
1:4222a8f9ca88
Parent:
0:8b08136c5edd
for rexry

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pbhatnagar3 0:8b08136c5edd 1 /* mbed library for the mbed Lab Board 128*32 pixel LCD
pbhatnagar3 0:8b08136c5edd 2 * use C12832 controller
pbhatnagar3 0:8b08136c5edd 3 * Copyright (c) 2012 Peter Drescher - DC2PD
pbhatnagar3 0:8b08136c5edd 4 * Released under the MIT License: http://mbed.org/license/mit
pbhatnagar3 0:8b08136c5edd 5 *
pbhatnagar3 0:8b08136c5edd 6 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
pbhatnagar3 0:8b08136c5edd 7 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
pbhatnagar3 0:8b08136c5edd 8 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
pbhatnagar3 0:8b08136c5edd 9 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
pbhatnagar3 0:8b08136c5edd 10 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
pbhatnagar3 0:8b08136c5edd 11 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
pbhatnagar3 0:8b08136c5edd 12 * THE SOFTWARE.
pbhatnagar3 0:8b08136c5edd 13 */
pbhatnagar3 0:8b08136c5edd 14
pbhatnagar3 0:8b08136c5edd 15 // 13.10.12 initial design
pbhatnagar3 0:8b08136c5edd 16 // 25.10.12 add autorefresh of screen
pbhatnagar3 0:8b08136c5edd 17 // 25.10.12 add standart font
pbhatnagar3 0:8b08136c5edd 18 // 20.12.12 add bitmap graphics
pbhatnagar3 0:8b08136c5edd 19
pbhatnagar3 0:8b08136c5edd 20 // optional defines :
pbhatnagar3 0:8b08136c5edd 21 // #define debug_lcd 1
pbhatnagar3 0:8b08136c5edd 22
pbhatnagar3 0:8b08136c5edd 23 #include "C12832.h"
pbhatnagar3 0:8b08136c5edd 24 #include "mbed.h"
pbhatnagar3 0:8b08136c5edd 25 #include "stdio.h"
pbhatnagar3 0:8b08136c5edd 26 #include "Small_7.h"
pbhatnagar3 0:8b08136c5edd 27
pbhatnagar3 0:8b08136c5edd 28 #define BPP 1 // Bits per pixel
pbhatnagar3 0:8b08136c5edd 29
pbhatnagar3 0:8b08136c5edd 30
pbhatnagar3 0:8b08136c5edd 31 C12832::C12832(PinName mosi, PinName sck, PinName reset, PinName a0, PinName ncs, const char* name)
pbhatnagar3 0:8b08136c5edd 32 : _spi(mosi,NC,sck),_reset(reset),_A0(a0),_CS(ncs),GraphicsDisplay(name)
pbhatnagar3 0:8b08136c5edd 33 {
pbhatnagar3 0:8b08136c5edd 34 orientation = 1;
pbhatnagar3 0:8b08136c5edd 35 draw_mode = NORMAL;
pbhatnagar3 0:8b08136c5edd 36 char_x = 0;
pbhatnagar3 0:8b08136c5edd 37 lcd_reset();
pbhatnagar3 0:8b08136c5edd 38 }
pbhatnagar3 0:8b08136c5edd 39
pbhatnagar3 0:8b08136c5edd 40
pbhatnagar3 0:8b08136c5edd 41 int C12832::width()
pbhatnagar3 0:8b08136c5edd 42 {
pbhatnagar3 0:8b08136c5edd 43 if (orientation == 0 || orientation == 2) return 32;
pbhatnagar3 0:8b08136c5edd 44 else return 128;
pbhatnagar3 0:8b08136c5edd 45 }
pbhatnagar3 0:8b08136c5edd 46
pbhatnagar3 0:8b08136c5edd 47 int C12832::height()
pbhatnagar3 0:8b08136c5edd 48 {
pbhatnagar3 0:8b08136c5edd 49 if (orientation == 0 || orientation == 2) return 128;
pbhatnagar3 0:8b08136c5edd 50 else return 32;
pbhatnagar3 0:8b08136c5edd 51 }
pbhatnagar3 0:8b08136c5edd 52
pbhatnagar3 0:8b08136c5edd 53
pbhatnagar3 0:8b08136c5edd 54 void C12832::invert(unsigned int o)
pbhatnagar3 0:8b08136c5edd 55 {
pbhatnagar3 0:8b08136c5edd 56 if(o == 0) wr_cmd(0xA6);
pbhatnagar3 0:8b08136c5edd 57 else wr_cmd(0xA7);
pbhatnagar3 0:8b08136c5edd 58 }
pbhatnagar3 0:8b08136c5edd 59
pbhatnagar3 0:8b08136c5edd 60
pbhatnagar3 0:8b08136c5edd 61 void C12832::set_contrast(unsigned int o)
pbhatnagar3 0:8b08136c5edd 62 {
pbhatnagar3 0:8b08136c5edd 63 contrast = o;
pbhatnagar3 0:8b08136c5edd 64 wr_cmd(0x81); // set volume
pbhatnagar3 0:8b08136c5edd 65 wr_cmd(o & 0x3F);
pbhatnagar3 0:8b08136c5edd 66 }
pbhatnagar3 0:8b08136c5edd 67
pbhatnagar3 0:8b08136c5edd 68 unsigned int C12832::get_contrast(void)
pbhatnagar3 0:8b08136c5edd 69 {
pbhatnagar3 0:8b08136c5edd 70 return(contrast);
pbhatnagar3 0:8b08136c5edd 71 }
pbhatnagar3 0:8b08136c5edd 72
pbhatnagar3 0:8b08136c5edd 73
pbhatnagar3 0:8b08136c5edd 74 // write command to lcd controller
pbhatnagar3 0:8b08136c5edd 75
pbhatnagar3 0:8b08136c5edd 76 void C12832::wr_cmd(unsigned char cmd)
pbhatnagar3 0:8b08136c5edd 77 {
pbhatnagar3 0:8b08136c5edd 78 _A0 = 0;
pbhatnagar3 0:8b08136c5edd 79 _CS = 0;
pbhatnagar3 0:8b08136c5edd 80 _spi.write(cmd);
pbhatnagar3 0:8b08136c5edd 81 _CS = 1;
pbhatnagar3 0:8b08136c5edd 82 }
pbhatnagar3 0:8b08136c5edd 83
pbhatnagar3 0:8b08136c5edd 84 // write data to lcd controller
pbhatnagar3 0:8b08136c5edd 85
pbhatnagar3 0:8b08136c5edd 86 void C12832::wr_dat(unsigned char dat)
pbhatnagar3 0:8b08136c5edd 87 {
pbhatnagar3 0:8b08136c5edd 88 _A0 = 1;
pbhatnagar3 0:8b08136c5edd 89 _CS = 0;
pbhatnagar3 0:8b08136c5edd 90 _spi.write(dat);
pbhatnagar3 0:8b08136c5edd 91 _CS = 1;
pbhatnagar3 0:8b08136c5edd 92 }
pbhatnagar3 0:8b08136c5edd 93
pbhatnagar3 0:8b08136c5edd 94 // reset and init the lcd controller
pbhatnagar3 0:8b08136c5edd 95
pbhatnagar3 0:8b08136c5edd 96 void C12832::lcd_reset()
pbhatnagar3 0:8b08136c5edd 97 {
pbhatnagar3 0:8b08136c5edd 98
pbhatnagar3 0:8b08136c5edd 99 _spi.format(8,3); // 8 bit spi mode 3
pbhatnagar3 0:8b08136c5edd 100 _spi.frequency(20000000); // 19,2 Mhz SPI clock
pbhatnagar3 0:8b08136c5edd 101 _A0 = 0;
pbhatnagar3 0:8b08136c5edd 102 _CS = 1;
pbhatnagar3 0:8b08136c5edd 103 _reset = 0; // display reset
pbhatnagar3 0:8b08136c5edd 104 wait_us(50);
pbhatnagar3 0:8b08136c5edd 105 _reset = 1; // end reset
pbhatnagar3 0:8b08136c5edd 106 wait_ms(5);
pbhatnagar3 0:8b08136c5edd 107
pbhatnagar3 0:8b08136c5edd 108 /* Start Initial Sequence ----------------------------------------------------*/
pbhatnagar3 0:8b08136c5edd 109
pbhatnagar3 0:8b08136c5edd 110 wr_cmd(0xAE); // display off
pbhatnagar3 0:8b08136c5edd 111 wr_cmd(0xA2); // bias voltage
pbhatnagar3 0:8b08136c5edd 112
pbhatnagar3 0:8b08136c5edd 113 wr_cmd(0xA0);
pbhatnagar3 0:8b08136c5edd 114 wr_cmd(0xC8); // colum normal
pbhatnagar3 0:8b08136c5edd 115
pbhatnagar3 0:8b08136c5edd 116 wr_cmd(0x22); // voltage resistor ratio
pbhatnagar3 0:8b08136c5edd 117 wr_cmd(0x2F); // power on
pbhatnagar3 0:8b08136c5edd 118 //wr_cmd(0xA4); // LCD display ram
pbhatnagar3 0:8b08136c5edd 119 wr_cmd(0x40); // start line = 0
pbhatnagar3 0:8b08136c5edd 120 wr_cmd(0xAF); // display ON
pbhatnagar3 0:8b08136c5edd 121
pbhatnagar3 0:8b08136c5edd 122 wr_cmd(0x81); // set contrast
pbhatnagar3 0:8b08136c5edd 123 wr_cmd(0x17); // set contrast
pbhatnagar3 0:8b08136c5edd 124
pbhatnagar3 0:8b08136c5edd 125 wr_cmd(0xA6); // display normal
pbhatnagar3 0:8b08136c5edd 126
pbhatnagar3 0:8b08136c5edd 127
pbhatnagar3 0:8b08136c5edd 128 // clear and update LCD
pbhatnagar3 0:8b08136c5edd 129 memset(buffer,0x00,512); // clear display buffer
pbhatnagar3 0:8b08136c5edd 130 copy_to_lcd();
pbhatnagar3 0:8b08136c5edd 131 auto_up = 1; // switch on auto update
pbhatnagar3 0:8b08136c5edd 132 // dont do this by default. Make the user call
pbhatnagar3 0:8b08136c5edd 133 //claim(stdout); // redirekt printf to lcd
pbhatnagar3 0:8b08136c5edd 134 locate(0,0);
pbhatnagar3 0:8b08136c5edd 135 set_font((unsigned char*)Small_7); // standart font
pbhatnagar3 0:8b08136c5edd 136 }
pbhatnagar3 0:8b08136c5edd 137
pbhatnagar3 0:8b08136c5edd 138 // set one pixel in buffer
pbhatnagar3 0:8b08136c5edd 139
pbhatnagar3 0:8b08136c5edd 140 void C12832::pixel(int x, int y, int color)
pbhatnagar3 0:8b08136c5edd 141 {
pbhatnagar3 0:8b08136c5edd 142 // first check parameter
pbhatnagar3 0:8b08136c5edd 143 if(x > 128 || y > 32 || x < 0 || y < 0) return;
pbhatnagar3 0:8b08136c5edd 144
pbhatnagar3 0:8b08136c5edd 145 if(draw_mode == NORMAL) {
pbhatnagar3 0:8b08136c5edd 146 if(color == 0)
pbhatnagar3 0:8b08136c5edd 147 buffer[x + ((y/8) * 128)] &= ~(1 << (y%8)); // erase pixel
pbhatnagar3 0:8b08136c5edd 148 else
pbhatnagar3 0:8b08136c5edd 149 buffer[x + ((y/8) * 128)] |= (1 << (y%8)); // set pixel
pbhatnagar3 0:8b08136c5edd 150 } else { // XOR mode
pbhatnagar3 0:8b08136c5edd 151 if(color == 1)
pbhatnagar3 0:8b08136c5edd 152 buffer[x + ((y/8) * 128)] ^= (1 << (y%8)); // xor pixel
pbhatnagar3 0:8b08136c5edd 153 }
pbhatnagar3 0:8b08136c5edd 154 }
pbhatnagar3 0:8b08136c5edd 155
pbhatnagar3 0:8b08136c5edd 156 // update lcd
pbhatnagar3 0:8b08136c5edd 157
pbhatnagar3 0:8b08136c5edd 158 void C12832::copy_to_lcd(void)
pbhatnagar3 0:8b08136c5edd 159 {
pbhatnagar3 0:8b08136c5edd 160
pbhatnagar3 0:8b08136c5edd 161 int i=0;
pbhatnagar3 0:8b08136c5edd 162
pbhatnagar3 0:8b08136c5edd 163 //page 0
pbhatnagar3 0:8b08136c5edd 164 wr_cmd(0x00); // set column low nibble 0
pbhatnagar3 0:8b08136c5edd 165 wr_cmd(0x10); // set column hi nibble 0
pbhatnagar3 0:8b08136c5edd 166 wr_cmd(0xB0); // set page address 0
pbhatnagar3 0:8b08136c5edd 167 _A0 = 1;
pbhatnagar3 0:8b08136c5edd 168 for(i=0; i<128; i++) {
pbhatnagar3 0:8b08136c5edd 169 wr_dat(buffer[i]);
pbhatnagar3 0:8b08136c5edd 170 }
pbhatnagar3 0:8b08136c5edd 171
pbhatnagar3 0:8b08136c5edd 172 // page 1
pbhatnagar3 0:8b08136c5edd 173 wr_cmd(0x00); // set column low nibble 0
pbhatnagar3 0:8b08136c5edd 174 wr_cmd(0x10); // set column hi nibble 0
pbhatnagar3 0:8b08136c5edd 175 wr_cmd(0xB1); // set page address 1
pbhatnagar3 0:8b08136c5edd 176 _A0 = 1;
pbhatnagar3 0:8b08136c5edd 177 for(i=128; i<256; i++) {
pbhatnagar3 0:8b08136c5edd 178 wr_dat(buffer[i]);
pbhatnagar3 0:8b08136c5edd 179 }
pbhatnagar3 0:8b08136c5edd 180
pbhatnagar3 0:8b08136c5edd 181 //page 2
pbhatnagar3 0:8b08136c5edd 182 wr_cmd(0x00); // set column low nibble 0
pbhatnagar3 0:8b08136c5edd 183 wr_cmd(0x10); // set column hi nibble 0
pbhatnagar3 0:8b08136c5edd 184 wr_cmd(0xB2); // set page address 2
pbhatnagar3 0:8b08136c5edd 185 _A0 = 1;
pbhatnagar3 0:8b08136c5edd 186 for(i=256; i<384; i++) {
pbhatnagar3 0:8b08136c5edd 187 wr_dat(buffer[i]);
pbhatnagar3 0:8b08136c5edd 188 }
pbhatnagar3 0:8b08136c5edd 189
pbhatnagar3 0:8b08136c5edd 190 //page 3
pbhatnagar3 0:8b08136c5edd 191 wr_cmd(0x00); // set column low nibble 0
pbhatnagar3 0:8b08136c5edd 192 wr_cmd(0x10); // set column hi nibble 0
pbhatnagar3 0:8b08136c5edd 193 wr_cmd(0xB3); // set page address 3
pbhatnagar3 0:8b08136c5edd 194 _A0 = 1;
pbhatnagar3 0:8b08136c5edd 195
pbhatnagar3 0:8b08136c5edd 196 _CS = 0;
pbhatnagar3 0:8b08136c5edd 197
pbhatnagar3 0:8b08136c5edd 198 for(i=384; i<512; i++) {
pbhatnagar3 0:8b08136c5edd 199 wr_dat(buffer[i]);
pbhatnagar3 0:8b08136c5edd 200 }
pbhatnagar3 0:8b08136c5edd 201
pbhatnagar3 0:8b08136c5edd 202 }
pbhatnagar3 0:8b08136c5edd 203
pbhatnagar3 0:8b08136c5edd 204 void C12832::cls(void)
pbhatnagar3 0:8b08136c5edd 205 {
pbhatnagar3 0:8b08136c5edd 206 memset(buffer,0x00,512); // clear display buffer
pbhatnagar3 0:8b08136c5edd 207 copy_to_lcd();
pbhatnagar3 0:8b08136c5edd 208 }
pbhatnagar3 0:8b08136c5edd 209
pbhatnagar3 0:8b08136c5edd 210
pbhatnagar3 0:8b08136c5edd 211 void C12832::line(int x0, int y0, int x1, int y1, int color)
pbhatnagar3 0:8b08136c5edd 212 {
pbhatnagar3 0:8b08136c5edd 213 int dx = 0, dy = 0;
pbhatnagar3 0:8b08136c5edd 214 int dx_sym = 0, dy_sym = 0;
pbhatnagar3 0:8b08136c5edd 215 int dx_x2 = 0, dy_x2 = 0;
pbhatnagar3 0:8b08136c5edd 216 int di = 0;
pbhatnagar3 0:8b08136c5edd 217
pbhatnagar3 0:8b08136c5edd 218 dx = x1-x0;
pbhatnagar3 0:8b08136c5edd 219 dy = y1-y0;
pbhatnagar3 0:8b08136c5edd 220
pbhatnagar3 0:8b08136c5edd 221 // if (dx == 0) { /* vertical line */
pbhatnagar3 0:8b08136c5edd 222 // if (y1 > y0) vline(x0,y0,y1,color);
pbhatnagar3 0:8b08136c5edd 223 // else vline(x0,y1,y0,color);
pbhatnagar3 0:8b08136c5edd 224 // return;
pbhatnagar3 0:8b08136c5edd 225 // }
pbhatnagar3 0:8b08136c5edd 226
pbhatnagar3 0:8b08136c5edd 227 if (dx > 0) {
pbhatnagar3 0:8b08136c5edd 228 dx_sym = 1;
pbhatnagar3 0:8b08136c5edd 229 } else {
pbhatnagar3 0:8b08136c5edd 230 dx_sym = -1;
pbhatnagar3 0:8b08136c5edd 231 }
pbhatnagar3 0:8b08136c5edd 232 // if (dy == 0) { /* horizontal line */
pbhatnagar3 0:8b08136c5edd 233 // if (x1 > x0) hline(x0,x1,y0,color);
pbhatnagar3 0:8b08136c5edd 234 // else hline(x1,x0,y0,color);
pbhatnagar3 0:8b08136c5edd 235 // return;
pbhatnagar3 0:8b08136c5edd 236 // }
pbhatnagar3 0:8b08136c5edd 237
pbhatnagar3 0:8b08136c5edd 238 if (dy > 0) {
pbhatnagar3 0:8b08136c5edd 239 dy_sym = 1;
pbhatnagar3 0:8b08136c5edd 240 } else {
pbhatnagar3 0:8b08136c5edd 241 dy_sym = -1;
pbhatnagar3 0:8b08136c5edd 242 }
pbhatnagar3 0:8b08136c5edd 243
pbhatnagar3 0:8b08136c5edd 244 dx = dx_sym*dx;
pbhatnagar3 0:8b08136c5edd 245 dy = dy_sym*dy;
pbhatnagar3 0:8b08136c5edd 246
pbhatnagar3 0:8b08136c5edd 247 dx_x2 = dx*2;
pbhatnagar3 0:8b08136c5edd 248 dy_x2 = dy*2;
pbhatnagar3 0:8b08136c5edd 249
pbhatnagar3 0:8b08136c5edd 250 if (dx >= dy) {
pbhatnagar3 0:8b08136c5edd 251 di = dy_x2 - dx;
pbhatnagar3 0:8b08136c5edd 252 while (x0 != x1) {
pbhatnagar3 0:8b08136c5edd 253
pbhatnagar3 0:8b08136c5edd 254 pixel(x0, y0, color);
pbhatnagar3 0:8b08136c5edd 255 x0 += dx_sym;
pbhatnagar3 0:8b08136c5edd 256 if (di<0) {
pbhatnagar3 0:8b08136c5edd 257 di += dy_x2;
pbhatnagar3 0:8b08136c5edd 258 } else {
pbhatnagar3 0:8b08136c5edd 259 di += dy_x2 - dx_x2;
pbhatnagar3 0:8b08136c5edd 260 y0 += dy_sym;
pbhatnagar3 0:8b08136c5edd 261 }
pbhatnagar3 0:8b08136c5edd 262 }
pbhatnagar3 0:8b08136c5edd 263 pixel(x0, y0, color);
pbhatnagar3 0:8b08136c5edd 264 } else {
pbhatnagar3 0:8b08136c5edd 265 di = dx_x2 - dy;
pbhatnagar3 0:8b08136c5edd 266 while (y0 != y1) {
pbhatnagar3 0:8b08136c5edd 267 pixel(x0, y0, color);
pbhatnagar3 0:8b08136c5edd 268 y0 += dy_sym;
pbhatnagar3 0:8b08136c5edd 269 if (di < 0) {
pbhatnagar3 0:8b08136c5edd 270 di += dx_x2;
pbhatnagar3 0:8b08136c5edd 271 } else {
pbhatnagar3 0:8b08136c5edd 272 di += dx_x2 - dy_x2;
pbhatnagar3 0:8b08136c5edd 273 x0 += dx_sym;
pbhatnagar3 0:8b08136c5edd 274 }
pbhatnagar3 0:8b08136c5edd 275 }
pbhatnagar3 0:8b08136c5edd 276 pixel(x0, y0, color);
pbhatnagar3 0:8b08136c5edd 277 }
pbhatnagar3 0:8b08136c5edd 278 if(auto_up) copy_to_lcd();
pbhatnagar3 0:8b08136c5edd 279 }
pbhatnagar3 0:8b08136c5edd 280
pbhatnagar3 0:8b08136c5edd 281 void C12832::rect(int x0, int y0, int x1, int y1, int color)
pbhatnagar3 0:8b08136c5edd 282 {
pbhatnagar3 0:8b08136c5edd 283
pbhatnagar3 0:8b08136c5edd 284 if (x1 > x0) line(x0,y0,x1,y0,color);
pbhatnagar3 0:8b08136c5edd 285 else line(x1,y0,x0,y0,color);
pbhatnagar3 0:8b08136c5edd 286
pbhatnagar3 0:8b08136c5edd 287 if (y1 > y0) line(x0,y0,x0,y1,color);
pbhatnagar3 0:8b08136c5edd 288 else line(x0,y1,x0,y0,color);
pbhatnagar3 0:8b08136c5edd 289
pbhatnagar3 0:8b08136c5edd 290 if (x1 > x0) line(x0,y1,x1,y1,color);
pbhatnagar3 0:8b08136c5edd 291 else line(x1,y1,x0,y1,color);
pbhatnagar3 0:8b08136c5edd 292
pbhatnagar3 0:8b08136c5edd 293 if (y1 > y0) line(x1,y0,x1,y1,color);
pbhatnagar3 0:8b08136c5edd 294 else line(x1,y1,x1,y0,color);
pbhatnagar3 0:8b08136c5edd 295
pbhatnagar3 0:8b08136c5edd 296 if(auto_up) copy_to_lcd();
pbhatnagar3 0:8b08136c5edd 297 }
pbhatnagar3 0:8b08136c5edd 298
pbhatnagar3 0:8b08136c5edd 299 void C12832::fillrect(int x0, int y0, int x1, int y1, int color)
pbhatnagar3 0:8b08136c5edd 300 {
pbhatnagar3 0:8b08136c5edd 301 int l,c,i;
pbhatnagar3 0:8b08136c5edd 302 if(x0 > x1) {
pbhatnagar3 0:8b08136c5edd 303 i = x0;
pbhatnagar3 0:8b08136c5edd 304 x0 = x1;
pbhatnagar3 0:8b08136c5edd 305 x1 = i;
pbhatnagar3 0:8b08136c5edd 306 }
pbhatnagar3 0:8b08136c5edd 307
pbhatnagar3 0:8b08136c5edd 308 if(y0 > y1) {
pbhatnagar3 0:8b08136c5edd 309 i = y0;
pbhatnagar3 0:8b08136c5edd 310 y0 = y1;
pbhatnagar3 0:8b08136c5edd 311 y1 = i;
pbhatnagar3 0:8b08136c5edd 312 }
pbhatnagar3 0:8b08136c5edd 313
pbhatnagar3 0:8b08136c5edd 314 for(l = x0; l<= x1; l ++) {
pbhatnagar3 0:8b08136c5edd 315 for(c = y0; c<= y1; c++) {
pbhatnagar3 0:8b08136c5edd 316 pixel(l,c,color);
pbhatnagar3 0:8b08136c5edd 317 }
pbhatnagar3 0:8b08136c5edd 318 }
pbhatnagar3 0:8b08136c5edd 319 if(auto_up) copy_to_lcd();
pbhatnagar3 0:8b08136c5edd 320 }
pbhatnagar3 0:8b08136c5edd 321
pbhatnagar3 0:8b08136c5edd 322
pbhatnagar3 0:8b08136c5edd 323
pbhatnagar3 0:8b08136c5edd 324 void C12832::circle(int x0, int y0, int r, int color)
pbhatnagar3 0:8b08136c5edd 325 {
pbhatnagar3 0:8b08136c5edd 326
pbhatnagar3 0:8b08136c5edd 327 int draw_x0, draw_y0;
pbhatnagar3 0:8b08136c5edd 328 int draw_x1, draw_y1;
pbhatnagar3 0:8b08136c5edd 329 int draw_x2, draw_y2;
pbhatnagar3 0:8b08136c5edd 330 int draw_x3, draw_y3;
pbhatnagar3 0:8b08136c5edd 331 int draw_x4, draw_y4;
pbhatnagar3 0:8b08136c5edd 332 int draw_x5, draw_y5;
pbhatnagar3 0:8b08136c5edd 333 int draw_x6, draw_y6;
pbhatnagar3 0:8b08136c5edd 334 int draw_x7, draw_y7;
pbhatnagar3 0:8b08136c5edd 335 int xx, yy;
pbhatnagar3 0:8b08136c5edd 336 int di;
pbhatnagar3 0:8b08136c5edd 337 //WindowMax();
pbhatnagar3 0:8b08136c5edd 338 if (r == 0) { /* no radius */
pbhatnagar3 0:8b08136c5edd 339 return;
pbhatnagar3 0:8b08136c5edd 340 }
pbhatnagar3 0:8b08136c5edd 341
pbhatnagar3 0:8b08136c5edd 342 draw_x0 = draw_x1 = x0;
pbhatnagar3 0:8b08136c5edd 343 draw_y0 = draw_y1 = y0 + r;
pbhatnagar3 0:8b08136c5edd 344 if (draw_y0 < height()) {
pbhatnagar3 0:8b08136c5edd 345 pixel(draw_x0, draw_y0, color); /* 90 degree */
pbhatnagar3 0:8b08136c5edd 346 }
pbhatnagar3 0:8b08136c5edd 347
pbhatnagar3 0:8b08136c5edd 348 draw_x2 = draw_x3 = x0;
pbhatnagar3 0:8b08136c5edd 349 draw_y2 = draw_y3 = y0 - r;
pbhatnagar3 0:8b08136c5edd 350 if (draw_y2 >= 0) {
pbhatnagar3 0:8b08136c5edd 351 pixel(draw_x2, draw_y2, color); /* 270 degree */
pbhatnagar3 0:8b08136c5edd 352 }
pbhatnagar3 0:8b08136c5edd 353
pbhatnagar3 0:8b08136c5edd 354 draw_x4 = draw_x6 = x0 + r;
pbhatnagar3 0:8b08136c5edd 355 draw_y4 = draw_y6 = y0;
pbhatnagar3 0:8b08136c5edd 356 if (draw_x4 < width()) {
pbhatnagar3 0:8b08136c5edd 357 pixel(draw_x4, draw_y4, color); /* 0 degree */
pbhatnagar3 0:8b08136c5edd 358 }
pbhatnagar3 0:8b08136c5edd 359
pbhatnagar3 0:8b08136c5edd 360 draw_x5 = draw_x7 = x0 - r;
pbhatnagar3 0:8b08136c5edd 361 draw_y5 = draw_y7 = y0;
pbhatnagar3 0:8b08136c5edd 362 if (draw_x5>=0) {
pbhatnagar3 0:8b08136c5edd 363 pixel(draw_x5, draw_y5, color); /* 180 degree */
pbhatnagar3 0:8b08136c5edd 364 }
pbhatnagar3 0:8b08136c5edd 365
pbhatnagar3 0:8b08136c5edd 366 if (r == 1) {
pbhatnagar3 0:8b08136c5edd 367 return;
pbhatnagar3 0:8b08136c5edd 368 }
pbhatnagar3 0:8b08136c5edd 369
pbhatnagar3 0:8b08136c5edd 370 di = 3 - 2*r;
pbhatnagar3 0:8b08136c5edd 371 xx = 0;
pbhatnagar3 0:8b08136c5edd 372 yy = r;
pbhatnagar3 0:8b08136c5edd 373 while (xx < yy) {
pbhatnagar3 0:8b08136c5edd 374
pbhatnagar3 0:8b08136c5edd 375 if (di < 0) {
pbhatnagar3 0:8b08136c5edd 376 di += 4*xx + 6;
pbhatnagar3 0:8b08136c5edd 377 } else {
pbhatnagar3 0:8b08136c5edd 378 di += 4*(xx - yy) + 10;
pbhatnagar3 0:8b08136c5edd 379 yy--;
pbhatnagar3 0:8b08136c5edd 380 draw_y0--;
pbhatnagar3 0:8b08136c5edd 381 draw_y1--;
pbhatnagar3 0:8b08136c5edd 382 draw_y2++;
pbhatnagar3 0:8b08136c5edd 383 draw_y3++;
pbhatnagar3 0:8b08136c5edd 384 draw_x4--;
pbhatnagar3 0:8b08136c5edd 385 draw_x5++;
pbhatnagar3 0:8b08136c5edd 386 draw_x6--;
pbhatnagar3 0:8b08136c5edd 387 draw_x7++;
pbhatnagar3 0:8b08136c5edd 388 }
pbhatnagar3 0:8b08136c5edd 389 xx++;
pbhatnagar3 0:8b08136c5edd 390 draw_x0++;
pbhatnagar3 0:8b08136c5edd 391 draw_x1--;
pbhatnagar3 0:8b08136c5edd 392 draw_x2++;
pbhatnagar3 0:8b08136c5edd 393 draw_x3--;
pbhatnagar3 0:8b08136c5edd 394 draw_y4++;
pbhatnagar3 0:8b08136c5edd 395 draw_y5++;
pbhatnagar3 0:8b08136c5edd 396 draw_y6--;
pbhatnagar3 0:8b08136c5edd 397 draw_y7--;
pbhatnagar3 0:8b08136c5edd 398
pbhatnagar3 0:8b08136c5edd 399 if ( (draw_x0 <= width()) && (draw_y0>=0) ) {
pbhatnagar3 0:8b08136c5edd 400 pixel(draw_x0, draw_y0, color);
pbhatnagar3 0:8b08136c5edd 401 }
pbhatnagar3 0:8b08136c5edd 402
pbhatnagar3 0:8b08136c5edd 403 if ( (draw_x1 >= 0) && (draw_y1 >= 0) ) {
pbhatnagar3 0:8b08136c5edd 404 pixel(draw_x1, draw_y1, color);
pbhatnagar3 0:8b08136c5edd 405 }
pbhatnagar3 0:8b08136c5edd 406
pbhatnagar3 0:8b08136c5edd 407 if ( (draw_x2 <= width()) && (draw_y2 <= height()) ) {
pbhatnagar3 0:8b08136c5edd 408 pixel(draw_x2, draw_y2, color);
pbhatnagar3 0:8b08136c5edd 409 }
pbhatnagar3 0:8b08136c5edd 410
pbhatnagar3 0:8b08136c5edd 411 if ( (draw_x3 >=0 ) && (draw_y3 <= height()) ) {
pbhatnagar3 0:8b08136c5edd 412 pixel(draw_x3, draw_y3, color);
pbhatnagar3 0:8b08136c5edd 413 }
pbhatnagar3 0:8b08136c5edd 414
pbhatnagar3 0:8b08136c5edd 415 if ( (draw_x4 <= width()) && (draw_y4 >= 0) ) {
pbhatnagar3 0:8b08136c5edd 416 pixel(draw_x4, draw_y4, color);
pbhatnagar3 0:8b08136c5edd 417 }
pbhatnagar3 0:8b08136c5edd 418
pbhatnagar3 0:8b08136c5edd 419 if ( (draw_x5 >= 0) && (draw_y5 >= 0) ) {
pbhatnagar3 0:8b08136c5edd 420 pixel(draw_x5, draw_y5, color);
pbhatnagar3 0:8b08136c5edd 421 }
pbhatnagar3 0:8b08136c5edd 422 if ( (draw_x6 <=width()) && (draw_y6 <= height()) ) {
pbhatnagar3 0:8b08136c5edd 423 pixel(draw_x6, draw_y6, color);
pbhatnagar3 0:8b08136c5edd 424 }
pbhatnagar3 0:8b08136c5edd 425 if ( (draw_x7 >= 0) && (draw_y7 <= height()) ) {
pbhatnagar3 0:8b08136c5edd 426 pixel(draw_x7, draw_y7, color);
pbhatnagar3 0:8b08136c5edd 427 }
pbhatnagar3 0:8b08136c5edd 428 }
pbhatnagar3 0:8b08136c5edd 429 if(auto_up) copy_to_lcd();
pbhatnagar3 0:8b08136c5edd 430 }
pbhatnagar3 0:8b08136c5edd 431
pbhatnagar3 0:8b08136c5edd 432 void C12832::fillcircle(int x, int y, int r, int color)
pbhatnagar3 0:8b08136c5edd 433 {
pbhatnagar3 0:8b08136c5edd 434 int i,up;
pbhatnagar3 0:8b08136c5edd 435 up = auto_up;
pbhatnagar3 0:8b08136c5edd 436 auto_up = 0; // off
pbhatnagar3 0:8b08136c5edd 437 for (i = 0; i <= r; i++)
pbhatnagar3 0:8b08136c5edd 438 circle(x,y,i,color);
pbhatnagar3 0:8b08136c5edd 439 auto_up = up;
pbhatnagar3 0:8b08136c5edd 440 if(auto_up) copy_to_lcd();
pbhatnagar3 0:8b08136c5edd 441 }
pbhatnagar3 0:8b08136c5edd 442
pbhatnagar3 0:8b08136c5edd 443 void C12832::setmode(int mode)
pbhatnagar3 0:8b08136c5edd 444 {
pbhatnagar3 0:8b08136c5edd 445 draw_mode = mode;
pbhatnagar3 0:8b08136c5edd 446 }
pbhatnagar3 0:8b08136c5edd 447
pbhatnagar3 0:8b08136c5edd 448 void C12832::locate(int x, int y)
pbhatnagar3 0:8b08136c5edd 449 {
pbhatnagar3 0:8b08136c5edd 450 char_x = x;
pbhatnagar3 0:8b08136c5edd 451 char_y = y;
pbhatnagar3 0:8b08136c5edd 452 }
pbhatnagar3 0:8b08136c5edd 453
pbhatnagar3 0:8b08136c5edd 454
pbhatnagar3 0:8b08136c5edd 455
pbhatnagar3 0:8b08136c5edd 456 int C12832::columns()
pbhatnagar3 0:8b08136c5edd 457 {
pbhatnagar3 0:8b08136c5edd 458 return width() / font[1];
pbhatnagar3 0:8b08136c5edd 459 }
pbhatnagar3 0:8b08136c5edd 460
pbhatnagar3 0:8b08136c5edd 461
pbhatnagar3 0:8b08136c5edd 462
pbhatnagar3 0:8b08136c5edd 463 int C12832::rows()
pbhatnagar3 0:8b08136c5edd 464 {
pbhatnagar3 0:8b08136c5edd 465 return height() / font[2];
pbhatnagar3 0:8b08136c5edd 466 }
pbhatnagar3 0:8b08136c5edd 467
pbhatnagar3 0:8b08136c5edd 468
pbhatnagar3 0:8b08136c5edd 469
pbhatnagar3 0:8b08136c5edd 470 int C12832::_putc(int value)
pbhatnagar3 0:8b08136c5edd 471 {
pbhatnagar3 0:8b08136c5edd 472 if (value == '\n') { // new line
pbhatnagar3 0:8b08136c5edd 473 char_x = 0;
pbhatnagar3 0:8b08136c5edd 474 char_y = char_y + font[2];
pbhatnagar3 0:8b08136c5edd 475 if (char_y >= height() - font[2]) {
pbhatnagar3 0:8b08136c5edd 476 char_y = 0;
pbhatnagar3 0:8b08136c5edd 477 }
pbhatnagar3 0:8b08136c5edd 478 } else {
pbhatnagar3 0:8b08136c5edd 479 character(char_x, char_y, value);
pbhatnagar3 0:8b08136c5edd 480 if(auto_up) copy_to_lcd();
pbhatnagar3 0:8b08136c5edd 481 }
pbhatnagar3 0:8b08136c5edd 482 return value;
pbhatnagar3 0:8b08136c5edd 483 }
pbhatnagar3 0:8b08136c5edd 484
pbhatnagar3 0:8b08136c5edd 485 void C12832::character(int x, int y, int c)
pbhatnagar3 0:8b08136c5edd 486 {
pbhatnagar3 0:8b08136c5edd 487 unsigned int hor,vert,offset,bpl,j,i,b;
pbhatnagar3 0:8b08136c5edd 488 unsigned char* zeichen;
pbhatnagar3 0:8b08136c5edd 489 unsigned char z,w;
pbhatnagar3 0:8b08136c5edd 490
pbhatnagar3 0:8b08136c5edd 491 if ((c < 31) || (c > 127)) return; // test char range
pbhatnagar3 0:8b08136c5edd 492
pbhatnagar3 0:8b08136c5edd 493 // read font parameter from start of array
pbhatnagar3 0:8b08136c5edd 494 offset = font[0]; // bytes / char
pbhatnagar3 0:8b08136c5edd 495 hor = font[1]; // get hor size of font
pbhatnagar3 0:8b08136c5edd 496 vert = font[2]; // get vert size of font
pbhatnagar3 0:8b08136c5edd 497 bpl = font[3]; // bytes per line
pbhatnagar3 0:8b08136c5edd 498
pbhatnagar3 0:8b08136c5edd 499 if (char_x + hor > width()) {
pbhatnagar3 0:8b08136c5edd 500 char_x = 0;
pbhatnagar3 0:8b08136c5edd 501 char_y = char_y + vert;
pbhatnagar3 0:8b08136c5edd 502 if (char_y >= height() - font[2]) {
pbhatnagar3 0:8b08136c5edd 503 char_y = 0;
pbhatnagar3 0:8b08136c5edd 504 }
pbhatnagar3 0:8b08136c5edd 505 }
pbhatnagar3 0:8b08136c5edd 506
pbhatnagar3 0:8b08136c5edd 507 zeichen = &font[((c -32) * offset) + 4]; // start of char bitmap
pbhatnagar3 0:8b08136c5edd 508 w = zeichen[0]; // width of actual char
pbhatnagar3 0:8b08136c5edd 509 // construct the char into the buffer
pbhatnagar3 0:8b08136c5edd 510 for (j=0; j<vert; j++) { // vert line
pbhatnagar3 0:8b08136c5edd 511 for (i=0; i<hor; i++) { // horz line
pbhatnagar3 0:8b08136c5edd 512 z = zeichen[bpl * i + ((j & 0xF8) >> 3)+1];
pbhatnagar3 0:8b08136c5edd 513 b = 1 << (j & 0x07);
pbhatnagar3 0:8b08136c5edd 514 if (( z & b ) == 0x00) {
pbhatnagar3 0:8b08136c5edd 515 pixel(x+i,y+j,0);
pbhatnagar3 0:8b08136c5edd 516 } else {
pbhatnagar3 0:8b08136c5edd 517 pixel(x+i,y+j,1);
pbhatnagar3 0:8b08136c5edd 518 }
pbhatnagar3 0:8b08136c5edd 519
pbhatnagar3 0:8b08136c5edd 520 }
pbhatnagar3 0:8b08136c5edd 521 }
pbhatnagar3 0:8b08136c5edd 522
pbhatnagar3 0:8b08136c5edd 523 char_x += w;
pbhatnagar3 0:8b08136c5edd 524 }
pbhatnagar3 0:8b08136c5edd 525
pbhatnagar3 0:8b08136c5edd 526
pbhatnagar3 0:8b08136c5edd 527 void C12832::set_font(unsigned char* f)
pbhatnagar3 0:8b08136c5edd 528 {
pbhatnagar3 0:8b08136c5edd 529 font = f;
pbhatnagar3 0:8b08136c5edd 530 }
pbhatnagar3 0:8b08136c5edd 531
pbhatnagar3 0:8b08136c5edd 532 void C12832::set_auto_up(unsigned int up)
pbhatnagar3 0:8b08136c5edd 533 {
pbhatnagar3 0:8b08136c5edd 534 if(up ) auto_up = 1;
pbhatnagar3 0:8b08136c5edd 535 else auto_up = 0;
pbhatnagar3 0:8b08136c5edd 536 }
pbhatnagar3 0:8b08136c5edd 537
pbhatnagar3 0:8b08136c5edd 538 unsigned int C12832::get_auto_up(void)
pbhatnagar3 0:8b08136c5edd 539 {
pbhatnagar3 0:8b08136c5edd 540 return (auto_up);
pbhatnagar3 0:8b08136c5edd 541 }
pbhatnagar3 0:8b08136c5edd 542
pbhatnagar3 0:8b08136c5edd 543 void C12832::print_bm(Bitmap bm, int x, int y)
pbhatnagar3 0:8b08136c5edd 544 {
pbhatnagar3 0:8b08136c5edd 545 int h,v,b;
pbhatnagar3 0:8b08136c5edd 546 char d;
pbhatnagar3 0:8b08136c5edd 547
pbhatnagar3 0:8b08136c5edd 548 for(v=0; v < bm.ySize; v++) { // lines
pbhatnagar3 0:8b08136c5edd 549 for(h=0; h < bm.xSize; h++) { // pixel
pbhatnagar3 0:8b08136c5edd 550 if(h + x > 127) break;
pbhatnagar3 0:8b08136c5edd 551 if(v + y > 31) break;
pbhatnagar3 0:8b08136c5edd 552 d = bm.data[bm.Byte_in_Line * v + ((h & 0xF8) >> 3)];
pbhatnagar3 0:8b08136c5edd 553 b = 0x80 >> (h & 0x07);
pbhatnagar3 0:8b08136c5edd 554 if((d & b) == 0) {
pbhatnagar3 0:8b08136c5edd 555 pixel(x+h,y+v,0);
pbhatnagar3 0:8b08136c5edd 556 } else {
pbhatnagar3 0:8b08136c5edd 557 pixel(x+h,y+v,1);
pbhatnagar3 0:8b08136c5edd 558 }
pbhatnagar3 0:8b08136c5edd 559 }
pbhatnagar3 0:8b08136c5edd 560 }
pbhatnagar3 0:8b08136c5edd 561
pbhatnagar3 0:8b08136c5edd 562 }
pbhatnagar3 0:8b08136c5edd 563
pbhatnagar3 0:8b08136c5edd 564