LPC General Purpose Shield (OM13082) LCD module library

Dependents:   OM13082-LCD OM13082-test LPCXpresso4337_OM13082_test lpc4337_acc_demo ... more

Fork of KT7567 by Toyomasa Watarai

Committer:
MACRUM
Date:
Thu Jul 30 01:08:10 2015 +0000
Revision:
18:743aff4786ba
Parent:
K7567.h@17:6153719b6d99
Corrected class/library naming

Who changed what in which revision?

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