OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2903|回复: 8

液晶屏显示ASCII乱码问题--跪求赐教

[复制链接]

3

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2019-5-28
在线时间
14 小时
发表于 2019-5-28 15:36:28 | 显示全部楼层 |阅读模式
本帖最后由 xianglongjudz 于 2019-5-28 15:42 编辑

STM32F103配TFT-LCD液晶屏显示ASCII(24*12    32*16)乱码问题
12*06   16*08  两种ASCII显示正常(用如下函数:void Show_Str(u16 x, u16 y, u16 fc, u16 bc, u8 *str,u8 size,u8 mode),此函数显示文字正常)
24*12    32*16)显示乱码
请大家多多指点,问题 出在哪里!

程序如下:
void LCD_ShowChar(u16 x,u16 y,u16 fc, u16 bc, u8 num,u8 size,u8 mode)
{  
  u16 temp;
  u16 pos,t;
        u16 colortemp=POINT_COLOR;                        
        num=num-' ';                                 
        LCD_SetWindows(x,y,x+size/2-1,y+size-1);  
        if(!mode)                              
         {for(pos=0;pos<size;pos++)
                { if            (size==12)temp=asc2_1206[num][pos];
                        else if(size==16)temp=asc2_1608[num][pos];
                        else if(size==24)temp=asc2_2412[num][pos];
                        else if(size==32)temp=asc2_3216[num][pos];
                        else return;
                        for(t=0;t<size/2;t++){if(temp&0x01)LCD_DrawPoint_16Bit(fc);else LCD_DrawPoint_16Bit(bc);temp>>=1;}                        
                }        
         }
        else                                         
        { for(pos=0;pos<size;pos++)
                { if     (size==12)temp=asc2_1206[num][pos];
                        else if(size==16)temp=asc2_1608[num][pos];
                        else if(size==24)temp=asc2_2412[num][pos];
                        else if(size==32)temp=asc2_3216[num][pos];
                        for(t=0;t<size/2;t++){POINT_COLOR=fc;if(temp&0x01)LCD_DrawPoint(x+t,y+pos);temp>>=1;}
                }
        }
        POINT_COLOR=colortemp;        
        LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);
}


void Show_Str(u16 x, u16 y, u16 fc, u16 bc, u8 *str,u8 size,u8 mode)
{                                       
        u16 x0=x;                                                                    
          u8 bHz=0;
    while(*str!=0)
    { if(!bHz)
        {if(x>(lcddev.width-size/2)||y>(lcddev.height-size))
                           return;
                if(*str>0x80)bHz=1;
                else              //×&#214;·&#251;
                { if(*str==0x0D){y+=size;x=x0;str++;}
                        else{if(size>32)
                                {LCD_ShowChar(x,y,fc,bc,*str,32,mode);x+=size/2;}
                               else
                                {LCD_ShowChar(x,y,fc,bc,*str,size,mode);x+=size/2;}
                             }
                                     str++;                        
                }
        }
                                else
        {if(x>(lcddev.width-size)||y>(lcddev.height-size))
                           return;  
         bHz=0;
                           if            (size==40)GUI_DrawFont40(x,y,fc,bc,str,mode);
                           else if       (size==32)GUI_DrawFont32(x,y,fc,bc,str,mode);                 
                                else if  (size==24)GUI_DrawFont24(x,y,fc,bc,str,mode);        
                                     else          GUI_DrawFont16(x,y,fc,bc,str,mode);                                
                 str+=2;
                 x+=size;
        }                                                
    }   
}



乱码处由上到下为24*12和32*16

乱码处由上到下为24*12和32*16
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2019-5-28
在线时间
14 小时
 楼主| 发表于 2019-5-28 15:44:58 | 显示全部楼层
24*12
36*16
这两个ASCII(asc2_2412、asc2_3216)里的取模应该没有问题的!
回复 支持 反对

使用道具 举报

3

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2019-5-28
在线时间
14 小时
 楼主| 发表于 2019-5-28 15:46:16 | 显示全部楼层
//24*24 ASICII
const unsigned char asc2_2412[95][36]
//32*32 ASCII
const unsigned char asc2_3216[95][128]
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2019-5-31
在线时间
42 小时
发表于 2019-5-31 16:22:20 | 显示全部楼层

回帖奖励 +1 金钱

楼主,你解决了没呀,我也遇到这个问题了
回复 支持 反对

使用道具 举报

3

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2019-5-28
在线时间
14 小时
 楼主| 发表于 2019-5-31 19:00:42 | 显示全部楼层
男男女女 发表于 2019-5-31 16:22
楼主,你解决了没呀,我也遇到这个问题了

解决了,
我的问题原因是,
函数和ASCII取模方法,不对应。
要么更换函数,要么按函数来取模ASCII方法。
回复 支持 反对

使用道具 举报

0

主题

143

帖子

0

精华

初级会员

Rank: 2

积分
173
金钱
173
注册时间
2019-5-30
在线时间
4 小时
发表于 2019-6-1 13:50:44 | 显示全部楼层
学习学习
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2019-5-31
在线时间
42 小时
发表于 2019-6-3 11:05:15 | 显示全部楼层
xianglongjudz 发表于 2019-5-31 19:00
解决了,
我的问题原因是,
函数和ASCII取模方法,不对应。

那ascll怎么取模才能对应函数呀,楼主,我搞的快绝望呀
回复 支持 反对

使用道具 举报

3

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2019-5-28
在线时间
14 小时
 楼主| 发表于 2019-6-3 18:49:43 | 显示全部楼层
男男女女 发表于 2019-6-3 11:05
那ascll怎么取模才能对应函数呀,楼主,我搞的快绝望呀

主要看函数,
要和函数对应,
如果,不了解函数,就只能用取模软件,更改不同选项试,用正确大小的取模与正确的进行对比,如果对上 了,就可以用这个来取大字号的模 ,
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2019-5-31
在线时间
42 小时
发表于 2019-6-4 09:16:01 | 显示全部楼层
xianglongjudz 发表于 2019-6-3 18:49
主要看函数,
要和函数对应,
如果,不了解函数,就只能用取模软件,更改不同选项试,用正确大小的取模 ...

我现在这个函数打印大字体隔行画点,不知道怎么回事
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-9 02:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表