From b79ad1b4cc9de05e4e545d4a8e1c63c97c088958 Mon Sep 17 00:00:00 2001 From: Markus Birth Date: Mon, 29 Feb 2016 01:18:06 +0100 Subject: [PATCH] More low-level functions. --- ussd1306-i2c.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/ussd1306-i2c.py b/ussd1306-i2c.py index 6ca5132..186811f 100644 --- a/ussd1306-i2c.py +++ b/ussd1306-i2c.py @@ -77,8 +77,8 @@ class SSD1306: self.set_osc_freq(8, False) # set oscillator freq., but don't send to LCD yet self.set_clock_div(1) # set clock div and send osc_freq+clock_div to LCD self.set_mux_ratio(self.height) # set multiplex ratio to 64 (default), for 32px: 32 - self.command([0xd3, 0x00]) # set disp offset to 0 - self.command(0x40|0x00) # set start line to 0 + self.set_disp_offset(0) # set display offset to 0 + self.set_disp_start_line(0) # set display start line to 0 self.command([0x8d, 0x14]) # chargepump on (ext. VCC - off: 0x10) self.set_addressing(self.ADDRESSING_HORIZ) self.command(0xa0|0x10) # segment remap (invalid value: 0xb0, maybe 0x01?) @@ -120,6 +120,16 @@ class SSD1306: assert 16 <= mux_ratio <= 64, "Mux ratio must be between 16 and 64." self.command([0xa8, (mux_ratio-1)]) + def set_disp_offset(self, offset): + """ Sets the display offset (vertical shift). """ + assert 0 <= offset < 63, "Offset must be between 0 and 63." + self.command([0xd3, offset]) + + def set_disp_start_line(self, start_line): + """ Sets the display RAM start line register. """ + assert 0 <= start_line < 63, "Start line must be between 0 and 63." + self.command(0x40 | start_line) + def set_adressing(self, addr): """ Sets the adressing mode """ assert addr in [self.ADDRESSING_HORIZ, self.ADDRESSING_VERT, self.ADDRESSING_PAGE], "Addressing must be ADDRESSING_HORIZ, ADDRESSING_VERT or ADDRESSING_PAGE."