Driver library for ST7565 graphics LCD controller over SPI interface.
Dependents: ST7565SPI_Test OpPanel_Offline OpPanel_Offline_cmake_gcc_arm_NUCLEO_F303RENew
ST7565SPI.cpp@1:2150513a5b18, 2015-03-01 (annotated)
- Committer:
- kayekss
- Date:
- Sun Mar 01 19:30:14 2015 +0000
- Revision:
- 1:2150513a5b18
- Parent:
- 0:253db5137942
- Child:
- 2:138b0570a8e8
Fixed a build error due to wrong type.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kayekss | 0:253db5137942 | 1 | // ==================================================== Mar 02 2015, kayeks == |
kayekss | 0:253db5137942 | 2 | // ST7565SPI.cpp |
kayekss | 0:253db5137942 | 3 | // =========================================================================== |
kayekss | 0:253db5137942 | 4 | // Driver library for ST7565 graphics LCD controller over SPI interface. |
kayekss | 0:253db5137942 | 5 | |
kayekss | 0:253db5137942 | 6 | #include "ST7565SPI.h" |
kayekss | 0:253db5137942 | 7 | |
kayekss | 0:253db5137942 | 8 | /** Constructor of class ST7565SPI. */ |
kayekss | 0:253db5137942 | 9 | ST7565SPI::ST7565SPI(PinName mosiPin, PinName sckPin, PinName csPin, |
kayekss | 0:253db5137942 | 10 | PinName rsPin, PinName rstPin, int frequency) |
kayekss | 0:253db5137942 | 11 | : |
kayekss | 0:253db5137942 | 12 | rs(rsPin), |
kayekss | 0:253db5137942 | 13 | rst(rstPin), |
kayekss | 0:253db5137942 | 14 | spi(mosiPin, NC, sckPin), |
kayekss | 0:253db5137942 | 15 | cs(csPin) |
kayekss | 0:253db5137942 | 16 | { |
kayekss | 0:253db5137942 | 17 | // Initialize SPI |
kayekss | 0:253db5137942 | 18 | spi.format(8, 0); |
kayekss | 0:253db5137942 | 19 | spi.frequency(frequency); |
kayekss | 0:253db5137942 | 20 | |
kayekss | 0:253db5137942 | 21 | // Initialize pins |
kayekss | 0:253db5137942 | 22 | rs = 0; |
kayekss | 0:253db5137942 | 23 | rst = 1; |
kayekss | 0:253db5137942 | 24 | cs = 1; |
kayekss | 0:253db5137942 | 25 | |
kayekss | 0:253db5137942 | 26 | reset(); |
kayekss | 0:253db5137942 | 27 | } |
kayekss | 0:253db5137942 | 28 | |
kayekss | 0:253db5137942 | 29 | /** Destructor of class ST7565SPI. */ |
kayekss | 0:253db5137942 | 30 | ST7565SPI::~ST7565SPI() { |
kayekss | 0:253db5137942 | 31 | } |
kayekss | 0:253db5137942 | 32 | |
kayekss | 0:253db5137942 | 33 | /** Hits hardware reset pin of the LCD module. */ |
kayekss | 0:253db5137942 | 34 | void ST7565SPI::reset() { |
kayekss | 0:253db5137942 | 35 | wait_ms(10); |
kayekss | 0:253db5137942 | 36 | rst = 0; |
kayekss | 0:253db5137942 | 37 | wait_ms(10); |
kayekss | 0:253db5137942 | 38 | rst = 1; |
kayekss | 0:253db5137942 | 39 | } |
kayekss | 0:253db5137942 | 40 | |
kayekss | 0:253db5137942 | 41 | /** Clear entire display by writing zero. */ |
kayekss | 0:253db5137942 | 42 | void ST7565SPI::clear() { |
kayekss | 0:253db5137942 | 43 | for (uint8_t j = 7; j <= 7; j--) { |
kayekss | 0:253db5137942 | 44 | setPage(j); |
kayekss | 0:253db5137942 | 45 | setColumn(0); |
kayekss | 0:253db5137942 | 46 | for (uint8_t i = 0; i < 132; i++) { |
kayekss | 0:253db5137942 | 47 | data(0x00); |
kayekss | 0:253db5137942 | 48 | } |
kayekss | 0:253db5137942 | 49 | } |
kayekss | 0:253db5137942 | 50 | } |
kayekss | 0:253db5137942 | 51 | |
kayekss | 0:253db5137942 | 52 | /** Initialize controller. */ |
kayekss | 1:2150513a5b18 | 53 | void ST7565SPI::init(uint8_t v0, uint8_t contrast, Bias bias) { |
kayekss | 0:253db5137942 | 54 | command(INTERNAL_RESET); |
kayekss | 0:253db5137942 | 55 | wait_ms(5); |
kayekss | 0:253db5137942 | 56 | |
kayekss | 0:253db5137942 | 57 | command(DISPLAY_ON); |
kayekss | 0:253db5137942 | 58 | command(PCTRL_BOOSTER_ON | PCTRL_REGULATOR_ON | PCTRL_VFOLLOWER_ON); |
kayekss | 0:253db5137942 | 59 | command(V0_INTERNAL_R_0 + (v0 & 0x07)); |
kayekss | 0:253db5137942 | 60 | command(ELECTRONIC_VOL_MODE); |
kayekss | 0:253db5137942 | 61 | if (contrast == 0) { |
kayekss | 0:253db5137942 | 62 | contrast = 1; |
kayekss | 0:253db5137942 | 63 | } |
kayekss | 0:253db5137942 | 64 | command(ELECTRONIC_VOL_1 - 1 + (contrast & 0x3f)); |
kayekss | 0:253db5137942 | 65 | switch (bias) { |
kayekss | 0:253db5137942 | 66 | case Bias1_7: |
kayekss | 0:253db5137942 | 67 | command(BIAS_1_7); |
kayekss | 0:253db5137942 | 68 | break; |
kayekss | 0:253db5137942 | 69 | case Bias1_9: |
kayekss | 0:253db5137942 | 70 | command(BIAS_1_9); |
kayekss | 0:253db5137942 | 71 | } |
kayekss | 0:253db5137942 | 72 | command(COMMON_ASCENDING); |
kayekss | 0:253db5137942 | 73 | command(SEGMENT_ASCENDING); |
kayekss | 0:253db5137942 | 74 | command(ENTIRE_DISPLAY_OFF); |
kayekss | 0:253db5137942 | 75 | command(INVERT_DISPLAY_OFF); |
kayekss | 0:253db5137942 | 76 | command(COMMON_OFFSET); |
kayekss | 0:253db5137942 | 77 | clear(); |
kayekss | 0:253db5137942 | 78 | } |
kayekss | 0:253db5137942 | 79 | |
kayekss | 0:253db5137942 | 80 | void ST7565SPI::setPage(uint8_t page) { |
kayekss | 0:253db5137942 | 81 | if (page < 16) { |
kayekss | 0:253db5137942 | 82 | command(0xb0 | page); |
kayekss | 0:253db5137942 | 83 | } |
kayekss | 0:253db5137942 | 84 | } |
kayekss | 0:253db5137942 | 85 | |
kayekss | 0:253db5137942 | 86 | void ST7565SPI::setColumn(uint8_t column) { |
kayekss | 0:253db5137942 | 87 | command(0x10 | (column >> 4)); |
kayekss | 0:253db5137942 | 88 | command(column & 0x0f); |
kayekss | 0:253db5137942 | 89 | } |
kayekss | 0:253db5137942 | 90 | |
kayekss | 0:253db5137942 | 91 | void ST7565SPI::command(uint8_t c) { |
kayekss | 0:253db5137942 | 92 | rs = 0; |
kayekss | 0:253db5137942 | 93 | cs = 0; |
kayekss | 0:253db5137942 | 94 | spi.write(c); |
kayekss | 0:253db5137942 | 95 | cs = 1; |
kayekss | 0:253db5137942 | 96 | } |
kayekss | 0:253db5137942 | 97 | |
kayekss | 0:253db5137942 | 98 | void ST7565SPI::data(uint8_t d) { |
kayekss | 0:253db5137942 | 99 | rs = 1; |
kayekss | 0:253db5137942 | 100 | cs = 0; |
kayekss | 0:253db5137942 | 101 | spi.write(d); |
kayekss | 0:253db5137942 | 102 | cs = 1; |
kayekss | 0:253db5137942 | 103 | } |