Created
May 27, 2020 18:07
-
-
Save Cactus64k/58c0cdd5ec6157209a999b8564735e5e to your computer and use it in GitHub Desktop.
Micropython class for PCF8814 display (nokia 1100)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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