那字符怎样转化成像素数据
时间: 2023-12-14 13:03:26 浏览: 21
将字符转换成像素数据的过程称为字符的映射,一般采用的方法是字库映射。字库是将每个字符对应的像素点数据事先存储在一个字库表中,当需要显示某个字符时,程序会根据字库表中相应字符的像素点数据进行像素点的填充,从而实现字符的显示。
下面是一个基于ASCII码的字库映射示例:
```c
#define FONT_WIDTH 8 //字体宽度
#define FONT_HEIGHT 16 //字体高度
//ASCII码字体库,每个字符占用16个字节
const unsigned char FONT_ASCII[][16] = {
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //空格
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x00}, //!
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00}, //"
{0x00, 0x00, 0x00, 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //#
//...其它字符
};
//字符映射函数,将ASCII码转换成像素点数据
void Char_Map(unsigned char* ch, unsigned char* map)
{
int i,j,k;
for(i=0; i<FONT_HEIGHT; i++)
{
for(j=0; j<FONT_WIDTH; j++)
{
k = (ch[0]-' ')*FONT_WIDTH+i*2+j/8;
if(FONT_ASCII[k][j%8] & (0x80>>(j%8))) //判断像素点是否填充
map[i*FONT_WIDTH+j] = 1;
else
map[i*FONT_WIDTH+j] = 0;
}
}
}
```
上述程序中,定义了一个字库表`FONT_ASCII`,存储了ASCII码字符对应的像素点数据。`Char_Map()`函数将要显示的字符转换成像素点数据,存储在`map`数组中。具体实现过程是,先将字符`ch`对应的ASC码减去空格字符的ASC码,得到在字库表中的下标k,然后按照像素点的顺序将字库表中对应的像素点数据填充到`map`数组中。字符映射后,就可以将像素点数据传输到OLED屏幕上,显示出相应的字符了。