本帖最后由 rjx007 于 2018-2-10 13:04 编辑
想在LCD上显示尺寸较大的数字,但经试验,这个函数最大只能显示24*12的数字,现在想显示如48*24,64*32的数字,该怎么修改这个函数才能行?或能提供一个能显示大字符的函数也可。
//显示数字,高位为0,则不显示
//x,y :起点坐标
//len :数字的位数
//size:字体大小
//color:颜 {MOD}
//num:数值(0~4294967295);
void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len,u8 size)
{
u8 t,temp;
u8 enshow=0;
for(t=0;t<len;t++)
{
temp=(num/LCD_Pow(10,len-t-1))%10;
if(enshow==0&&t<(len-1))
{
if(temp==0)
{
LCD_ShowChar(x+(size/2)*t,y,' ',size,0);
continue;
}else enshow=1;
}
LCD_ShowChar(x+(size/2)*t,y,temp+'0',size,0);
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
下面这个显示字符的函数,发现一个奇怪的问题:就是对于形参 u8 num,在实际使用时,并不是要显示字符在字库数组中的顺序号,而是要输入实际的字符加单引号,如要显示字符A,在形参u8 num处要输入‘A’才行,或是要按ASCII码表的顺序号。想不通是为什么。一般情况下,都是输入该字符在数组中的顺序号就行了。
另外,函数中红 {MOD}的一行是我加上去的,想显示32x16大小的字符,且已自己取模做好了32x16的字库(一个二维数组),但不能正常显示。求教如何搞?
//在指定位置显示一个字符
//x,y:起始坐标
//num:要显示的字符:" "--->"~"
//size:字体大小 12/16/24
//mode:叠加方式(1)还是非叠加方式(0)
void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)
{
u8 temp,t1,t;
u16 y0=y;
u8 csize=(size/8+((size%8)?1:0))*(size/2); //得到字体一个字符对应点阵集所占的字节数
num=num-' ';//得到偏移后的值(ASCII字库是从空格开始取模,所以-' '就是对应字符的字库)
for(t=0;t<csize;t++)
{
if(size==12)temp=ascii_1206[num][t]; //调用1206字体
else if(size==16)temp=ascii_1608[num][t]; //调用1608字体
else if(size==24)temp=ascii_2412[num][t]; //调用2412字体
else if(size==32)temp=ascii_3216[num][t];
else return; //没有的字库
for(t1=0;t1<8;t1++)
{
if(temp&0x80)LCD_DrawFRONT_COLOR(x,y,FRONT_COLOR);
else if(mode==0)LCD_DrawFRONT_COLOR(x,y,BACK_COLOR);
temp<<=1;
y++;
if(y>=tftlcd_data.height)return; //超区域了
if((y-y0)==size)
{
y=y0;
x++;
if(x>=tftlcd_data.width)return; //超区域了
break;
}
}
}
}
循环一下看看就知道了。
您好,我最近也在做显示32*32的数字,而不是中文,中文自己取模可以显示,数字就乱码了,您解决了吗,可以分享一下吗
一周热门 更多>