打印
[国产单片机]

2.8寸TFT液晶屏 显示ASCII_16x32大小的为啥显示不全

[复制链接]
1288|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
各位大师,最近在写2.8寸TFT_LCD  240*320RGB液晶屏显示,显示ASCII 大小为宽X高=16x32,我在液晶屏上显示的字符都是一半?ASCII大小宽X高=8x16 显示正常,ASCII大小宽X高=16x32只显示一半(详见附件),是我自己按照显示8x16大小的函数修改的,请大家帮忙给指导一下,谢谢!

此函数是显示 宽X高=8x16 显示正常:
void LCD_ShowChar(unsigned int x,unsigned int y,unsigned char num,unsigned char mode)
{
        unsigned char temp;
        unsigned char pos,t;
        unsigned int x0=x;
        unsigned int colortemp=Point_Color;      
       
        if(x>LCD_W-16||y>LCD_H-16)return;            
       
        /* 设置窗口 */
        num=num-' ';                        /* 得到偏移后的值 */
        Address_set(x,y,x+8-1,y+16-1);        /* 设置光标位置 */
        if(!mode)                        /* 非叠加方式 */
        {
                for(pos=0;pos<16;pos++)
                {
                        temp=asc2_1608[(unsigned int)num*16+pos];        /* 调用1608字体 */
                        for(t=0;t<8;t++)
                        {                 
                                if(temp&0x01)Point_Color=colortemp;
                                else Point_Color=Back_Color;
                                LCD_WR_DATA(Point_Color);       
                                temp>>=1;
                                x++;
                        }
                        x=x0;
                        y++;
                }
        }

此函数是ASCII大小宽X高=16x32只显示一半(详见附件),是我自己按照显示8x16大小的函数修改的:
void LCD_ShowChar_32(unsigned int x,unsigned int y,unsigned char num,unsigned char mode)
{
        unsigned int temp;
        unsigned char pos,t;
        unsigned int x0=x;
        unsigned int colortemp=Point_Color;      
       
        if(x>LCD_W-16||y>LCD_H-32) return;            
       
        /* 设置窗口 */
        num=num-' ';                        /* 得到偏移后的值 */
        Address_set(x,y,x+16-1,y+32-1);        /* 设置光标位置 */
        if(!mode)                        /* 非叠加方式 */
        {
                for(pos=0;pos<64;pos++)
                {
                        temp=ascii_table_16x32[(unsigned int)num*64+pos];        /* 调用 */
                        for(t=0;t<16;t++)
                        {                 
                                if(temp&0x01) Point_Color=colortemp;
                                else Point_Color=Back_Color;
                                LCD_WR_DATA(Point_Color);       
                                temp>>=1;
                                x++;
                        }
                        x=x0;
                        y++;
                }
        }


1.jpg (204.96 KB )

1.jpg

使用特权

评论回复

相关帖子

沙发
yml1104| | 2020-4-20 11:16 | 只看该作者
没用过 但是看起来你这个pos 和LCD_W的设置是错的吧

使用特权

评论回复
板凳
ayb_ice| | 2020-4-20 14:07 | 只看该作者
应该是参数设置问题

使用特权

评论回复
地板
jackghl| | 2020-4-20 19:02 | 只看该作者
程序错了,8*16时候 y++  16次,但16*32时,y++ 64次.
ascii_table_16x32 数据类型 不清楚,是uint8_t还是uint16_t?

使用特权

评论回复
5
KloppGuo|  楼主 | 2020-4-25 15:15 | 只看该作者
jackghl 发表于 2020-4-20 19:02
程序错了,8*16时候 y++  16次,但16*32时,y++ 64次.
ascii_table_16x32 数据类型 不清楚,是uint8_t还是u ...

y++ 64次是因为ascii 码取模后是子啊数组里面64个字节对应一个ACII码里面的一个

使用特权

评论回复
6
jackghl| | 2020-4-26 19:48 | 只看该作者
KloppGuo 发表于 2020-4-25 15:15
y++ 64次是因为ascii 码取模后是子啊数组里面64个字节对应一个ACII码里面的一个 ...

那么Address_set(x,y,x+16-1,y+32-1)  这里的限制y 范围只有32,
你觉得y++ 64次 还是正确的?

使用特权

评论回复
7
Ritchie16803| | 2020-10-17 16:05 | 只看该作者
t<16改成8就行了,哈哈

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

30

帖子

0

粉丝