Librarie pour ecran 128x32 de MyLab

Dependents:   MyLab_Lib

Committer:
lucas_favre
Date:
Tue Mar 29 18:26:15 2016 +0000
Revision:
11:c00a727f140f
Child:
12:00bbd42614c7
Modification de la librairie C12832_lcd pour l'utilisation de l'?cran 128x32 pr?sent sur la carte MyLab

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 11:c00a727f140f 27 // some defines for the DMA use
lucas_favre 11:c00a727f140f 28 #define DMA_CHANNEL_ENABLE 1
lucas_favre 11:c00a727f140f 29 #define DMA_TRANSFER_TYPE_M2P (1UL << 11)
lucas_favre 11:c00a727f140f 30 #define DMA_CHANNEL_TCIE (1UL << 31)
lucas_favre 11:c00a727f140f 31 #define DMA_CHANNEL_SRC_INC (1UL << 26)
lucas_favre 11:c00a727f140f 32 #define DMA_MASK_IE (1UL << 14)
lucas_favre 11:c00a727f140f 33 #define DMA_MASK_ITC (1UL << 15)
lucas_favre 11:c00a727f140f 34 #define DMA_SSP1_TX (1UL << 2)
lucas_favre 11:c00a727f140f 35 #define DMA_SSP0_TX (0)
lucas_favre 11:c00a727f140f 36 #define DMA_DEST_SSP1_TX (2UL << 6)
lucas_favre 11:c00a727f140f 37 #define DMA_DEST_SSP0_TX (0UL << 6)
lucas_favre 11:c00a727f140f 38
lucas_favre 11:c00a727f140f 39 #define PIN_LCD_CS 0
lucas_favre 11:c00a727f140f 40 #define PIN_LCD_E 1
lucas_favre 11:c00a727f140f 41 #define PIN_LCD_RW 22
lucas_favre 11:c00a727f140f 42 #define PIN_LCD_A0 24
lucas_favre 11:c00a727f140f 43
lucas_favre 11:c00a727f140f 44 #define DISPLAY_ON() wr_cmd(0xaf) // Display on
lucas_favre 11:c00a727f140f 45 #define DISPLAY_OFF() wr_cmd(0xae) // Display off
lucas_favre 11:c00a727f140f 46 #define SET_ADC() wr_cmd(0xa1) // Reverse disrect (SEG128-SEG0)
lucas_favre 11:c00a727f140f 47 #define CLEAR_ADC() wr_cmd(0xa0) // Normal disrect (SEG0-SEG128)
lucas_favre 11:c00a727f140f 48 #define REVERSE_DISPLAY_ON() wr_cmd(0xa7) // Reverse display : 0 illuminated
lucas_favre 11:c00a727f140f 49 #define REVERSE_DISPLAY_OFF() wr_cmd(0xa6) // Normal display : 1 illuminated
lucas_favre 11:c00a727f140f 50 #define ENTIRE_DISPLAY_ON() wr_cmd(0xa5) // Entire dislay Force whole LCD point
lucas_favre 11:c00a727f140f 51 #define ENTIRE_DISPLAY_OFF() wr_cmd(0xa4) // Normal display
lucas_favre 11:c00a727f140f 52 #define SET_BIAS() wr_cmd(0xa3) // bias 1 1/7 bias
lucas_favre 11:c00a727f140f 53 #define CLEAR_BIAS() wr_cmd(0xa2) // bias 0 1/9 bias
lucas_favre 11:c00a727f140f 54 #define SET_MODIFY_READ() wr_cmd(0xe0) // Stop automatic increment of the column address by the read instruction
lucas_favre 11:c00a727f140f 55 #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 56 #define RESET() wr_cmd(0xe2)
lucas_favre 11:c00a727f140f 57 #define SET_SHL() wr_cmd(0xc8) // SHL 1,COM33-COM0
lucas_favre 11:c00a727f140f 58 #define CLEAR_SHL() wr_cmd(0xc0) // SHL 0,COM0-COM33
lucas_favre 11:c00a727f140f 59
lucas_favre 11:c00a727f140f 60 /**
lucas_favre 11:c00a727f140f 61 * Draw mode
lucas_favre 11:c00a727f140f 62 * NORMAL
lucas_favre 11:c00a727f140f 63 * XOR set pixel by xor the screen
lucas_favre 11:c00a727f140f 64 */
lucas_favre 11:c00a727f140f 65 enum {NORMAL,XOR};
lucas_favre 11:c00a727f140f 66
lucas_favre 11:c00a727f140f 67 /**
lucas_favre 11:c00a727f140f 68 * Bitmap
lucas_favre 11:c00a727f140f 69 */
lucas_favre 11:c00a727f140f 70 struct Bitmap{
lucas_favre 11:c00a727f140f 71 int xSize;
lucas_favre 11:c00a727f140f 72 int ySize;
lucas_favre 11:c00a727f140f 73 int Byte_in_Line;
lucas_favre 11:c00a727f140f 74 char* data;
lucas_favre 11:c00a727f140f 75 };
lucas_favre 11:c00a727f140f 76
lucas_favre 11:c00a727f140f 77 /**
lucas_favre 11:c00a727f140f 78 * The C12832 class
lucas_favre 11:c00a727f140f 79 */
lucas_favre 11:c00a727f140f 80 class C12832 : public GraphicsDisplay
lucas_favre 11:c00a727f140f 81 {
lucas_favre 11:c00a727f140f 82 public:
lucas_favre 11:c00a727f140f 83 /**
lucas_favre 11:c00a727f140f 84 * Create a C12832 object connected to SPI1
lucas_favre 11:c00a727f140f 85 */
lucas_favre 11:c00a727f140f 86 C12832(PinName rs, 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 87
lucas_favre 11:c00a727f140f 88 /**
lucas_favre 11:c00a727f140f 89 * Get the width of the screen in pixel
lucas_favre 11:c00a727f140f 90 *
lucas_favre 11:c00a727f140f 91 * @returns width of screen in pixel
lucas_favre 11:c00a727f140f 92 *
lucas_favre 11:c00a727f140f 93 */
lucas_favre 11:c00a727f140f 94 virtual int width();
lucas_favre 11:c00a727f140f 95
lucas_favre 11:c00a727f140f 96 /**
lucas_favre 11:c00a727f140f 97 * Get the height of the screen in pixel
lucas_favre 11:c00a727f140f 98 *
lucas_favre 11:c00a727f140f 99 * @returns height of screen in pixel
lucas_favre 11:c00a727f140f 100 */
lucas_favre 11:c00a727f140f 101 virtual int height();
lucas_favre 11:c00a727f140f 102
lucas_favre 11:c00a727f140f 103 /**
lucas_favre 11:c00a727f140f 104 * Draw a pixel at x,y black or white
lucas_favre 11:c00a727f140f 105 *
lucas_favre 11:c00a727f140f 106 * @param x horizontal position
lucas_favre 11:c00a727f140f 107 * @param y vertical position
lucas_favre 11:c00a727f140f 108 * @param color - 1 set pixel, 0 erase pixel
lucas_favre 11:c00a727f140f 109 */
lucas_favre 11:c00a727f140f 110 virtual void pixel(int x, int y,int colour);
lucas_favre 11:c00a727f140f 111
lucas_favre 11:c00a727f140f 112 /**
lucas_favre 11:c00a727f140f 113 * Draw a circle
lucas_favre 11:c00a727f140f 114 *
lucas_favre 11:c00a727f140f 115 * @param x0,y0 center
lucas_favre 11:c00a727f140f 116 * @param r radius
lucas_favre 11:c00a727f140f 117 * @param color - 1 set pixel, 0 erase pixel
lucas_favre 11:c00a727f140f 118 */
lucas_favre 11:c00a727f140f 119 void circle(int x, int y, int r, int colour);
lucas_favre 11:c00a727f140f 120
lucas_favre 11:c00a727f140f 121 /**
lucas_favre 11:c00a727f140f 122 * Draw a filled circle
lucas_favre 11:c00a727f140f 123 *
lucas_favre 11:c00a727f140f 124 * @param x0,y0 center
lucas_favre 11:c00a727f140f 125 * @param r radius
lucas_favre 11:c00a727f140f 126 * @param color - 1 set pixel, 0 erase pixel
lucas_favre 11:c00a727f140f 127 *
lucas_favre 11:c00a727f140f 128 * Use circle with different radius,
lucas_favre 11:c00a727f140f 129 * Can miss some pixels
lucas_favre 11:c00a727f140f 130 */
lucas_favre 11:c00a727f140f 131 void fillcircle(int x, int y, int r, int colour);
lucas_favre 11:c00a727f140f 132
lucas_favre 11:c00a727f140f 133 /**
lucas_favre 11:c00a727f140f 134 * Draw a 1 pixel line
lucas_favre 11:c00a727f140f 135 *
lucas_favre 11:c00a727f140f 136 * @param x0,y0 start point
lucas_favre 11:c00a727f140f 137 * @param x1,y1 stop point
lucas_favre 11:c00a727f140f 138 * @param color - 1 set pixel, 0 erase pixel
lucas_favre 11:c00a727f140f 139 */
lucas_favre 11:c00a727f140f 140 void line(int x0, int y0, int x1, int y1, int colour);
lucas_favre 11:c00a727f140f 141
lucas_favre 11:c00a727f140f 142 /**
lucas_favre 11:c00a727f140f 143 * Draw a rect
lucas_favre 11:c00a727f140f 144 *
lucas_favre 11:c00a727f140f 145 * @param x0,y0 top left corner
lucas_favre 11:c00a727f140f 146 * @param x1,y1 down right corner
lucas_favre 11:c00a727f140f 147 * @param color - 1 set pixel, 0 erase pixel
lucas_favre 11:c00a727f140f 148 */
lucas_favre 11:c00a727f140f 149 void rect(int x0, int y0, int x1, int y1, int colour);
lucas_favre 11:c00a727f140f 150
lucas_favre 11:c00a727f140f 151 /**
lucas_favre 11:c00a727f140f 152 * Draw a filled rect
lucas_favre 11:c00a727f140f 153 *
lucas_favre 11:c00a727f140f 154 * @param x0,y0 top left corner
lucas_favre 11:c00a727f140f 155 * @param x1,y1 down right corner
lucas_favre 11:c00a727f140f 156 * @param color - 1 set pixel, 0 erase pixel
lucas_favre 11:c00a727f140f 157 */
lucas_favre 11:c00a727f140f 158 void fillrect(int x0, int y0, int x1, int y1, int colour);
lucas_favre 11:c00a727f140f 159
lucas_favre 11:c00a727f140f 160 /**
lucas_favre 11:c00a727f140f 161 * Copy display buffer to LCD
lucas_favre 11:c00a727f140f 162 */
lucas_favre 11:c00a727f140f 163 void copy_to_lcd(void);
lucas_favre 11:c00a727f140f 164
lucas_favre 11:c00a727f140f 165 /**
lucas_favre 11:c00a727f140f 166 * Set the orienation of the screen
lucas_favre 11:c00a727f140f 167 */
lucas_favre 11:c00a727f140f 168
lucas_favre 11:c00a727f140f 169 void set_contrast(unsigned int o);
lucas_favre 11:c00a727f140f 170
lucas_favre 11:c00a727f140f 171 /**
lucas_favre 11:c00a727f140f 172 * Read the contrast level
lucas_favre 11:c00a727f140f 173 */
lucas_favre 11:c00a727f140f 174 unsigned int get_contrast(void);
lucas_favre 11:c00a727f140f 175
lucas_favre 11:c00a727f140f 176 /**
lucas_favre 11:c00a727f140f 177 * Invert the screen
lucas_favre 11:c00a727f140f 178 *
lucas_favre 11:c00a727f140f 179 * @param o = 0 normal, 1 invert
lucas_favre 11:c00a727f140f 180 */
lucas_favre 11:c00a727f140f 181 void invert(unsigned int o);
lucas_favre 11:c00a727f140f 182
lucas_favre 11:c00a727f140f 183 /**
lucas_favre 11:c00a727f140f 184 * Clear the screen
lucas_favre 11:c00a727f140f 185 */
lucas_favre 11:c00a727f140f 186 virtual void cls(void);
lucas_favre 11:c00a727f140f 187
lucas_favre 11:c00a727f140f 188 /**
lucas_favre 11:c00a727f140f 189 * Set the drawing mode
lucas_favre 11:c00a727f140f 190 *
lucas_favre 11:c00a727f140f 191 * @param mode NORMAl or XOR
lucas_favre 11:c00a727f140f 192 */
lucas_favre 11:c00a727f140f 193 void setmode(int mode);
lucas_favre 11:c00a727f140f 194
lucas_favre 11:c00a727f140f 195 virtual int columns(void);
lucas_favre 11:c00a727f140f 196
lucas_favre 11:c00a727f140f 197 /**
lucas_favre 11:c00a727f140f 198 * Calculate the max number of columns.
lucas_favre 11:c00a727f140f 199 * Depends on actual font size
lucas_favre 11:c00a727f140f 200 *
lucas_favre 11:c00a727f140f 201 * @returns max column
lucas_favre 11:c00a727f140f 202 */
lucas_favre 11:c00a727f140f 203 virtual int rows(void);
lucas_favre 11:c00a727f140f 204
lucas_favre 11:c00a727f140f 205 /**
lucas_favre 11:c00a727f140f 206 * Put a char on the screen
lucas_favre 11:c00a727f140f 207 *
lucas_favre 11:c00a727f140f 208 * @param value char to print
lucas_favre 11:c00a727f140f 209 * @returns printed char
lucas_favre 11:c00a727f140f 210 */
lucas_favre 11:c00a727f140f 211 virtual int _putc(int value);
lucas_favre 11:c00a727f140f 212
lucas_favre 11:c00a727f140f 213 /**
lucas_favre 11:c00a727f140f 214 * Draw a character on given position out of the active font to the LCD
lucas_favre 11:c00a727f140f 215 *
lucas_favre 11:c00a727f140f 216 * @param x x-position of char (top left)
lucas_favre 11:c00a727f140f 217 * @param y y-position
lucas_favre 11:c00a727f140f 218 * @param c char to print
lucas_favre 11:c00a727f140f 219 */
lucas_favre 11:c00a727f140f 220 virtual void character(int x, int y, int c);
lucas_favre 11:c00a727f140f 221
lucas_favre 11:c00a727f140f 222 /**
lucas_favre 11:c00a727f140f 223 * Setup cursor position
lucas_favre 11:c00a727f140f 224 *
lucas_favre 11:c00a727f140f 225 * @param x x-position (top left)
lucas_favre 11:c00a727f140f 226 * @param y y-position
lucas_favre 11:c00a727f140f 227 */
lucas_favre 11:c00a727f140f 228 virtual void locate(int x, int y);
lucas_favre 11:c00a727f140f 229
lucas_favre 11:c00a727f140f 230 /**
lucas_favre 11:c00a727f140f 231 * Setup auto update of screen
lucas_favre 11:c00a727f140f 232 *
lucas_favre 11:c00a727f140f 233 * @param up 1 = on , 0 = off
lucas_favre 11:c00a727f140f 234 *
lucas_favre 11:c00a727f140f 235 * if switched off the program has to call copy_to_lcd()
lucas_favre 11:c00a727f140f 236 * to update screen from framebuffer
lucas_favre 11:c00a727f140f 237 */
lucas_favre 11:c00a727f140f 238 void set_auto_up(unsigned int up);
lucas_favre 11:c00a727f140f 239
lucas_favre 11:c00a727f140f 240 /**
lucas_favre 11:c00a727f140f 241 * Get status of the auto update function
lucas_favre 11:c00a727f140f 242 *
lucas_favre 11:c00a727f140f 243 * @returns if auto update is on
lucas_favre 11:c00a727f140f 244 */
lucas_favre 11:c00a727f140f 245 unsigned int get_auto_up(void);
lucas_favre 11:c00a727f140f 246
lucas_favre 11:c00a727f140f 247 /** Vars */
lucas_favre 11:c00a727f140f 248 DigitalOut _rs, _e,_cs,_a0,_rw;
lucas_favre 11:c00a727f140f 249 BusOut _d;
lucas_favre 11:c00a727f140f 250 unsigned char* font;
lucas_favre 11:c00a727f140f 251 unsigned int draw_mode;
lucas_favre 11:c00a727f140f 252
lucas_favre 11:c00a727f140f 253
lucas_favre 11:c00a727f140f 254 /**
lucas_favre 11:c00a727f140f 255 * Select the font to use
lucas_favre 11:c00a727f140f 256 *
lucas_favre 11:c00a727f140f 257 * @param f pointer to font array
lucas_favre 11:c00a727f140f 258 *
lucas_favre 11:c00a727f140f 259 * font array can created with GLCD Font Creator from http://www.mikroe.com
lucas_favre 11:c00a727f140f 260 * you have to add 4 parameter at the beginning of the font array to use:
lucas_favre 11:c00a727f140f 261 * - the number of byte / char
lucas_favre 11:c00a727f140f 262 * - the vertial size in pixel
lucas_favre 11:c00a727f140f 263 * - the horizontal size in pixel
lucas_favre 11:c00a727f140f 264 * - the number of byte per vertical line
lucas_favre 11:c00a727f140f 265 * you also have to change the array to char[]
lucas_favre 11:c00a727f140f 266 */
lucas_favre 11:c00a727f140f 267 void set_font(unsigned char* f);
lucas_favre 11:c00a727f140f 268
lucas_favre 11:c00a727f140f 269 /**
lucas_favre 11:c00a727f140f 270 * Print bitmap to buffer
lucas_favre 11:c00a727f140f 271 *
lucas_favre 11:c00a727f140f 272 * @param bm Bitmap in flash
lucas_favre 11:c00a727f140f 273 * @param x x start
lucas_favre 11:c00a727f140f 274 * @param y y start
lucas_favre 11:c00a727f140f 275 */
lucas_favre 11:c00a727f140f 276 void print_bm(Bitmap bm, int x, int y);
lucas_favre 11:c00a727f140f 277
lucas_favre 11:c00a727f140f 278 void Delay(uint32_t n);
lucas_favre 11:c00a727f140f 279 void Initial_Dispay_Line(unsigned char line);
lucas_favre 11:c00a727f140f 280 void Power_Control(unsigned char vol);
lucas_favre 11:c00a727f140f 281 void Regulor_Resistor_Select(unsigned char r);
lucas_favre 11:c00a727f140f 282 void Set_Contrast_Control_Register(unsigned char mod);
lucas_favre 11:c00a727f140f 283
lucas_favre 11:c00a727f140f 284 protected:
lucas_favre 11:c00a727f140f 285
lucas_favre 11:c00a727f140f 286 /**
lucas_favre 11:c00a727f140f 287 * Draw a horizontal line
lucas_favre 11:c00a727f140f 288 *
lucas_favre 11:c00a727f140f 289 * @param x0 horizontal start
lucas_favre 11:c00a727f140f 290 * @param x1 horizontal stop
lucas_favre 11:c00a727f140f 291 * @param y vertical position
lucas_favre 11:c00a727f140f 292 * @param color - 1 set pixel, 0 erase pixel
lucas_favre 11:c00a727f140f 293 */
lucas_favre 11:c00a727f140f 294 void hline(int x0, int x1, int y, int colour);
lucas_favre 11:c00a727f140f 295
lucas_favre 11:c00a727f140f 296 /**
lucas_favre 11:c00a727f140f 297 * Draw a vertical line
lucas_favre 11:c00a727f140f 298 *
lucas_favre 11:c00a727f140f 299 * @param x horizontal position
lucas_favre 11:c00a727f140f 300 * @param y0 vertical start
lucas_favre 11:c00a727f140f 301 * @param y1 vertical stop
lucas_favre 11:c00a727f140f 302 * @param color - 1 set pixel, 0 erase pixel
lucas_favre 11:c00a727f140f 303 */
lucas_favre 11:c00a727f140f 304 void vline(int y0, int y1, int x, int colour);
lucas_favre 11:c00a727f140f 305
lucas_favre 11:c00a727f140f 306 /**
lucas_favre 11:c00a727f140f 307 * Init the C12832 LCD controller
lucas_favre 11:c00a727f140f 308 */
lucas_favre 11:c00a727f140f 309 void lcd_reset();
lucas_favre 11:c00a727f140f 310
lucas_favre 11:c00a727f140f 311 /**
lucas_favre 11:c00a727f140f 312 * Write data to the LCD controller
lucas_favre 11:c00a727f140f 313 *
lucas_favre 11:c00a727f140f 314 * @param dat data written to LCD controller
lucas_favre 11:c00a727f140f 315 */
lucas_favre 11:c00a727f140f 316 void wr_dat(unsigned char value);
lucas_favre 11:c00a727f140f 317
lucas_favre 11:c00a727f140f 318 /**
lucas_favre 11:c00a727f140f 319 * Write a command the LCD controller
lucas_favre 11:c00a727f140f 320 *
lucas_favre 11:c00a727f140f 321 * @param cmd: command to be written
lucas_favre 11:c00a727f140f 322 */
lucas_favre 11:c00a727f140f 323 void wr_cmd(unsigned char value);
lucas_favre 11:c00a727f140f 324
lucas_favre 11:c00a727f140f 325 void wr_cnt(unsigned char cmd);
lucas_favre 11:c00a727f140f 326
lucas_favre 11:c00a727f140f 327 unsigned int orientation;
lucas_favre 11:c00a727f140f 328 unsigned int char_x;
lucas_favre 11:c00a727f140f 329 unsigned int char_y;
lucas_favre 11:c00a727f140f 330 unsigned char buffer[512];
lucas_favre 11:c00a727f140f 331 unsigned int contrast;
lucas_favre 11:c00a727f140f 332 unsigned int auto_up;
lucas_favre 11:c00a727f140f 333
lucas_favre 11:c00a727f140f 334 };
lucas_favre 11:c00a727f140f 335
lucas_favre 11:c00a727f140f 336
lucas_favre 11:c00a727f140f 337
lucas_favre 11:c00a727f140f 338
lucas_favre 11:c00a727f140f 339 #endif
lucas_favre 11:c00a727f140f 340