Imrich Konkol / Mbed 2 deprecated lcd_tft_ssd2119

Dependencies:   EthernetNetIf mbed

Committer:
ikon
Date:
Mon Nov 29 22:25:48 2010 +0000
Revision:
0:d6b0747774da
Child:
1:c9dad7bc0795
0.1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ikon 0:d6b0747774da 1 // *********************************************************************
ikon 0:d6b0747774da 2 //
ikon 0:d6b0747774da 3 // Display driver for Solomon SSD2119 controller connected to mbed board
ikon 0:d6b0747774da 4 // with simple terminal program
ikon 0:d6b0747774da 5 //
ikon 0:d6b0747774da 6 // ** szdiditalsquare (eBay) display connected on SPI + control pins **
ikon 0:d6b0747774da 7 // mbed SSD2219 (on szdigitalsquare board)
ikon 0:d6b0747774da 8 // p5 -mosi (28) SDA
ikon 0:d6b0747774da 9 // p6 -miso NC
ikon 0:d6b0747774da 10 // p7 -sck (26) SCL
ikon 0:d6b0747774da 11 // p8 -cs (19) CS
ikon 0:d6b0747774da 12 // p15-res (23) RESET
ikon 0:d6b0747774da 13 // p16-c/d (20) RS
ikon 0:d6b0747774da 14 // p17-rd (22) RD
ikon 0:d6b0747774da 15 // p18-wr (21) WR
ikon 0:d6b0747774da 16 //
ikon 0:d6b0747774da 17 // Pins PS0 - PS3 should be open on system board = 4bit SPI mode
ikon 0:d6b0747774da 18 //
ikon 0:d6b0747774da 19 // After sucessful init you'll see color bars on whole display and
ikon 0:d6b0747774da 20 // welcome message. Then you can start typing in your serial terminal
ikon 0:d6b0747774da 21 // and information will appear on the display
ikon 0:d6b0747774da 22 //
ikon 0:d6b0747774da 23 // 28.11.2010 port from CrystalFonts & Nokia LCD lib by Imrich Konkol
ikon 0:d6b0747774da 24 // 29.11.2010 ZX Spectrum SCR viewer added
ikon 0:d6b0747774da 25 // - to show test.scr from internal mbed drive type \\ at
ikon 0:d6b0747774da 26 // PC terminal prompt
ikon 0:d6b0747774da 27 // *********************************************************************
ikon 0:d6b0747774da 28 #include "mbed.h"
ikon 0:d6b0747774da 29
ikon 0:d6b0747774da 30
ikon 0:d6b0747774da 31 // color definitions (H = half)
ikon 0:d6b0747774da 32 #define BLACK 0x0000
ikon 0:d6b0747774da 33 #define HBLUE 0x0010
ikon 0:d6b0747774da 34 #define BLUE 0x001F
ikon 0:d6b0747774da 35 #define HRED 0x8000
ikon 0:d6b0747774da 36 #define RED 0xF800
ikon 0:d6b0747774da 37 #define HGREEN 0x0400
ikon 0:d6b0747774da 38 #define GREEN 0x07E0
ikon 0:d6b0747774da 39 #define HCYAN 0x0410
ikon 0:d6b0747774da 40 #define CYAN 0x07FF
ikon 0:d6b0747774da 41 #define HMAGENTA 0x8010
ikon 0:d6b0747774da 42 #define MAGENTA 0xF81F
ikon 0:d6b0747774da 43 #define HYELLOW 0x8400
ikon 0:d6b0747774da 44 #define YELLOW 0xFFE0
ikon 0:d6b0747774da 45 #define HWHITE 0x8410
ikon 0:d6b0747774da 46 #define WHITE 0xFFFF
ikon 0:d6b0747774da 47
ikon 0:d6b0747774da 48 // Define Spectrum colors
ikon 0:d6b0747774da 49 static const uint16_t colors [15] = {
ikon 0:d6b0747774da 50 BLACK,HBLUE,HRED,HMAGENTA,HGREEN,HCYAN,HYELLOW,HWHITE,BLUE,RED,MAGENTA,GREEN,CYAN,YELLOW,WHITE
ikon 0:d6b0747774da 51 };
ikon 0:d6b0747774da 52
ikon 0:d6b0747774da 53 #define HRES 320 // X axis # of pixels
ikon 0:d6b0747774da 54 #define VRES 240 // Y axis # of pixels
ikon 0:d6b0747774da 55
ikon 0:d6b0747774da 56 #define START_X 31
ikon 0:d6b0747774da 57 #define START_Y 23
ikon 0:d6b0747774da 58
ikon 0:d6b0747774da 59 LocalFileSystem local("local");
ikon 0:d6b0747774da 60
ikon 0:d6b0747774da 61 SPI spi(p5, p6, p7); // mosi, miso, sclk
ikon 0:d6b0747774da 62 DigitalOut DCS(p8); // Display chip select
ikon 0:d6b0747774da 63 DigitalOut DRS(p15); // Display reset
ikon 0:d6b0747774da 64 DigitalOut DCD(p16); // Display command/data
ikon 0:d6b0747774da 65 DigitalOut DRD(p17); // Display read
ikon 0:d6b0747774da 66 DigitalOut DWR(p18); // Display write
ikon 0:d6b0747774da 67
ikon 0:d6b0747774da 68 DigitalOut myled(LED1);
ikon 0:d6b0747774da 69
ikon 0:d6b0747774da 70
ikon 0:d6b0747774da 71 Serial pc(USBTX, USBRX); //debug info - see raw data being transferred back and forth as GBA is booting
ikon 0:d6b0747774da 72
ikon 0:d6b0747774da 73 #define LCD_CACHE_SIZE 5
ikon 0:d6b0747774da 74 /*-----------------------------------------------------------------------------
ikon 0:d6b0747774da 75 Global Variables
ikon 0:d6b0747774da 76 -----------------------------------------------------------------------------*/
ikon 0:d6b0747774da 77 //static uint8_t LcdCache [ LCD_CACHE_SIZE ];
ikon 0:d6b0747774da 78
ikon 0:d6b0747774da 79 //static int LcdCacheIdx;
ikon 0:d6b0747774da 80 //static int LoWaterMark;
ikon 0:d6b0747774da 81 //static int HiWaterMark;
ikon 0:d6b0747774da 82 static uint16_t yy=0;
ikon 0:d6b0747774da 83 static uint16_t xx=0;
ikon 0:d6b0747774da 84
ikon 0:d6b0747774da 85 // Essential display commands
ikon 0:d6b0747774da 86 /*************************************************/
ikon 0:d6b0747774da 87 void write_command(uint16_t command) {
ikon 0:d6b0747774da 88 uint8_t raw;
ikon 0:d6b0747774da 89
ikon 0:d6b0747774da 90 DRD = 1;
ikon 0:d6b0747774da 91 DCS = 0;
ikon 0:d6b0747774da 92 DCD = 0;
ikon 0:d6b0747774da 93
ikon 0:d6b0747774da 94 raw = command;
ikon 0:d6b0747774da 95 //raw &= 0x00FF; // Keep bit9 low - means command
ikon 0:d6b0747774da 96 //printf("Raw data: %d\n",raw);
ikon 0:d6b0747774da 97 spi.write(raw);
ikon 0:d6b0747774da 98
ikon 0:d6b0747774da 99 DWR = 1;
ikon 0:d6b0747774da 100 DCS = 1;
ikon 0:d6b0747774da 101 }
ikon 0:d6b0747774da 102
ikon 0:d6b0747774da 103 /*************************************************/
ikon 0:d6b0747774da 104
ikon 0:d6b0747774da 105 //typedef unsigned char u8;
ikon 0:d6b0747774da 106 //typedef unsigned int u16;
ikon 0:d6b0747774da 107 void write_data(uint16_t value) {
ikon 0:d6b0747774da 108 uint8_t raw;
ikon 0:d6b0747774da 109
ikon 0:d6b0747774da 110 DRD = 1;
ikon 0:d6b0747774da 111 DCD = 1;
ikon 0:d6b0747774da 112 DCS = 0;
ikon 0:d6b0747774da 113
ikon 0:d6b0747774da 114 raw = (value)>>8;
ikon 0:d6b0747774da 115 // raw &= 0x00FF; // Keep bit9 high - means data
ikon 0:d6b0747774da 116 // raw |= 0x0100;
ikon 0:d6b0747774da 117 // printf("Raw data: %d\n",raw);
ikon 0:d6b0747774da 118 spi.write(raw);
ikon 0:d6b0747774da 119
ikon 0:d6b0747774da 120 DCS = 1;
ikon 0:d6b0747774da 121 //wait_ms(1);
ikon 0:d6b0747774da 122 DCS = 0;
ikon 0:d6b0747774da 123
ikon 0:d6b0747774da 124 raw = value;
ikon 0:d6b0747774da 125 // raw &= 0x00FF; // Keep bit9 high - means data
ikon 0:d6b0747774da 126 // raw |= 0x0100;
ikon 0:d6b0747774da 127 // printf("Raw data: %d\n",raw);
ikon 0:d6b0747774da 128 spi.write(raw);
ikon 0:d6b0747774da 129
ikon 0:d6b0747774da 130 DCS = 1;
ikon 0:d6b0747774da 131 }
ikon 0:d6b0747774da 132
ikon 0:d6b0747774da 133
ikon 0:d6b0747774da 134 // Font generator
ikon 0:d6b0747774da 135 /*-----------------------------------------------------------------------------
ikon 0:d6b0747774da 136 Character generator
ikon 0:d6b0747774da 137
ikon 0:d6b0747774da 138 This table defines the standard ASCII characters in a 5x7 dot format.
ikon 0:d6b0747774da 139 -----------------------------------------------------------------------------*/
ikon 0:d6b0747774da 140 static const uint8_t FontLookup [][5] = {
ikon 0:d6b0747774da 141 { 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp
ikon 0:d6b0747774da 142 { 0x00, 0x00, 0x2f, 0x00, 0x00 }, // !
ikon 0:d6b0747774da 143 { 0x00, 0x07, 0x00, 0x07, 0x00 }, // "
ikon 0:d6b0747774da 144 { 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // #
ikon 0:d6b0747774da 145 { 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $
ikon 0:d6b0747774da 146 { 0xc4, 0xc8, 0x10, 0x26, 0x46 }, // %
ikon 0:d6b0747774da 147 { 0x36, 0x49, 0x55, 0x22, 0x50 }, // &
ikon 0:d6b0747774da 148 { 0x00, 0x05, 0x03, 0x00, 0x00 }, // '
ikon 0:d6b0747774da 149 { 0x00, 0x1c, 0x22, 0x41, 0x00 }, // (
ikon 0:d6b0747774da 150 { 0x00, 0x41, 0x22, 0x1c, 0x00 }, // )
ikon 0:d6b0747774da 151 { 0x14, 0x08, 0x3E, 0x08, 0x14 }, // *
ikon 0:d6b0747774da 152 { 0x08, 0x08, 0x3E, 0x08, 0x08 }, // +
ikon 0:d6b0747774da 153 { 0x00, 0x00, 0x50, 0x30, 0x00 }, // ,
ikon 0:d6b0747774da 154 { 0x10, 0x10, 0x10, 0x10, 0x10 }, // -
ikon 0:d6b0747774da 155 { 0x00, 0x60, 0x60, 0x00, 0x00 }, // .
ikon 0:d6b0747774da 156 { 0x20, 0x10, 0x08, 0x04, 0x02 }, // /
ikon 0:d6b0747774da 157 { 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0
ikon 0:d6b0747774da 158 { 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1
ikon 0:d6b0747774da 159 { 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2
ikon 0:d6b0747774da 160 { 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3
ikon 0:d6b0747774da 161 { 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4
ikon 0:d6b0747774da 162 { 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5
ikon 0:d6b0747774da 163 { 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6
ikon 0:d6b0747774da 164 { 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7
ikon 0:d6b0747774da 165 { 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8
ikon 0:d6b0747774da 166 { 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9
ikon 0:d6b0747774da 167 { 0x00, 0x36, 0x36, 0x00, 0x00 }, // :
ikon 0:d6b0747774da 168 { 0x00, 0x56, 0x36, 0x00, 0x00 }, // ;
ikon 0:d6b0747774da 169 { 0x08, 0x14, 0x22, 0x41, 0x00 }, // <
ikon 0:d6b0747774da 170 { 0x14, 0x14, 0x14, 0x14, 0x14 }, // =
ikon 0:d6b0747774da 171 { 0x00, 0x41, 0x22, 0x14, 0x08 }, // >
ikon 0:d6b0747774da 172 { 0x02, 0x01, 0x51, 0x09, 0x06 }, // ?
ikon 0:d6b0747774da 173 { 0x32, 0x49, 0x59, 0x51, 0x3E }, // @
ikon 0:d6b0747774da 174 { 0x7E, 0x11, 0x11, 0x11, 0x7E }, // A
ikon 0:d6b0747774da 175 { 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B
ikon 0:d6b0747774da 176 { 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C
ikon 0:d6b0747774da 177 { 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D
ikon 0:d6b0747774da 178 { 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E
ikon 0:d6b0747774da 179 { 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F
ikon 0:d6b0747774da 180 { 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G
ikon 0:d6b0747774da 181 { 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H
ikon 0:d6b0747774da 182 { 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I
ikon 0:d6b0747774da 183 { 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J
ikon 0:d6b0747774da 184 { 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K
ikon 0:d6b0747774da 185 { 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L
ikon 0:d6b0747774da 186 { 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M
ikon 0:d6b0747774da 187 { 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N
ikon 0:d6b0747774da 188 { 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O
ikon 0:d6b0747774da 189 { 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P
ikon 0:d6b0747774da 190 { 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q
ikon 0:d6b0747774da 191 { 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R
ikon 0:d6b0747774da 192 { 0x46, 0x49, 0x49, 0x49, 0x31 }, // S
ikon 0:d6b0747774da 193 { 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T
ikon 0:d6b0747774da 194 { 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U
ikon 0:d6b0747774da 195 { 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V
ikon 0:d6b0747774da 196 { 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W
ikon 0:d6b0747774da 197 { 0x63, 0x14, 0x08, 0x14, 0x63 }, // X
ikon 0:d6b0747774da 198 { 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y
ikon 0:d6b0747774da 199 { 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z
ikon 0:d6b0747774da 200 { 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [
ikon 0:d6b0747774da 201 { 0x00, 0x06, 0x18, 0x60, 0x00 }, // backslash
ikon 0:d6b0747774da 202 { 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ]
ikon 0:d6b0747774da 203 { 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^
ikon 0:d6b0747774da 204 { 0x40, 0x40, 0x40, 0x40, 0x40 }, // _
ikon 0:d6b0747774da 205 { 0x00, 0x01, 0x02, 0x04, 0x00 }, // '
ikon 0:d6b0747774da 206 { 0x20, 0x54, 0x54, 0x54, 0x78 }, // a
ikon 0:d6b0747774da 207 { 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b
ikon 0:d6b0747774da 208 { 0x38, 0x44, 0x44, 0x44, 0x20 }, // c
ikon 0:d6b0747774da 209 { 0x38, 0x44, 0x44, 0x48, 0x7F }, // d
ikon 0:d6b0747774da 210 { 0x38, 0x54, 0x54, 0x54, 0x18 }, // e
ikon 0:d6b0747774da 211 { 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f
ikon 0:d6b0747774da 212 { 0x0C, 0x52, 0x52, 0x52, 0x3E }, // g
ikon 0:d6b0747774da 213 { 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h
ikon 0:d6b0747774da 214 { 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i
ikon 0:d6b0747774da 215 { 0x20, 0x40, 0x44, 0x3D, 0x00 }, // j
ikon 0:d6b0747774da 216 { 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k
ikon 0:d6b0747774da 217 { 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l
ikon 0:d6b0747774da 218 { 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m
ikon 0:d6b0747774da 219 { 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n
ikon 0:d6b0747774da 220 { 0x38, 0x44, 0x44, 0x44, 0x38 }, // o
ikon 0:d6b0747774da 221 { 0x7C, 0x14, 0x14, 0x14, 0x08 }, // p
ikon 0:d6b0747774da 222 { 0x08, 0x14, 0x14, 0x18, 0x7C }, // q
ikon 0:d6b0747774da 223 { 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r
ikon 0:d6b0747774da 224 { 0x48, 0x54, 0x54, 0x54, 0x20 }, // s
ikon 0:d6b0747774da 225 { 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t
ikon 0:d6b0747774da 226 { 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u
ikon 0:d6b0747774da 227 { 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v
ikon 0:d6b0747774da 228 { 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w
ikon 0:d6b0747774da 229 { 0x44, 0x28, 0x10, 0x28, 0x44 }, // x
ikon 0:d6b0747774da 230 { 0x0C, 0x50, 0x50, 0x50, 0x3C }, // y
ikon 0:d6b0747774da 231 { 0x44, 0x64, 0x54, 0x4C, 0x44 }, // z
ikon 0:d6b0747774da 232 { 0x08, 0x36, 0x41, 0x41, 0x00 }, // {
ikon 0:d6b0747774da 233 { 0x00, 0x00, 0x7F, 0x00, 0x00 }, // |
ikon 0:d6b0747774da 234 { 0x00, 0x41, 0x41, 0x36, 0x08 }, // }
ikon 0:d6b0747774da 235 { 0x01, 0x02, 0x01, 0x02, 0x00 }, // ~
ikon 0:d6b0747774da 236 { 0x3E, 0x5D, 0x55, 0x55, 0x3E }, // (c)
ikon 0:d6b0747774da 237 { 0x55, 0x2A, 0x55, 0x2A, 0x55 } // 55
ikon 0:d6b0747774da 238 };
ikon 0:d6b0747774da 239
ikon 0:d6b0747774da 240 // Set X & Y axis of next pixel write
ikon 0:d6b0747774da 241 void LcdSetPenXY(uint16_t x, uint16_t y) {
ikon 0:d6b0747774da 242 write_command(0x004F); // RAM address set for Y axis
ikon 0:d6b0747774da 243 write_data(y); // Page 58 of SSD2119 datasheet
ikon 0:d6b0747774da 244 write_command(0x004E); // RAM address set for X axis
ikon 0:d6b0747774da 245 write_data(x); // Page 58 of SSD2119 datasheet
ikon 0:d6b0747774da 246 write_command(0x0022); // Return back to pixel write mode
ikon 0:d6b0747774da 247 }
ikon 0:d6b0747774da 248
ikon 0:d6b0747774da 249
ikon 0:d6b0747774da 250 /*-----------------------------------------------------------------------------
ikon 0:d6b0747774da 251 Name : LcdGotoXY
ikon 0:d6b0747774da 252 Description : Sets cursor location to xy location corresponding to basic
ikon 0:d6b0747774da 253 font size.
ikon 0:d6b0747774da 254 Argument(s) : x, y -> Coordinate for new cursor position. Range: 1,1..14,6
ikon 0:d6b0747774da 255 Return value : None.
ikon 0:d6b0747774da 256 -----------------------------------------------------------------------------*/
ikon 0:d6b0747774da 257 void LcdGotoXY ( uint8_t x, uint8_t y ) {
ikon 0:d6b0747774da 258 // uint16_t xx, yy;
ikon 0:d6b0747774da 259 xx = y * 8;
ikon 0:d6b0747774da 260 yy = x * 6;
ikon 0:d6b0747774da 261 //LcdCacheIdx = (x - 1) * HRES + (y - 1) * VRES;
ikon 0:d6b0747774da 262 LcdSetPenXY(xx,yy);
ikon 0:d6b0747774da 263 }
ikon 0:d6b0747774da 264
ikon 0:d6b0747774da 265 typedef enum {
ikon 0:d6b0747774da 266 FONT_1X = 1,
ikon 0:d6b0747774da 267 FONT_2X = 2
ikon 0:d6b0747774da 268
ikon 0:d6b0747774da 269 } LcdFontSize;
ikon 0:d6b0747774da 270
ikon 0:d6b0747774da 271 typedef enum {
ikon 0:d6b0747774da 272 PIXEL_OFF = 0,
ikon 0:d6b0747774da 273 PIXEL_ON = 1,
ikon 0:d6b0747774da 274 PIXEL_XOR = 2
ikon 0:d6b0747774da 275
ikon 0:d6b0747774da 276 } LcdPixelMode;
ikon 0:d6b0747774da 277
ikon 0:d6b0747774da 278 /*-----------------------------------------------------------------------------
ikon 0:d6b0747774da 279 Name : LcdChr
ikon 0:d6b0747774da 280 Description : Displays a character at current cursor location
ikon 0:d6b0747774da 281 and increment cursor location.
ikon 0:d6b0747774da 282 Argument(s) : size -> Font size. See enum.
ikon 0:d6b0747774da 283 ch -> Character to write.
ikon 0:d6b0747774da 284 Return value : None.
ikon 0:d6b0747774da 285 -----------------------------------------------------------------------------*/
ikon 0:d6b0747774da 286 void LcdChr ( uint8_t ch ) {
ikon 0:d6b0747774da 287 uint8_t i, j, c;
ikon 0:d6b0747774da 288
ikon 0:d6b0747774da 289 if ( (ch < 0x20) || (ch > 0x7F) ) {
ikon 0:d6b0747774da 290 // Convert to a printable character.
ikon 0:d6b0747774da 291 ch = 0x80;
ikon 0:d6b0747774da 292 }
ikon 0:d6b0747774da 293
ikon 0:d6b0747774da 294 //write_command(0x0022);
ikon 0:d6b0747774da 295
ikon 0:d6b0747774da 296 for ( i = 0; i < 6; i++ ) {
ikon 0:d6b0747774da 297 if (i < 5) {
ikon 0:d6b0747774da 298 c = FontLookup[ch - 32][i];
ikon 0:d6b0747774da 299 } else {
ikon 0:d6b0747774da 300 c = 0x00; // Space after each character
ikon 0:d6b0747774da 301 }
ikon 0:d6b0747774da 302
ikon 0:d6b0747774da 303 for ( j = 0; j < 8; j++ ) {
ikon 0:d6b0747774da 304 if ( (c & 0x01) == 0x01 ) {
ikon 0:d6b0747774da 305 //printf("X");
ikon 0:d6b0747774da 306 write_data(BLACK);
ikon 0:d6b0747774da 307 } else {
ikon 0:d6b0747774da 308 //printf(".");
ikon 0:d6b0747774da 309 write_data(WHITE);
ikon 0:d6b0747774da 310 }
ikon 0:d6b0747774da 311 //printf("\n");
ikon 0:d6b0747774da 312 c >>= 1;
ikon 0:d6b0747774da 313 }
ikon 0:d6b0747774da 314 yy++;
ikon 0:d6b0747774da 315 write_command(0x004F); // RAM address set for Y axis
ikon 0:d6b0747774da 316 write_data(yy); // Page 58 of SSD2119 datasheet
ikon 0:d6b0747774da 317 write_command(0x0022);
ikon 0:d6b0747774da 318 }
ikon 0:d6b0747774da 319 }
ikon 0:d6b0747774da 320
ikon 0:d6b0747774da 321 /*-----------------------------------------------------------------------------
ikon 0:d6b0747774da 322 Name : LcdStr
ikon 0:d6b0747774da 323 Description : Displays a character at current cursor location and increment
ikon 0:d6b0747774da 324 cursor location according to font size.
ikon 0:d6b0747774da 325 Argument(s) : size -> Font size. See enum.
ikon 0:d6b0747774da 326 dataPtr -> Pointer to null terminated ASCII string to display.
ikon 0:d6b0747774da 327 Return value : None.
ikon 0:d6b0747774da 328 -----------------------------------------------------------------------------*/
ikon 0:d6b0747774da 329 void LcdStr ( char *dataPtr ) {
ikon 0:d6b0747774da 330 while ( *dataPtr ) {
ikon 0:d6b0747774da 331 LcdChr( *dataPtr++ );
ikon 0:d6b0747774da 332 }
ikon 0:d6b0747774da 333 }
ikon 0:d6b0747774da 334
ikon 0:d6b0747774da 335
ikon 0:d6b0747774da 336 /*************************************************/
ikon 0:d6b0747774da 337 void initialization() {
ikon 0:d6b0747774da 338 /*
ikon 0:d6b0747774da 339 SET_RD;
ikon 0:d6b0747774da 340 SET_WR;
ikon 0:d6b0747774da 341 SET_CS;
ikon 0:d6b0747774da 342 SET_CD;
ikon 0:d6b0747774da 343 PORTA=0x00;
ikon 0:d6b0747774da 344 PORTE=0x00;
ikon 0:d6b0747774da 345
ikon 0:d6b0747774da 346 CLR_RESET;
ikon 0:d6b0747774da 347 delay(200);
ikon 0:d6b0747774da 348 SET_RESET;
ikon 0:d6b0747774da 349 delay(500);
ikon 0:d6b0747774da 350 */
ikon 0:d6b0747774da 351 DRD = 1;
ikon 0:d6b0747774da 352 DWR = 1;
ikon 0:d6b0747774da 353 DCS = 1;
ikon 0:d6b0747774da 354 DCD = 1;
ikon 0:d6b0747774da 355
ikon 0:d6b0747774da 356 DRS = 0;
ikon 0:d6b0747774da 357 wait_ms(200);
ikon 0:d6b0747774da 358 DRS = 1;
ikon 0:d6b0747774da 359 wait_ms(500);
ikon 0:d6b0747774da 360
ikon 0:d6b0747774da 361 write_command(0x0028); // VCOM OTP
ikon 0:d6b0747774da 362 write_data(0x0006); // Page 55-56 of SSD2119 datasheet
ikon 0:d6b0747774da 363
ikon 0:d6b0747774da 364 write_command(0x0000); // start Oscillator
ikon 0:d6b0747774da 365 write_data(0x0001); // Page 36 of SSD2119 datasheet
ikon 0:d6b0747774da 366
ikon 0:d6b0747774da 367 write_command(0x0010); // Sleep mode
ikon 0:d6b0747774da 368 write_data(0x0000); // Page 49 of SSD2119 datasheet
ikon 0:d6b0747774da 369
ikon 0:d6b0747774da 370 write_command(0x0001); // Driver Output Control
ikon 0:d6b0747774da 371 write_data(0x32EF); // Page 36-39 of SSD2119 datasheet
ikon 0:d6b0747774da 372
ikon 0:d6b0747774da 373 write_command(0x0002); // LCD Driving Waveform Control
ikon 0:d6b0747774da 374 write_data(0x0600); // Page 40-42 of SSD2119 datasheet
ikon 0:d6b0747774da 375
ikon 0:d6b0747774da 376 write_command(0x0003); // Power Control 1
ikon 0:d6b0747774da 377 write_data(0x6A38); // Page 43-44 of SSD2119 datasheet
ikon 0:d6b0747774da 378
ikon 0:d6b0747774da 379 write_command(0x0011); // Entry Mode
ikon 0:d6b0747774da 380 write_data(0x6870); // Page 50-52 of SSD2119 datasheet
ikon 0:d6b0747774da 381
ikon 0:d6b0747774da 382 write_command(0x000F); // Gate Scan Position
ikon 0:d6b0747774da 383 write_data(0x0000); // Page 49 of SSD2119 datasheet
ikon 0:d6b0747774da 384
ikon 0:d6b0747774da 385 write_command(0x000B); // Frame Cycle Control
ikon 0:d6b0747774da 386 write_data(0x5308); // Page 45 of SSD2119 datasheet
ikon 0:d6b0747774da 387
ikon 0:d6b0747774da 388 write_command(0x000C); // Power Control 2
ikon 0:d6b0747774da 389 write_data(0x0003); // Page 47 of SSD2119 datasheet
ikon 0:d6b0747774da 390
ikon 0:d6b0747774da 391 write_command(0x000D); // Power Control 3
ikon 0:d6b0747774da 392 write_data(0x000A); // Page 48 of SSD2119 datasheet
ikon 0:d6b0747774da 393
ikon 0:d6b0747774da 394 write_command(0x000E); // Power Control 4
ikon 0:d6b0747774da 395 write_data(0x2E00); // Page 48 of SSD2119 datasheet
ikon 0:d6b0747774da 396
ikon 0:d6b0747774da 397 write_command(0x001E); // Power Control 5
ikon 0:d6b0747774da 398 write_data(0x00BE); // Page 53 of SSD2119 datasheet
ikon 0:d6b0747774da 399
ikon 0:d6b0747774da 400 write_command(0x0025); // Frame Frequency Control
ikon 0:d6b0747774da 401 write_data(0x8000); // Page 53 of SSD2119 datasheet
ikon 0:d6b0747774da 402
ikon 0:d6b0747774da 403 write_command(0x0026); // Analog setting
ikon 0:d6b0747774da 404 write_data(0x7800); // Page 54 of SSD2119 datasheet
ikon 0:d6b0747774da 405
ikon 0:d6b0747774da 406 write_command(0x004E); // Ram Address Set
ikon 0:d6b0747774da 407 write_data(0x0000); // Page 58 of SSD2119 datasheet
ikon 0:d6b0747774da 408
ikon 0:d6b0747774da 409 write_command(0x004F); // Ram Address Set
ikon 0:d6b0747774da 410 write_data(0x0000); // Page 58 of SSD2119 datasheet
ikon 0:d6b0747774da 411
ikon 0:d6b0747774da 412 write_command(0x0012); // Sleep mode
ikon 0:d6b0747774da 413 write_data(0x08D9); // Page 49 of SSD2119 datasheet
ikon 0:d6b0747774da 414
ikon 0:d6b0747774da 415 // Gamma Control (R30h to R3Bh) -- Page 56 of SSD2119 datasheet
ikon 0:d6b0747774da 416 write_command(0x0030);
ikon 0:d6b0747774da 417 write_data(0x0000);
ikon 0:d6b0747774da 418
ikon 0:d6b0747774da 419 write_command(0x0031);
ikon 0:d6b0747774da 420 write_data(0x0104);
ikon 0:d6b0747774da 421
ikon 0:d6b0747774da 422 write_command(0x0032);
ikon 0:d6b0747774da 423 write_data(0x0100);
ikon 0:d6b0747774da 424
ikon 0:d6b0747774da 425 write_command(0x0033);
ikon 0:d6b0747774da 426 write_data(0x0305);
ikon 0:d6b0747774da 427
ikon 0:d6b0747774da 428 write_command(0x0034);
ikon 0:d6b0747774da 429 write_data(0x0505);
ikon 0:d6b0747774da 430
ikon 0:d6b0747774da 431 write_command(0x0035);
ikon 0:d6b0747774da 432 write_data(0x0305);
ikon 0:d6b0747774da 433
ikon 0:d6b0747774da 434 write_command(0x0036);
ikon 0:d6b0747774da 435 write_data(0x0707);
ikon 0:d6b0747774da 436
ikon 0:d6b0747774da 437 write_command(0x0037);
ikon 0:d6b0747774da 438 write_data(0x0300);
ikon 0:d6b0747774da 439
ikon 0:d6b0747774da 440 write_command(0x003A);
ikon 0:d6b0747774da 441 write_data(0x1200);
ikon 0:d6b0747774da 442
ikon 0:d6b0747774da 443 write_command(0x003B);
ikon 0:d6b0747774da 444 write_data(0x0800);
ikon 0:d6b0747774da 445
ikon 0:d6b0747774da 446 write_command(0x0007); // Display Control
ikon 0:d6b0747774da 447 write_data(0x0033); // Page 45 of SSD2119 datasheet
ikon 0:d6b0747774da 448
ikon 0:d6b0747774da 449 wait_ms(150);
ikon 0:d6b0747774da 450
ikon 0:d6b0747774da 451 write_command(0x0022); // RAM data write/read
ikon 0:d6b0747774da 452 }
ikon 0:d6b0747774da 453
ikon 0:d6b0747774da 454 /*************************************************/
ikon 0:d6b0747774da 455 void Display_Home() {
ikon 0:d6b0747774da 456 xx = 0;
ikon 0:d6b0747774da 457 yy = 0;
ikon 0:d6b0747774da 458 write_command(0x004E); // RAM address set
ikon 0:d6b0747774da 459 write_data(0x0000); // Page 58 of SSD2119 datasheet
ikon 0:d6b0747774da 460 write_command(0x004F); // RAM address set
ikon 0:d6b0747774da 461 write_data(0x0000); // Page 58 of SSD2119 datasheet
ikon 0:d6b0747774da 462
ikon 0:d6b0747774da 463 write_command(0x0044); // Vertical RAM address position
ikon 0:d6b0747774da 464 write_data(0xEF00); // Page 57 of SSD2119 datasheet
ikon 0:d6b0747774da 465 write_command(0x0045); // Horizontal RAM address position
ikon 0:d6b0747774da 466 write_data(0x0000); // Page 57 of SSD2119 datasheet
ikon 0:d6b0747774da 467 write_command(0x0046); // Horizontal RAM address position
ikon 0:d6b0747774da 468 write_data(0x013F); // Page 57 of SSD2119 datasheet
ikon 0:d6b0747774da 469
ikon 0:d6b0747774da 470 write_command(0x0022); // RAM data write/read
ikon 0:d6b0747774da 471 }
ikon 0:d6b0747774da 472
ikon 0:d6b0747774da 473
ikon 0:d6b0747774da 474 void display_rgb(unsigned int data) {
ikon 0:d6b0747774da 475 unsigned int i,j;
ikon 0:d6b0747774da 476 Display_Home();
ikon 0:d6b0747774da 477 for (i=0;i<HRES;i++) {
ikon 0:d6b0747774da 478 for (j=0;j<VRES;j++) {
ikon 0:d6b0747774da 479 write_data(data);
ikon 0:d6b0747774da 480 }
ikon 0:d6b0747774da 481 }
ikon 0:d6b0747774da 482 }
ikon 0:d6b0747774da 483
ikon 0:d6b0747774da 484 void LCD_test() {
ikon 0:d6b0747774da 485 //uint16_t i;
ikon 0:d6b0747774da 486 unsigned int i,j;
ikon 0:d6b0747774da 487 //bool b;
ikon 0:d6b0747774da 488 Display_Home();
ikon 0:d6b0747774da 489
ikon 0:d6b0747774da 490 printf("Disp home done.\n");
ikon 0:d6b0747774da 491 for (i=0; i<HRES;i++) {
ikon 0:d6b0747774da 492 //b = 0;
ikon 0:d6b0747774da 493 for (j=0;j<VRES;j++) {
ikon 0:d6b0747774da 494
ikon 0:d6b0747774da 495 /*
ikon 0:d6b0747774da 496 if (j < (VRES/2)) {
ikon 0:d6b0747774da 497 b = 0;
ikon 0:d6b0747774da 498 } else {
ikon 0:d6b0747774da 499 b = 1;
ikon 0:d6b0747774da 500 }
ikon 0:d6b0747774da 501 */
ikon 0:d6b0747774da 502 //if (j == 120) b=1;
ikon 0:d6b0747774da 503 //b=1;
ikon 0:d6b0747774da 504 if (i>279)write_data(BLACK);
ikon 0:d6b0747774da 505 else if (i>259) write_data(BLUE); //{ if (b) { write_data(BLUE); } else { write_data(HBLUE); } }
ikon 0:d6b0747774da 506 else if (i>239) write_data(HBLUE);
ikon 0:d6b0747774da 507 else if (i>219) write_data(RED); //{ if (b) { write_data(RED); } else { write_data(HRED); } }
ikon 0:d6b0747774da 508 else if (i>199) write_data(HRED);
ikon 0:d6b0747774da 509 else if (i>179) write_data(MAGENTA); //{ if (b) { write_data(MAGENTA); } else { write_data(HMAGENTA); } }
ikon 0:d6b0747774da 510 else if (i>159) write_data(HMAGENTA);
ikon 0:d6b0747774da 511 else if (i>139) write_data(GREEN); //{ if (b) { write_data(GREEN); } else { write_data(HGREEN); } }
ikon 0:d6b0747774da 512 else if (i>119) write_data(HGREEN);
ikon 0:d6b0747774da 513 else if (i>99) write_data(CYAN); //{ if (b) { write_data(CYAN); } else { write_data(HCYAN); } }
ikon 0:d6b0747774da 514 else if (i>79) write_data(HCYAN);
ikon 0:d6b0747774da 515 else if (i>59) write_data(YELLOW); //{ if (b) { write_data(YELLOW); } else { write_data(HYELLOW); } }
ikon 0:d6b0747774da 516 else if (i>39) write_data(HYELLOW);
ikon 0:d6b0747774da 517 else if (i>19) write_data(WHITE);
ikon 0:d6b0747774da 518 else write_data(HWHITE); //{ if (b) { write_data(WHITE); } else { write_data(HWHITE); } }
ikon 0:d6b0747774da 519 }
ikon 0:d6b0747774da 520 //printf("Col = %d\n",i);
ikon 0:d6b0747774da 521 }
ikon 0:d6b0747774da 522 }
ikon 0:d6b0747774da 523
ikon 0:d6b0747774da 524 void cls() {
ikon 0:d6b0747774da 525 // write_command(0x22);
ikon 0:d6b0747774da 526 display_rgb(WHITE);
ikon 0:d6b0747774da 527 }
ikon 0:d6b0747774da 528
ikon 0:d6b0747774da 529 unsigned char cat(char *filename) {
ikon 0:d6b0747774da 530 char c;
ikon 0:d6b0747774da 531 unsigned int x,y;
ikon 0:d6b0747774da 532
ikon 0:d6b0747774da 533 printf("Opening File...\n"); // Drive should be marked as removed
ikon 0:d6b0747774da 534 FILE *fp = fopen(filename, "r");
ikon 0:d6b0747774da 535 if (!fp) {
ikon 0:d6b0747774da 536 printf("File %s could not be opened!\n",filename);
ikon 0:d6b0747774da 537 return(1);
ikon 0:d6b0747774da 538 }
ikon 0:d6b0747774da 539 cls();
ikon 0:d6b0747774da 540 Display_Home();
ikon 0:d6b0747774da 541 x = 0;
ikon 0:d6b0747774da 542 y = 0;
ikon 0:d6b0747774da 543
ikon 0:d6b0747774da 544 while ( ( c=fgetc(fp) ) != EOF ) {
ikon 0:d6b0747774da 545
ikon 0:d6b0747774da 546 LcdGotoXY(x,y);
ikon 0:d6b0747774da 547
ikon 0:d6b0747774da 548 if (c == 13) {
ikon 0:d6b0747774da 549 y++;
ikon 0:d6b0747774da 550 x=0;
ikon 0:d6b0747774da 551 };
ikon 0:d6b0747774da 552 if (c == 8) {
ikon 0:d6b0747774da 553 x--;
ikon 0:d6b0747774da 554 };
ikon 0:d6b0747774da 555
ikon 0:d6b0747774da 556 if (c > 31) LcdChr(c);
ikon 0:d6b0747774da 557 x++;
ikon 0:d6b0747774da 558 if (x>39) {
ikon 0:d6b0747774da 559 y++;
ikon 0:d6b0747774da 560 x=0;
ikon 0:d6b0747774da 561 if (y>39) y=0;
ikon 0:d6b0747774da 562 }
ikon 0:d6b0747774da 563 }
ikon 0:d6b0747774da 564 fclose(fp);
ikon 0:d6b0747774da 565 return(0);
ikon 0:d6b0747774da 566 }
ikon 0:d6b0747774da 567
ikon 0:d6b0747774da 568
ikon 0:d6b0747774da 569 unsigned char scr2lcd(char *scrfile) {
ikon 0:d6b0747774da 570 unsigned char c,a,ink,pap;
ikon 0:d6b0747774da 571 unsigned int x,y,i,j,k,l,m;
ikon 0:d6b0747774da 572 unsigned char screen[6912];
ikon 0:d6b0747774da 573
ikon 0:d6b0747774da 574 printf("Opening File...\n"); // Drive should be marked as removed
ikon 0:d6b0747774da 575 FILE *fp = fopen("/local/test.scr", "r");
ikon 0:d6b0747774da 576 if (!fp) {
ikon 0:d6b0747774da 577 printf("File %s could not be opened!\n",scrfile);
ikon 0:d6b0747774da 578 return(1);
ikon 0:d6b0747774da 579 }
ikon 0:d6b0747774da 580
ikon 0:d6b0747774da 581 //cls(); // Keep border, do not cls
ikon 0:d6b0747774da 582 Display_Home();
ikon 0:d6b0747774da 583 x=START_X;
ikon 0:d6b0747774da 584 y=START_Y;
ikon 0:d6b0747774da 585 LcdSetPenXY(x,y);
ikon 0:d6b0747774da 586
ikon 0:d6b0747774da 587 write_command(0x22);
ikon 0:d6b0747774da 588
ikon 0:d6b0747774da 589 i=0;
ikon 0:d6b0747774da 590 while ( ( ( c = fgetc(fp) ) != EOF ) && (i<6912) ) {
ikon 0:d6b0747774da 591 screen[i] = c;
ikon 0:d6b0747774da 592 i++;
ikon 0:d6b0747774da 593 }
ikon 0:d6b0747774da 594 fclose(fp);
ikon 0:d6b0747774da 595 printf("Screen read done.");
ikon 0:d6b0747774da 596
ikon 0:d6b0747774da 597 for (j=0;j<3;j++) { // Screen "third"
ikon 0:d6b0747774da 598 for (i=0;i<8;i++) { // Line in third
ikon 0:d6b0747774da 599 for (k=0;k<8;k++) { // Microline
ikon 0:d6b0747774da 600 for (l=32;l>0;l--) { // Byte
ikon 0:d6b0747774da 601 c = screen[j * 2048 + k * 256 + i * 32 + (l-1)];
ikon 0:d6b0747774da 602 for (m=0;m<8;m++) { // Pixel
ikon 0:d6b0747774da 603 a = screen[6144+ j * 256 + i * 32 + (l-1)];
ikon 0:d6b0747774da 604 ink = a & 0x07;
ikon 0:d6b0747774da 605 pap = (a >>=3) & 0x07;
ikon 0:d6b0747774da 606 if ( (a & 0x70) == 0x70 ) { // Bright1
ikon 0:d6b0747774da 607 if ( ink != 0 ) ink = ink+8;
ikon 0:d6b0747774da 608 if ( pap != 0 ) pap = pap+8;
ikon 0:d6b0747774da 609 }
ikon 0:d6b0747774da 610
ikon 0:d6b0747774da 611 if ( (c & 0x01) == 0x01 ) {
ikon 0:d6b0747774da 612 write_data(colors[ink]);
ikon 0:d6b0747774da 613 } else {
ikon 0:d6b0747774da 614 write_data(colors[pap]);
ikon 0:d6b0747774da 615 }
ikon 0:d6b0747774da 616 c >>= 1;
ikon 0:d6b0747774da 617 }
ikon 0:d6b0747774da 618 }
ikon 0:d6b0747774da 619 y++;
ikon 0:d6b0747774da 620 x=START_X;
ikon 0:d6b0747774da 621 LcdSetPenXY(x,y);
ikon 0:d6b0747774da 622
ikon 0:d6b0747774da 623 }
ikon 0:d6b0747774da 624 }
ikon 0:d6b0747774da 625 }
ikon 0:d6b0747774da 626
ikon 0:d6b0747774da 627
ikon 0:d6b0747774da 628 return(0);
ikon 0:d6b0747774da 629 }
ikon 0:d6b0747774da 630
ikon 0:d6b0747774da 631
ikon 0:d6b0747774da 632 // Main loop starts here
ikon 0:d6b0747774da 633 int main() {
ikon 0:d6b0747774da 634
ikon 0:d6b0747774da 635 uint8_t x,y;
ikon 0:d6b0747774da 636 char c,xc=' ';
ikon 0:d6b0747774da 637 //Configure the Fastest Baud Rate
ikon 0:d6b0747774da 638 pc.baud(115200);
ikon 0:d6b0747774da 639
ikon 0:d6b0747774da 640 printf("Program start.\n");
ikon 0:d6b0747774da 641
ikon 0:d6b0747774da 642 // Setup the spi for 8 bit data, high steady state clock,
ikon 0:d6b0747774da 643 // second edge capture, with a 10 MHz clock rate
ikon 0:d6b0747774da 644 spi.format(8,3); // CPOL=1, CPHA=1
ikon 0:d6b0747774da 645 spi.frequency(10000000); // SPI fastest possible
ikon 0:d6b0747774da 646
ikon 0:d6b0747774da 647 printf("SPI initialized.\n");
ikon 0:d6b0747774da 648 myled = 0;
ikon 0:d6b0747774da 649
ikon 0:d6b0747774da 650 while (1) {
ikon 0:d6b0747774da 651
ikon 0:d6b0747774da 652 initialization();
ikon 0:d6b0747774da 653
ikon 0:d6b0747774da 654 printf("Display initialized.\n");
ikon 0:d6b0747774da 655
ikon 0:d6b0747774da 656 LCD_test();
ikon 0:d6b0747774da 657
ikon 0:d6b0747774da 658 printf("Display test.\n");
ikon 0:d6b0747774da 659
ikon 0:d6b0747774da 660 wait(1.0);
ikon 0:d6b0747774da 661
ikon 0:d6b0747774da 662 if (myled == 0) {
ikon 0:d6b0747774da 663 myled = 1;
ikon 0:d6b0747774da 664 } else {
ikon 0:d6b0747774da 665 myled = 0;
ikon 0:d6b0747774da 666 }
ikon 0:d6b0747774da 667
ikon 0:d6b0747774da 668 Display_Home();
ikon 0:d6b0747774da 669 LcdGotoXY(13,10);
ikon 0:d6b0747774da 670 LcdChr('H');
ikon 0:d6b0747774da 671 LcdGotoXY(14,10);
ikon 0:d6b0747774da 672 LcdChr('e');
ikon 0:d6b0747774da 673 LcdGotoXY(15,10);
ikon 0:d6b0747774da 674 LcdChr('l');
ikon 0:d6b0747774da 675 LcdGotoXY(16,10);
ikon 0:d6b0747774da 676 LcdChr('l');
ikon 0:d6b0747774da 677 LcdGotoXY(17,10);
ikon 0:d6b0747774da 678 LcdChr('o');
ikon 0:d6b0747774da 679
ikon 0:d6b0747774da 680 LcdStr(" World!");
ikon 0:d6b0747774da 681
ikon 0:d6b0747774da 682 LcdGotoXY(4,11);
ikon 0:d6b0747774da 683 LcdStr("Below you can see what you write");
ikon 0:d6b0747774da 684 LcdGotoXY(12,12);
ikon 0:d6b0747774da 685 LcdStr("in your PC terminal");
ikon 0:d6b0747774da 686
ikon 0:d6b0747774da 687 wait(5.0);
ikon 0:d6b0747774da 688
ikon 0:d6b0747774da 689 x = 0;
ikon 0:d6b0747774da 690 y = 13;
ikon 0:d6b0747774da 691 while (1) {
ikon 0:d6b0747774da 692 LcdGotoXY(x,y);
ikon 0:d6b0747774da 693 c = pc.getc();
ikon 0:d6b0747774da 694 if (c == 13) {
ikon 0:d6b0747774da 695 y++;
ikon 0:d6b0747774da 696 x=0;
ikon 0:d6b0747774da 697 };
ikon 0:d6b0747774da 698 if (c == 8) {
ikon 0:d6b0747774da 699 x--;
ikon 0:d6b0747774da 700 };
ikon 0:d6b0747774da 701
ikon 0:d6b0747774da 702 if (c > 31) {
ikon 0:d6b0747774da 703 LcdChr(c);
ikon 0:d6b0747774da 704 if ( (xc == '\\' ) && ( c == '\\' ) ) {
ikon 0:d6b0747774da 705 scr2lcd("test.scr");
ikon 0:d6b0747774da 706 }
ikon 0:d6b0747774da 707
ikon 0:d6b0747774da 708 xc = c;
ikon 0:d6b0747774da 709 }
ikon 0:d6b0747774da 710 x++;
ikon 0:d6b0747774da 711 if (x>39) {
ikon 0:d6b0747774da 712 y++;
ikon 0:d6b0747774da 713 x=0;
ikon 0:d6b0747774da 714 if (y>39) y=0;
ikon 0:d6b0747774da 715 }
ikon 0:d6b0747774da 716 }
ikon 0:d6b0747774da 717 }
ikon 0:d6b0747774da 718
ikon 0:d6b0747774da 719 }