DataAquisitieMisan3

Dependencies:   LM75B MMA7660 Servo mbed

Fork of DataAquisitieMisan by Michiel Van Endert

Committer:
mvanendert
Date:
Mon May 18 20:04:55 2015 +0000
Revision:
1:2b6bdf677573
Misan DataAquisitie;

Who changed what in which revision?

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