SG12864A

Dependents:   SG12864A_TestProgram

Committer:
shintamainjp
Date:
Tue Aug 10 12:36:05 2010 +0000
Revision:
4:200d1ea4e76e
Parent:
3:86e7fba29623
Child:
5:4d86043f7942

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shintamainjp 0:238f2d048222 1 /**
shintamainjp 0:238f2d048222 2 * SG12864A Graphics LCD module driver class (Version 0.0.1)
shintamainjp 0:238f2d048222 3 *
shintamainjp 0:238f2d048222 4 * Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems)
shintamainjp 0:238f2d048222 5 * http://shinta.main.jp/
shintamainjp 4:200d1ea4e76e 6 *
shintamainjp 4:200d1ea4e76e 7 * See also ...
shintamainjp 4:200d1ea4e76e 8 * http://mbed.org/users/shintamainjp/notebook/sg12864asunlike-display-graphics-lcd-driver/
shintamainjp 0:238f2d048222 9 */
shintamainjp 0:238f2d048222 10
shintamainjp 0:238f2d048222 11 #ifndef _SG12864A_H_
shintamainjp 0:238f2d048222 12 #define _SG12864A_H_
shintamainjp 0:238f2d048222 13
shintamainjp 0:238f2d048222 14 #include "mbed.h"
shintamainjp 0:238f2d048222 15
shintamainjp 1:aacd73a4e7ee 16 /**
shintamainjp 4:200d1ea4e76e 17 * SG12864A Graphics LCD module driver class.
shintamainjp 1:aacd73a4e7ee 18 */
shintamainjp 0:238f2d048222 19 class SG12864A {
shintamainjp 0:238f2d048222 20 public:
shintamainjp 4:200d1ea4e76e 21
shintamainjp 4:200d1ea4e76e 22 /**
shintamainjp 4:200d1ea4e76e 23 * Create.
shintamainjp 4:200d1ea4e76e 24 *
shintamainjp 4:200d1ea4e76e 25 * @param di D-/I (H:Instruction, L:Data)
shintamainjp 4:200d1ea4e76e 26 * @param rw R/W- (H:Read, L:Write)
shintamainjp 4:200d1ea4e76e 27 * @param en Enable signal
shintamainjp 4:200d1ea4e76e 28 * @param db0 Data bus line bit-0.
shintamainjp 4:200d1ea4e76e 29 * @param db1 Data bus line bit-1.
shintamainjp 4:200d1ea4e76e 30 * @param db2 Data bus line bit-2.
shintamainjp 4:200d1ea4e76e 31 * @param db3 Data bus line bit-3.
shintamainjp 4:200d1ea4e76e 32 * @param db4 Data bus line bit-4.
shintamainjp 4:200d1ea4e76e 33 * @param db5 Data bus line bit-5.
shintamainjp 4:200d1ea4e76e 34 * @param db6 Data bus line bit-6.
shintamainjp 4:200d1ea4e76e 35 * @param db7 Data bus line bit-7.
shintamainjp 4:200d1ea4e76e 36 * @param cs1 Chip select signal for IC1.
shintamainjp 4:200d1ea4e76e 37 * @param cs2 Chip select signal for IC2.
shintamainjp 4:200d1ea4e76e 38 * @param res Reset signal.
shintamainjp 4:200d1ea4e76e 39 */
shintamainjp 0:238f2d048222 40 SG12864A(
shintamainjp 0:238f2d048222 41 PinName di,
shintamainjp 0:238f2d048222 42 PinName rw,
shintamainjp 0:238f2d048222 43 PinName en,
shintamainjp 0:238f2d048222 44 PinName db0,
shintamainjp 0:238f2d048222 45 PinName db1,
shintamainjp 0:238f2d048222 46 PinName db2,
shintamainjp 0:238f2d048222 47 PinName db3,
shintamainjp 0:238f2d048222 48 PinName db4,
shintamainjp 0:238f2d048222 49 PinName db5,
shintamainjp 0:238f2d048222 50 PinName db6,
shintamainjp 0:238f2d048222 51 PinName db7,
shintamainjp 0:238f2d048222 52 PinName cs1,
shintamainjp 0:238f2d048222 53 PinName cs2,
shintamainjp 0:238f2d048222 54 PinName res);
shintamainjp 4:200d1ea4e76e 55 /**
shintamainjp 4:200d1ea4e76e 56 * Destroy.
shintamainjp 4:200d1ea4e76e 57 */
shintamainjp 0:238f2d048222 58 ~SG12864A();
shintamainjp 4:200d1ea4e76e 59
shintamainjp 4:200d1ea4e76e 60 /**
shintamainjp 4:200d1ea4e76e 61 * Target of a chip.
shintamainjp 4:200d1ea4e76e 62 */
shintamainjp 0:238f2d048222 63 enum Target {
shintamainjp 0:238f2d048222 64 CS1,
shintamainjp 0:238f2d048222 65 CS2
shintamainjp 0:238f2d048222 66 };
shintamainjp 4:200d1ea4e76e 67
shintamainjp 3:86e7fba29623 68 /*
shintamainjp 4:200d1ea4e76e 69 * =======================================================
shintamainjp 4:200d1ea4e76e 70 * High Level Interfaces.
shintamainjp 4:200d1ea4e76e 71 * =======================================================
shintamainjp 4:200d1ea4e76e 72 */
shintamainjp 4:200d1ea4e76e 73
shintamainjp 4:200d1ea4e76e 74 /**
shintamainjp 4:200d1ea4e76e 75 * Push images from a internal buffer.
shintamainjp 3:86e7fba29623 76 */
shintamainjp 1:aacd73a4e7ee 77 void bufferPush(void);
shintamainjp 4:200d1ea4e76e 78
shintamainjp 4:200d1ea4e76e 79 /**
shintamainjp 4:200d1ea4e76e 80 * Pull images to a internal buffer.
shintamainjp 4:200d1ea4e76e 81 */
shintamainjp 1:aacd73a4e7ee 82 void bufferPull(void);
shintamainjp 4:200d1ea4e76e 83
shintamainjp 4:200d1ea4e76e 84 /**
shintamainjp 4:200d1ea4e76e 85 * Clear a internal buffer images.
shintamainjp 4:200d1ea4e76e 86 *
shintamainjp 4:200d1ea4e76e 87 * @param reverse True if images are reversed.
shintamainjp 4:200d1ea4e76e 88 */
shintamainjp 3:86e7fba29623 89 void bufferClear(bool reverse = false);
shintamainjp 4:200d1ea4e76e 90
shintamainjp 4:200d1ea4e76e 91 /**
shintamainjp 4:200d1ea4e76e 92 * Draw a line to a internal buffer.
shintamainjp 4:200d1ea4e76e 93 *
shintamainjp 4:200d1ea4e76e 94 * @param x1 Starting point at x-axis.
shintamainjp 4:200d1ea4e76e 95 * @param y1 Starting point at y-axis.
shintamainjp 4:200d1ea4e76e 96 * @param x2 Ending point at x-axis.
shintamainjp 4:200d1ea4e76e 97 * @param y2 Ending point at y-axis.
shintamainjp 4:200d1ea4e76e 98 * @param reverse True if images are reversed.
shintamainjp 4:200d1ea4e76e 99 */
shintamainjp 3:86e7fba29623 100 void bufferDrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, bool reverse = false);
shintamainjp 4:200d1ea4e76e 101
shintamainjp 4:200d1ea4e76e 102 /**
shintamainjp 4:200d1ea4e76e 103 * Draw a box to a internal buffer.
shintamainjp 4:200d1ea4e76e 104 *
shintamainjp 4:200d1ea4e76e 105 * @param x1 Starting point at x-axis.
shintamainjp 4:200d1ea4e76e 106 * @param y1 Starting point at y-axis.
shintamainjp 4:200d1ea4e76e 107 * @param x2 Ending point at x-axis.
shintamainjp 4:200d1ea4e76e 108 * @param y2 Ending point at y-axis.
shintamainjp 4:200d1ea4e76e 109 * @param reverse True if images are reversed.
shintamainjp 4:200d1ea4e76e 110 */
shintamainjp 3:86e7fba29623 111 void bufferDrawBox(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, bool reverse = false);
shintamainjp 4:200d1ea4e76e 112
shintamainjp 4:200d1ea4e76e 113 /**
shintamainjp 4:200d1ea4e76e 114 * Fill a box to a internal buffer.
shintamainjp 4:200d1ea4e76e 115 *
shintamainjp 4:200d1ea4e76e 116 * @param x1 Starting point at x-axis.
shintamainjp 4:200d1ea4e76e 117 * @param y1 Starting point at y-axis.
shintamainjp 4:200d1ea4e76e 118 * @param x2 Ending point at x-axis.
shintamainjp 4:200d1ea4e76e 119 * @param y2 Ending point at y-axis.
shintamainjp 4:200d1ea4e76e 120 * @param reverse True if images are reversed.
shintamainjp 4:200d1ea4e76e 121 */
shintamainjp 3:86e7fba29623 122 void bufferFillBox(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, bool reverse = false);
shintamainjp 4:200d1ea4e76e 123
shintamainjp 4:200d1ea4e76e 124 /**
shintamainjp 4:200d1ea4e76e 125 * Draw a text string to a internal buffer.
shintamainjp 4:200d1ea4e76e 126 * The font size is 5x7 dots.
shintamainjp 4:200d1ea4e76e 127 *
shintamainjp 4:200d1ea4e76e 128 * @param x Starting point at x-axis.
shintamainjp 4:200d1ea4e76e 129 * @param y Starting point at y-axis.
shintamainjp 4:200d1ea4e76e 130 * @param str Text string. (NULL terminate.)
shintamainjp 4:200d1ea4e76e 131 * @param reverse True if images are reversed.
shintamainjp 4:200d1ea4e76e 132 */
shintamainjp 3:86e7fba29623 133 void bufferDrawString(uint8_t x, uint8_t y, char * str, bool reverse = false);
shintamainjp 4:200d1ea4e76e 134
shintamainjp 4:200d1ea4e76e 135 /**
shintamainjp 4:200d1ea4e76e 136 * Draw a character to a internal buffer.
shintamainjp 4:200d1ea4e76e 137 * The font size is 5x7 dots.
shintamainjp 4:200d1ea4e76e 138 *
shintamainjp 4:200d1ea4e76e 139 * @param x Starting point at x-axis.
shintamainjp 4:200d1ea4e76e 140 * @param y Starting point at y-axis.
shintamainjp 4:200d1ea4e76e 141 * @param c A character.
shintamainjp 4:200d1ea4e76e 142 * @param reverse True if images are reversed.
shintamainjp 4:200d1ea4e76e 143 */
shintamainjp 3:86e7fba29623 144 void bufferDrawChar(uint8_t x, uint8_t y, char c, bool reverse = false);
shintamainjp 4:200d1ea4e76e 145
shintamainjp 4:200d1ea4e76e 146 /**
shintamainjp 4:200d1ea4e76e 147 * Draw a checkbox to a internal buffer.
shintamainjp 4:200d1ea4e76e 148 *
shintamainjp 4:200d1ea4e76e 149 * @param x1 Starting point at x-axis.
shintamainjp 4:200d1ea4e76e 150 * @param y1 Starting point at y-axis.
shintamainjp 4:200d1ea4e76e 151 * @param x2 Ending point at x-axis.
shintamainjp 4:200d1ea4e76e 152 * @param y2 Ending point at y-axis.
shintamainjp 4:200d1ea4e76e 153 * @param state True if state is checked.
shintamainjp 4:200d1ea4e76e 154 * @param reverse True if images are reversed.
shintamainjp 4:200d1ea4e76e 155 */
shintamainjp 3:86e7fba29623 156 void bufferDrawCheckbox(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, bool state, bool reverse = false);
shintamainjp 4:200d1ea4e76e 157
shintamainjp 4:200d1ea4e76e 158 /**
shintamainjp 4:200d1ea4e76e 159 * Draw a progressbar to a internal buffer.
shintamainjp 4:200d1ea4e76e 160 *
shintamainjp 4:200d1ea4e76e 161 * @param x1 Starting point at x-axis.
shintamainjp 4:200d1ea4e76e 162 * @param y1 Starting point at y-axis.
shintamainjp 4:200d1ea4e76e 163 * @param x2 Ending point at x-axis.
shintamainjp 4:200d1ea4e76e 164 * @param y2 Ending point at y-axis.
shintamainjp 4:200d1ea4e76e 165 * @param min Minimum value on a scale.
shintamainjp 4:200d1ea4e76e 166 * @param max Maximum value on a scale.
shintamainjp 4:200d1ea4e76e 167 * @param value Current value on a scale.
shintamainjp 4:200d1ea4e76e 168 * @param state True if state is checked.
shintamainjp 4:200d1ea4e76e 169 * @param reverse True if images are reversed.
shintamainjp 4:200d1ea4e76e 170 */
shintamainjp 4:200d1ea4e76e 171 void bufferDrawProgressbar(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, int min, int max, int value, bool horizontal = false, bool reverse = false);
shintamainjp 1:aacd73a4e7ee 172
shintamainjp 3:86e7fba29623 173 /*
shintamainjp 3:86e7fba29623 174 * High Level Interfaces.
shintamainjp 3:86e7fba29623 175 */
shintamainjp 4:200d1ea4e76e 176
shintamainjp 4:200d1ea4e76e 177 /**
shintamainjp 4:200d1ea4e76e 178 * Reset module.
shintamainjp 4:200d1ea4e76e 179 */
shintamainjp 0:238f2d048222 180 void reset(void);
shintamainjp 4:200d1ea4e76e 181
shintamainjp 4:200d1ea4e76e 182 /**
shintamainjp 4:200d1ea4e76e 183 * Clear display.
shintamainjp 4:200d1ea4e76e 184 */
shintamainjp 0:238f2d048222 185 void clear(void);
shintamainjp 2:91c03e41c927 186
shintamainjp 3:86e7fba29623 187 /*
shintamainjp 4:200d1ea4e76e 188 * =======================================================
shintamainjp 3:86e7fba29623 189 * Middle Level Interfaces.
shintamainjp 4:200d1ea4e76e 190 * =======================================================
shintamainjp 4:200d1ea4e76e 191 */
shintamainjp 4:200d1ea4e76e 192
shintamainjp 4:200d1ea4e76e 193 /**
shintamainjp 4:200d1ea4e76e 194 * Set display ON/OFF.
shintamainjp 4:200d1ea4e76e 195 *
shintamainjp 4:200d1ea4e76e 196 * @param t Target.
shintamainjp 4:200d1ea4e76e 197 * @param on True if the display is ON.
shintamainjp 3:86e7fba29623 198 */
shintamainjp 0:238f2d048222 199 void setDisplayOnOff(Target t, bool on);
shintamainjp 4:200d1ea4e76e 200
shintamainjp 4:200d1ea4e76e 201 /**
shintamainjp 4:200d1ea4e76e 202 * Set display start line.
shintamainjp 4:200d1ea4e76e 203 *
shintamainjp 4:200d1ea4e76e 204 * @param t Target.
shintamainjp 4:200d1ea4e76e 205 * @param displayStartLine Start line number.
shintamainjp 4:200d1ea4e76e 206 */
shintamainjp 0:238f2d048222 207 void setDisplayStartLine(Target t, uint8_t displayStartLine);
shintamainjp 4:200d1ea4e76e 208
shintamainjp 4:200d1ea4e76e 209 /**
shintamainjp 4:200d1ea4e76e 210 * Set page address.
shintamainjp 4:200d1ea4e76e 211 *
shintamainjp 4:200d1ea4e76e 212 * @param t Target.
shintamainjp 4:200d1ea4e76e 213 * @param addr Address.
shintamainjp 4:200d1ea4e76e 214 */
shintamainjp 0:238f2d048222 215 void setPageAddress(Target t, uint8_t addr);
shintamainjp 4:200d1ea4e76e 216
shintamainjp 4:200d1ea4e76e 217 /**
shintamainjp 4:200d1ea4e76e 218 * Set column address.
shintamainjp 4:200d1ea4e76e 219 *
shintamainjp 4:200d1ea4e76e 220 * @param t Target.
shintamainjp 4:200d1ea4e76e 221 * @param addr Address.
shintamainjp 4:200d1ea4e76e 222 */
shintamainjp 0:238f2d048222 223 void setColumnAddress(Target t, uint8_t addr);
shintamainjp 4:200d1ea4e76e 224
shintamainjp 4:200d1ea4e76e 225 /**
shintamainjp 4:200d1ea4e76e 226 * Read status.
shintamainjp 4:200d1ea4e76e 227 *
shintamainjp 4:200d1ea4e76e 228 * @param t Target.
shintamainjp 4:200d1ea4e76e 229 * @param c Status.
shintamainjp 4:200d1ea4e76e 230 */
shintamainjp 0:238f2d048222 231 void readStatus(Target t, uint8_t *c);
shintamainjp 4:200d1ea4e76e 232
shintamainjp 4:200d1ea4e76e 233 /**
shintamainjp 4:200d1ea4e76e 234 * Write data.
shintamainjp 4:200d1ea4e76e 235 *
shintamainjp 4:200d1ea4e76e 236 * @param t Target.
shintamainjp 4:200d1ea4e76e 237 * @param c Status.
shintamainjp 4:200d1ea4e76e 238 */
shintamainjp 0:238f2d048222 239 void writeData(Target t, uint8_t c);
shintamainjp 4:200d1ea4e76e 240
shintamainjp 4:200d1ea4e76e 241 /**
shintamainjp 4:200d1ea4e76e 242 * Read data.
shintamainjp 4:200d1ea4e76e 243 *
shintamainjp 4:200d1ea4e76e 244 * @param t Target.
shintamainjp 4:200d1ea4e76e 245 * @param c Status.
shintamainjp 4:200d1ea4e76e 246 */
shintamainjp 0:238f2d048222 247 void readData(Target t, uint8_t *c);
shintamainjp 4:200d1ea4e76e 248
shintamainjp 1:aacd73a4e7ee 249 static const int PIXEL_X = 128;
shintamainjp 1:aacd73a4e7ee 250 static const int PIXEL_Y = 64;
shintamainjp 2:91c03e41c927 251 static const uint8_t FONT_X = 5;
shintamainjp 2:91c03e41c927 252 static const uint8_t FONT_Y = 7;
shintamainjp 0:238f2d048222 253 private:
shintamainjp 0:238f2d048222 254 static const int PAGES = 8;
shintamainjp 0:238f2d048222 255 static const int COLUMNS = 64;
shintamainjp 2:91c03e41c927 256 static const uint16_t FONT_MIN_CODE = 0x20;
shintamainjp 2:91c03e41c927 257 static const uint16_t FONT_MAX_CODE = 0x7F;
shintamainjp 2:91c03e41c927 258 static const uint8_t font5x7_data[];
shintamainjp 1:aacd73a4e7ee 259 uint8_t buffer[PAGES * COLUMNS * 2];
shintamainjp 0:238f2d048222 260 DigitalOut ioDI;
shintamainjp 0:238f2d048222 261 DigitalOut ioRW;
shintamainjp 0:238f2d048222 262 DigitalOut ioEN;
shintamainjp 0:238f2d048222 263 BusInOut ioDB;
shintamainjp 0:238f2d048222 264 DigitalOut ioCS1;
shintamainjp 0:238f2d048222 265 DigitalOut ioCS2;
shintamainjp 0:238f2d048222 266 DigitalOut ioRES;
shintamainjp 4:200d1ea4e76e 267
shintamainjp 4:200d1ea4e76e 268 /**
shintamainjp 4:200d1ea4e76e 269 * Mode of a write data.
shintamainjp 4:200d1ea4e76e 270 */
shintamainjp 0:238f2d048222 271 enum Mode {
shintamainjp 0:238f2d048222 272 Data,
shintamainjp 0:238f2d048222 273 Instruction
shintamainjp 0:238f2d048222 274 };
shintamainjp 4:200d1ea4e76e 275
shintamainjp 3:86e7fba29623 276 /*
shintamainjp 4:200d1ea4e76e 277 * =======================================================
shintamainjp 3:86e7fba29623 278 * Low Level Interfaces.
shintamainjp 4:200d1ea4e76e 279 * =======================================================
shintamainjp 4:200d1ea4e76e 280 */
shintamainjp 4:200d1ea4e76e 281
shintamainjp 4:200d1ea4e76e 282 /**
shintamainjp 4:200d1ea4e76e 283 * Set I/O direction to read.
shintamainjp 3:86e7fba29623 284 */
shintamainjp 0:238f2d048222 285 void setDirectionToRead();
shintamainjp 4:200d1ea4e76e 286
shintamainjp 4:200d1ea4e76e 287 /**
shintamainjp 4:200d1ea4e76e 288 * Set I/O direction to write.
shintamainjp 4:200d1ea4e76e 289 */
shintamainjp 0:238f2d048222 290 void setDirectionToWrite();
shintamainjp 4:200d1ea4e76e 291
shintamainjp 4:200d1ea4e76e 292 /**
shintamainjp 4:200d1ea4e76e 293 * Write data.
shintamainjp 4:200d1ea4e76e 294 *
shintamainjp 4:200d1ea4e76e 295 * @param t Target.
shintamainjp 4:200d1ea4e76e 296 * @param m Mode.
shintamainjp 4:200d1ea4e76e 297 * @param c Data.
shintamainjp 4:200d1ea4e76e 298 */
shintamainjp 0:238f2d048222 299 void write(Target t, Mode m, uint8_t c);
shintamainjp 4:200d1ea4e76e 300
shintamainjp 4:200d1ea4e76e 301 /**
shintamainjp 4:200d1ea4e76e 302 * Read data.
shintamainjp 4:200d1ea4e76e 303 *
shintamainjp 4:200d1ea4e76e 304 * @param t Target.
shintamainjp 4:200d1ea4e76e 305 * @param m Mode.
shintamainjp 4:200d1ea4e76e 306 * @param c Data.
shintamainjp 4:200d1ea4e76e 307 */
shintamainjp 0:238f2d048222 308 void read(Target t, Mode m, uint8_t *c);
shintamainjp 4:200d1ea4e76e 309
shintamainjp 4:200d1ea4e76e 310 /**
shintamainjp 4:200d1ea4e76e 311 * Reset.
shintamainjp 4:200d1ea4e76e 312 *
shintamainjp 4:200d1ea4e76e 313 * @param b True if reset active.
shintamainjp 4:200d1ea4e76e 314 */
shintamainjp 0:238f2d048222 315 void reset(bool b);
shintamainjp 0:238f2d048222 316 };
shintamainjp 0:238f2d048222 317
shintamainjp 0:238f2d048222 318 #endif