前置学习:【江协科技】
[模块教程] 第1期 0.96寸OLED显示屏_哔哩哔哩_bilibili
简介:
学完对应教程后,想设计一个属于自己的英文logo,但是发现模块中已经有了定义英文字符且大小固定,那么怎样才能显示出不固定大小的任意英文logo呢?
错误展示:
最开始的想法,将想要的英文字符输入取模软件,并通过调节字宽字高【像素点个数】来控制大小,然后将字符看作是图像定义,最后调用:如下
生成字模【注意设置为C51格式】
在OLED_Data.c中以图像的形式定义:
OLED_Data.h中声明
在主函数中调用:
看似很简单,但是当应用时会发现显示的图像与想要的完全不同:
错误原因:
这里单片机在写入显示屏是是按照字节从左往右写入,且一个字节8位相应对应8个像素点,但是这8个像素点在显示屏中为上下连续的8个像素点的8个像素点,如:上面代码中“Y”字符的第一个数据0x00对应写入第1到8行的第一列像素点,0x40写入第1到8行的第二列像素点......
所以当代码图像如上定义时显示屏写入的数据就成为了:这就导致了显示的错位
0x00,0x40,0x40,0xC0,0xC0,0xC0,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0xC0,
0xC0,0x40,0x40,0x00,//第1-8行前20列
0x00,0x00,0x00,0x01,0x07,0x1F,0x7C,0xF0,0xC0,0x00,0x00,0x80,0xE0,0x38,0x0E,0x03,
0x00,0x00,0x00,0x00,//第1-8行21-40列
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0xFF,0xFC,0x03,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,//第1-8行41-60列
0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x0C,0x0F,0x0F,0x08,0x08,0x08,0x00,0x00,
0x00,0x00,0x00,0x00,//第9-16行前20列
/*"Y",0*/
0x00,0x40,0x40,0xC0,0xC0,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x40,
0xC0,0x40,0x40,0x00,//第9-16行21-40列
0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0x00,0x00,0x00,//第9-16行41-60列
0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0x00,0x00,0x00,//第17-24行前20列
0x00,0x00,0x00,0x01,0x03,0x07,0x04,0x0C,0x08,0x08,0x08,0x08,0x04,0x04,0x02,0x03,
0x00,0x00,0x00,0x00,//第17-24行21-40列
/*"U",1*/
0x00,0x40,0x40,0xC0,0xC0,0xC0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xC0,0x80,0x80,
0x00,0x00,0x00,0x00,//第17-24行41-60列
0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0x73,0x7F,
0x3F,0x00,0x00,0x00,//第25-32行前20列
0x00,0x00,0x00,0xFF,0xFF,0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x03,0x8E,
0xFC,0xF8,0x60,0x00,//第25-32行21-40列
0x00,0x08,0x08,0x0F,0x0F,0x0F,0x08,0x08,0x08,0x08,0x08,0x08,0x04,0x04,0x06,0x07,
0x03,0x01,0x00,0x00,//第25-32行41-60列
/*"B",2*/
解决方式:
将对应需要显示的图像块放入对应的行列【类似拼图】,即可显示正确的图像:
0x00,0x40,0x40,0xC0,0xC0,0xC0,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0xC0,
0xC0,0x40,0x40,0x00,//第1-8行前20列 原/*"Y",0*/第1-8行前20列
0x00,0x40,0x40,0xC0,0xC0,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x40,
0xC0,0x40,0x40,0x00,//第1-8行21-40列 原/*"U",1*/第9-16行21-40列
0x00,0x40,0x40,0xC0,0xC0,0xC0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xC0,0x80,0x80,
0x00,0x00,0x00,0x00,//第1-8行21-40列 原/*"B",2*/第17-24行41-60列
0x00,0x00,0x00,0x01,0x07,0x1F,0x7C,0xF0,0xC0,0x00,0x00,0x80,0xE0,0x38,0x0E,0x03,
0x00,0x00,0x00,0x00,//第9-16行前20列 原/*"Y",0*/第1-8行21-40列
0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0x00,0x00,0x00,//第9-16行21-40列 原/*"U",1*/第9-16行41-60列
0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0x73,0x7F,
0x3F,0x00,0x00,0x00,//第9-16行41-60列 原/*"B",2*/第25-32行前20列
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0xFF,0xFC,0x03,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,//第17-24行前20列 原/*"Y",0*/第1-8行41-60列
0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0x00,0x00,0x00,//第17-24行21-40列 原/*"U",1*/第17-24行前20列
0x00,0x00,0x00,0xFF,0xFF,0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x03,0x8E,
0xFC,0xF8,0x60,0x00,//第17-24行41-60列 原/*"B",2*/第25-32行21-40列
0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x0C,0x0F,0x0F,0x08,0x08,0x08,0x00,0x00,
0x00,0x00,0x00,0x00,//第25-32行前20列 原/*"Y",0*/第9-16行前20列
0x00,0x00,0x00,0x01,0x03,0x07,0x04,0x0C,0x08,0x08,0x08,0x08,0x04,0x04,0x02,0x03,
0x00,0x00,0x00,0x00,//第25-32行21-40列 原/*"U",1*/第17-24行21-40列
0x00,0x08,0x08,0x0F,0x0F,0x0F,0x08,0x08,0x08,0x08,0x08,0x08,0x04,0x04,0x06,0x07,
0x03,0x01,0x00,0x00,//第25-32行41-60列 原/*"B",2*/第25-32行41-60列