123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- from machine import Pin,I2C
- import framebuf
- import time
- class OLED_0inch49(framebuf.FrameBuffer):
- def __init__(self,i2c_num=1,i2c_scl=7,i2c_sda=6,i2c_freq=1000000):
-
- self.width = 64
- self.height = 32
-
-
- self.rotate = 180 #only 0 and 180
- self.olde_addr = 0x3c
- self.i2c = I2C(id=i2c_num, scl=Pin(i2c_scl), sda=Pin(i2c_sda), freq=i2c_freq)
- self.temp = bytearray(2)
- self.buffer = bytearray(self.width * self.height//2)
- super().__init__(self.buffer, self.width, self.height, framebuf.MONO_VLSB)
- self.init_display()
-
- self.white = 0xffff
- self.black = 0x0000
-
- def write_cmd(self, cmd):
- self.temp[0] = 0x00
- self.temp[1] = cmd
- self.i2c.writeto(self.olde_addr, self.temp)
- def write_data(self, buf):
- self.temp[0] = 0x40
- self.temp[1] = buf
- # self.i2c.writeto(self.olde_addr, b'\x40'+buf)
- self.i2c.writeto(self.olde_addr, self.temp)
-
- def init_display(self):
- """Initialize dispaly"""
-
- self.write_cmd(0xAE); # display off
- self.write_cmd(0x00); # set lower column address
- self.write_cmd(0x12); # set higher column address
- self.write_cmd(0x00); # set display start line
- self.write_cmd(0xB0); # set page address
- self.write_cmd(0x81); # contract control
- self.write_cmd(0x4f); # 128
- self.write_cmd(0xA1); # set segment remap
- self.write_cmd(0xA6); # normal / reverse
- self.write_cmd(0xA8); # multiplex ratio
- self.write_cmd(0x1F); # duty = 1/32
- self.write_cmd(0xC8); # Com scan direction
- self.write_cmd(0xD3); # set display offset
- self.write_cmd(0x00);
- self.write_cmd(0x20);
- self.write_cmd(0x01); # set Vertical Addressing Mode
- self.write_cmd(0xD5); # set osc division
- self.write_cmd(0x80);
- self.write_cmd(0xD9); # set pre-charge period
- self.write_cmd(0xf1);
- self.write_cmd(0xDA); # set COM pins
- self.write_cmd(0x12);
- self.write_cmd(0xdb); # set vcomh
- self.write_cmd(0x40);
- self.write_cmd(0x8d); # set charge pump enable
- self.write_cmd(0x14);
- self.write_cmd(0xAF); # display ON
-
- def show(self):
- for i in range(0, 4):
- self.write_cmd(0x22)
- self.write_cmd(0x00+i) # set start page address
- self.write_cmd(0x00+i) # set end page address
- self.write_cmd(0x21)
- self.write_cmd(0x20) # set low column address
- self.write_cmd(0x5f) # set high column address
- # write data #
- for j in range(0, self.width):
- self.write_data(self.buffer[j+self.width*i])
- return
-
- if __name__=='__main__':
- OLED = OLED_0inch49()
- OLED.fill(0x00)
- OLED.text("OLED0.49",0,1,OLED.white)
- OLED.text("64x32Px",4,12,OLED.white)
- OLED.text("SSD1315",4,23,OLED.white)
- OLED.show()
- time.sleep(1)
- while True:
- pass
|