Librarie pour ecran 128x32 de MyLab

Dependents:   MyLab_Lib

Committer:
lucas_favre
Date:
Tue Mar 29 20:46:43 2016 +0000
Revision:
14:88fc5dbc0993
Parent:
12:00bbd42614c7
Suppression du menu -> Mis dans la librairie

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lucas_favre 11:c00a727f140f 1 /* mbed library for the mbed Lab Board 128*32 pixel LCD
lucas_favre 11:c00a727f140f 2 * use C12832 controller
lucas_favre 11:c00a727f140f 3 * Copyright (c) 2012 Peter Drescher - DC2PD
lucas_favre 11:c00a727f140f 4 * Released under the MIT License: http://mbed.org/license/mit
lucas_favre 11:c00a727f140f 5 *
lucas_favre 11:c00a727f140f 6 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
lucas_favre 11:c00a727f140f 7 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
lucas_favre 11:c00a727f140f 8 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
lucas_favre 11:c00a727f140f 9 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
lucas_favre 11:c00a727f140f 10 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
lucas_favre 11:c00a727f140f 11 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
lucas_favre 11:c00a727f140f 12 * THE SOFTWARE.
lucas_favre 11:c00a727f140f 13 */
lucas_favre 11:c00a727f140f 14
lucas_favre 11:c00a727f140f 15 #ifndef C12832_H
lucas_favre 11:c00a727f140f 16 #define C12832_H
lucas_favre 11:c00a727f140f 17
lucas_favre 11:c00a727f140f 18 #include "mbed.h"
lucas_favre 11:c00a727f140f 19 #include "GraphicsDisplay.h"
lucas_favre 11:c00a727f140f 20
lucas_favre 11:c00a727f140f 21
lucas_favre 11:c00a727f140f 22 /**
lucas_favre 11:c00a727f140f 23 * Optional Defines:
lucas_favre 11:c00a727f140f 24 * #define debug_lcd 1 enable infos to PC_USB
lucas_favre 11:c00a727f140f 25 */
lucas_favre 11:c00a727f140f 26
lucas_favre 12:00bbd42614c7 27
lucas_favre 11:c00a727f140f 28
lucas_favre 11:c00a727f140f 29 #define PIN_LCD_CS 0
lucas_favre 11:c00a727f140f 30 #define PIN_LCD_E 1
lucas_favre 11:c00a727f140f 31 #define PIN_LCD_RW 22
lucas_favre 11:c00a727f140f 32 #define PIN_LCD_A0 24
lucas_favre 11:c00a727f140f 33
lucas_favre 11:c00a727f140f 34 #define DISPLAY_ON() wr_cmd(0xaf) // Display on
lucas_favre 11:c00a727f140f 35 #define DISPLAY_OFF() wr_cmd(0xae) // Display off
lucas_favre 11:c00a727f140f 36 #define SET_ADC() wr_cmd(0xa1) // Reverse disrect (SEG128-SEG0)
lucas_favre 11:c00a727f140f 37 #define CLEAR_ADC() wr_cmd(0xa0) // Normal disrect (SEG0-SEG128)
lucas_favre 11:c00a727f140f 38 #define REVERSE_DISPLAY_ON() wr_cmd(0xa7) // Reverse display : 0 illuminated
lucas_favre 11:c00a727f140f 39 #define REVERSE_DISPLAY_OFF() wr_cmd(0xa6) // Normal display : 1 illuminated
lucas_favre 11:c00a727f140f 40 #define ENTIRE_DISPLAY_ON() wr_cmd(0xa5) // Entire dislay Force whole LCD point
lucas_favre 11:c00a727f140f 41 #define ENTIRE_DISPLAY_OFF() wr_cmd(0xa4) // Normal display
lucas_favre 11:c00a727f140f 42 #define SET_BIAS() wr_cmd(0xa3) // bias 1 1/7 bias
lucas_favre 11:c00a727f140f 43 #define CLEAR_BIAS() wr_cmd(0xa2) // bias 0 1/9 bias
lucas_favre 11:c00a727f140f 44 #define SET_MODIFY_READ() wr_cmd(0xe0) // Stop automatic increment of the column address by the read instruction
lucas_favre 11:c00a727f140f 45 #define RESET_MODIFY_READ() wr_cmd(0xee) // Cancel Modify_read, column address return to its initial value just before the Set Modify Read instruction is started
lucas_favre 11:c00a727f140f 46 #define RESET() wr_cmd(0xe2)
lucas_favre 11:c00a727f140f 47 #define SET_SHL() wr_cmd(0xc8) // SHL 1,COM33-COM0
lucas_favre 11:c00a727f140f 48 #define CLEAR_SHL() wr_cmd(0xc0) // SHL 0,COM0-COM33
lucas_favre 11:c00a727f140f 49
lucas_favre 11:c00a727f140f 50 /**
lucas_favre 11:c00a727f140f 51 * Draw mode
lucas_favre 11:c00a727f140f 52 * NORMAL
lucas_favre 11:c00a727f140f 53 * XOR set pixel by xor the screen
lucas_favre 11:c00a727f140f 54 */
lucas_favre 11:c00a727f140f 55 enum {NORMAL,XOR};
lucas_favre 11:c00a727f140f 56
lucas_favre 11:c00a727f140f 57 /**
lucas_favre 11:c00a727f140f 58 * Bitmap
lucas_favre 11:c00a727f140f 59 */
lucas_favre 11:c00a727f140f 60 struct Bitmap{
lucas_favre 11:c00a727f140f 61 int xSize;
lucas_favre 11:c00a727f140f 62 int ySize;
lucas_favre 11:c00a727f140f 63 int Byte_in_Line;
lucas_favre 11:c00a727f140f 64 char* data;
lucas_favre 11:c00a727f140f 65 };
lucas_favre 11:c00a727f140f 66
lucas_favre 11:c00a727f140f 67 /**
lucas_favre 11:c00a727f140f 68 * The C12832 class
lucas_favre 11:c00a727f140f 69 */
lucas_favre 11:c00a727f140f 70 class C12832 : public GraphicsDisplay
lucas_favre 11:c00a727f140f 71 {
lucas_favre 11:c00a727f140f 72 public:
lucas_favre 11:c00a727f140f 73 /**
lucas_favre 11:c00a727f140f 74 * Create a C12832 object connected to SPI1
lucas_favre 11:c00a727f140f 75 */
lucas_favre 12:00bbd42614c7 76 C12832(PinName e,PinName rw, PinName a0,PinName cs,PinName d0, PinName d1,PinName d2, PinName d3,PinName d4,PinName d5,PinName d6,PinName d7, const char* name = "LCD");
lucas_favre 11:c00a727f140f 77
lucas_favre 11:c00a727f140f 78 /**
lucas_favre 11:c00a727f140f 79 * Get the width of the screen in pixel
lucas_favre 11:c00a727f140f 80 *
lucas_favre 11:c00a727f140f 81 * @returns width of screen in pixel
lucas_favre 11:c00a727f140f 82 *
lucas_favre 11:c00a727f140f 83 */
lucas_favre 11:c00a727f140f 84 virtual int width();
lucas_favre 11:c00a727f140f 85
lucas_favre 11:c00a727f140f 86 /**
lucas_favre 11:c00a727f140f 87 * Get the height of the screen in pixel
lucas_favre 11:c00a727f140f 88 *
lucas_favre 11:c00a727f140f 89 * @returns height of screen in pixel
lucas_favre 11:c00a727f140f 90 */
lucas_favre 11:c00a727f140f 91 virtual int height();
lucas_favre 11:c00a727f140f 92
lucas_favre 11:c00a727f140f 93 /**
lucas_favre 11:c00a727f140f 94 * Draw a pixel at x,y black or white
lucas_favre 11:c00a727f140f 95 *
lucas_favre 11:c00a727f140f 96 * @param x horizontal position
lucas_favre 11:c00a727f140f 97 * @param y vertical position
lucas_favre 11:c00a727f140f 98 * @param color - 1 set pixel, 0 erase pixel
lucas_favre 11:c00a727f140f 99 */
lucas_favre 11:c00a727f140f 100 virtual void pixel(int x, int y,int colour);
lucas_favre 11:c00a727f140f 101
lucas_favre 11:c00a727f140f 102 /**
lucas_favre 11:c00a727f140f 103 * Draw a circle
lucas_favre 11:c00a727f140f 104 *
lucas_favre 11:c00a727f140f 105 * @param x0,y0 center
lucas_favre 11:c00a727f140f 106 * @param r radius
lucas_favre 11:c00a727f140f 107 * @param color - 1 set pixel, 0 erase pixel
lucas_favre 11:c00a727f140f 108 */
lucas_favre 11:c00a727f140f 109 void circle(int x, int y, int r, int colour);
lucas_favre 11:c00a727f140f 110
lucas_favre 11:c00a727f140f 111 /**
lucas_favre 11:c00a727f140f 112 * Draw a filled circle
lucas_favre 11:c00a727f140f 113 *
lucas_favre 11:c00a727f140f 114 * @param x0,y0 center
lucas_favre 11:c00a727f140f 115 * @param r radius
lucas_favre 11:c00a727f140f 116 * @param color - 1 set pixel, 0 erase pixel
lucas_favre 11:c00a727f140f 117 *
lucas_favre 11:c00a727f140f 118 * Use circle with different radius,
lucas_favre 11:c00a727f140f 119 * Can miss some pixels
lucas_favre 11:c00a727f140f 120 */
lucas_favre 11:c00a727f140f 121 void fillcircle(int x, int y, int r, int colour);
lucas_favre 11:c00a727f140f 122
lucas_favre 11:c00a727f140f 123 /**
lucas_favre 11:c00a727f140f 124 * Draw a 1 pixel line
lucas_favre 11:c00a727f140f 125 *
lucas_favre 11:c00a727f140f 126 * @param x0,y0 start point
lucas_favre 11:c00a727f140f 127 * @param x1,y1 stop point
lucas_favre 11:c00a727f140f 128 * @param color - 1 set pixel, 0 erase pixel
lucas_favre 11:c00a727f140f 129 */
lucas_favre 11:c00a727f140f 130 void line(int x0, int y0, int x1, int y1, int colour);
lucas_favre 11:c00a727f140f 131
lucas_favre 11:c00a727f140f 132 /**
lucas_favre 11:c00a727f140f 133 * Draw a rect
lucas_favre 11:c00a727f140f 134 *
lucas_favre 11:c00a727f140f 135 * @param x0,y0 top left corner
lucas_favre 11:c00a727f140f 136 * @param x1,y1 down right corner
lucas_favre 11:c00a727f140f 137 * @param color - 1 set pixel, 0 erase pixel
lucas_favre 11:c00a727f140f 138 */
lucas_favre 11:c00a727f140f 139 void rect(int x0, int y0, int x1, int y1, int colour);
lucas_favre 11:c00a727f140f 140
lucas_favre 11:c00a727f140f 141 /**
lucas_favre 11:c00a727f140f 142 * Draw a filled rect
lucas_favre 11:c00a727f140f 143 *
lucas_favre 11:c00a727f140f 144 * @param x0,y0 top left corner
lucas_favre 11:c00a727f140f 145 * @param x1,y1 down right corner
lucas_favre 11:c00a727f140f 146 * @param color - 1 set pixel, 0 erase pixel
lucas_favre 11:c00a727f140f 147 */
lucas_favre 11:c00a727f140f 148 void fillrect(int x0, int y0, int x1, int y1, int colour);
lucas_favre 11:c00a727f140f 149
lucas_favre 11:c00a727f140f 150 /**
lucas_favre 11:c00a727f140f 151 * Copy display buffer to LCD
lucas_favre 11:c00a727f140f 152 */
lucas_favre 11:c00a727f140f 153 void copy_to_lcd(void);
lucas_favre 11:c00a727f140f 154
lucas_favre 11:c00a727f140f 155 /**
lucas_favre 11:c00a727f140f 156 * Set the orienation of the screen
lucas_favre 11:c00a727f140f 157 */
lucas_favre 11:c00a727f140f 158
lucas_favre 11:c00a727f140f 159 void set_contrast(unsigned int o);
lucas_favre 11:c00a727f140f 160
lucas_favre 11:c00a727f140f 161 /**
lucas_favre 11:c00a727f140f 162 * Read the contrast level
lucas_favre 11:c00a727f140f 163 */
lucas_favre 11:c00a727f140f 164 unsigned int get_contrast(void);
lucas_favre 11:c00a727f140f 165
lucas_favre 11:c00a727f140f 166 /**
lucas_favre 11:c00a727f140f 167 * Invert the screen
lucas_favre 11:c00a727f140f 168 *
lucas_favre 11:c00a727f140f 169 * @param o = 0 normal, 1 invert
lucas_favre 11:c00a727f140f 170 */
lucas_favre 11:c00a727f140f 171 void invert(unsigned int o);
lucas_favre 11:c00a727f140f 172
lucas_favre 11:c00a727f140f 173 /**
lucas_favre 11:c00a727f140f 174 * Clear the screen
lucas_favre 11:c00a727f140f 175 */
lucas_favre 11:c00a727f140f 176 virtual void cls(void);
lucas_favre 11:c00a727f140f 177
lucas_favre 11:c00a727f140f 178 /**
lucas_favre 11:c00a727f140f 179 * Set the drawing mode
lucas_favre 11:c00a727f140f 180 *
lucas_favre 11:c00a727f140f 181 * @param mode NORMAl or XOR
lucas_favre 11:c00a727f140f 182 */
lucas_favre 11:c00a727f140f 183 void setmode(int mode);
lucas_favre 11:c00a727f140f 184
lucas_favre 11:c00a727f140f 185 virtual int columns(void);
lucas_favre 11:c00a727f140f 186
lucas_favre 11:c00a727f140f 187 /**
lucas_favre 11:c00a727f140f 188 * Calculate the max number of columns.
lucas_favre 11:c00a727f140f 189 * Depends on actual font size
lucas_favre 11:c00a727f140f 190 *
lucas_favre 11:c00a727f140f 191 * @returns max column
lucas_favre 11:c00a727f140f 192 */
lucas_favre 11:c00a727f140f 193 virtual int rows(void);
lucas_favre 11:c00a727f140f 194
lucas_favre 11:c00a727f140f 195 /**
lucas_favre 11:c00a727f140f 196 * Put a char on the screen
lucas_favre 11:c00a727f140f 197 *
lucas_favre 11:c00a727f140f 198 * @param value char to print
lucas_favre 11:c00a727f140f 199 * @returns printed char
lucas_favre 11:c00a727f140f 200 */
lucas_favre 11:c00a727f140f 201 virtual int _putc(int value);
lucas_favre 11:c00a727f140f 202
lucas_favre 11:c00a727f140f 203 /**
lucas_favre 11:c00a727f140f 204 * Draw a character on given position out of the active font to the LCD
lucas_favre 11:c00a727f140f 205 *
lucas_favre 11:c00a727f140f 206 * @param x x-position of char (top left)
lucas_favre 11:c00a727f140f 207 * @param y y-position
lucas_favre 11:c00a727f140f 208 * @param c char to print
lucas_favre 11:c00a727f140f 209 */
lucas_favre 11:c00a727f140f 210 virtual void character(int x, int y, int c);
lucas_favre 11:c00a727f140f 211
lucas_favre 11:c00a727f140f 212 /**
lucas_favre 11:c00a727f140f 213 * Setup cursor position
lucas_favre 11:c00a727f140f 214 *
lucas_favre 11:c00a727f140f 215 * @param x x-position (top left)
lucas_favre 11:c00a727f140f 216 * @param y y-position
lucas_favre 11:c00a727f140f 217 */
lucas_favre 11:c00a727f140f 218 virtual void locate(int x, int y);
lucas_favre 11:c00a727f140f 219
lucas_favre 11:c00a727f140f 220 /**
lucas_favre 11:c00a727f140f 221 * Setup auto update of screen
lucas_favre 11:c00a727f140f 222 *
lucas_favre 11:c00a727f140f 223 * @param up 1 = on , 0 = off
lucas_favre 11:c00a727f140f 224 *
lucas_favre 11:c00a727f140f 225 * if switched off the program has to call copy_to_lcd()
lucas_favre 11:c00a727f140f 226 * to update screen from framebuffer
lucas_favre 11:c00a727f140f 227 */
lucas_favre 11:c00a727f140f 228 void set_auto_up(unsigned int up);
lucas_favre 11:c00a727f140f 229
lucas_favre 11:c00a727f140f 230 /**
lucas_favre 11:c00a727f140f 231 * Get status of the auto update function
lucas_favre 11:c00a727f140f 232 *
lucas_favre 11:c00a727f140f 233 * @returns if auto update is on
lucas_favre 11:c00a727f140f 234 */
lucas_favre 11:c00a727f140f 235 unsigned int get_auto_up(void);
lucas_favre 11:c00a727f140f 236
lucas_favre 11:c00a727f140f 237 /** Vars */
lucas_favre 12:00bbd42614c7 238 DigitalOut _e,_cs,_a0,_rw;
lucas_favre 11:c00a727f140f 239 BusOut _d;
lucas_favre 11:c00a727f140f 240 unsigned char* font;
lucas_favre 11:c00a727f140f 241 unsigned int draw_mode;
lucas_favre 11:c00a727f140f 242
lucas_favre 11:c00a727f140f 243
lucas_favre 11:c00a727f140f 244 /**
lucas_favre 11:c00a727f140f 245 * Select the font to use
lucas_favre 11:c00a727f140f 246 *
lucas_favre 11:c00a727f140f 247 * @param f pointer to font array
lucas_favre 11:c00a727f140f 248 *
lucas_favre 11:c00a727f140f 249 * font array can created with GLCD Font Creator from http://www.mikroe.com
lucas_favre 11:c00a727f140f 250 * you have to add 4 parameter at the beginning of the font array to use:
lucas_favre 11:c00a727f140f 251 * - the number of byte / char
lucas_favre 11:c00a727f140f 252 * - the vertial size in pixel
lucas_favre 11:c00a727f140f 253 * - the horizontal size in pixel
lucas_favre 11:c00a727f140f 254 * - the number of byte per vertical line
lucas_favre 11:c00a727f140f 255 * you also have to change the array to char[]
lucas_favre 11:c00a727f140f 256 */
lucas_favre 11:c00a727f140f 257 void set_font(unsigned char* f);
lucas_favre 11:c00a727f140f 258
lucas_favre 11:c00a727f140f 259 /**
lucas_favre 11:c00a727f140f 260 * Print bitmap to buffer
lucas_favre 11:c00a727f140f 261 *
lucas_favre 11:c00a727f140f 262 * @param bm Bitmap in flash
lucas_favre 11:c00a727f140f 263 * @param x x start
lucas_favre 11:c00a727f140f 264 * @param y y start
lucas_favre 11:c00a727f140f 265 */
lucas_favre 11:c00a727f140f 266 void print_bm(Bitmap bm, int x, int y);
lucas_favre 11:c00a727f140f 267
lucas_favre 11:c00a727f140f 268 void Delay(uint32_t n);
lucas_favre 11:c00a727f140f 269 void Initial_Dispay_Line(unsigned char line);
lucas_favre 11:c00a727f140f 270 void Power_Control(unsigned char vol);
lucas_favre 11:c00a727f140f 271 void Regulor_Resistor_Select(unsigned char r);
lucas_favre 11:c00a727f140f 272 void Set_Contrast_Control_Register(unsigned char mod);
lucas_favre 11:c00a727f140f 273
lucas_favre 11:c00a727f140f 274 protected:
lucas_favre 11:c00a727f140f 275
lucas_favre 11:c00a727f140f 276 /**
lucas_favre 11:c00a727f140f 277 * Draw a horizontal line
lucas_favre 11:c00a727f140f 278 *
lucas_favre 11:c00a727f140f 279 * @param x0 horizontal start
lucas_favre 11:c00a727f140f 280 * @param x1 horizontal stop
lucas_favre 11:c00a727f140f 281 * @param y vertical position
lucas_favre 11:c00a727f140f 282 * @param color - 1 set pixel, 0 erase pixel
lucas_favre 11:c00a727f140f 283 */
lucas_favre 11:c00a727f140f 284 void hline(int x0, int x1, int y, int colour);
lucas_favre 11:c00a727f140f 285
lucas_favre 11:c00a727f140f 286 /**
lucas_favre 11:c00a727f140f 287 * Draw a vertical line
lucas_favre 11:c00a727f140f 288 *
lucas_favre 11:c00a727f140f 289 * @param x horizontal position
lucas_favre 11:c00a727f140f 290 * @param y0 vertical start
lucas_favre 11:c00a727f140f 291 * @param y1 vertical stop
lucas_favre 11:c00a727f140f 292 * @param color - 1 set pixel, 0 erase pixel
lucas_favre 11:c00a727f140f 293 */
lucas_favre 11:c00a727f140f 294 void vline(int y0, int y1, int x, int colour);
lucas_favre 11:c00a727f140f 295
lucas_favre 11:c00a727f140f 296 /**
lucas_favre 11:c00a727f140f 297 * Init the C12832 LCD controller
lucas_favre 11:c00a727f140f 298 */
lucas_favre 11:c00a727f140f 299 void lcd_reset();
lucas_favre 11:c00a727f140f 300
lucas_favre 11:c00a727f140f 301 /**
lucas_favre 11:c00a727f140f 302 * Write data to the LCD controller
lucas_favre 11:c00a727f140f 303 *
lucas_favre 11:c00a727f140f 304 * @param dat data written to LCD controller
lucas_favre 11:c00a727f140f 305 */
lucas_favre 11:c00a727f140f 306 void wr_dat(unsigned char value);
lucas_favre 11:c00a727f140f 307
lucas_favre 11:c00a727f140f 308 /**
lucas_favre 11:c00a727f140f 309 * Write a command the LCD controller
lucas_favre 11:c00a727f140f 310 *
lucas_favre 11:c00a727f140f 311 * @param cmd: command to be written
lucas_favre 11:c00a727f140f 312 */
lucas_favre 11:c00a727f140f 313 void wr_cmd(unsigned char value);
lucas_favre 11:c00a727f140f 314
lucas_favre 11:c00a727f140f 315 void wr_cnt(unsigned char cmd);
lucas_favre 11:c00a727f140f 316
lucas_favre 11:c00a727f140f 317 unsigned int orientation;
lucas_favre 11:c00a727f140f 318 unsigned int char_x;
lucas_favre 11:c00a727f140f 319 unsigned int char_y;
lucas_favre 11:c00a727f140f 320 unsigned char buffer[512];
lucas_favre 11:c00a727f140f 321 unsigned int contrast;
lucas_favre 11:c00a727f140f 322 unsigned int auto_up;
lucas_favre 11:c00a727f140f 323
lucas_favre 11:c00a727f140f 324 };
lucas_favre 11:c00a727f140f 325
lucas_favre 11:c00a727f140f 326
lucas_favre 11:c00a727f140f 327
lucas_favre 11:c00a727f140f 328
lucas_favre 11:c00a727f140f 329 #endif