SSD1306 LCD 96x16 model
Dependents: testSoftware8_alles_display
Fork of ssd1306_library by
ssd1306.h@0:3d84b3bfb794, 2017-10-25 (annotated)
- Committer:
- rodriguj
- Date:
- Wed Oct 25 16:28:07 2017 +0200
- Revision:
- 0:3d84b3bfb794
- Child:
- 1:c5cf4ca5939f
Initial commit.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
rodriguj | 0:3d84b3bfb794 | 1 | /* |
rodriguj | 0:3d84b3bfb794 | 2 | * ssd1306.cpp |
rodriguj | 0:3d84b3bfb794 | 3 | * |
rodriguj | 0:3d84b3bfb794 | 4 | * Created on: 20 oct. 2017 |
rodriguj | 0:3d84b3bfb794 | 5 | * Author: rodriguj |
rodriguj | 0:3d84b3bfb794 | 6 | */ |
rodriguj | 0:3d84b3bfb794 | 7 | #ifndef MBED_SSD1306_LIBRARY |
rodriguj | 0:3d84b3bfb794 | 8 | #define MBED_SSD1306_LIBRARY |
rodriguj | 0:3d84b3bfb794 | 9 | |
rodriguj | 0:3d84b3bfb794 | 10 | #include "mbed.h" |
rodriguj | 0:3d84b3bfb794 | 11 | |
rodriguj | 0:3d84b3bfb794 | 12 | #define IS_COMMAND 0x00 |
rodriguj | 0:3d84b3bfb794 | 13 | #define IS_DATA 0x40 |
rodriguj | 0:3d84b3bfb794 | 14 | #define IS_NOT_LAST 0x80 |
rodriguj | 0:3d84b3bfb794 | 15 | #define IS_LAST 0x00 |
rodriguj | 0:3d84b3bfb794 | 16 | |
rodriguj | 0:3d84b3bfb794 | 17 | #define SSD1306_SETCONTRAST 0x81 |
rodriguj | 0:3d84b3bfb794 | 18 | #define SSD1306_DISPLAYALLON_RESUME 0xA4 |
rodriguj | 0:3d84b3bfb794 | 19 | #define SSD1306_DISPLAYALLON 0xA5 |
rodriguj | 0:3d84b3bfb794 | 20 | #define SSD1306_NORMALDISPLAY 0xA6 |
rodriguj | 0:3d84b3bfb794 | 21 | #define SSD1306_INVERTDISPLAY 0xA7 |
rodriguj | 0:3d84b3bfb794 | 22 | #define SSD1306_DISPLAYOFF 0xAE |
rodriguj | 0:3d84b3bfb794 | 23 | #define SSD1306_DISPLAYON 0xAF |
rodriguj | 0:3d84b3bfb794 | 24 | |
rodriguj | 0:3d84b3bfb794 | 25 | #define SSD1306_SETDISPLAYOFFSET 0xD3 |
rodriguj | 0:3d84b3bfb794 | 26 | #define SSD1306_SETCOMPINS 0xDA |
rodriguj | 0:3d84b3bfb794 | 27 | |
rodriguj | 0:3d84b3bfb794 | 28 | #define SSD1306_SETVCOMDETECT 0xDB |
rodriguj | 0:3d84b3bfb794 | 29 | |
rodriguj | 0:3d84b3bfb794 | 30 | #define SSD1306_SETDISPLAYCLOCKDIV 0xD5 |
rodriguj | 0:3d84b3bfb794 | 31 | #define SSD1306_SETPRECHARGE 0xD9 |
rodriguj | 0:3d84b3bfb794 | 32 | |
rodriguj | 0:3d84b3bfb794 | 33 | #define SSD1306_SETMULTIPLEX 0xA8 |
rodriguj | 0:3d84b3bfb794 | 34 | |
rodriguj | 0:3d84b3bfb794 | 35 | #define SSD1306_SETLOWCOLUMN 0x00 |
rodriguj | 0:3d84b3bfb794 | 36 | #define SSD1306_SETHIGHCOLUMN 0x10 |
rodriguj | 0:3d84b3bfb794 | 37 | |
rodriguj | 0:3d84b3bfb794 | 38 | #define SSD1306_SETSTARTLINE 0x40 |
rodriguj | 0:3d84b3bfb794 | 39 | |
rodriguj | 0:3d84b3bfb794 | 40 | #define SSD1306_MEMORYMODE 0x20 |
rodriguj | 0:3d84b3bfb794 | 41 | |
rodriguj | 0:3d84b3bfb794 | 42 | #define SSD1306_COMSCANINC 0xC0 |
rodriguj | 0:3d84b3bfb794 | 43 | #define SSD1306_COMSCANDEC 0xC8 |
rodriguj | 0:3d84b3bfb794 | 44 | |
rodriguj | 0:3d84b3bfb794 | 45 | #define SSD1306_SEGREMAP 0xA0 |
rodriguj | 0:3d84b3bfb794 | 46 | |
rodriguj | 0:3d84b3bfb794 | 47 | #define SSD1306_CHARGEPUMP 0x8D |
rodriguj | 0:3d84b3bfb794 | 48 | |
rodriguj | 0:3d84b3bfb794 | 49 | #define SSD1306_EXTERNALVCC 0x1 |
rodriguj | 0:3d84b3bfb794 | 50 | #define SSD1306_SWITCHCAPVCC 0x2 |
rodriguj | 0:3d84b3bfb794 | 51 | |
rodriguj | 0:3d84b3bfb794 | 52 | // Scrolling #defines |
rodriguj | 0:3d84b3bfb794 | 53 | #define SSD1306_ACTIVATE_SCROLL 0x2F |
rodriguj | 0:3d84b3bfb794 | 54 | #define SSD1306_DEACTIVATE_SCROLL 0x2E |
rodriguj | 0:3d84b3bfb794 | 55 | #define SSD1306_SET_VERTICAL_SCROLL_AREA 0xA3 |
rodriguj | 0:3d84b3bfb794 | 56 | #define SSD1306_RIGHT_HORIZONTAL_SCROLL 0x26 |
rodriguj | 0:3d84b3bfb794 | 57 | #define SSD1306_LEFT_HORIZONTAL_SCROLL 0x27 |
rodriguj | 0:3d84b3bfb794 | 58 | #define SSD1306_VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL 0x29 |
rodriguj | 0:3d84b3bfb794 | 59 | #define SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL 0x2A |
rodriguj | 0:3d84b3bfb794 | 60 | |
rodriguj | 0:3d84b3bfb794 | 61 | class SSD1306 : private NonCopyable<SSD1306> { |
rodriguj | 0:3d84b3bfb794 | 62 | |
rodriguj | 0:3d84b3bfb794 | 63 | public: |
rodriguj | 0:3d84b3bfb794 | 64 | enum PlotStyle |
rodriguj | 0:3d84b3bfb794 | 65 | { |
rodriguj | 0:3d84b3bfb794 | 66 | Normal, |
rodriguj | 0:3d84b3bfb794 | 67 | Inverse, |
rodriguj | 0:3d84b3bfb794 | 68 | Xor |
rodriguj | 0:3d84b3bfb794 | 69 | }; |
rodriguj | 0:3d84b3bfb794 | 70 | |
rodriguj | 0:3d84b3bfb794 | 71 | enum I2CSpeed |
rodriguj | 0:3d84b3bfb794 | 72 | { |
rodriguj | 0:3d84b3bfb794 | 73 | Low, |
rodriguj | 0:3d84b3bfb794 | 74 | Medium, |
rodriguj | 0:3d84b3bfb794 | 75 | Fast |
rodriguj | 0:3d84b3bfb794 | 76 | }; |
rodriguj | 0:3d84b3bfb794 | 77 | |
rodriguj | 0:3d84b3bfb794 | 78 | /** Crea una interfaz al display OLED usando el bus I2C |
rodriguj | 0:3d84b3bfb794 | 79 | * |
rodriguj | 0:3d84b3bfb794 | 80 | * @param sda I2C data line pin |
rodriguj | 0:3d84b3bfb794 | 81 | * @param scl I2C clock line pin |
rodriguj | 0:3d84b3bfb794 | 82 | */ |
rodriguj | 0:3d84b3bfb794 | 83 | SSD1306 (PinName sda, PinName scl); |
rodriguj | 0:3d84b3bfb794 | 84 | |
rodriguj | 0:3d84b3bfb794 | 85 | /** Set the frequency of the I2C interface |
rodriguj | 0:3d84b3bfb794 | 86 | * |
rodriguj | 0:3d84b3bfb794 | 87 | * @param hz The bus frequency in hertz |
rodriguj | 0:3d84b3bfb794 | 88 | */ |
rodriguj | 0:3d84b3bfb794 | 89 | void speed (I2CSpeed spd); |
rodriguj | 0:3d84b3bfb794 | 90 | |
rodriguj | 0:3d84b3bfb794 | 91 | int init (void); |
rodriguj | 0:3d84b3bfb794 | 92 | |
rodriguj | 0:3d84b3bfb794 | 93 | void scroll (void); |
rodriguj | 0:3d84b3bfb794 | 94 | |
rodriguj | 0:3d84b3bfb794 | 95 | void putchar (char c); |
rodriguj | 0:3d84b3bfb794 | 96 | |
rodriguj | 0:3d84b3bfb794 | 97 | void display (void); |
rodriguj | 0:3d84b3bfb794 | 98 | |
rodriguj | 0:3d84b3bfb794 | 99 | void set_contrast (char v); |
rodriguj | 0:3d84b3bfb794 | 100 | |
rodriguj | 0:3d84b3bfb794 | 101 | void cls (void); |
rodriguj | 0:3d84b3bfb794 | 102 | |
rodriguj | 0:3d84b3bfb794 | 103 | void plot (char x, char y, PlotStyle modo); |
rodriguj | 0:3d84b3bfb794 | 104 | |
rodriguj | 0:3d84b3bfb794 | 105 | virtual ~SSD1306 () { |
rodriguj | 0:3d84b3bfb794 | 106 | delete bus; |
rodriguj | 0:3d84b3bfb794 | 107 | delete fb; |
rodriguj | 0:3d84b3bfb794 | 108 | } |
rodriguj | 0:3d84b3bfb794 | 109 | |
rodriguj | 0:3d84b3bfb794 | 110 | protected: |
rodriguj | 0:3d84b3bfb794 | 111 | I2C *bus; |
rodriguj | 0:3d84b3bfb794 | 112 | char ssd1306_i2c_addr; |
rodriguj | 0:3d84b3bfb794 | 113 | char *fb; |
rodriguj | 0:3d84b3bfb794 | 114 | int idxfb; |
rodriguj | 0:3d84b3bfb794 | 115 | int command (char c); |
rodriguj | 0:3d84b3bfb794 | 116 | int data (char d); |
rodriguj | 0:3d84b3bfb794 | 117 | int command_data (char c, char c_or_d, char lastitem); |
rodriguj | 0:3d84b3bfb794 | 118 | char scan (); |
rodriguj | 0:3d84b3bfb794 | 119 | |
rodriguj | 0:3d84b3bfb794 | 120 | }; |
rodriguj | 0:3d84b3bfb794 | 121 | |
rodriguj | 0:3d84b3bfb794 | 122 | #endif |