初级会员

- 积分
- 92
- 金钱
- 92
- 注册时间
- 2021-1-10
- 在线时间
- 28 小时
|
最近在使用stm32驱动ssd1322驱动的OLED屏,128*64的,但是一直不知道怎么显示汉字。打算用例程给的5*7的字模显示拼成16*16的,但是尝试拼成8*16的数字的时候,发现上下部分一直有偏移,最后是通过string函数显示的
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Show Character (5x7)
//
// a: Database
// b: Ascii
// c: Start X Address
// d: Start Y Address
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
void_t soled_show_font57(byte_t a, byte_t b, byte_t c, byte_t d)
{
const byte_t* Src_Pointer;
byte_t i,Font,FB,SB;
byte_t temp;
switch(a)
{
case 1:
Src_Pointer = &CONST_FONT_ASC_ROMAN_5X7[(b-1)][0];
break;
case 2:
Src_Pointer = &CONST_FONT_ASC_8X16[(b-1)][0];
break;
}
ssd_set_remap_format(0x17);
for(i = 0; i <= 4; i++)
{
FB = *Src_Pointer;
Src_Pointer++;
if(i == 4)
{
SB=0x00;
}
else
{
SB=*Src_Pointer;
Src_Pointer++;
}
ssd_set_col_addr(XSHIFT+c, XSHIFT+c);
ssd_set_row_addr(d,d+15);
ssd_set_ram_write();
Font=(FB&0x01)<<7;
Font=(Font==0)?0x00:0xFF;
//Font=Font|(Font<<1)|(Font<<2)|(Font<<3)|(Font<<4)|(Font<<5)|(Font<<6)|(Font<<7);
ssd_write_data(Font);
Font=(SB&0x01)<<7;
Font=(Font==0)?0x00:0xFF;
ssd_write_data(Font);
Font=(FB&0x02)<<6;
Font=(Font==0)?0x00:0xFF;
ssd_write_data(Font);
Font=(SB&0x02)<<6;
Font=(Font==0)?0x00:0xFF;
ssd_write_data(Font);
Font=(FB&0x04)<<5;
Font=(Font==0)?0x00:0xFF;
ssd_write_data(Font);
Font=(SB&0x04)<<5;
Font=(Font==0)?0x00:0xFF;
ssd_write_data(Font);
Font=(FB&0x08)<<4;
Font=(Font==0)?0x00:0xFF;
ssd_write_data(Font);
Font=(SB&0x08)<<4;
Font=(Font==0)?0x00:0xFF;
ssd_write_data(Font);
Font=(FB&0x10)<<3;
Font=(Font==0)?0x00:0xFF;
ssd_write_data(Font);
Font=(SB&0x10)<<3;
Font=(Font==0)?0x00:0xFF;
ssd_write_data(Font);
Font=(FB&0x20)<<2;
Font=(Font==0)?0x00:0xFF;
ssd_write_data(Font);
Font=(SB&0x20)<<2;
Font=(Font==0)?0x00:0xFF;
ssd_write_data(Font);
Font=(FB&0x40)<<1;
Font=(Font==0)?0x00:0xFF;
ssd_write_data(Font);
Font=(SB&0x40)<<1;
Font=(Font==0)?0x00:0xFF;
ssd_write_data(Font);
Font=FB&0x80;
Font=(Font==0)?0x00:0xFF;
ssd_write_data(Font);
Font=SB&0x80;
Font=(Font==0)?0x00:0xFF;
ssd_write_data(Font);
FB =*Src_Pointer+0x08;
SB=*Src_Pointer+0x08;
c++;
}
for(i = 0; i <= 4; i++)
{
FB = *Src_Pointer;
Src_Pointer++;
if(i == 4)
{
SB=0x00;
}
else
{
SB=*Src_Pointer;
Src_Pointer++;
}
ssd_set_col_addr(XSHIFT + temp, XSHIFT + temp);
ssd_set_row_addr(d+8,d+8+15);
ssd_set_ram_write();
Font=(FB&0x01)<<7;
Font=(Font==0)?0x00:0xFF;
//Font=Font|(Font<<1)|(Font<<2)|(Font<<3)|(Font<<4)|(Font<<5)|(Font<<6)|(Font<<7);
ssd_write_data(Font);
Font=(SB&0x01)<<7;
Font=(Font==0)?0x00:0xFF;
ssd_write_data(Font);
Font=(FB&0x02)<<6;
Font=(Font==0)?0x00:0xFF;
ssd_write_data(Font);
Font=(SB&0x02)<<6;
Font=(Font==0)?0x00:0xFF;
ssd_write_data(Font);
Font=(FB&0x04)<<5;
Font=(Font==0)?0x00:0xFF;
ssd_write_data(Font);
Font=(SB&0x04)<<5;
Font=(Font==0)?0x00:0xFF;
ssd_write_data(Font);
Font=(FB&0x08)<<4;
Font=(Font==0)?0x00:0xFF;
ssd_write_data(Font);
Font=(SB&0x08)<<4;
Font=(Font==0)?0x00:0xFF;
ssd_write_data(Font);
Font=(FB&0x10)<<3;
Font=(Font==0)?0x00:0xFF;
ssd_write_data(Font);
Font=(SB&0x10)<<3;
Font=(Font==0)?0x00:0xFF;
ssd_write_data(Font);
Font=(FB&0x20)<<2;
Font=(Font==0)?0x00:0xFF;
ssd_write_data(Font);
Font=(SB&0x20)<<2;
Font=(Font==0)?0x00:0xFF;
ssd_write_data(Font);
Font=(FB&0x40)<<1;
Font=(Font==0)?0x00:0xFF;
ssd_write_data(Font);
Font=(SB&0x40)<<1;
Font=(Font==0)?0x00:0xFF;
ssd_write_data(Font);
Font=FB&0x80;
Font=(Font==0)?0x00:0xFF;
ssd_write_data(Font);
Font=SB&0x80;
Font=(Font==0)?0x00:0xFF;
ssd_write_data(Font);
temp++;
}
ssd_set_remap_format(0x16);
}
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Show String
//
// d: Database
// x: Start X Address
// y: Start Y Address
// * Must write "0" in the end...
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
void_t soled_show_string(byte_t x, byte_t y, byte_t *pstr, byte_t d)
{
byte_t *Src_Pointer;
Src_Pointer=pstr;
// No-Break Space,Must be written first before the string start...
soled_show_font57(1, 96, x, y);
while(1)
{
soled_show_font57(d, *Src_Pointer, x, y);
Src_Pointer++;
x += 4;
if(*Src_Pointer == 0) break;
}
}
|
|