Alan Ffrench / Mbed 2 deprecated Experiment_2_5

Dependencies:   mbed

Committer:
alanffrench
Date:
Wed Jul 29 18:51:38 2020 +0000
Revision:
0:52468b19aa21
Threads

Who changed what in which revision?

UserRevisionLine numberNew contents of line
alanffrench 0:52468b19aa21 1 /* mbed library for the mbed Lab Board 128*32 pixel LCD
alanffrench 0:52468b19aa21 2 * use C12832 controller
alanffrench 0:52468b19aa21 3 * Copyright (c) 2012 Peter Drescher - DC2PD
alanffrench 0:52468b19aa21 4 * Released under the MIT License: http://mbed.org/license/mit
alanffrench 0:52468b19aa21 5 *
alanffrench 0:52468b19aa21 6 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
alanffrench 0:52468b19aa21 7 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
alanffrench 0:52468b19aa21 8 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
alanffrench 0:52468b19aa21 9 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
alanffrench 0:52468b19aa21 10 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
alanffrench 0:52468b19aa21 11 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
alanffrench 0:52468b19aa21 12 * THE SOFTWARE.
alanffrench 0:52468b19aa21 13 */
alanffrench 0:52468b19aa21 14
alanffrench 0:52468b19aa21 15 #ifndef C12832_H
alanffrench 0:52468b19aa21 16 #define C12832_H
alanffrench 0:52468b19aa21 17
alanffrench 0:52468b19aa21 18 #include "mbed.h"
alanffrench 0:52468b19aa21 19 #include "GraphicsDisplay.h"
alanffrench 0:52468b19aa21 20
alanffrench 0:52468b19aa21 21
alanffrench 0:52468b19aa21 22 /** optional Defines :
alanffrench 0:52468b19aa21 23 * #define debug_lcd 1 enable infos to PC_USB
alanffrench 0:52468b19aa21 24 */
alanffrench 0:52468b19aa21 25
alanffrench 0:52468b19aa21 26 // some defines for the DMA use
alanffrench 0:52468b19aa21 27 #define DMA_CHANNEL_ENABLE 1
alanffrench 0:52468b19aa21 28 #define DMA_TRANSFER_TYPE_M2P (1UL << 11)
alanffrench 0:52468b19aa21 29 #define DMA_CHANNEL_TCIE (1UL << 31)
alanffrench 0:52468b19aa21 30 #define DMA_CHANNEL_SRC_INC (1UL << 26)
alanffrench 0:52468b19aa21 31 #define DMA_MASK_IE (1UL << 14)
alanffrench 0:52468b19aa21 32 #define DMA_MASK_ITC (1UL << 15)
alanffrench 0:52468b19aa21 33 #define DMA_SSP1_TX (1UL << 2)
alanffrench 0:52468b19aa21 34 #define DMA_SSP0_TX (0)
alanffrench 0:52468b19aa21 35 #define DMA_DEST_SSP1_TX (2UL << 6)
alanffrench 0:52468b19aa21 36 #define DMA_DEST_SSP0_TX (0UL << 6)
alanffrench 0:52468b19aa21 37
alanffrench 0:52468b19aa21 38 /** Draw mode
alanffrench 0:52468b19aa21 39 * NORMAl
alanffrench 0:52468b19aa21 40 * XOR set pixel by xor the screen
alanffrench 0:52468b19aa21 41 */
alanffrench 0:52468b19aa21 42 enum {NORMAL,XOR};
alanffrench 0:52468b19aa21 43
alanffrench 0:52468b19aa21 44 class C12832_LCD : public GraphicsDisplay
alanffrench 0:52468b19aa21 45 {
alanffrench 0:52468b19aa21 46 public:
alanffrench 0:52468b19aa21 47 /** Create a C12832_LCD object connected to SPI1
alanffrench 0:52468b19aa21 48 *
alanffrench 0:52468b19aa21 49 */
alanffrench 0:52468b19aa21 50
alanffrench 0:52468b19aa21 51 C12832_LCD(const char* name = "LCD");
alanffrench 0:52468b19aa21 52
alanffrench 0:52468b19aa21 53 /** Get the width of the screen in pixel
alanffrench 0:52468b19aa21 54 *
alanffrench 0:52468b19aa21 55 * @param
alanffrench 0:52468b19aa21 56 * @returns width of screen in pixel
alanffrench 0:52468b19aa21 57 *
alanffrench 0:52468b19aa21 58 */
alanffrench 0:52468b19aa21 59 virtual int width();
alanffrench 0:52468b19aa21 60
alanffrench 0:52468b19aa21 61 /** Get the height of the screen in pixel
alanffrench 0:52468b19aa21 62 *
alanffrench 0:52468b19aa21 63 * @returns height of screen in pixel
alanffrench 0:52468b19aa21 64 *
alanffrench 0:52468b19aa21 65 */
alanffrench 0:52468b19aa21 66 virtual int height();
alanffrench 0:52468b19aa21 67
alanffrench 0:52468b19aa21 68 /** Draw a pixel at x,y black or white
alanffrench 0:52468b19aa21 69 *
alanffrench 0:52468b19aa21 70 * @param x horizontal position
alanffrench 0:52468b19aa21 71 * @param y vertical position
alanffrench 0:52468b19aa21 72 * @param colour ,1 set pixel ,0 erase pixel
alanffrench 0:52468b19aa21 73 */
alanffrench 0:52468b19aa21 74 virtual void pixel(int x, int y,int colour);
alanffrench 0:52468b19aa21 75
alanffrench 0:52468b19aa21 76 /** draw a circle
alanffrench 0:52468b19aa21 77 *
alanffrench 0:52468b19aa21 78 * @param x0,y0 center
alanffrench 0:52468b19aa21 79 * @param r radius
alanffrench 0:52468b19aa21 80 * @param colour ,1 set pixel ,0 erase pixel
alanffrench 0:52468b19aa21 81 *
alanffrench 0:52468b19aa21 82 */
alanffrench 0:52468b19aa21 83 void circle(int x, int y, int r, int colour);
alanffrench 0:52468b19aa21 84
alanffrench 0:52468b19aa21 85 /** draw a filled circle
alanffrench 0:52468b19aa21 86 *
alanffrench 0:52468b19aa21 87 * @param x0,y0 center
alanffrench 0:52468b19aa21 88 * @param r radius
alanffrench 0:52468b19aa21 89 * @param color ,1 set pixel ,0 erase pixel
alanffrench 0:52468b19aa21 90 *
alanffrench 0:52468b19aa21 91 * use circle with different radius,
alanffrench 0:52468b19aa21 92 * can miss some pixel
alanffrench 0:52468b19aa21 93 */
alanffrench 0:52468b19aa21 94 void fillcircle(int x, int y, int r, int colour);
alanffrench 0:52468b19aa21 95
alanffrench 0:52468b19aa21 96 /** draw a 1 pixel line
alanffrench 0:52468b19aa21 97 *
alanffrench 0:52468b19aa21 98 * @param x0,y0 start point
alanffrench 0:52468b19aa21 99 * @param x1,y1 stop point
alanffrench 0:52468b19aa21 100 * @param color ,1 set pixel ,0 erase pixel
alanffrench 0:52468b19aa21 101 *
alanffrench 0:52468b19aa21 102 */
alanffrench 0:52468b19aa21 103 void line(int x0, int y0, int x1, int y1, int colour);
alanffrench 0:52468b19aa21 104
alanffrench 0:52468b19aa21 105 /** draw a rect
alanffrench 0:52468b19aa21 106 *
alanffrench 0:52468b19aa21 107 * @param x0,y0 top left corner
alanffrench 0:52468b19aa21 108 * @param x1,y1 down right corner
alanffrench 0:52468b19aa21 109 * @param color 1 set pixel ,0 erase pixel
alanffrench 0:52468b19aa21 110 * *
alanffrench 0:52468b19aa21 111 */
alanffrench 0:52468b19aa21 112 void rect(int x0, int y0, int x1, int y1, int colour);
alanffrench 0:52468b19aa21 113
alanffrench 0:52468b19aa21 114 /** draw a filled rect
alanffrench 0:52468b19aa21 115 *
alanffrench 0:52468b19aa21 116 * @param x0,y0 top left corner
alanffrench 0:52468b19aa21 117 * @param x1,y1 down right corner
alanffrench 0:52468b19aa21 118 * @param color 1 set pixel ,0 erase pixel
alanffrench 0:52468b19aa21 119 *
alanffrench 0:52468b19aa21 120 */
alanffrench 0:52468b19aa21 121 void fillrect(int x0, int y0, int x1, int y1, int colour);
alanffrench 0:52468b19aa21 122
alanffrench 0:52468b19aa21 123 /** copy display buffer to lcd
alanffrench 0:52468b19aa21 124 *
alanffrench 0:52468b19aa21 125 */
alanffrench 0:52468b19aa21 126
alanffrench 0:52468b19aa21 127 void copy_to_lcd(void);
alanffrench 0:52468b19aa21 128
alanffrench 0:52468b19aa21 129 /** set the orienation of the screen
alanffrench 0:52468b19aa21 130 *
alanffrench 0:52468b19aa21 131 */
alanffrench 0:52468b19aa21 132
alanffrench 0:52468b19aa21 133 //void set_orientation(unsigned int o);
alanffrench 0:52468b19aa21 134
alanffrench 0:52468b19aa21 135 /** set the contrast of the screen
alanffrench 0:52468b19aa21 136 *
alanffrench 0:52468b19aa21 137 * @param o contrast 0-63
alanffrench 0:52468b19aa21 138 */
alanffrench 0:52468b19aa21 139
alanffrench 0:52468b19aa21 140 void set_contrast(unsigned int o);
alanffrench 0:52468b19aa21 141
alanffrench 0:52468b19aa21 142 /** read the contrast level
alanffrench 0:52468b19aa21 143 *
alanffrench 0:52468b19aa21 144 */
alanffrench 0:52468b19aa21 145 unsigned int get_contrast(void);
alanffrench 0:52468b19aa21 146
alanffrench 0:52468b19aa21 147
alanffrench 0:52468b19aa21 148
alanffrench 0:52468b19aa21 149 /** invert the screen
alanffrench 0:52468b19aa21 150 *
alanffrench 0:52468b19aa21 151 * @param o = 0 normal, 1 invert
alanffrench 0:52468b19aa21 152 */
alanffrench 0:52468b19aa21 153 void invert(unsigned int o);
alanffrench 0:52468b19aa21 154
alanffrench 0:52468b19aa21 155 /** clear the screen
alanffrench 0:52468b19aa21 156 *
alanffrench 0:52468b19aa21 157 */
alanffrench 0:52468b19aa21 158 virtual void cls(void);
alanffrench 0:52468b19aa21 159
alanffrench 0:52468b19aa21 160 /** set the drawing mode
alanffrench 0:52468b19aa21 161 *
alanffrench 0:52468b19aa21 162 * @param mode NORMAl or XOR
alanffrench 0:52468b19aa21 163 */
alanffrench 0:52468b19aa21 164
alanffrench 0:52468b19aa21 165 void setmode(int mode);
alanffrench 0:52468b19aa21 166
alanffrench 0:52468b19aa21 167 int columns(void);
alanffrench 0:52468b19aa21 168
alanffrench 0:52468b19aa21 169 /** calculate the max number of columns
alanffrench 0:52468b19aa21 170 *
alanffrench 0:52468b19aa21 171 * @returns max column
alanffrench 0:52468b19aa21 172 * depends on actual font size
alanffrench 0:52468b19aa21 173 *
alanffrench 0:52468b19aa21 174 */
alanffrench 0:52468b19aa21 175 int rows(void);
alanffrench 0:52468b19aa21 176
alanffrench 0:52468b19aa21 177 /** put a char on the screen
alanffrench 0:52468b19aa21 178 *
alanffrench 0:52468b19aa21 179 * @param value char to print
alanffrench 0:52468b19aa21 180 * @returns printed char
alanffrench 0:52468b19aa21 181 *
alanffrench 0:52468b19aa21 182 */
alanffrench 0:52468b19aa21 183 int _putc(int value);
alanffrench 0:52468b19aa21 184
alanffrench 0:52468b19aa21 185 /** draw a character on given position out of the active font to the LCD
alanffrench 0:52468b19aa21 186 *
alanffrench 0:52468b19aa21 187 * @param x x-position of char (top left)
alanffrench 0:52468b19aa21 188 * @param y y-position
alanffrench 0:52468b19aa21 189 * @param c char to print
alanffrench 0:52468b19aa21 190 *
alanffrench 0:52468b19aa21 191 */
alanffrench 0:52468b19aa21 192 virtual void character(int x, int y, int c);
alanffrench 0:52468b19aa21 193
alanffrench 0:52468b19aa21 194 /** setup cursor position
alanffrench 0:52468b19aa21 195 *
alanffrench 0:52468b19aa21 196 * @param x x-position (top left)
alanffrench 0:52468b19aa21 197 * @param y y-position
alanffrench 0:52468b19aa21 198 */
alanffrench 0:52468b19aa21 199 void locate(int x, int y);
alanffrench 0:52468b19aa21 200
alanffrench 0:52468b19aa21 201 /** setup auto update of screen
alanffrench 0:52468b19aa21 202 *
alanffrench 0:52468b19aa21 203 * @param up 1 = on , 0 = off
alanffrench 0:52468b19aa21 204 * if switched off the program has to call copy_to_lcd()
alanffrench 0:52468b19aa21 205 * to update screen from framebuffer
alanffrench 0:52468b19aa21 206 */
alanffrench 0:52468b19aa21 207 void C12832_LCD::set_auto_up(unsigned int up);
alanffrench 0:52468b19aa21 208
alanffrench 0:52468b19aa21 209 /** get status of the auto update function
alanffrench 0:52468b19aa21 210 *
alanffrench 0:52468b19aa21 211 * @returns if auto update is on
alanffrench 0:52468b19aa21 212 */
alanffrench 0:52468b19aa21 213 unsigned int C12832_LCD::get_auto_up(void);
alanffrench 0:52468b19aa21 214
alanffrench 0:52468b19aa21 215 /** Vars */
alanffrench 0:52468b19aa21 216 SPI _spi;
alanffrench 0:52468b19aa21 217 DigitalOut _reset;
alanffrench 0:52468b19aa21 218 DigitalOut _A0;
alanffrench 0:52468b19aa21 219 DigitalOut _CS;
alanffrench 0:52468b19aa21 220 unsigned char* font;
alanffrench 0:52468b19aa21 221 unsigned int draw_mode;
alanffrench 0:52468b19aa21 222
alanffrench 0:52468b19aa21 223
alanffrench 0:52468b19aa21 224 /** select the font to use
alanffrench 0:52468b19aa21 225 *
alanffrench 0:52468b19aa21 226 * @param f pointer to font array
alanffrench 0:52468b19aa21 227 *
alanffrench 0:52468b19aa21 228 * font array can created with GLCD Font Creator from http://www.mikroe.com
alanffrench 0:52468b19aa21 229 * you have to add 4 parameter at the beginning of the font array to use:
alanffrench 0:52468b19aa21 230 * - the number of byte / char
alanffrench 0:52468b19aa21 231 * - the vertial size in pixel
alanffrench 0:52468b19aa21 232 * - the horizontal size in pixel
alanffrench 0:52468b19aa21 233 * - the number of byte per vertical line
alanffrench 0:52468b19aa21 234 * you also have to change the array to char[]
alanffrench 0:52468b19aa21 235 *
alanffrench 0:52468b19aa21 236 */
alanffrench 0:52468b19aa21 237 void set_font(unsigned char* f);
alanffrench 0:52468b19aa21 238
alanffrench 0:52468b19aa21 239
alanffrench 0:52468b19aa21 240 protected:
alanffrench 0:52468b19aa21 241
alanffrench 0:52468b19aa21 242 /** draw a horizontal line
alanffrench 0:52468b19aa21 243 *
alanffrench 0:52468b19aa21 244 * @param x0 horizontal start
alanffrench 0:52468b19aa21 245 * @param x1 horizontal stop
alanffrench 0:52468b19aa21 246 * @param y vertical position
alanffrench 0:52468b19aa21 247 * @param ,1 set pixel ,0 erase pixel
alanffrench 0:52468b19aa21 248 *
alanffrench 0:52468b19aa21 249 */
alanffrench 0:52468b19aa21 250 void hline(int x0, int x1, int y, int colour);
alanffrench 0:52468b19aa21 251
alanffrench 0:52468b19aa21 252 /** draw a vertical line
alanffrench 0:52468b19aa21 253 *
alanffrench 0:52468b19aa21 254 * @param x horizontal position
alanffrench 0:52468b19aa21 255 * @param y0 vertical start
alanffrench 0:52468b19aa21 256 * @param y1 vertical stop
alanffrench 0:52468b19aa21 257 * @param ,1 set pixel ,0 erase pixel
alanffrench 0:52468b19aa21 258 */
alanffrench 0:52468b19aa21 259 void vline(int y0, int y1, int x, int colour);
alanffrench 0:52468b19aa21 260
alanffrench 0:52468b19aa21 261 /** Init the C12832 LCD controller
alanffrench 0:52468b19aa21 262 *
alanffrench 0:52468b19aa21 263 */
alanffrench 0:52468b19aa21 264 void lcd_reset();
alanffrench 0:52468b19aa21 265
alanffrench 0:52468b19aa21 266 /** Write data to the LCD controller
alanffrench 0:52468b19aa21 267 *
alanffrench 0:52468b19aa21 268 * @param dat data written to LCD controller
alanffrench 0:52468b19aa21 269 *
alanffrench 0:52468b19aa21 270 */
alanffrench 0:52468b19aa21 271 void wr_dat(unsigned char value);
alanffrench 0:52468b19aa21 272
alanffrench 0:52468b19aa21 273 /** Write a command the LCD controller
alanffrench 0:52468b19aa21 274 *
alanffrench 0:52468b19aa21 275 * @param cmd: command to be written
alanffrench 0:52468b19aa21 276 *
alanffrench 0:52468b19aa21 277 */
alanffrench 0:52468b19aa21 278 void wr_cmd(unsigned char value);
alanffrench 0:52468b19aa21 279
alanffrench 0:52468b19aa21 280 void wr_cnt(unsigned char cmd);
alanffrench 0:52468b19aa21 281
alanffrench 0:52468b19aa21 282 unsigned int orientation;
alanffrench 0:52468b19aa21 283 unsigned int char_x;
alanffrench 0:52468b19aa21 284 unsigned int char_y;
alanffrench 0:52468b19aa21 285 unsigned char buffer[512];
alanffrench 0:52468b19aa21 286 unsigned int contrast;
alanffrench 0:52468b19aa21 287 unsigned int auto_up;
alanffrench 0:52468b19aa21 288
alanffrench 0:52468b19aa21 289 };
alanffrench 0:52468b19aa21 290
alanffrench 0:52468b19aa21 291
alanffrench 0:52468b19aa21 292
alanffrench 0:52468b19aa21 293
alanffrench 0:52468b19aa21 294 #endif