framebuf库定义了几个常量,用来描述缓冲区的类型:

  • MONO_VLSB:单色模式,竖直8bits为单位从左往右扫描,接着下8行继续扫描,8bit低位在上
  • MONO_HLSB:单色模式,水平8bits为单位从左往右刷新,接着从下一行如此,8bit高位在左
  • MONO_HMSB:单色模式,水平8bits为单位从左往右刷新,接着从下一行如此,8bit低位在左
  • RGB565:Red Green Blue (16-bit, 5+6+5) color format
  • GS2_HMSB:Grayscale (2-bit) color format
  • GS2_HMSB:Grayscale (4-bit) color format
  • GS8:Grayscale (8-bit) color format

在开发中,我常用的是MONO_VLSBRGB565,仅对这2常量描述

在屏幕的驱动中,micropython使用帧缓存的概念:一个变量存储着帧,如果是0.96oled,这个变量就描述128*64像素图片;如果是1.44tft LCD,这个变量就描述128*128像素的图片。你可以修改这个变量,在这个变量改变像素点的颜色。当需要在屏幕显示时,则调用show方法将这个变量传送给屏幕的驱动芯片,然后就可以在屏幕上看到内容了。

对于MONO_VLSB类型的缓冲区,常用在oled上,在自定义字符、取模的时候,需要注意按照相应的扫描方式进行取模,否则不能正确显示字符。

对于RGB565类型的缓冲区,常用在LCD屏幕,表示1个像素点可以用16bit描述颜色,红色占用5个bit,绿色占用6个bit,蓝色占用5个bit。对于一个颜色区域,高位表示的颜色更深。比如:0b10000 000000 00000 表示的红色就比0b01000 000000 00000要深,其余以此类推。

framebuf类型的缓冲区自带一些画图的方法,你可以调用函数来画图。

但是要注意,这些函数的颜色参数并不是RGB565格式,假设RGB565格式用这个字符串表示:color=‘RRRRRGGGGGGBBBBBB’,那么,缓冲区自带的函数的颜色参数格式就是color[8:]+color[:8],就是将原来的16bit分为前8bit和后8bit,并把这2组bit前后调换顺序再拼接成新的,所以,如果你需要统一颜色格式,就需要做些转化。

fill(c)
# 作用:全屏填充
  参数:
    c: 颜色,int,0-0xffff之间

pixel(x,y,c=1)
# 作用:画点
  参数:
    x:横坐标,int
    y:纵坐标,int
    c:颜色,int,0-0xffff之间

hline(x,y,w,c)
# 作用:画横线
  参数:
    x:横坐标,int
    y:纵坐标,int
    w:线长,int
    c:颜色,int,0-0xffff之间

vline(x,y,w,c)
# 作用:画竖线
  参数:
    x:横坐标,int
    y:纵坐标,int
    w:线长,int
    c:颜色,int,0-0xffff之间

line(x1,y1,x2,y2,c)
# 作用:画线
  参数:
    x1:起始横坐标,int
    y1:起始纵坐标,int
    x2:终点横坐标,int
    y2:终点纵坐标,int
    c:颜色,int,0-0xffff之间

rect(x,y,w,h,c,f)
# 作用:画矩形
  参数:
    x:矩形左上角横坐标,int
    y:矩形左上角纵坐标,int
    w:矩形长,int
    h:矩形宽,int
    c:颜色,int,0-0xffff之间
    f:是否填充矩形,int,0/1

ellipse(x,y,xr,yr,c,f)
# 作用:画椭圆
  参数:
    x:中点横坐标,int
    y:中点纵坐标,int
    xr:x轴半径,int
    yr:y轴半径,int
    c:颜色,int,0-0xffff之间
    f:是否填充矩形,int,0/1

poly(x,y,coords,c,f)
# 作用:画多边形
  参数:
    x:基准点横坐标,int
    y:基准点纵坐标,int
    coords:多边形每个点的坐标,array
    c:颜色,int,0-0xffff之间
    f:是否填充矩形,int,0/1
  例如:
    poly(10,10,array('h',[0,0,50,20,20,40]),1000,1)
    注意 from array import array

text(s,x,y,c)
# 作用:画ascll字符(a,A,b,B...)
  参数:
    s:字符串
    x:左上角横坐标,int
    y:左上角纵坐标,int
    c:颜色,int,0-0xffff之间

blit(fbuf,x,y,key=-1,palette=None)
# 作用:画图片
  参数:
    fbuf:framebuf.FrameBuffer格式的缓冲区
    x:左上角横坐标,int
    y:左上角纵坐标,int
    key,当palette没有被设置时,如果key=0xf500,那么fbuf中颜色为0xf500的像素点将是透明的;
    如果palette被设置了,那么palette中与key相同的颜色将被视作透明

参考实例:1.44tft LCD 128*1280.96oled 128*64 I2C

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