Mercurial > templog
diff py/lcd.py @ 150:171cdf716473
lcd works
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Tue, 18 Dec 2012 22:20:47 +0800 |
parents | |
children | 542efb356e46 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/py/lcd.py Tue Dec 18 22:20:47 2012 +0800 @@ -0,0 +1,77 @@ +#!/home/matt/templog/venv/bin/python + +import smbus +import time +import random +import sys + +class LCD(object): + + COMMAND = 0x00 + DATA = 0x40 + + def __init__(self): + self.bus = smbus.SMBus(1) + #self.address = 0b0111110 + self.address = 0x3e + + def setup(self): + time.sleep(0.01) + cmds = """0x38 function set + 0x39 function set + 0x17 freq + 0x78 # was 0x74 contrast, 101000 = 8 contrast (32 below), total 40 + 0x57 # was 0x54 # power/icon/contrast, 0110 = bon, c5 + 0x6a # was 0x6f follower , follow onr, rab 010 = 1.5 + 0x0c on/off""" + for l in cmds.split('\n'): + c = eval(l.split()[0]) + self.cmd(c) + +# self.cmd(0x38) +# self.cmd(0x39) +# self.cmd(0x14) +# self.cmd(0x78) # contrast +# self.cmd(0x57) # power/icon/contrast +# self.cmd(0x6f) # follower +# self.cmd(0x0c) +# self.cmd(0x01) +# self.cmd(0x04) + + def put(self, pos, word): + addr = 0b10000000 + (pos % 16) + (pos>=16)*40 + self.cmd(addr) + for char in word: + self.data(ord(char)) + + def write(self, a, b): + self.bus.write_byte_data(self.address, a, b) + time.sleep(0.0001) + + def cmd(self, cmd): + self.write(self.COMMAND, cmd) + + def data(self, data): + self.write(self.DATA, data) + +l = LCD() +l.setup() +l.put(0, 'a') +l.put(1, 'b') +l.put(4, 'b') + +#words = [word.strip() for word in file('/usr/share/dict/words', 'r')] +#random.shuffle(words) +words = file(sys.argv[1], 'r').read().split() + +pos = 0 +last = '' +for word in words: + word = (word + ' '*16)[:16] + #pos = (pos + 16) % 32 + #word = random.sample(words, 1)[0][:16] + ' '*16 + #char = chr(int(random.random() * 26) + ord('a')) + l.put(0, last) + l.put(16, word) + last = word + time.sleep(0.1)