Код: Выделить всё
try:
import smbus2
LCD = smbus2.SMBus(1)
address = 0x27
IR = 0
DR = 1
ASCII_WORD = "HELLO"
LCD.write_byte_data(address, IR, 0x80, force=None) #set the cursor at the beginning of line 1
for char in ASCII_WORD:
LCD.write_byte_data(address, IR, 0x10, force=None) #set the cursor 1 column left
for bit in range(8):
LCD.write_byte_data(address, DR, ord(char) >> (7 - bit), force=None)#write ASCII character
except KeyboardInterrupt:
LCD.write_byte_data(address, IR, 0x01, force=None)#clear display
LCD.close()
Вот что происходит в моем коде:
- Set положение курсора.
- Написать ASCII нужного символа.
Результат этот код был неожиданным, позиция курсора находилась в 5-м столбце второй строки, а во втором столбце первой строки был знак ≣. Вскоре я понял, что for bit in range(8): не нужен, поскольку библиотека smbus2 преобразует десятичные значения в двоичные и отправляет их побитно (Пожалуйста, поправьте меня, если я ошибаюсь)< /эм>. Этот дополнительный цикл, вероятно, приводит к дублированию кодов ASCII.
Отлаженный код:
Код: Выделить всё
try:
import time
import smbus2
LCD = smbus2.SMBus(1)
address = 0x27
IR = 0
DR = 1
ASCII_WORD = "HELLO"
LCD.write_byte_data(address, IR, 0x80, force=None) #set the cursor at the beginning of line 1
for char in ASCII_WORD:
LCD.write_byte_data(address, IR, 0x10, force=None) #set the cursor 1 column left
LCD.write_byte_data(address, DR, ord(char) >> (7 - bit), force=None)#write ASCII character
except KeyboardInterrupt:
LCD.write_byte_data(address, IR, 0x01, force=None)#clear display
LCD.close()
Этот код создает проблему, при которой выключается вся подсветка ЖК-дисплея. Возможно, весь ЖК-дисплей выключится, но индикатор питания останется включенным.
Отладка:
Я пробовал удалил блок исключений, поскольку я подумал, что, возможно, это просто очистка дисплея - подсветка все еще выключалась, когда я запускал код. Я также попытался изолировать каждый LCD.write_byte_data(), чтобы увидеть, не является ли один из них причиной проблемы - каждый изолированный из них вызывал отключение подсветки.
Кто-нибудь может помочь? мне, чтобы устранить эти проблемы, в частности, почему ЖК-дисплей выключается по второму коду, а не выключается по первому? Я был бы очень признателен за помощь. Заранее спасибо.
Подробнее здесь: https://stackoverflow.com/questions/791 ... i2c-smbus2