还是在TFT彩屏上显示大尺寸字符的问题

2019-07-21 02:48发布

本帖最后由 rjx007 于 2018-2-13 13:16 编辑

用原子提供的字符显示函数,可以显示到32*16,48*24。但弄到64*32的就是显示不出来了,搞了几天都不行,字模是自己取的,48*24也是自己取的,就可以正常显示。
请高手指点。



//在指定位置显示一个字符
//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==48)temp=ascii_4824[num][t];              //可以正常显示
                else if(size==64)temp=ascii_6432[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;
                        }
                }           
        }                                            
}   





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
a496298685
1楼-- · 2019-07-22 08:10
rjx007 发表于 2018-2-13 10:50
请问楼上是如何修改程序的?

我直接修改的。我修改的源程序和你的不一样,我怎么讲给你听??

那么该我问你了。

你修改程序之后,为何运行不了,是出了什么问题呢,贴图看看。
rjx007
2楼-- · 2019-07-22 11:17
本帖最后由 rjx007 于 2018-2-13 13:24 编辑

我是用的如下的程序,弄到32x16,48x24的字符都可以,但64x32的就不行了,屏上没有任何反应,我也不知道该修改什么地方。

//在指定位置显示一个字符
//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==48)  temp=ascii_4824[num][t];              //可以正常显示
                else if(size==64)  temp=ascii_6432[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;
                        }
                }           
        }                                            
}   

a496298685
3楼-- · 2019-07-22 16:29
 精彩回答 2  元偷偷看……
rjx007
4楼-- · 2019-07-22 21:24
 精彩回答 2  元偷偷看……
shangdi
5楼-- · 2019-07-23 01:37
你好,请问楼主,你这超过4k的ROM 字符集数组是如何设定的啊?我定义个大的数组 ascii_4824数组得有95*72大了,编译器不通过

一周热门 更多>