Driver library for ST7565 graphics LCD controller over SPI interface.

Dependents:   ST7565SPI_Test OpPanel_Offline OpPanel_Offline_cmake_gcc_arm_NUCLEO_F303RENew

Committer:
kayekss
Date:
Sun Mar 01 19:26:30 2015 +0000
Revision:
0:253db5137942
Child:
1:2150513a5b18
Initial release.

Who changed what in which revision?

UserRevisionLine numberNew 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 0:253db5137942 53 void ST7565SPI::init(uint8_t v0, uint8_t contrast, bias_t 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 }