网站建设 面试网站开发课程设计总结
网站建设 面试,网站开发课程设计总结,专业的河南网站建设公司,wordpress支持手机版吗目录 简介
代码
功能
显示ASCII字符
编辑
画任意直线 画横线 画竖线 画矩形 画椭圆 画立方体 画点阵图 翻转 反相 滚动
横向滚动
纵向滚动
奇葩滚动 简介
我重新写了一个驱动#xff0c;增加了一些功能#xff0c;由于我的硬件是128*64oled单色I2C#xff0c;我只…目录 简介
代码
功能
显示ASCII字符
编辑
画任意直线 画横线 画竖线 画矩形 画椭圆 画立方体 画点阵图 翻转 反相 滚动
横向滚动
纵向滚动
奇葩滚动 简介
我重新写了一个驱动增加了一些功能由于我的硬件是128*64oled单色I2C我只适配了我的硬件。如果你的硬件和我相同你可以使用我的ssd1306驱动.
我的oled似乎不是ssd1306驱动芯片而是ssd1315驱动芯片不过两者差别很小仅在滚动那块有些许出入
如果你是大佬可以复制代码后就走人如果你是小白推荐你边看边打代码我给出例子和注释
代码
import framebufclass SSD1306():def __init__(self,external_vcc):self.width 128self.height 64self.external_vcc external_vccself.pages 8self.init_display()def init_display(self):for cmd in (0xae, # 熄屏0x20, 0x00, # 水平寻址0x40, # 显示起始行地址0xa1, # 正常列扫描0xa8, 63, # 复用率0xc8, # 正常行扫描0xd3, 0x00, #设置COM偏移量即屏幕像上偏移的行数0xda, 0x12, #使用备选引脚配置并禁用左右反置0xd5, 0x80, # 设置分频因子与振荡频率0xd9, 0x22 if self.external_vcc else 0xf1,0xdb, 0x30, # 设置vcomh电压为0.83*Vcc0x81, 0xff, # 亮度最大0xa4, # 使用GDDRAM中的数据显示0xa6, # 设置GDDRAM中的0对应于像素点的暗# 关闭电荷泵0x8d, 0x10 if self.external_vcc else 0x14,0x2e, # 禁止滚动0xaf): #开屏self.write_cmd(cmd)self.fill(0)self.show()#设置水平滚动参数滚动区域滚动起始页滚动结束页滚动方向默认向左填0向右滚动速度0-7 def h_scroll(self,start0,end7,d1,speed0): self.write_cmd(0x2e) # 关闭滚动self.write_cmd(0x26d) # 向左self.write_cmd(0x00)self.write_cmd(start) # 起始页self.write_cmd(speed) # 滚动帧率self.write_cmd(end) # 结束页self.write_cmd(0x00)self.write_cmd(0xff)self.write_cmd(0x2f) # 开启滚动#默认开启竖直向上滚动与水平向右滚动def scroll(self,vScrollOn0,vStart0,vEnd63,vSpeed1,hScrollOn1,direction0,hSpeed0,hScrollStartPage0,hScrollEndPage7,hScrollStartColumn0,hScrollEndColumn127):if vScrollOn:self.write_cmd(0x2e)# 关闭滚动self.write_cmd(0xa3)#设置竖直滚动命令self.write_cmd(vStart)#竖直滚动开始行self.write_cmd(vEnd)#竖直滚动结束行self.write_cmd(0x29direction)#水平滚动方向向右self.write_cmd(hScrollOn) # 0,关闭水平滚动1开启self.write_cmd(hScrollStartPage)# 水平滚动起始页self.write_cmd(hSpeed)#设置滚动速度0-7self.write_cmd(hScrollEndPage)# 水平滚动结束页self.write_cmd(vSpeed) # 每一帧的垂直偏移量self.write_cmd(hScrollStartColumn)#水平滚动区域的起始列self.write_cmd(hScrollEndColumn)#水平滚动区域的结束列self.write_cmd(0x2f)# 开启滚动#关闭oleddef poweroff(self):self.write_cmd(0xae | 0x00)#熄屏#亮度0x00-0xffdef contrast(self, contrast):self.write_cmd(0x81)self.write_cmd(contrast)#正反相显示输入1则反相默认正相def invert(self, invert0):self.write_cmd(0xa6 | invert)# 显示def show(self):self.write_cmd(0x21) # 告诉GDDRAM列数self.write_cmd(0) # 列数从0-127self.write_cmd(127)self.write_cmd(0x22) # 告诉GDDRAM行数self.write_cmd(0) # 页数从0-7self.write_cmd(7)self.write_framebuf() # 写入1bit地址和1024bit数据# 水平翻转,0翻转1正常默认def hv(self,b1):self.write_cmd(0xc0 | b3)#竖直翻转,0翻转1正常默认 def vv(self,b1):self.write_cmd(0xa0|b)#刷新缓冲区def fill(self, c):self.framebuf.fill(c)#画点默认点亮置0则暗def pixel(self, x, y, c1):self.framebuf.pixel(x, y, c)#写字符def text(self, s, x, y, c1):self.framebuf.text(s, x, y, c)#画水平直线def hline(self,x,y,w,c1):self.framebuf.hline(x,y,w,c)#画竖直直线def vline(self,x,y,h,c1):self.framebuf.vline(x,y,h,c)#画任意直线 def line(self,x1,y1,x2,y2,c1):self.framebuf.line(x1,y1,x2,y2,c)#画矩形参数起始左上角坐标长宽颜色默认为亮是否填充def rect(self,x,y,w,h,c1,fFalse):self.framebuf.rect(x,y,w,h,c,f)#画椭圆参数起始圆心坐标x半径y半径颜色默认为亮是否填充显示象限0-15的数字def ellipse(self,x,y,xr,yr,c1,fFalse,m15):self.framebuf.ellipse(x,y,xr,yr,c,f,m)#画立方体左上前点的坐标边长def cube(self,x,y,l):self.rect(x,y,l,l)self.rect(xint(0.5*l),int(y-0.5*l),l,l)self.line(x,y,int(x0.5*l),int(y-0.5*l))self.line(xl-1,y,int(x1.5*l-1),int(y-0.5*l))self.line(x-1,yl,int(x0.5*l),int(y0.5*l-1))self.line(xl-1,yl-1,int(x1.5*l-1),int(y0.5*l-1))#画8*8的图列行def p8(self,page,x,y):for e in range(8):bytebin(page[e]).replace(0b,)while len(byte)8:byte0bytefor i in range(8):if byte[i]1:self.pixel(xe,yi,int(byte[i]))#画16*16的图列行def p16(self,page,x,y):for e in range(32):bytebin(page[e]).replace(0b,)while len(byte)8:byte0bytefor i in range(8):if byte[i] and e16:self.pixel(xe,yi,int(byte[i]))elif byte[i] and e16:self.pixel(x-16e,y8i,int(byte[i]))#画32*32的图列行def p32(self,page,x,y):for e in range(128):bytebin(page[e]).replace(0b,)while len(byte)8:byte0bytefor i in range(8):if byte[i] and e32:self.pixel(xe,yi,int(byte[i]))elif byte[i] and 32e64:self.pixel(xe-32,y8i,int(byte[i]))elif byte[i] and 64e96:self.pixel(xe-64,y16i,int(byte[i]))elif byte[i] and 96e128:self.pixel(xe-96,y24i,int(byte[i]))class SSD1306_I2C(SSD1306):def __init__(self,i2c, addr0x3c, external_vccFalse):self.i2c i2cself.addr addrself.temp bytearray(2)# buffer需要8 * 128的显示字节加1字节命令self.buffer bytearray(8 * 128 1)self.buffer[0] 0x40 # Co0, D/C1self.framebuf framebuf.FrameBuffer1(memoryview(self.buffer)[1:], 128, 64)super().__init__(external_vcc)def write_cmd(self, cmd):self.temp[0] 0x80 # Co1, D/C#0self.temp[1] cmdself.i2c.writeto(self.addr, self.temp)def write_framebuf(self):self.i2c.writeto(self.addr, self.buffer)
功能
显示ASCII字符
from ssd1306 import SSD1306_I2C
from machine import Pin,I2C
i2cI2C(0,sclPin(5),sdaPin(4))
oledSSD1306_I2C(i2c)oled.text(hello world,0,0)oled.show()画任意直线
from ssd1306 import SSD1306_I2C
from machine import Pin,I2C
i2cI2C(0,sclPin(5),sdaPin(4))
oledSSD1306_I2C(i2c)oled.line(0,2,50,60)oled.show()画横线
from ssd1306 import SSD1306_I2C
from machine import Pin,I2C
i2cI2C(0,sclPin(5),sdaPin(4))
oledSSD1306_I2C(i2c)oled.hline(2,30,80)oled.show() 画竖线
from ssd1306 import SSD1306_I2C
from machine import Pin,I2C
i2cI2C(0,sclPin(5),sdaPin(4))
oledSSD1306_I2C(i2c)oled.vline(20,0,40)oled.show() 画矩形
from ssd1306 import SSD1306_I2C
from machine import Pin,I2C
i2cI2C(0,sclPin(5),sdaPin(4))
oledSSD1306_I2C(i2c)
#左上角xy坐标长宽
oled.rect(20,0,40,20)oled.show() 画椭圆
众所周知圆也是椭圆的一种
from ssd1306 import SSD1306_I2C
from machine import Pin,I2C
i2cI2C(0,sclPin(5),sdaPin(4))
oledSSD1306_I2C(i2c)
参数中心点xy坐标x轴向半径y轴向半径fTrue为填充默认不填充
oled.ellipse(20,30,10,20)
oled.ellipse(60,20,10,20,fTrue)oled.show()还有一个参数非常奇怪不常用自己改数字范围0-15体会
from ssd1306 import SSD1306_I2C
from machine import Pin,I2C
i2cI2C(0,sclPin(5),sdaPin(4))
oledSSD1306_I2C(i2c)oled.ellipse(60,20,10,20,m5)oled.show()画立方体
from ssd1306 import SSD1306_I2C
from machine import Pin,I2C
i2cI2C(0,sclPin(5),sdaPin(4))
oledSSD1306_I2C(i2c)
#左前顶面的xy坐标边长
oled.cube(10,10,20)oled.show()画点阵图
from ssd1306 import SSD1306_I2C
from machine import Pin,I2C
i2cI2C(0,sclPin(5),sdaPin(4))
oledSSD1306_I2C(i2c)pic[0x04,0x06,0xFF,0x97,0x57,0x37,0x16,0x04]
#8*8点阵数据图像左上角xy坐标。16*1632*32的也一样只不过改函数名oled.p16()而已
oled.p8(pic,30,30)oled.show()翻转
from ssd1306 import SSD1306_I2C
from machine import Pin,I2C
i2cI2C(0,sclPin(5),sdaPin(4))
oledSSD1306_I2C(i2c)pic1[0x00,0x00,0x0F,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0x0F,0x00,0x00,0x00,
0x00,0x00,0xF0,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0xF0,0x00,0x00,0x00]pic2[0x00,0x7F,0x40,0x48,0x49,0x49,0x49,0x4F,0x49,0x49,0x49,0x48,0x40,0x7F,0x00,0x00,
0x00,0xFF,0x02,0x12,0x12,0x12,0x12,0xF2,0x12,0x52,0x32,0x12,0x02,0xFF,0x00,0x00]oled.p16(pic1,0,0)
oled.p16(pic2,16,0)
oled.show()
#以中心竖直轴翻转填1则正常显示
oled.vv(0) from ssd1306 import SSD1306_I2C
from machine import Pin,I2C
i2cI2C(0,sclPin(5),sdaPin(4))
oledSSD1306_I2C(i2c)pic1[0x00,0x00,0x0F,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0x0F,0x00,0x00,0x00,
0x00,0x00,0xF0,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0xF0,0x00,0x00,0x00]pic2[0x00,0x7F,0x40,0x48,0x49,0x49,0x49,0x4F,0x49,0x49,0x49,0x48,0x40,0x7F,0x00,0x00,
0x00,0xFF,0x02,0x12,0x12,0x12,0x12,0xF2,0x12,0x52,0x32,0x12,0x02,0xFF,0x00,0x00]oled.p16(pic1,0,0)
oled.p16(pic2,16,0)
oled.show()
#以中心水平轴翻转
oled.hv(0)反相
from ssd1306 import SSD1306_I2C
from machine import Pin,I2C
i2cI2C(0,sclPin(5),sdaPin(4))
oledSSD1306_I2C(i2c)pic1[0x00,0x00,0x0F,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0x0F,0x00,0x00,0x00,
0x00,0x00,0xF0,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0xF0,0x00,0x00,0x00]pic2[0x00,0x7F,0x40,0x48,0x49,0x49,0x49,0x4F,0x49,0x49,0x49,0x48,0x40,0x7F,0x00,0x00,
0x00,0xFF,0x02,0x12,0x12,0x12,0x12,0xF2,0x12,0x52,0x32,0x12,0x02,0xFF,0x00,0x00]oled.p16(pic1,0,0)
oled.p16(pic2,16,0)
oled.show()
#默认不反相即默认0
oled.invert(1)滚动
横向滚动
from ssd1306 import SSD1306_I2C
from machine import Pin,I2C
i2cI2C(0,sclPin(5),sdaPin(4))
oledSSD1306_I2C(i2c)pic1[0x00,0x00,0x0F,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0x0F,0x00,0x00,0x00,
0x00,0x00,0xF0,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0xF0,0x00,0x00,0x00]pic2[0x00,0x7F,0x40,0x48,0x49,0x49,0x49,0x4F,0x49,0x49,0x49,0x48,0x40,0x7F,0x00,0x00,
0x00,0xFF,0x02,0x12,0x12,0x12,0x12,0xF2,0x12,0x52,0x32,0x12,0x02,0xFF,0x00,0x00]oled.p16(pic1,0,0)
oled.p16(pic2,16,0)
oled.show()
#默认整个页面一起滚动
#参数
#滚动起始页滚动结束页
#滚动方向默认向左填0向右
#滚动速度0-7默认0不一定数字越大速度越大
oled.h_scroll()oled横滚 纵向滚动
目前我只能实现向上滚还有点bug
from ssd1306 import SSD1306_I2C
from machine import Pin,I2C
i2cI2C(0,sclPin(5),sdaPin(4))
oledSSD1306_I2C(i2c)pic1[0x00,0x00,0x0F,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0x0F,0x00,0x00,0x00,
0x00,0x00,0xF0,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0xF0,0x00,0x00,0x00]pic2[0x00,0x7F,0x40,0x48,0x49,0x49,0x49,0x4F,0x49,0x49,0x49,0x48,0x40,0x7F,0x00,0x00,
0x00,0xFF,0x02,0x12,0x12,0x12,0x12,0xF2,0x12,0x52,0x32,0x12,0x02,0xFF,0x00,0x00]oled.p16(pic1,0,0)
oled.p16(pic2,16,0)
oled.show()
oled.scroll(hScrollOn0) oled纵滚 奇葩滚动
这个函数比较复杂可实现斜着动不同区域各动各的有点bug
from ssd1306 import SSD1306_I2C
from machine import Pin,I2C
i2cI2C(0,sclPin(5),sdaPin(4))
oledSSD1306_I2C(i2c)pic1[0x00,0x00,0x0F,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0x0F,0x00,0x00,0x00,
0x00,0x00,0xF0,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0xF0,0x00,0x00,0x00]pic2[0x00,0x7F,0x40,0x48,0x49,0x49,0x49,0x4F,0x49,0x49,0x49,0x48,0x40,0x7F,0x00,0x00,
0x00,0xFF,0x02,0x12,0x12,0x12,0x12,0xF2,0x12,0x52,0x32,0x12,0x02,0xFF,0x00,0x00]oled.p16(pic1,0,0)
oled.p16(pic2,16,0)
oled.show()
#10个参数。均有默认值
#vScrollOn是否开启竖直滚动默认0关闭竖直滚动置1开启
#vStart竖直滚动开始行
#vEnd竖直滚动结束行
#vSpeed竖直滚动速度数字越大越快
#hScrollOn是否开启横向滚动默认开启置0关闭
#direction横滚方向默认向右置1向左
#hSpeed横滚速度0-7
#hScrollStartPage水平滚动起始页默认0
#hScrollEndPage水平滚动结束页默认7
#hScrollStartColumn水平滚动区域的起始列默认0
#hScrollEndColumn#水平滚动区域的结束列默认127
oled.scroll() oled滚滚滚
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/88942.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!