首页 > 其他分享 >PCtoLCD图像取模oled绘制,主要还是自己懂

PCtoLCD图像取模oled绘制,主要还是自己懂

时间:2023-03-01 20:02:25浏览次数:33  
标签:取模 0xC0 0x00 0x01 0x03 oled 0x80 PCtoLCD 0x0C

oled显示图像,网上有很多方案

无外乎取模--》绘制

这里重新整理一次

需求:要绘制一个48x48的方图在x,y

首先在PCtoLCD中取模

这里使用最形象的绘制过程:

从上到下 一行一行的绘制点,

所以需要一个二维数组代表这个图片

图像宽48个像素,取模的时候每8个像素用一个数字代表,那么每行就是6个数字,所以这里点阵为6,即每一行有6个数字

图像高48个像素,所以生成的数字应该有48个一维x数组

生成的模

[0x00,0x00,0x00,0x00,0x00,0x00],
[0x00,0x00,0x00,0x00,0x00,0x00],
[0x00,0x00,0x00,0x00,0x00,0x00],
[0x00,0x00,0x00,0x00,0x00,0x00],
[0x00,0x00,0x00,0x00,0x00,0x00],
[0x00,0x00,0x00,0x00,0x00,0x00],
[0x00,0x00,0x00,0x00,0x00,0x01],
[0x00,0x00,0x00,0x00,0x00,0x01],
[0x00,0x00,0x00,0x00,0x00,0x03],
[0x00,0x00,0x00,0x00,0x00,0x06],
[0x00,0x00,0x00,0x00,0x00,0x04],
[0x00,0x00,0x00,0x00,0x00,0x0C],
[0x00,0x00,0x00,0x00,0x00,0x18],
[0x00,0x00,0x00,0x00,0x00,0x30],
[0x00,0x00,0x00,0x00,0x00,0x60],
[0x00,0x00,0x00,0x00,0x00,0xC0],
[0x00,0x00,0x00,0x00,0x00,0x80],
[0x00,0x00,0x00,0x00,0x01,0x80],
[0x00,0x00,0x00,0x00,0x03,0x00],
[0x00,0x00,0x00,0x00,0x06,0x00],
[0x00,0x00,0x00,0x00,0x0C,0x00],
[0x00,0x00,0x00,0x00,0x18,0x00],
[0x00,0x00,0x00,0x00,0x30,0x00],
[0x00,0x00,0x00,0x00,0x60,0x00],
[0x00,0x00,0x00,0x00,0xC0,0x00],
[0x00,0x00,0x00,0x01,0x80,0x00],
[0x10,0x00,0x00,0x03,0x00,0x00],
[0x10,0x00,0x00,0x06,0x00,0x00],
[0x18,0x00,0x00,0x0C,0x00,0x00],
[0x08,0x00,0x00,0x18,0x00,0x00],
[0x0C,0x00,0x00,0x30,0x00,0x00],
[0x04,0x00,0x00,0xC0,0x00,0x00],
[0x06,0x00,0x01,0x80,0x00,0x00],
[0x02,0x00,0x03,0x00,0x00,0x00],
[0x03,0x00,0x0C,0x00,0x00,0x00],
[0x01,0x80,0x38,0x00,0x00,0x00],
[0x00,0xC0,0xE0,0x00,0x00,0x00],
[0x00,0x61,0x80,0x00,0x00,0x00],
[0x00,0x3E,0x00,0x00,0x00,0x00],
[0x00,0x00,0x00,0x00,0x00,0x00],
[0x00,0x00,0x00,0x00,0x00,0x00],
[0x00,0x00,0x00,0x00,0x00,0x00],
[0x00,0x00,0x00,0x00,0x00,0x00],
[0x00,0x00,0x00,0x00,0x00,0x00],
[0x00,0x00,0x00,0x00,0x00,0x00],
[0x00,0x00,0x00,0x00,0x00,0x00],
[0x00,0x00,0x00,0x00,0x00,0x00],
[0x00,0x00,0x00,0x00,0x00,0x00],

使用方法

from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
import time

print("ssd")

display = None

def check():
    print('connect oled module to esp8266')
    global display
    while True:
        print('connecting')
        i2c = I2C(scl=Pin(5), sda=Pin(4))
        addr = i2c.scan()
        if len(addr):
            display = SSD1306_I2C(128, 64, i2c, addr=addr[0])
            print('connected')
            break
        time.sleep(1)
        

check()


x_axis=0
y_axis=0


