Skip to content

Instantly share code, notes, and snippets.

@Cactus64k
Created May 27, 2020 18:07
Show Gist options
  • Save Cactus64k/58c0cdd5ec6157209a999b8564735e5e to your computer and use it in GitHub Desktop.
Save Cactus64k/58c0cdd5ec6157209a999b8564735e5e to your computer and use it in GitHub Desktop.
Micropython class for PCF8814 display (nokia 1100)
import time
import font
class PCF8814:
pixel_width = 96
pixel_height = 65
def __init__(self, ss, rst, sck, mosi):
self.ss = ss
self.rst = rst
self.sck = sck
self.mosi = mosi
self.rst.off()
time.sleep_ms(10)
self.rst.on()
self.soft_reset()
#self.contrast(0x7F)
self.all_on(False)
self.pump(True)
self.power(True)
for j in range(self.pixel_width/8+1):
for i in range(self.pixel_width):
self.send_data(0x00, cmd=False)
self.goto(0,0)
def send_string(self, string):
for c in string:
index = ord(c)
if index <= 0x7E and index >= 0x20:
char = font.font8x6[index - 0x20]
for l in char:
self.send_data(l, cmd=False)
def send_data(self, data, cmd):
self.ss.off()
self.sck.off()
if cmd == True:
self.mosi.off()
else:
self.mosi.on()
self.sck.on()
mask = 0x80
while mask != 0:
self.sck.off()
if data & mask:
self.mosi.on()
else:
self.mosi.off()
self.sck.on()
mask = mask >> 1
self.ss.on()
def clear(self):
for i in range(self.pixel_width * self.pixel_height):
self.send_data(0x00, cmd=False)
self.goto_y(0)
self.goto_x(0)
def goto(self, x, y):
self.goto_x(x)
self.goto_y(y)
############################################################
def goto_x(self, value):
self.send_data(0x00 | (value & 0x0F), True)
self.send_data(0x10 | (value>>4), True)
def pump(self, status):
flag = 0x04 if status else 0x00
self.send_data(0x28 | flag, True)
def bias(self, value):
self.send_data(0x28 | (value & 0x07), True)
def pump_control(self, value):
self.send_data(0x3D, True)
self.send_data(value & 0x03, True)
def init_displaly_line(self, value):
self.send_data(0x40 | (value & 0x3F), True)
def contrast(self,value):
self.send_data(0x20 | (value >> 5), True)
self.send_data(0x80 | (value & 0x1F), True)
def all_on(self, status):
flag = 0x01 if status else 0x00
self.send_data(0xA4 | flag, True)
def inversion(self, status):
flag = 0x01 if status else 0x00
self.send_data(0xA6 | flag, True)
def power(self, status):
flag = 0x01 if status else 0x00
self.send_data(0xAE | flag, True)
def data_order(self, status):
flag = 0x01 if status else 0x00
self.send_data(0xA8 | flag, True)
def vertical_addresing(self, status):
flag = 0x01 if status else 0x00
self.send_data(0xAA | flag, True)
def goto_y(self, value):
self.send_data(0xB0 | (value & 0x0F), True)
def vertical_mirror(self, status):
flag = 0x08 if status else 0x00
self.send_data(0xC0 | flag, True)
def soft_reset(self):
self.send_data(0xE2 | 0x00, True)
def init_R0(self, value):
self.send_data(0xAC, True)
self.send_data(0x00 | (value & 0x07), True)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment