当前位置: 代码迷 >> 综合 >> 树莓派 使用 i2c 连接 LCD1602/LCD1602A 模块
  详细解决方案

树莓派 使用 i2c 连接 LCD1602/LCD1602A 模块

热度:24   发布时间:2024-02-10 16:22:02.0

成品

在这里插入图片描述

准备

  1. LCD1602/LCD1602A 模块
  2. IIC LCD1602 拓展板

配置

raspi-config
>>> Interfacing Options
>>> P5 I2C
>>> enabled

连接

拓展板与LCD1602连接(正放LCD1602与拓展板,拓展板在上,拓展板四pin朝向左方)
VCC、GND
SDA、SCL 分别与树莓派对应连接(3.3v 下方,依次为SDA、SCL)

重启树莓派

代码

'''1602/1602Aauthor:ZengXiaojiedescription:直接实例化 My1602 对象然后调用对象的 print_lcd(param1, param2, str) 方法ex:print_lcd(0, 0, 'Hello, world!')param1:从第几位开始,共16位(0-15),超出不显示,除非移动屏幕(其实1602一行有40位)param2:第几行,共有两行,0为第一行,1位第二行。str:要显示的数据每次打印字符时,建议适当清屏。 '''import time
import smbus
import sysclass My1602(object):BUS = smbus.SMBus(1)LCD_ADDR = 0x27BLEN = 1# '''# 开关灯def turn_light(self, key):self.BLEN = keyif key == 1:self.BUS.write_byte(self.LCD_ADDR, 0x08)else:self.BUS.write_byte(self.LCD_ADDR, 0x00)# '''def write_word(self, addr, data):temp = dataif self.BLEN == 1:temp |= 0x08else:temp &= 0xF7self.BUS.write_byte(addr, temp)# 写命令def send_command(self, comm):# 发送7-4位数据buf = comm & 0xF0buf |= 0x04  # RS = 0, RW = 0, EN = 1self.write_word(self.LCD_ADDR, buf)time.sleep(0.002)buf &= 0xFBself.write_word(self.LCD_ADDR, buf)# 发送3-0位数据buf = (comm & 0x0F) << 4buf |= 0x04  # RS = 0, RW = 0, EN = 1self.write_word(self.LCD_ADDR, buf)time.sleep(0.002)buf &= 0xFBself.write_word(self.LCD_ADDR, buf)# 写数据def send_data(self, data):# 发送7-4位数据buf = data & 0xF0buf |= 0x05  # RS = 1, RW = 0, EN = 1self.write_word(self.LCD_ADDR, buf)time.sleep(0.002)buf &= 0xFBself.write_word(self.LCD_ADDR, buf)# 发送3-0位数据buf = (data & 0x0F) << 4buf |= 0x05  # RS = 1, RW = 0, EN = 1self.write_word(self.LCD_ADDR, buf)time.sleep(0.002)buf &= 0xFBself.write_word(self.LCD_ADDR, buf)# 初始化def __init__(self):try:self.send_command(0x33)time.sleep(0.005)self.send_command(0x32)time.sleep(0.005)self.send_command(0x28)time.sleep(0.005)self.send_command(0x0C)time.sleep(0.005)self.send_command(0x01)self.BUS.write_byte(self.LCD_ADDR, 0x08)except:return Noneelse:return None# 清屏def clear_lcd(self):self.send_command(0x01)  # 清屏# 显示字符def print_lcd(self, x, y, str):if x < 0:x = 0if x > 15:x = 15if y < 0:y = 0if y > 1:y = 1addr = 0x80 + 0x40 * y + xself.send_command(addr)for chr in str:self.send_data(ord(chr))if __name__ == '__main__':my1602 = My1602()# turn_light(0) # 关闭背景灯光my1602.print_lcd(0, 0, 'Hello, world!')my1602.print_lcd(8, 1, 'by zxj')

说明

使用方法在代码前已说明。

写在最后

欢迎留言、私信、讨论;
文章有知识性错误请立马联系博主,博主将非常感谢;
无需经过允许即可随意使用转载,知识本来就是被广泛用来学习的;
非常感谢您能看到此处,本文为博主学习笔记,如有不同见解,请不吝赐教。