TINF_Stopwatch

Committer:
Wizo
Date:
Thu Nov 15 18:09:41 2018 +0000
Revision:
0:ab787614c0d8
TINF_Stopwatch

Who changed what in which revision?

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