stm32单片机、OLED/TFT一个
这里以OLED显示中文为例(TFT一样)
自行理解这一行意思
u8 csize=(size/8 + ((size%8)?1:0)) * (size/2); //得到字体一个字符对应点阵集所占的字节数
/*************************************************************************/
/* 显示字符函数
x: 0~127
y: 0~63
size: 12/16/24
mode:0,反白显示;1,正常显示
*/
/*************************************************************************/
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;
}
}
}
}
显示中文:(16号字体举例:宽8*2 高16)
自行理解这一行意思
u8 csize=(size/8 + ((size%8)?1:0)) * size; //得到字体一个字符对应点阵集所占的字节数
/*************************************************************************/
/*
显示一个汉字
x,y:起点坐标
num :字库中第几个汉字
size:字体大小
mode:模式
*/
/*************************************************************************/
void OLED_ShowGBK(u8 x, u8 y, u8 num, u8 size,u8 mode)
{
u8 temp,t,t1;
u8 y0=y;
//u8 size = 16;
u8 csize=(size/8 + ((size%8)?1:0)) * size; //得到字体一个字符对应点阵集所占的字节数
for(t=0;t<csize;t++)
{
// 我只定义了16,12号字体 没有声明其他字体
if(size==12) temp = gbk_1212[num][t]; //调用1212字体
else if(size==16) temp = gbk_1616[num][t]; //调用1616字体
// 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;
}
}
}
}
推荐使用PCtoLCD2002.exe汉字取模(取模方式已给出)
//16x16 汉字点阵
//每个汉字占32个字节
//PC2LCD2002取模方式设置:阴码+逐列式+顺向+C51格式
//每个汉字所占用的字节数为:(size/8+((size%8)?1:0))*(size),
//其中size:是字库生成时的点阵大小(12/16/24...)
const unsigned char gbk_1616[3][32]={ //16x16
{0x40,0x00,0x40,0x00,0x47,0xFF,0x44,0x12,
0x44,0x22,0x7F,0xC2,0x44,0x02,0x44,0x02,
0x44,0x02,0x7F,0xC2,0x44,0x22,0x44,0x22,
0x47,0xFF,0x40,0x00,0x40,0x00,0x00,0x00},/*"西",0*/
{0x00,0x02,0x42,0x02,0x41,0x82,0x40,0x62,
0x40,0x02,0x7F,0xFE,0x40,0x02,0x40,0x02,
0x40,0x02,0x7F,0xFE,0x40,0x02,0x40,0x22,
0x40,0xC2,0x43,0x02,0x00,0x02,0x00,0x00},/*"亚",1*/
{0x00,0x11,0x20,0x12,0xFF,0xF4,0x24,0x90,
0x24,0x90,0x24,0x98,0xFF,0xF4,0x20,0x13,
0x00,0x06,0x3F,0xF8,0x22,0x00,0x22,0x00,
0x23,0xFF,0x42,0x00,0x02,0x00,0x00,0x00}, /*"斯",2*/
};