程序实现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条回答
正点原子
1楼-- · 2019-07-21 03:30
 精彩回答 2  元偷偷看……
八度空间
2楼-- · 2019-07-21 05:15
回复【3楼】qq1140981449:
---------------------------------
高位补0
qq1140981449
3楼-- · 2019-07-21 07:45
回复【2楼】正点原子:
---------------------------------
那请问原子哥,补齐8位的时候是按什么规则补齐的?我看有些资料上说是高位对齐,低位补0。可是字库中有一个数据是0x7F,解释不通。或者是我哪方面的知识还有所欠缺,请原子哥指点指点。
小弟很欣赏原子哥的营销手段,所以即使哪里有些瑕疵,那也瑕不掩瑜。
qq1140981449
4楼-- · 2019-07-21 10:09
 精彩回答 2  元偷偷看……
八度空间
5楼-- · 2019-07-21 14:41
好好看下C的书吧
正点原子
6楼-- · 2019-07-21 18:49
 精彩回答 2  元偷偷看……

一周热门 更多>