Найти в Дзене
Александр Рожков

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

В данном уроке мы с Вами подключим экран Winstar WH1602: Экран подключим по 4 битной схеме:

В данном уроке мы с Вами подключим экран 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")
вывод экрана 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")