本帖最后由 jinglixixi 于 2021-4-26 11:59 编辑
本打算在树莓派Pico开发板上实现OLED屏的显示驱动,但一直未果于是受相关帖子的启发将其改为LCD1602屏的显示驱动。
LCD1602屏有3种显示驱动方式,分别是8位并行显示方式、4位并行显示方式及配置I2C转换器的I2C驱动方式。
就这3种驱动方式而言,可谓是各具特色。
1. 8位并行方式,其优点是传输数据快,可一次性完成8位数据的传输,其不足之处就是占用的引脚资源过多。
2. 4位并行方式,其特点是分2次来完成8位数据的传输,每次传输4位数据,可部分节省占用的引脚资源。
3. I2C驱动方式,在转换模块的作用下,其传输数据只用2个I/O引脚。
为了便于使用,这里选取4位并行方式来进行显示驱动。另外,为了便于背光的调节,特用手头的I2C驱动模块来为LCD1602屏提供背光电源及VL的引脚处理。I2C驱动模块如图1所示,其电源由I2C接口来输入。
图1 I2C驱动模块
图2 单行显示效果
图3 双行显示效果
实现图2和图3显示效果的关键函数有:显示定位函数defLCD_set_xy()及字符显示函数defLCD_write_char()。
显示定位函数的内容为:
defLCD_set_xy(x , y):
address = 0
if y == 1 :
address = 0xc0+x
if y == 0 :
address = 0x80+x
send2LCD8(address)
字符显示函数的内容为:
defLCD_write_char(x , y, Recdata):
LCD_set_xy(x , y) #写地址
rs.value(1)
send2LCD8(Recdata)
rs.value(0)
实现显示效果的主程序为:
setUpLCD() #初始化
bl.value(1)
p='Raspberry Pi Pico'
n=len(p)
fori in range(n) :
LCD_write_char(i , 0, ord(p))
p='ID: jinglixixi'
n=len(p)
fori in range(n) :
LCD_write_char(i , 1, ord(p))