SToppuhr

Committer:
Lippi
Date:
Thu Dec 17 20:11:56 2015 +0000
Revision:
0:862a4d510e20
Tinf Stoppuhr

Who changed what in which revision?

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