想在LCD上显示较大的数字,这个函数应怎么修改才行?

2019-07-21 06:05发布

本帖最后由 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);
        }
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
rjx007
1楼-- · 2019-07-23 01:21
本帖最后由 rjx007 于 2018-2-10 11:16 编辑

下面这个显示字符的函数,发现一个奇怪的问题:就是对于形参 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;
                        }
                }           
        }                                            
}   
一抹残阳
2楼-- · 2019-07-23 06:50
可以吧  我以前做的是8x16的 后来自己改到了12x24  我用的是  1.3寸的OLED  自己先看懂程序  在慢慢修改
czhaii
3楼-- · 2019-07-23 09:49
可以把LCD_DrawFRONT_COLOR(x,y,FRONT_COLOR);函数改成串口数据输出仿真。
循环一下看看就知道了。
rjx007
4楼-- · 2019-07-23 12:29
 精彩回答 2  元偷偷看……
哈哈是个潜力股
5楼-- · 2019-07-23 18:16
rjx007 发表于 2018-2-9 16:22
LCD_ShowChar这个函数我也试了,最大也是只能显示24x12的数字,我自己取模分别做了几个0~9这十个数字的32x1 ...

您好,我最近也在做显示32*32的数字,而不是中文,中文自己取模可以显示,数字就乱码了,您解决了吗,可以分享一下吗
哈哈是个潜力股
6楼-- · 2019-07-23 21:41
哪个爸爸给讲解一下

一周热门 更多>