【求分析】最近在研究ATTINY85的时候发现个OLED库,有段代码很神奇
先上代码库这个库里边有一段代码,是把标准5*8的英文字库放大显示
首先,我们看一下标准大小的显示代码
void OLED::ssd1306_str_small(uint8_t x, uint8_t y, const char ch[], boolean invert)
{
uint8_t c,i,j=0,pa;
while(ch != '\0')
{
c = ch - 32;
if(x>123)
{
x=0;
y++;
}
ssd1306_setpos(x,y);
for(i=0;i<5;i++)
{
pa = pgm_read_byte(&font5_8) & 0x7f;
ssd1306_data(invert?(pa^0xff):pa);
}
ssd1306_data(invert?0xff:0); //6th column
x += 6;
j++;
}
}
上面是函数原型,下面是调用代码
display.ssd1306_str_small(62,3,"Digistump");
--------------------------------------------我是Maxims哥哥的分割线----------------------------------------------------
再看放大显示的函数原型
void OLED::ssd1306_str_big(uint8_t x, uint8_t y,const char ch[], boolean invert)
{
uint8_t c,i,j=0,pa,spa;
while (ch!='\0')
{
c = ch - 32;
if (x>118)
{
x=0;
y++;
}
ssd1306_setpos(x,y+1);
for(i=0;i<5;i++)
{
pa = pgm_read_byte(&font5_8);
spa = ((pa & 0x40)?0x30:0) | ((pa & 0x20)?0x0c:0) | ((pa & 0x10)?0x03:0);
ssd1306_data(invert?(spa^0xff):spa);
ssd1306_data(invert?(spa^0xff):spa);
}
ssd1306_data(invert?0xff:0);
ssd1306_data(invert?0xff:0);
ssd1306_setpos(x,y);
for(i=0;i<5;i++)
{
pa = pgm_read_byte(&font5_8);
spa = ((pa & 0x08)?0xc0:0) | ((pa & 0x04)?0x30:0) | ((pa & 0x02)?0x0c:0) | ((pa & 0x01)?0x03:0);
ssd1306_data(invert?(spa^0xff):spa);
ssd1306_data(invert?(spa^0xff):spa);
}
ssd1306_data(invert?0xff:0);
ssd1306_data(invert?0xff:0);
x += 12;
j++;
}
}
上面是放大显示的函数原型,下面是调用代码
display.ssd1306_str_big(42, 1, "DEMO");
--------------------------------------------分割线又飘过了----------------------------------------------------
这是字库部分内容0~9
{0x3e, 0x51, 0x49, 0x45, 0x3e}, // 30 0
{0x80, 0x42, 0x7f, 0x40, 0x80}, // 31 1
{0x42, 0x61, 0x51, 0x49, 0x46}, // 32 2
{0x21, 0x41, 0x45, 0x4b, 0x31}, // 33 3
{0x18, 0x14, 0x12, 0x7f, 0x10}, // 34 4
{0x27, 0x45, 0x45, 0x45, 0x39}, // 35 5
{0x3c, 0x4a, 0x49, 0x49, 0x30}, // 36 6
{0x01, 0x71, 0x09, 0x05, 0x03}, // 37 7
{0x36, 0x49, 0x49, 0x49, 0x36}, // 38 8
{0x06, 0x49, 0x49, 0x29, 0x1e}, // 39 9
--------------------------------------------分割线我又飘过了----------------------------------------------------
那么,它放大5*8字库到大概2~4倍显示的原理是什么呢?
求分析,谢谢 70多个人看~么一个发表点意见么? 看过别外一个库,放大就是把一个点用四个点显示。 老胖熊 发表于 2016-3-15 09:56 static/image/common/back.gif
看过别外一个库,放大就是把一个点用四个点显示。
原理是这样的,就如我的代码一样,我知道大概每句怎么用。
可是,代码为什么要这么写?
页:
[1]