显示程序为:OLED_ShowString(0,0,"ALIENTEK",24);
在执行这段语句时,调用了下面的显示程序:
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;
}
}
}
}
我的疑问是要显示的字符串为"ALIENTEK",通过第一段标红的语句得到chr后,再通过第二段标红的语句得到temp.我自己阅读程序就感觉temp已经代表了字符串,可是这么长的一段字符串只要减去空字符串后就能得到字符串中每个字符的位置了吗?我觉得应该是先用A减,再用L减,逐次下去...
还有就是第三段标红的&0x80是什么意思?0x80从哪来的?
谢谢指导!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
第一行红 {MOD}代码:要想显示字符,首先得先得到字符的整个字库信息,第一行红 {MOD}的就是得到字符在字符数组中的位置,也就是获取某个字符对应的字库信息。
第二行红 {MOD}代码:得到整个字符的字库信息以后就是显示,一个字符的字库肯定有很多字节的,要想显示这个字符就是将这些字节对应的显示到OLED上,那么就一个字节一个字节的去读取,这就是第二行红 {MOD}代码的功能。
第三行红 {MOD}代码:都到一个某个字符的某一字节字库信息以后就可以显示在OLED上了,那么这个字节的字库是怎么和OLED联系起来的呢?那就是OLED的打点函数,而每个字节的每个bit代表一个像素要不要显示,所以实际操作起来就是判断一个字节的每个bit是否需要显示,需要显示的就显示出来,从最高位bit开始一直到最低位bit0,temp&0x80就是读取每个bit的值的!
一周热门 更多>