Mercurial > templog
comparison 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 |
comparison
equal
deleted
inserted
replaced
149:d686b111dab4 | 150:171cdf716473 |
---|---|
1 #!/home/matt/templog/venv/bin/python | |
2 | |
3 import smbus | |
4 import time | |
5 import random | |
6 import sys | |
7 | |
8 class LCD(object): | |
9 | |
10 COMMAND = 0x00 | |
11 DATA = 0x40 | |
12 | |
13 def __init__(self): | |
14 self.bus = smbus.SMBus(1) | |
15 #self.address = 0b0111110 | |
16 self.address = 0x3e | |
17 | |
18 def setup(self): | |
19 time.sleep(0.01) | |
20 cmds = """0x38 function set | |
21 0x39 function set | |
22 0x17 freq | |
23 0x78 # was 0x74 contrast, 101000 = 8 contrast (32 below), total 40 | |
24 0x57 # was 0x54 # power/icon/contrast, 0110 = bon, c5 | |
25 0x6a # was 0x6f follower , follow onr, rab 010 = 1.5 | |
26 0x0c on/off""" | |
27 for l in cmds.split('\n'): | |
28 c = eval(l.split()[0]) | |
29 self.cmd(c) | |
30 | |
31 # self.cmd(0x38) | |
32 # self.cmd(0x39) | |
33 # self.cmd(0x14) | |
34 # self.cmd(0x78) # contrast | |
35 # self.cmd(0x57) # power/icon/contrast | |
36 # self.cmd(0x6f) # follower | |
37 # self.cmd(0x0c) | |
38 # self.cmd(0x01) | |
39 # self.cmd(0x04) | |
40 | |
41 def put(self, pos, word): | |
42 addr = 0b10000000 + (pos % 16) + (pos>=16)*40 | |
43 self.cmd(addr) | |
44 for char in word: | |
45 self.data(ord(char)) | |
46 | |
47 def write(self, a, b): | |
48 self.bus.write_byte_data(self.address, a, b) | |
49 time.sleep(0.0001) | |
50 | |
51 def cmd(self, cmd): | |
52 self.write(self.COMMAND, cmd) | |
53 | |
54 def data(self, data): | |
55 self.write(self.DATA, data) | |
56 | |
57 l = LCD() | |
58 l.setup() | |
59 l.put(0, 'a') | |
60 l.put(1, 'b') | |
61 l.put(4, 'b') | |
62 | |
63 #words = [word.strip() for word in file('/usr/share/dict/words', 'r')] | |
64 #random.shuffle(words) | |
65 words = file(sys.argv[1], 'r').read().split() | |
66 | |
67 pos = 0 | |
68 last = '' | |
69 for word in words: | |
70 word = (word + ' '*16)[:16] | |
71 #pos = (pos + 16) % 32 | |
72 #word = random.sample(words, 1)[0][:16] + ' '*16 | |
73 #char = chr(int(random.random() * 26) + ord('a')) | |
74 l.put(0, last) | |
75 l.put(16, word) | |
76 last = word | |
77 time.sleep(0.1) |