OLED显示如何理解 12*6、16*8、24*12等字符大小

在这里插入图片描述
上图设置的取模方式,在右上角的取模说明里面有。
即:从第一列开始向下每取 8 个点作为一个字节,如果最后不足 8 个点就补满 8 位。(重点!!!)
取模顺序是从高到低,即第一个点作为最高位。
如*-------取为 10000000。其实就是按如图 17.3.3 所示的这种方式:
在这里插入图片描述
从上到下,从左到右,高位在前。我们按这样的取模方式,然后把 ASCII 字符集按 12x6大小、 16x8 和 24x12 大小取模出来(对应汉字大小为 12x12、 16x16 和 24x24,字符的只有汉字的一半大!),保存在 oledfont.h 里面,每个 12x6 的字符占用 12 个字节(注意,由于都是按照字节写入,所有列方向的12个点按照16个点2个字节处理,所以 12x6字符占用2x6=12个字节),每个 16x8 的字符占用16 个字节, 每个 24x12 的字符占用 36 个字节。
下面分析一段代码:

//在指定位置显示一个字符,包括部分字符
//x:0~127
//y:0~63
//mode:0,反白显示;1,正常显示				 
//size:选择字体 12/16/24
void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode)
{      			    
	u8 temp,t,t1;
	u8 y0=y;
	u8 csize=(size/8+((size%8)?1:0))*(size/2);		//得到字体一个字符对应点阵集所占的字节数
	chr=chr-' ';//得到偏移后的值		 
    for(t=0;t<csize;t++)
    {   
			if(size==12)
				temp=asc2_1206[chr][t]; 	 	//调用1206字体
			else
				if(size==16)
					temp=asc2_1608[chr][t];	//调用1608字体
			else
				if(size==24)
					temp=asc2_2412[chr][t];	//调用2412字体
			else
				return;								//没有的字库
			for(t1=0;t1<8;t1++)
			{
				if(temp&0x80)
					OLED_DrawPoint(x,y,mode);
				else
					OLED_DrawPoint(x,y,!mode);
				temp<<=1;
				
				y++;
				if((y-y0)==size)
				{
					y=y0;
					x++;
					break;
				}
			}  	 
    }          
}

假设打印12*6的字符,当size=12时,csize = 12。
在这里插入图片描述

				if((y-y0)==size)
				{
					y=y0;
					x++;
					break;
				}

虽然字符的高度占用2个字节16个点,但是这段代码限制了显示的高度为size,即显示的高度为12。
其他同理即可。

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在ESP32上驱动128x64的OLED显示屏,并实现超长字符的滚动显示,您可以使用Adafruit的SSD1306库。以下是一个示例代码,展示了如何在ESP32上实现这个功能: ```cpp #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define OLED_ADDR 0x3C #define OLED_SDA 4 #define OLED_SCL 15 Adafruit_SSD1306 display(128, 64, &Wire, OLED_ADDR); void setup() { Wire.begin(OLED_SDA, OLED_SCL); if (!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR)) { Serial.println(F("SSD1306 initialization failed")); while (1); } display.clearDisplay(); } void loop() { String longText = "This is a very long text that will be scrolled on the OLED display."; // 设置滚动区域 display.setTextWrap(false); display.setScrollLeft(0); display.setScrollRight(display.width() - 1); // 清空显示屏 display.clearDisplay(); // 设置字体大小 display.setTextSize(1); display.setTextColor(SSD1306_WHITE); // 显示滚动文本 int16_t y = (display.height() - display.fontHeight()) / 2; display.setCursor(0, y); display.println(longText); display.display(); // 滚动文本 while (display.getScroll()) { display.scroll(-1); delay(100); display.display(); } delay(2000); } ``` 在上面的示例中,我们首先定义了OLED显示屏的I2C地址(OLED_ADDR)以及SDA和SCL引脚(OLED_SDA和OLED_SCL)。然后,我们通过Adafruit_SSD1306库创建了一个display对象,指定了OLED的尺寸和I2C总线。 在`setup`函数中,我们初始化OLED显示屏,并在`loop`函数中进行滚动文本的操作。首先,我们定义了一个长文本字符串(longText),然后设置滚动区域并清空显示屏。接下来,我们设置字体大小和颜色,并将长文本打印到显示屏上。最后,我们通过`scroll`函数来实现文本的滚动,通过调整delay的时间可以控制滚动速度。 希望这个示例能满足您的需求!如果您有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值