Недорогие экраны на микросхеме Hitachi HD44780 завоевали рынок недорогих устройств отображения информации. В 90-е годы на их базе выпускалось огромное количество моделей, начиная с 8х1 (восемь символов в одной строке) и заканчивая 40х4. Они нашли широкое применение в принтерах, копирах, сетевом оборудовании.
Типовой интерфейс дисплея
Расшифровка выводов
VSS Земля, общий провод, GND
VDD Напряжение питания, Vcc (+5V)
VO Настройка контрастности
RS Выбор регистра (R/S для HD44780, A0 для KS0066)
RW Чтение/запись
E Строб по спаду (Enable)
DO Bit 0 (младший для 8-битного интерфейса)
D1 Bit 1
D2 Bit 2
D3 Bit 3
D4 Bit 4 (младший для 4-битного интерфейса)
D5 Bit 5
D6 Bit 6
D7 Bit 7 (старший для 8-(4-)битного интерфейса)
A Питание подсветки для дисплеев с подсветкой (анод)
K Питание подсветки для дисплеев с подсветкой (катод)
Дисплей может работать в 4- или 8-битном режимах. В 4-битном режиме ножки с седьмой по десятую не используются, а данные передаются через 11-14 ножки, по четыре бита за такт.
ПЗУ контроллера позволяет хранить 240 символов.
Подсветка питается от 5 вольт. При подключении необходимо использовать токоограничительный резистор (50-100 Ом).
Схема подключения экрана к Raspberry PI через макетную плату
Создаем файл, например lcd, и вставляем следующий код:
#!/usr/bin import RPi.GPIO as GPIO from time import sleep from subprocess import * from time import sleep, strftime from datetime import datetime cmd = «ip addr show wlan0 | grep inet | awk ‘{print $2}’ | cut -d/ -f1″ def run_cmd(cmd): p = Popen(cmd, shell=True, stdout=PIPE) output = p.communicate()[0] return output class HD44780: def __init__(self, pin_rs=7, pin_e=8, pins_db=[25, 24, 23, 18]): self.pin_rs=pin_rs self.pin_e=pin_e self.pins_db=pins_db GPIO.setmode(GPIO.BCM) GPIO.setup(self.pin_e, GPIO.OUT) GPIO.setup(self.pin_rs, GPIO.OUT) for pin in self.pins_db: GPIO.setup(pin, GPIO.OUT) self.clear() def clear(self): «»» Blank / Reset LCD «»» self.cmd(0x33) # $33 8-bit mode self.cmd(0x32) # $32 8-bit mode self.cmd(0x28) # $28 8-bit mode self.cmd(0x0C) # $0C 8-bit mode self.cmd(0x06) # $06 8-bit mode self.cmd(0x01) # $01 8-bit mode def cmd(self, bits, char_mode=False): «»» Send command to LCD «»» sleep(0.001) bits=bin(bits)[2:].zfill(8) GPIO.output(self.pin_rs, char_mode) for pin in self.pins_db: GPIO.output(pin, False) for i in range(4): if bits[i] == «1»: GPIO.output(self.pins_db[::-1][i], True) GPIO.output(self.pin_e, True) GPIO.output(self.pin_e, False) for pin in self.pins_db: GPIO.output(pin, False) for i in range(4,8): if bits[i] == «1»: GPIO.output(self.pins_db[::-1][i-4], True) GPIO.output(self.pin_e, True) GPIO.output(self.pin_e, False) def message(self, text): «»» Send string to LCD. Newline wraps to second line»»» for char in text: if char == ‘n‘: self.cmd(0xC0) # next line else: self.cmd(ord(char),True) if __name__ == ‘__main__’: lcd = HD44780() ipaddr = run_cmd(cmd) lcd.message(datetime.now().strftime(‘%b %d %H:%M:%Sn‘)) lcd.message(‘IP %s’% (ipaddr)) sleep(2) GPIO.cleanup() «»»lcd.message(«Raspberry Pin Take a byte!») «»»
Запускаем файла на исполнение осуществляется с командной строки. Для этого набираем команду
root# sudo python lcd
На экране мы должны увидеть системное время и IP адрес устройства.