From 8e57c683d3d16f1dee320f10c411602ea38ba651 Mon Sep 17 00:00:00 2001 From: Stanley Huang Date: Mon, 25 Mar 2013 00:57:28 +0800 Subject: initial commit --- samples/dashboard_4884/LCD4884.cpp | 294 +++++++++++++++++++ samples/dashboard_4884/LCD4884.h | 67 +++++ samples/dashboard_4884/dashboard_4884.ino | 468 ++++++++++++++++++++++++++++++ samples/dashboard_4884/font_6x8.h | 101 +++++++ samples/dashboard_4884/font_big.h | 141 +++++++++ 5 files changed, 1071 insertions(+) create mode 100644 samples/dashboard_4884/LCD4884.cpp create mode 100644 samples/dashboard_4884/LCD4884.h create mode 100644 samples/dashboard_4884/dashboard_4884.ino create mode 100644 samples/dashboard_4884/font_6x8.h create mode 100644 samples/dashboard_4884/font_big.h (limited to 'samples/dashboard_4884') diff --git a/samples/dashboard_4884/LCD4884.cpp b/samples/dashboard_4884/LCD4884.cpp new file mode 100644 index 0000000..522826d --- /dev/null +++ b/samples/dashboard_4884/LCD4884.cpp @@ -0,0 +1,294 @@ +/* +Modified by Lauren +version 0.3 + +Any suggestions are welcome. + +Editors : Lauren from DFRobot + Stanley Huang +Date : Feb. 11, 2012 + +* Added LCD_putchar for basic console display +* Have the back light under control. +* Update the library and sketch to compatible with IDE V1.0 and earlier + +*/ + +#include "LCD4884.h" +#include "font_6x8.h" +#include "font_big.h" + +#if defined(ARDUINO) && ARDUINO >= 100 +#include "Arduino.h" +#else +#include "WProgram.h" +#include "WConstants.h" +#endif + + +extern "C" +{ +#include +#include +} + +#define NUM_COL 14 +#define NUM_ROW 5 + +LCD4884::LCD4884():prev_char(0),char_mode(MENU_NORMAL) +{}; + +LCD4884 lcd = LCD4884(); + +void LCD4884::backlight(unsigned char dat) +{ + if(dat==1) + digitalWrite(LCD_BL,HIGH); + else + digitalWrite(LCD_BL,LOW); +} + +void LCD4884::LCD_init(void) +{ + for(unsigned char i = 2; i < 8; i++) { + pinMode(i,OUTPUT); + digitalWrite(i,LOW); + } + + digitalWrite(LCD_RST,LOW); + delayMicroseconds(1); + digitalWrite(LCD_RST,HIGH); + + digitalWrite(SPI_CS,LOW); + delayMicroseconds(1); + digitalWrite(SPI_CS,HIGH); + delayMicroseconds(1); + digitalWrite(LCD_BL,HIGH); + + LCD_write_byte(0x21, 0); + LCD_write_byte(0xc0, 0); + LCD_write_byte(0x06, 0); + LCD_write_byte(0x13, 0); + LCD_write_byte(0x20, 0); + LCD_clear(); + LCD_write_byte(0x0c, 0); + + digitalWrite(SPI_CS,LOW); +} + +void LCD4884::LCD_write_byte(unsigned char dat, unsigned char dat_type) +{ + digitalWrite(SPI_CS,LOW); + if (dat_type == 0) + digitalWrite(LCD_DC,LOW); + else + digitalWrite(LCD_DC,HIGH); + + for(unsigned char i=0; i<8; i++) { + if(dat & 0x80) { + digitalWrite(SPI_MOSI,HIGH); + } else { + digitalWrite(SPI_MOSI,LOW); + } + digitalWrite(SPI_SCK,LOW); + dat = dat << 1; + digitalWrite(SPI_SCK,HIGH); + } + digitalWrite(SPI_CS,HIGH); +} + +void LCD4884::LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map, + unsigned char Pix_x,unsigned char Pix_y) +{ + unsigned int i,n; + unsigned char row; + + if (Pix_y%8==0) + row=Pix_y/8; + else + row=Pix_y/8+1; + + for (n=0;n + Stanley Huang +Date : Feb. 11, 2012 + +* Added LCD_putchar for basic console display +* Have the back light under control. +* Update the library and sketch to compatible with IDE V1.0 and earlier + +*/ + +#ifndef LCD4884_h +#define LCD4884_h + +#if defined(ARDUINO) && ARDUINO >= 100 +#include "Arduino.h" +#else +#include "WProgram.h" +#endif + +#define SPI_SCK 2 +#define SPI_MOSI 3 +#define LCD_DC 4 +#define SPI_CS 5 +#define LCD_RST 6 +#define LCD_BL 7 + + +//display mode -- normal / highlight +#define MENU_NORMAL 0 +#define MENU_HIGHLIGHT 1 +#define OFF 0 +#define ON 1 +#define FLAG_TITLE 1 + +class LCD4884 +{ +public: + LCD4884(); + void LCD_init(void); + void backlight(unsigned char dat); + void LCD_write_byte(unsigned char dat, unsigned char dat_type); + void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map,unsigned char Pix_x,unsigned char Pix_y); + void LCD_write_string(unsigned char X,unsigned char Y,char *s, char mode = MENU_NORMAL); + void LCD_write_string(char *s, char mode = MENU_NORMAL); + void LCD_write_chinese(unsigned char X, unsigned char Y,unsigned char *c,unsigned char ch_with,unsigned char num,unsigned char line,unsigned char row); + void LCD_write_string_big ( unsigned char X,unsigned char Y, char *string, char mode = MENU_NORMAL); + void LCD_write_char_big (unsigned char X,unsigned char Y, unsigned char ch, char mode = MENU_NORMAL); + void LCD_write_char(unsigned char c, char mode = MENU_NORMAL); + void LCD_set_XY(unsigned char X, unsigned char Y); + void LCD_clear(void); + void LCD_write_title(char* title); + void LCD_putchar(char c); + unsigned char x; +private: + char prev_char; + char char_mode; +}; + +extern LCD4884 lcd; + +#endif // diff --git a/samples/dashboard_4884/dashboard_4884.ino b/samples/dashboard_4884/dashboard_4884.ino new file mode 100644 index 0000000..8c44eeb --- /dev/null +++ b/samples/dashboard_4884/dashboard_4884.ino @@ -0,0 +1,468 @@ +/************************************************************************* +* Sample sketch based on OBD-II library for Arduino +* Using a LCD4884 shield to display realtime vehicle data +* Distributed under GPL v2.0 +* Copyright (c) 2012 Stanley Huang +* All rights reserved. +*************************************************************************/ + +#include +#include +#include + +// the following line toggles between hardware serial and software serial +// #define USE_SOFTSERIAL + +#ifdef USE_SOFTSERIAL +#include +SoftwareSerial mySerial(11, 12); // RX, TX +#endif + +//keypad debounce parameter +#define DEBOUNCE_MAX 15 +#define DEBOUNCE_ON 10 +#define DEBOUNCE_OFF 3 + +#define NUM_KEYS 5 +#define NUM_MODES 3 + +// joystick number +#define LEFT_KEY 0 +#define CENTER_KEY 1 +#define DOWN_KEY 2 +#define RIGHT_KEY 3 +#define UP_KEY 4 + +int adc_key_val[5] ={ + 50, 200, 400, 600, 800 }; + +// debounce counters +byte button_count[NUM_KEYS]; +// button status - pressed/released +byte button_status[NUM_KEYS]; +// button on flags for user program +byte button_flag[NUM_KEYS]; +// initial gauge mode +char mode = 0; + +// The followinging are interrupt-driven keypad reading functions +// which includes DEBOUNCE ON/OFF mechanism, and continuous pressing detection + +// Convert ADC value to key number +char get_key(unsigned int input) +{ + char k; + + for (k = 0; k < NUM_KEYS; k++) + { + if (input < adc_key_val[k]) + { + + return k; + } + } + + if (k >= NUM_KEYS) + k = -1; // No valid key pressed + + return k; +} + +void update_adc_key(){ + int adc_key_in; + char key_in; + byte i; + + adc_key_in = analogRead(0); + key_in = get_key(adc_key_in); + for(i=0; iDEBOUNCE_ON) + { + if(button_status[i] == 0) + { + button_flag[i] = 1; + button_status[i] = 1; //button debounced to 'pressed' status + } + + } + } + + } + else // no button pressed + { + if (button_count[i] >0) + { + button_flag[i] = 0; + button_count[i]--; + if(button_count[i]> 1; y1 >= 0; y1--) { + lcd.LCD_set_XY(x, y1 + y); + for (byte x = 0; x < 14; x++) { + lcd.LCD_write_byte(0, 1); + } + } + if (j & 1 == 1) { + j >>= 1; + lcd.LCD_set_XY(x, y + j); + for (byte x = 0; x < 14; x++) { + lcd.LCD_write_byte(0xE0, 1); + } + j++; + } else { + j >>= 1; + } + for (byte y1 = j; y1 <= 5; y1++) { + lcd.LCD_set_XY(x, y1 + y); + for (byte x = 0; x < 14; x++) { + lcd.LCD_write_byte(0xEE, 1); + } + } +} + +byte CheckPressedKey() +{ + for(int i=0; i 0) { + mode--; + DisplayBG(mode); + count = 0; + } + break; + case RIGHT_KEY: + if (mode < NUM_MODES - 1) { + mode++; + DisplayBG(mode); + count = 0; + } + break; + case UP_KEY: + lcd.backlight(ON); + break; + case DOWN_KEY: + lcd.backlight(OFF); + break; + } + } + if (millis() - lastTime < 250) { + continue; + } + lastTime = millis(); + + switch (mode) { + case 0: + DisplayData1(); + break; + case 1: + DisplayData2(); + switch (count) { + case 0: + DisplayData21(); + break; + case 5: + DisplayData22(); + break; + case 10: + DisplayData23(); + break; + } + break; + case 2: + DisplayData3(); + break; + } + if (errors > 5) { + lcd.backlight(OFF); + return; + } + count++; + } + } +private: + void DisplayData1() + { + if (ReadSensor(PID_RPM, value)) { + ShowRPM(value); + } + if (ReadSensor(PID_SPEED, value)) { + ShowSpeed(value); + } + if (ReadSensor(PID_ENGINE_LOAD, value)) { + ShowEngineLoad(value); + } + } + void DisplayData2() + { + if (ReadSensor(PID_RPM, value)) { + ShowRPM(value); + } + if (ReadSensor(PID_SPEED, value)) { + ShowSpeed2(value); + } + } + void DisplayData21() + { + if (ReadSensor(PID_COOLANT_TEMP, value)) { + ShowTemperature(value, 42, 3); + } + } + void DisplayData22() + { + if (ReadSensor(PID_INTAKE_TEMP, value)) { + ShowTemperature(value, 42, 4); + } + } + void DisplayData23() + { + if (ReadSensor(PID_AMBIENT_TEMP, value)) { + ShowTemperature(value, 42, 5); + } + } + void DisplayData3() + { + if (ReadSensor(PID_SPEED, value)) { + ShowSpeed2(value); + } + if (ReadSensor(PID_INTAKE_PRESSURE, value)) { + char buf[8]; + sprintf(buf, "%3u", value); + lcd.LCD_write_string(24, 4, buf, MENU_NORMAL); + int boost = (value - 101); + if (boost < 0) boost = 0; + sprintf(buf, "%d.%02d", boost / 100, boost % 100); + lcd.LCD_write_string_big(0, 0, buf, MENU_NORMAL); + } + if (ReadSensor(PID_FUEL_PRESSURE, value)) { + char buf[8]; + sprintf(buf, "%3u", value); + lcd.LCD_write_string(24, 5, buf, MENU_NORMAL); + } + } + void ShowEngineLoad(uint8_t value) + { + ShowProgressBarV(70, 1, value / 10); + lcd.LCD_write_string(78, 1, "%", MENU_NORMAL); + } + void ShowRPM(int value) + { + char buf[15]; + if (value <= 9999) { + sprintf(buf, "%4u", value); + lcd.LCD_write_string_big(0, 0, buf, MENU_NORMAL); + lcd.LCD_write_string(48, 2, "R", MENU_NORMAL); + } + } + void ShowSpeed(uint8_t value) + { + char buf[8]; + sprintf(buf, "%3u", value); + lcd.LCD_write_string_big(6, 3, buf, MENU_NORMAL); + lcd.LCD_write_string(42, 5, "k", MENU_NORMAL); + } + void ShowSpeed2(uint8_t value) + { + char buf[8]; + ShowProgressBarV(70, 1, value / 25); + sprintf(buf, "%3u", value); + lcd.LCD_write_string(66, 0, buf, MENU_NORMAL); + lcd.LCD_write_string(66, 1, "kph", MENU_NORMAL); + } + void ShowTemperature(uint8_t value, byte x, byte y) + { + char buf[8]; + sprintf(buf, "%3d", value); + lcd.LCD_write_string(x, y, buf, MENU_NORMAL); + } + void DisplayBG(char mode) + { + lcd.LCD_clear(); + switch (mode) { + case 0: + lcd.LCD_write_string(48, 2, "RPM", MENU_NORMAL); + lcd.LCD_write_string(42, 5, "kph", MENU_NORMAL); + lcd.LCD_write_string(66, 0, "ENG", MENU_NORMAL); + break; + case 1: + lcd.LCD_write_string(48, 2, "RPM", MENU_NORMAL); + lcd.LCD_write_string(0, 3, "COOLANT C", MENU_NORMAL); + lcd.LCD_write_string(0, 4, "INTAKE C", MENU_NORMAL); + lcd.LCD_write_string(0, 5, "AMBIENT C", MENU_NORMAL); + break; + case 2: + lcd.LCD_write_string(48, 2, "bar", MENU_NORMAL); + lcd.LCD_write_string(0, 3, "PRESSURES", MENU_NORMAL); + lcd.LCD_write_string(0, 4, "AIR kpa", MENU_NORMAL); + lcd.LCD_write_string(0, 5, "FUEL kpa", MENU_NORMAL); + break; + } + } +#ifdef USE_SOFTSERIAL + // override data communication functions + bool DataAvailable() { return mySerial.available(); } + char ReadData() + { + char c = mySerial.read(); + Serial.write(c); + return c; + } + void WriteData(const char* s) { mySerial.write(s); } + void WriteData(const char c) { mySerial.write(c); } +#endif + char displayMode; + int value; +}; + +COBDDash obd; + +void loop() +{ + obd.Loop(); +} + +void setup() +{ + + // setup interrupt-driven keypad arrays + // reset button arrays + for(byte i=0; i + +unsigned char font6_8[][6] PROGMEM = +{ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp + { 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 }, // ! + { 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 }, // " + { 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // # + { 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $ + { 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 }, // % + { 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 }, // & + { 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 }, // ' + { 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 }, // ( + { 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 }, // ) + { 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 }, // * + { 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 }, // + + { 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 }, // , + { 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 }, // - + { 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 }, // . + { 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 }, // / + { 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0 + { 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1 + { 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2 + { 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3 + { 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4 + { 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5 + { 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6 + { 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7 + { 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8 + { 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9 + { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 }, // : + { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 }, // ; + { 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 }, // < + { 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 }, // = + { 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 }, // > + { 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 }, // ? + { 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E }, // @ + { 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C }, // A + { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B + { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C + { 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D + { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E + { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F + { 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G + { 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H + { 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I + { 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J + { 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K + { 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L + { 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M + { 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N + { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O + { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P + { 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q + { 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R + { 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 }, // S + { 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T + { 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U + { 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V + { 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W + { 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 }, // X + { 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y + { 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z + { 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [ + { 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 }, // 55 + { 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ] + { 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^ + { 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 }, // _ + { 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 }, // ' + { 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 }, // a + { 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b + { 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 }, // c + { 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F }, // d + { 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 }, // e + { 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f + { 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C }, // g + { 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h + { 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i + { 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 }, // j + { 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k + { 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l + { 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m + { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n + { 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 }, // o + { 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 }, // p + { 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC }, // q + { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r + { 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 }, // s + { 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t + { 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u + { 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v + { 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w + { 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 }, // x + { 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C }, // y + { 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 }, // z + { 0x00,0x00, 0x06, 0x09, 0x09, 0x06 } // horiz lines +}; + diff --git a/samples/dashboard_4884/font_big.h b/samples/dashboard_4884/font_big.h new file mode 100644 index 0000000..099a69b --- /dev/null +++ b/samples/dashboard_4884/font_big.h @@ -0,0 +1,141 @@ +// big font +#include + + + +//******* VERY LARGE FONTS ********** +//used here for displaying temperature + +unsigned char big_number[13][3][16] PROGMEM = { + +0,128,192,224,224,96,224,224, //'0' +192,128,0,0,0,0,0,0 +, +112,255,255,1,0,0,0,0, +255,255,254,0,0,0,0,0 +, +0,15,31,60,56,48,56,56, +31,15,3,0,0,0,0,0 +, + +0,0,0,0,128,224,224,0, //'1' +0,0,0,0,0,0,0,0 +, +0,0,3,3,3,255,255,0, +0,0,0,0,0,0,0,0 +, +0,0,56,56,56,63,63,56, +56,56,0,0,0,0,0,0 +, + +0,192,192,224,96,96,224,224, //'2' +192,128,0,0,0,0,0,0 +, +0,1,0,0,128,192,224,249, +63,31,0,0,0,0,0,0 +, +0,60,62,63,63,59,57,56, +56,56,56,0,0,0,0,0 +, + +0,192,224,224,96,96,224,224, //'3' +192,192,0,0,0,0,0,0 +, +0,1,0,0,48,48,56,125, +239,207,0,0,0,0,0,0 +, +0,28,56,56,48,48,56,60, +31,15,1,0,0,0,0,0 +, + +0,0,0,0,0,128,192,224, //'4' +224,0,0,0,0,0,0,0 +, +224,240,248,222,207,199,193,255, +255,192,192,0,0,0,0,0 +, +0,0,0,0,0,0,0,63, +63,0,0,0,0,0,0,0 +, + +0,224,224,224,224,224,224,224, //'5' +224,224,224,0,0,0,0,0 +, +0,63,63,63,56,56,48,112, +240,224,0,0,0,0,0,0 +, +0,28,56,56,48,48,56,60, +31,15,1,0,0,0,0,0 +, + +0,0,128,192,192,224,96,96, //'6' +224,224,0,0,0,0,0,0 +, +224,254,255,55,57,24,24,56, +240,240,192,0,0,0,0,0 +, +0,15,31,28,56,48,48,56, +31,15,7,0,0,0,0,0 +, + +0,224,224,224,224,224,224,224, //'7' +224,224,224,0,0,0,0,0 +, +0,0,0,0,128,224,248,126, +31,7,1,0,0,0,0,0 +, +0,0,56,62,31,7,1,0, +0,0,0,0,0,0,0,0 +, + +0,128,192,224,224,96,96,224, //'8' +192,192,0,0,0,0,0,0 +, +0,207,255,127,56,48,112,112, +255,239,199,0,0,0,0,0 +, +3,15,31,60,56,48,48,56, +31,31,15,0,0,0,0,0 +, + +0,128,192,224,224,96,224,224, //'9' +192,128,0,0,0,0,0,0 +, +12,63,127,241,224,192,192,225, +255,255,254,0,0,0,0,0 +, +0,0,56,48,48,56,56,30, +15,7,0,0,0,0,0,0 +, + + +0,0,0,0,0,0,0,0, //'.' +0,0,0,0,0,0,0,0 +, +0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0 +, +60,60,60,0,0,0,0,0, +0,0,0,0,0,0,0,0 +, + +0,0,0,0,0,0,0,0, //'+' +0,0,0,0,0,0,0,0 +, +0,0,64,64,64,64,64,254, +254,64,64,64,64,64,0,0 +, +0,0,0,0,0,0,0,15, +15,0,0,0,0,0,0,0 +, + +0,0,0,0,0,0,0,0, //'-' +0,0,0,0,0,0,0,0 +, +0,64,64,64,64,64,64,0, +0,0,0,0,0,0,0,0 +, +0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0 +}; + -- cgit v1.2.3