Подключаем экран Winstan WH1602 к микроконтроллеру ESP8266 с помощью языка microPython.

В данном уроке мы с Вами подключим экран Winstar WH1602:

Экран подключим по 4 битной схеме:

вывод экрана D4 = ножка микроконтроллера 5
вывод экрана D5 = ножка микроконтроллера 4
вывод экрана D6 = ножка микроконтроллера 0
вывод экрана D7 = ножка микроконтроллера 2
вывод экрана RS = ножка микроконтроллера 14
вывод экрана RW = ножка микроконтроллера12
вывод экрана E = ножка микроконтроллера 13

Алгоритм работы мы возьмем с урока по PIC №3.

from machine import Timer
from machine import Pin
import time

#pin
D4 = 5
D5 = 4
D6 = 0
D7 = 2

RS = 14
RW = 12
E = 13

class LCD1602:

def __init__(self):
D4 = 5
D5 = 4
D6 = 0
D7 = 2
RS = 14
RW = 12
E = 13
self.I_D4 = Pin(D4, Pin.OUT);
self.I_D5 = Pin(D5, Pin.OUT);
self.I_D6 = Pin(D6, Pin.OUT);
self.I_D7 = Pin(D7, Pin.OUT);
self.I_RS = Pin(RS, Pin.OUT);
self.I_EW = Pin(RW, Pin.OUT);
self.I_E = Pin(E, Pin.OUT);
time.sleep_ms(50)
self.I_D4.off()
self.I_D5.off()
self.I_D6.off()
self.I_D7.off()
self.I_RS.off()
self.I_EW.off()
self.I_E.off()
time.sleep_ms(100)
self.sendhalfbyte(0x03)
time.sleep_ms(5)
self.sendhalfbyte(0x03)
time.sleep_ms(5)
self.sendhalfbyte(0x03)
time.sleep_ms(1)
self.sendhalfbyte(0x02)
time.sleep_ms(10)
self.sendbyte(0x28,0)
self.sendbyte(0x28,0)
self.sendbyte(0x0C,0)
time.sleep_ms(1)
self.sendbyte(0x01,0)
time.sleep_ms(2)
self.sendbyte(0x06,0)
time.sleep_ms(1)
self.sendbyte(0x02,0)
self.sendbyte(0x80,0)
time.sleep_ms(20)

def sendhalfbyte (self,c):
self.I_D4.off()
self.I_D5.off()
self.I_D6.off()
self.I_D7.off()
if((c>>0)&0x01):
self.I_D4.on()
else:
self.I_D4.off()
if((c>>1)&0x01):
self.I_D5.on()
else:
self.I_D5.off()
if((c>>2)&0x01):
self.I_D6.on()
else:
self.I_D6.off()
if((c>>3)&0x01):
self.I_D7.on()
else:
self.I_D7.off()

self.I_E.on()
time.sleep_ms(1)
self.I_E.off()
time.sleep_ms(5)

def sendbyte (self, c, mode):
hc=0x00
if mode:
self.I_RS.on()
else:
self.I_RS.off()
hc = c>>4
self.sendhalfbyte( hc )
self.sendhalfbyte( c )

def LCD_Clear(self):
self.sendbyte( 0x01, 0)
time.sleep_ms(2)

def LCD_SetPos(self, x = 0, y = 0):
if y == 0 :
self.sendbyte((x|0x80), 0)
if y == 1:
self.sendbyte(((0x40+x)|0x80),0)

def LCD_String(self, st):
i=0
while (ord(st[i]) != ord('/')):
self.sendbyte(ord(st[i]), 1)
i = i + 1

 

Пример использования данной библиотеки:

from machine import Timer
from machine import Pin
import time

from LCD1602 import LCD1602

LCD = LCD1602()
LCD.LCD_String("Ok/")
LCD.LCD_SetPos(0, 1)
LCD.LCD_String("Hello/")
print ("Ok")