Raspberry Pi 5使用smbus2控制LCD1602故障排查求助
Raspberry Pi 5 通过smbus2库控制LCD1602故障排查
初始代码
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()
注:数据位取值参考16x2 LCD引脚图资料
代码逻辑
- 设置光标位置
- 写入目标字符的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()
注:代码存在缩进错误,内部write语句未正确对齐
新问题
运行此代码后,LCD背光完全熄灭(电源LED仍保持亮起)。
调试过程
- 移除except块,背光仍熄灭;
- 单独执行每条
LCD.write_byte_data()语句,发现每条都会导致背光熄灭; - 发现代码保留了
>> (7 - bit),移除后修改代码如下:
第二次修改后代码
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), force=None)#write ASCII character except KeyboardInterrupt: LCD.write_byte_data(address, IR, 0x01, force=None)#clear display LCD.close()
注:代码仍存在缩进错误
最新问题
- 运行此代码后,LCD屏幕保持开机时的蓝色背景无任何变化;
- 重新运行最初的代码,结果变为直接熄灭屏幕,而非之前的异常显示。
恳请帮忙排查这些问题,尤其是LCD为何会熄灭或无任何变化,非常感谢!
内容的提问来源于stack exchange,提问作者Matthew Moller
相关产品推荐
相关产品推荐

