程序实现1206字库的显示问题

2019-07-21 00:27发布

[mw_shl_code=c,true]程序是TFTLCD显示实验中lcd.c文件中的一个显示字符的函数。里面有一个for循环嵌套,外层for循环用于累加字符的八位数据个数,内层for循环通过&0x80得到八位数据的每一位。 那么问题来了:现在提供了两个字库:1206的和1608的。1206的字库只需要内层的for循环得到六位数据就行了,为什么也要取八位? 【我理解的是1206的字库每个字由高12个像素,宽6个像素的12*6个像素点构成,外层for循环负责行数的扫描(12行),内层for循环负责列数的扫描(每行有6列), 难道是我理解错了?】 void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode) { u8 temp,t1,t; u16 y0=y; u16 colortemp=POINT_COLOR; num=num-' '; if(!mode) { for(t=0;t<size;t++) { if(size==12) temp=asc2_1206[num][t]; else temp=asc2_1608[num][t]; for(t1=0;t1<8;t1++) { if(temp&0x80) POINT_COLOR=colortemp; else POINT_COLOR=BACK_COLOR; LCD_DrawPoint(x,y); temp<<=1; y++; if(x>=lcddev.width) { POINT_COLOR=colortemp; return; } if((y-y0)==size) { y=y0; x++; if(x>=lcddev.width) { POINT_COLOR=colortemp; return; } break; } } } }else { for(t=0;t<size;t++) { if(size==12) temp=asc2_1206[num][t]; else temp=asc2_1608[num][t]; for(t1=0;t1<8;t1++) { if(temp&0x80) LCD_DrawPoint(x,y); temp<<=1; y++; if(x>=lcddev.height) { POINT_COLOR=colortemp; return; } if((y-y0)==size) { y=y0; x++; if(x>=lcddev.width) { POINT_COLOR=colortemp; return; } break; } } } } POINT_COLOR=colortemp; } [/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
qq1140981449
1楼-- · 2019-07-22 00:41
回复【7楼】正点原子:
---------------------------------
好的,我试试。谢谢原子哥。
13128927795
2楼-- · 2019-07-22 05:17
 0x18,0x00,0x20,0x00,0x23,0x40,0x24,0x00,0x18,0x00,0x00,0x00},/*"?",0*/

{0x3C,0x80,0x24,0x40,0x24,0x40,0x24,0x40,0x23,0x80,0x00,0x00},/*"5",0*/
1206是将每列(共6列)下面那四位补零。即对"5"而言,偶数位为0x80,,0x40,,0x40,,0x40,0x80,,0x00,这几个数的后四位二进制的0是补上的

13128927795
3楼-- · 2019-07-22 07:45
回复【8楼】qq1140981449:
---------------------------------
由于y到12时,退出内层循环后边补上的0根本没有执行,哈哈,但是字库作为一个标准,还是补上了0

我建了个战舰stm32交流群 看书的时候遇到问题可以在里面讨论  320350722
ownDefine
4楼-- · 2019-07-22 08:42
 精彩回答 2  元偷偷看……

一周热门 更多>