byte_data = [
[0x00,0x00,0x00,0x00,0x00,0x00],
[0x00,0x00,0x00,0x00,0x00,0x00],
[0x00,0x00,0x00,0x00,0x00,0x00],
[0x00,0x00,0x00,0x00,0x00,0x00],
[0x00,0x00,0x00,0x00,0x00,0x00],
[0x00,0x00,0x00,0x00,0x00,0x00],
[0x00,0x00,0x00,0x00,0x00,0x01],
[0x00,0x00,0x00,0x00,0x00,0x01],
[0x00,0x00,0x00,0x00,0x00,0x03],
[0x00,0x00,0x00,0x00,0x00,0x06],
[0x00,0x00,0x00,0x00,0x00,0x04],
[0x00,0x00,0x00,0x00,0x00,0x0C],
[0x00,0x00,0x00,0x00,0x00,0x18],
[0x00,0x00,0x00,0x00,0x00,0x30],
[0x00,0x00,0x00,0x00,0x00,0x60],
[0x00,0x00,0x00,0x00,0x00,0xC0],
[0x00,0x00,0x00,0x00,0x00,0x80],
[0x00,0x00,0x00,0x00,0x01,0x80],
[0x00,0x00,0x00,0x00,0x03,0x00],
[0x00,0x00,0x00,0x00,0x06,0x00],
[0x00,0x00,0x00,0x00,0x0C,0x00],
[0x00,0x00,0x00,0x00,0x18,0x00],
[0x00,0x00,0x00,0x00,0x30,0x00],
[0x00,0x00,0x00,0x00,0x60,0x00],
[0x00,0x00,0x00,0x00,0xC0,0x00],
[0x00,0x00,0x00,0x01,0x80,0x00],
[0x10,0x00,0x00,0x03,0x00,0x00],
[0x10,0x00,0x00,0x06,0x00,0x00],
[0x18,0x00,0x00,0x0C,0x00,0x00],
[0x08,0x00,0x00,0x18,0x00,0x00],
[0x0C,0x00,0x00,0x30,0x00,0x00],
[0x04,0x00,0x00,0xC0,0x00,0x00],
[0x06,0x00,0x01,0x80,0x00,0x00],
[0x02,0x00,0x03,0x00,0x00,0x00],
[0x03,0x00,0x0C,0x00,0x00,0x00],
[0x01,0x80,0x38,0x00,0x00,0x00],
[0x00,0xC0,0xE0,0x00,0x00,0x00],
[0x00,0x61,0x80,0x00,0x00,0x00],
[0x00,0x3E,0x00,0x00,0x00,0x00],
[0x00,0x00,0x00,0x00,0x00,0x00],
[0x00,0x00,0x00,0x00,0x00,0x00],
[0x00,0x00,0x00,0x00,0x00,0x00],
[0x00,0x00,0x00,0x00,0x00,0x00],
[0x00,0x00,0x00,0x00,0x00,0x00],
[0x00,0x00,0x00,0x00,0x00,0x00],
[0x00,0x00,0x00,0x00,0x00,0x00],
[0x00,0x00,0x00,0x00,0x00,0x00],
[0x00,0x00,0x00,0x00,0x00,0x00]
]

print('byte_data',len(byte_data))
#print(fonts[k], "offset=", offset_)
for y in range(len(byte_data)):
    line=''
    for x8 in range(len(byte_data[y])):
        
        # 进制转换、补全
        a_ = '{:0>8b}'.format(byte_data[y][x8])
        
        line=line+a_
        for x in range(0, 8):
            display.pixel( x+(x8*8), y , int(a_[x]))

    print('y',y,'line',line)

 可以很形象的看出绘制的来源

 

 之后可以优化为函数,也可以直接操作一维数组

 

标签:取模,0xC0,0x00,0x01,0x03,oled,0x80,PCtoLCD,0x0C
From: https://www.cnblogs.com/timseng/p/17169469.html

相关文章

  • linux驱动移植-SPI驱动移植(OLED SSD1306)
    在之前Mini2440裸机开发之SPI(OLEDSSD1306)中我们介绍了关于OLEDSSD1306相关的知识,这里我们将会学习以内核驱动的方式去控制OLED。一、OLED128x64(SSD1306)1.1引脚说明当......
  • linux驱动移植-I2C驱动移植(OLED SSD1306/AT24C08)
    在这一节将会介绍S3C2440I2C适配器的注册,以及AT24C08、SSD1606OLEDI2C设备驱动的编写。一、I2C适配器注册在Mini2440裸机开发之I2C(AT24C08)我们介绍了S3C2440这款SOC的......
  • java中取模的本质,即%的运算结果
    Java中%的本质如下公式:m%n=m-(int)(m/n)*n且看例题已知a=2,b=3,则表达式a%b*4%b的值为(2)运用公式得知:a%b=2%3=2-(0)3=2其中2/3=0.666666,取整数为04......
  • linux驱动移植-I2C驱动移植(OLED SSD1306/AT24C08)
    ----------------------------------------------------------------------------------------------------------------------------内核版本:linux5.2.8根文件系统:busybo......
  • ESP32+Arduino+OLED+u8g2播放视频
    1、思路分析ESP32采用Arduino开发,结合u8g2模块可以很方便地实现在oled上显示图片。因此,只需要将一个视频拆开成一帧帧,然后循环显示即可。然而,有几个问题:视频太大,esp3......
  • 连乘取模
    \(1\leqn\leq1e18,1\leqp\leq10^6\)求\(n!\)%p的结果当n>=p时,阶乘中肯定有个乘数为p,取模为0,直接输出即可当n<p时,阶乘的时间复杂度\(\leqO(p)\)所以对于取模问题......
  • 64 位整数乘法取模
    \((a\timesb)\bmodp\),\(a,b<p\leq10^{18}\)不说龟速乘了。\[(a\timesb)\bmodp=a\timesb-\left\lfloor\frac{a\timesb}{p}\right\rfloor\timesp=\left(a\timesb......
  • iPhone 8将采用OLED显示屏强势来袭
    据外媒报道,苹果未对今年发布的旗舰智能手机iPhone7进行大幅更新,原因是这家公司希望在明年iPhone迎来上市十周年时,能够对这款产品做出令人惊讶的调整。这早已是科技产业......
  • OLED显示大字符和汉字及反显操作+51普中单片机
    1实验现象2实验原理(略)3系统设计(略)4硬件设计(略)5软件设计5.1主函数#include"OLED.H"#include"bmp.h"intmain(void){u8t='';//......
  • OLED显示图片和符号+普中51单片机+1.3寸I2C4针
    1实验现象2实验原理OLED(OrganicLight-EmittingDiode)有机发光二极管又称为有机激光显示,OLED显示技术具有自发光的特性,采用非常薄的有机材料涂层,和玻璃基板,当有......