new library for the EADOG LCD display from electronic assembly
EADOG.h
- Committer:
- sstaub
- Date:
- 2016-09-22
- Revision:
- 1:03129e57a003
File content as of revision 1:03129e57a003:
/* mbed library for the EA DOGM128 (128x64), DOGM132 (132x32), DOGL128 (128x64) pixel LCD * use ST7565R controller * Copyright (c) 2016 Stefan Staub * Released under the MIT License: http://mbed.org/license/mit * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef EADOG_H #define EADOG_H #include "mbed.h" /** display type * * @param DOGM128 128x64 2.3'' * @param DOGM132 132x32 2.1'' * @param DOGL128 128x64 2.8'' * */ enum {DOGM128, DOGM132, DOGL128}; /** update modes * * @param AUTO default * @param MANUELL * */ enum {MANUAL, AUTO}; /** display settings * * @param ON display on, default * @param OFF display off * @param SLEEP sets the display to sleep mode * @param DEFAULT default * @param INVERT inverts display * @param BOTTOM default 0° * @param TOPVIEW rotate the screento 180° * */ enum {ON, OFF, SLEEP, DEFAULT, INVERT, BOTTOM, TOPVIEW, CONTRAST, RST}; /** bitmap * */ struct Bitmap { int xSize; int ySize; int byte_in_Line; char *data; }; /** Library for the EADOG LCD displays from electronic assembly * * Example for EA DOGM132x-5 with STM32F401RE Nucleo * @code * // display test for EA DOGM132x-5 with STM32F401RE Nucleo * // sstaub(c)2016 * * #include "mbed.h" * #include "EADOG.h" * #include "Small_7.h" * #include "Fonts/ArialR12x14.h" * * // DOGM132x-5 Wide Range * // Pins for STM32F401RE Nucleo * * // DOG Pin Purpose ST Pin * // 40 CS PB_6(D10) * // 39 Reset PC_7(D9) * // 38 A0 PA_9(D8) * // 37 SCK PA_5(D13, SCK) * // 36 MOSI PA_7(D11, MOSI) * // 35 VDD 3.3V * // 34 VDD2 3.3V * // 33 VSS GND * // 32 VOUT 1uF -> GND * // 31 CAP3P 1uF -> CAP1N * // 30 CAP1N 1uF -> CAP1P * // 29 CAP1P * // 28 CAP2P 1uF -> CAP2N * // 27 CAP2N * // 26 VSS GND * // 25 V4 1uF -> GND * // 24 V3 1uF -> GND * // 23 V2 1uF -> GND * // 22 V1 1uF -> GND * // 21 V0 1uF -> GND * * * EADOG lcd(PA_7, PA_5, PC_7, PA_9, PB_6, DOGM132); // MOSI, SCK, Reset, A0, CS * * int main() { * // create logo * lcd.update(MANUAL); * lcd.rectangle(0, 0, 131, 31, 1); * lcd.fillrect(2, 2, 4, 4, 1); * lcd.fillrect(2, 27, 4, 29, 1); * lcd.fillrect(61, 2, 63, 4, 1); * lcd.fillrect(61, 27, 63, 29, 1); * lcd.line(65, 0, 65, 31, 1); * lcd.circle(33, 15, 10, 1); * lcd.circle(33, 15, 6, 1); * lcd.fillcircle(33, 15, 3, 1); * lcd.update(); * lcd.update(AUTO); * // create description text * lcd.locate(70, 1); * lcd.font((unsigned char*)ArialR12x14); * lcd.printf("mbed"); * lcd.locate(70, 13); * lcd.font((unsigned char*)Small_7); * lcd.printf("EA"); * lcd.locate(70, 22); * lcd.printf("DOGM132x-5"); * * wait(1); * lcd.display(CONTRAST, 16); // contrast low * wait(1); * lcd.display(CONTRAST, 40); // contrast high * wait(1); * lcd.display(CONTRAST); // contrast default * wait(1); * lcd.display(OFF); // display off * wait(1); * lcd.display(ON); // display on * wait(1); * lcd.display(SLEEP); // display sleep * wait(1); * lcd.display(ON); // display wake up * * while(1) { // main loop * lcd.display(INVERT); // display inverted * lcd.display(BOTTOM); // display normal orientation * wait(2); * lcd.display(DEFAULT); // display * lcd.display(TOPVIEW); // display rotated * wait(2); * } * } * @endcode */ class EADOG : public Stream { public: /** create a EADOG object connected to SPI * * @param mosi pinname * @param sck pinname * @param reset pinname * @param a0 pinname * @param cs pinname * */ EADOG(PinName mosi, PinName sck, PinName reset, PinName a0, PinName cs, uint8_t type); /** draw a pixel in buffer at x, y black or white * * @param x horizontal position * @param y vertical position * @param colour 1 set pixel, 0 erase pixel * there is no update, it writes the pixel only in the buffer */ void pixel(int x, int y, uint8_t colour); /** draw a single point * * @param x horizontal position * @param y vertical position * @param colour 1 set pixel, 0 erase pixel * */ void point(int x, int y, uint8_t colour); /** draw a 1 pixel line * * @param x0,y0 start point * @param x1,y1 end point * @param color 1 set pixel, 0 erase pixel * */ void line(int x0, int y0, int x1, int y1, uint8_t colour); /** draw a rect * * @param x0,y0 top left corner * @param x1,y1 down right corner * @param color 1 set pixel, 0 erase pixel * */ void rectangle(int x0, int y0, int x1, int y1, uint8_t colour); /** draw a filled rect * * @param x0,y0 top left corner * @param x1,y1 down right corner * @param color 1 set pixel, 0 erase pixel * */ void fillrect(int x0, int y0, int x1, int y1, uint8_t colour); /** draw a rounded rect * * @param x0,y0 top left corner * @param x1,y1 down right corner * @param rnd radius of the rounding * @param color 1 set pixel, 0 erase pixel * */ void roundrect(int x0, int y0, int x1, int y1, int rnd, uint8_t colour); /** draw a filled rounded rect * * @param x0,y0 top left corner * @param x1,y1 down right corner * @param rnd radius of the rounding * @param color 1 set pixel, 0 erase pixel * */ void fillrrect(int x0, int y0, int x1, int y1, int rnd, uint8_t colour); /** draw a circle * * @param x0,y0 center * @param r radius * @param colour 1 set pixel, 0 erase pixel * */ void circle(int x, int y, int r, uint8_t colour); /** draw a filled circle * * @param x0,y0 center * @param r radius * @param color 1 set pixel, 0 erase pixel * * use circle with different radius, * can miss some pixel * */ void fillcircle(int x, int y, int r, uint8_t colour); /** update copy display buffer to lcd * * @param AUTO set update mode to auto, default * @param MANUELL the update function must manually set * update() copy display buffer to lcd */ void update(); void update(uint8_t mode); /** display functions * * @param display ON switch display on, or wake up from sleep * @param display OFF set display off * @param display SLEEP set display off and to sleep mode * @param display BOTTOM (default) set display orientation 0° * @param display TOPVIEW draw display oriention to 180° * @param display INVERT invert the pixels * @param display DEFAULT normal pixel display * @param display CONTRAST set display contrast to default * */ void display(uint8_t display); /** display functions * * @param display CONTRAST set display contrast with value, * @param value sets display contrast 0 - 63, default 31 * */ void display(uint8_t display, uint8_t value); /** clear the screen * */ void cls(); /** draw a character on given position out of the active font to the LCD * * @param x x-position of char (top left) * @param y y-position * @param c char to print * */ void character(uint8_t x, uint8_t y, uint8_t c); /** set top left position of char/printf * * @param x x-position * @param y y-position * */ void locate(uint8_t x, uint8_t y); /** select the font to use * * @param f pointer to font array * * font array can created with GLCD Font Creator from http://www.mikroe.com * you have to add 4 parameter at the beginning of the font array to use: * - the number of byte / char * - the vertial size in pixel * - the horizontal size in pixel * - the number of byte per vertical line * you also have to change the array to char[] * @code * lcd.font((unsigned char*)Small_7); * @endcode */ void font(uint8_t *f); /** print bitmap to buffer * * @param bm Bitmap in flash * @param x x start * @param y y start * */ void bitmap(Bitmap bm, int x, int y); // declarations SPI _spi; DigitalOut _reset; DigitalOut _a0; DigitalOut _cs; protected: /** stream class, put a char on the screen * * @param value char to print * @returns printed char * */ virtual int _putc(int value); /** stream class, dummy * */ virtual int _getc(); /** init the DOGM132 LCD controller * */ void init(); //Init the ST7565R LCD controller /** write data to the LCD controller * * @param dat data written to LCD controller * */ void write_data(uint8_t data); // Write data to the LCD controller /** Write a command the LCD controller * * @param cmd command to be written * */ void write_command(uint8_t command); // Write a command the LCD controller // Variables uint8_t *font_buffer; uint8_t char_x; uint8_t char_y; uint8_t auto_update; uint8_t width; uint8_t height; uint8_t _type; uint8_t *graphic_buffer; uint32_t graphic_buffer_size; }; #endif