Skip to content
  • Категории
  • Главная
  • Документация
  • Последние
  • Пользователи
Collapse
  1. Главная
  2. Raspberry Pi
  3. Дисплей 16x2 не выводит текст

Дисплей 16x2 не выводит текст

Запланировано Прикреплена Закрыта Перенесена Raspberry Pi
1 Сообщения 1 Posters 13 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • piP Не в сети
    piP Не в сети
    pi
    написал в отредактировано
    #1

    Возвращаюсь сюда со своим многострадальным экраном. Покурил мануалы, попробовал несколько вариантов схем подключения, причесал программу и все-таки заставил экран нормально инициализироваться: после запуска программы черные квадраты во второй строке исчезают. Но текст он по прежнему не выводит. Перед тем, как идти на форум, решил попробовать аналогичные программы, но написанные другими людьми. Результат тот же: черные сегменты исчезают, а текста нет. Одну из программ выкладываю ниже. Хотя раньше все эти программы вылетали с ошибками, а квадраты оставались: инициализации не было из-за неправильного подключения.

    Экран: Winstar WH1602A-YGH-CTK на контроллере S6B0066U (это аналог HD44780, по идее проблем быть не должно).

    Код программы:
    #import
    import RPi.GPIO as GPIO
    import time

    Define GPIO to LCD mapping

    LCD_RS = 7
    LCD_E = 8
    LCD_D4 = 25
    LCD_D5 = 24
    LCD_D6 = 23
    LCD_D7 = 18

    Define some device constants

    LCD_WIDTH = 16 # Maximum characters per line
    LCD_CHR = True
    LCD_CMD = False

    LCD_LINE_1 = 0x80 # LCD RAM address for the 1st line
    LCD_LINE_2 = 0xC0 # LCD RAM address for the 2nd line

    Timing constants

    E_PULSE = 0.0005
    E_DELAY = 0.0005

    def main():

    Main program block

    GPIO.setwarnings(False)
    GPIO.setmode(GPIO.BCM) # Use BCM GPIO numbers
    GPIO.setup(LCD_E, GPIO.OUT) # E
    GPIO.setup(LCD_RS, GPIO.OUT) # RS
    GPIO.setup(LCD_D4, GPIO.OUT) # DB4
    GPIO.setup(LCD_D5, GPIO.OUT) # DB5
    GPIO.setup(LCD_D6, GPIO.OUT) # DB6
    GPIO.setup(LCD_D7, GPIO.OUT) # DB7

    Initialise display

    lcd_init()

    while True:

    # Send some test
    lcd_string("Rasbperry Pi",LCD_LINE_1)
    lcd_string("16x2 LCD Test",LCD_LINE_2)
    
    time.sleep(3) # 3 second delay
    
    # Send some text
    lcd_string("1234567890123456",LCD_LINE_1)
    lcd_string("abcdefghijklmnop",LCD_LINE_2)
    
    time.sleep(3) # 3 second delay
    
    # Send some text
    lcd_string("Raspberry",LCD_LINE_1)
    lcd_string("Pi",LCD_LINE_2)
    
    time.sleep(3)
    

    def lcd_init():

    Initialise display

    lcd_byte(0x33,LCD_CMD) # 110011 Initialise
    lcd_byte(0x32,LCD_CMD) # 110010 Initialise
    lcd_byte(0x06,LCD_CMD) # 000110 Cursor move direction
    lcd_byte(0x0C,LCD_CMD) # 001100 Display On,Cursor Off, Blink Off
    lcd_byte(0x28,LCD_CMD) # 101000 Data length, number of lines, font size
    lcd_byte(0x01,LCD_CMD) # 000001 Clear display
    time.sleep(E_DELAY)

    def lcd_byte(bits, mode):

    Send byte to data pins

    bits = data

    mode = True for character

    False for command

    GPIO.output(LCD_RS, mode) # RS

    High bits

    GPIO.output(LCD_D4, False)
    GPIO.output(LCD_D5, False)
    GPIO.output(LCD_D6, False)
    GPIO.output(LCD_D7, False)
    if bits&0x10==0x10:
    GPIO.output(LCD_D4, True)
    if bits&0x20==0x20:
    GPIO.output(LCD_D5, True)
    if bits&0x40==0x40:
    GPIO.output(LCD_D6, True)
    if bits&0x80==0x80:
    GPIO.output(LCD_D7, True)

    Toggle 'Enable' pin

    lcd_toggle_enable()

    Low bits

    GPIO.output(LCD_D4, False)
    GPIO.output(LCD_D5, False)
    GPIO.output(LCD_D6, False)
    GPIO.output(LCD_D7, False)
    if bits&0x01==0x01:
    GPIO.output(LCD_D4, True)
    if bits&0x02==0x02:
    GPIO.output(LCD_D5, True)
    if bits&0x04==0x04:
    GPIO.output(LCD_D6, True)
    if bits&0x08==0x08:
    GPIO.output(LCD_D7, True)

    Toggle 'Enable' pin

    lcd_toggle_enable()

    def lcd_toggle_enable():

    Toggle enable

    time.sleep(E_DELAY)
    GPIO.output(LCD_E, True)
    time.sleep(E_PULSE)
    GPIO.output(LCD_E, False)
    time.sleep(E_DELAY)

    def lcd_string(message,line):

    Send string to display

    message = message.ljust(LCD_WIDTH," ")

    lcd_byte(line, LCD_CMD)

    for i in range(LCD_WIDTH):
    lcd_byte(ord(message[i]),LCD_CHR)

    if name == 'main':

    try:
    main()
    except KeyboardInterrupt:
    pass
    finally:
    lcd_byte(0x01, LCD_CMD)
    lcd_string("Goodbye!",LCD_LINE_1)
    GPIO.cleanup()

    1 ответ Последний ответ
    0

    • Войти

    • Нет учётной записи? Зарегистрироваться

    • Login or register to search.
    • Первое сообщение
      Последнее сообщение
    0
    • Категории
    • Главная
    • Документация
    • Последние
    • Пользователи