OpenEdv-开源电子网

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

TFTLCD显示汉字的问题。求大牛详解

[复制链接]

23

主题

90

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
220
金钱
220
注册时间
2016-1-20
在线时间
34 小时
发表于 2016-3-28 22:38:06 | 显示全部楼层 |阅读模式
如下是我改的LCD_ShowChar的函数
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-' ';(我自己创的数组开始没有空格 数组在下面贴着。)
        for(t=0;t<csize;t++)
        {   
                if(size==12)temp=asc2_1206[num][t];                 
                else if(size==16)temp=asc2_1608[num][t];       
                //else if(size==24)temp=asc2_2412[num][t];        (我自己在这创了一个数组 如下 所有把这行注释掉了。)
                else if(size==24)temp=ASC2_1206[num][t];
                else return;                                                               
                for(t1=0;t1<8;t1++)
                {                            
                        if(temp&0x80)LCD_Fast_DrawPoint(x,y,POINT_COLOR);
                        else if(mode==0)LCD_Fast_DrawPoint(x,y,BACK_COLOR);
                        temp<<=1;
                        y++;
                        if(y>=lcddev.height)return;               
                        if((y-y0)==size)
                        {
                                y=y0;
                                x++;
                                if(x>=lcddev.width)return;       
                                break;
                        }
                }           
        }                                            
}   

const unsigned char ASC2_1206[1][24]={
{0x08,0x40,0x48,0x40,0x48,0x90,0xFF,0xF0,0x89,0x00,0x08,0x20,0xFF,0x40,0x08,0xC0,0x09,0x20,0x4A,0x10,0x28,0x70,0x00,0x00},
};   用取模软件取的是12 12 大小的

main里面        LCD_ShowString(30,70,12,12,24,"我");
请大神帮我看看  我的程序编译没错  下载到板子上之后就乱码了。
当时玩12864的时候汉字显示也没弄好  谢谢各位了  麻烦给我详细的解释一下。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

109

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4891
金钱
4891
注册时间
2014-3-30
在线时间
500 小时
发表于 2016-3-29 16:53:33 | 显示全部楼层
u8 csize=(size/8+((size%8)?1:0))*(size/2);
首先你要看懂((size%8)?1:0))这个是三目运算符这句等价于先定义一个变量int i if(size%8){i=1;else i=0}假如size=16,csize=(2+0)*8=16
从不在失败面前说不,你就会成为人们眼中的大神!!
回复 支持 反对

使用道具 举报

23

主题

90

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
220
金钱
220
注册时间
2016-1-20
在线时间
34 小时
 楼主| 发表于 2016-3-29 20:11:24 | 显示全部楼层
jiayubao12 发表于 2016-3-29 16:53
u8 csize=(size/8+((size%8)?1:0))*(size/2);
首先你要看懂((size%8)?1:0))这个是三目运算符这句等价于先 ...

还有其余的问题呢。。。。。
回复 支持 反对

使用道具 举报

10

主题

109

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4891
金钱
4891
注册时间
2014-3-30
在线时间
500 小时
发表于 2016-3-30 11:45:44 | 显示全部楼层
如果size=24,则算出csize=36;但是你的“const unsigned char ASC2_1206[1][24]={
{0x08,0x40,0x48,0x40,0x48,0x90,0xFF,0xF0,0x89,0x00,0x08,0x20,0xFF,0x40,0x08,0xC0,0x09,0x20,0x4A,0x10,0x28,0x70,0x00,0x00},
};   用取模软件取的是12 12 大小的”这个数组里面指定义了24个元素,你可以先把 for(t=0;t<csize;t++)这里面的csize改成数字24试试。
从不在失败面前说不,你就会成为人们眼中的大神!!
回复 支持 反对

使用道具 举报

23

主题

90

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
220
金钱
220
注册时间
2016-1-20
在线时间
34 小时
 楼主| 发表于 2016-3-30 20:57:26 | 显示全部楼层
jiayubao12 发表于 2016-3-30 11:45
如果size=24,则算出csize=36;但是你的“const unsigned char ASC2_1206[1][24]={
{0x08,0x40,0x48,0x40,0 ...

是不是因为数字扫描是扫描ASC码 跟汉字扫描不一样的原因。
回复 支持 反对

使用道具 举报

17

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
298
金钱
298
注册时间
2016-7-24
在线时间
107 小时
发表于 2016-8-5 12:32:51 | 显示全部楼层
某某某某某某丶 发表于 2016-3-30 20:57
是不是因为数字扫描是扫描ASC码 跟汉字扫描不一样的原因。

不是,你可以把asc码换成显示汉字的数组,只换顺序,可懂?
回复 支持 反对

使用道具 举报

25

主题

135

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
404
金钱
404
注册时间
2016-8-23
在线时间
50 小时
发表于 2017-3-29 19:58:49 | 显示全部楼层
你这个问题解决了吗?我最近也在琢磨这个,请教你一下
回复 支持 反对

使用道具 举报

12

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
158
金钱
158
注册时间
2017-11-5
在线时间
31 小时
发表于 2017-11-14 20:57:26 | 显示全部楼层
fanhuayishi 发表于 2016-8-5 12:32
不是,你可以把asc码换成显示汉字的数组,只换顺序,可懂?

这个只换顺序是什么意思
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2019-7-10
在线时间
11 小时
发表于 2019-8-19 11:28:14 | 显示全部楼层
一样的问题,怎么解决,我在坑里,待解救。
回复 支持 反对

使用道具 举报

3

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2019-5-1
在线时间
16 小时
发表于 2019-8-21 15:12:48 | 显示全部楼层
/**********************************************************************
oˉêy1|&#196;ü£o&#212;úTFTé&#207;&#195;&#230;&#207;&#212;ê&#190;ASCII×&#214;·&#251;
2&#206;êy1|&#196;ü£ox£o&#198;eê&#188;x×&#248;±ê  Y£o&#198;eê&#188;y×&#248;±ê  char_W£o×&#214;·&#251;&#191;í&#182;è  char_H£o×&#214;·&#251;&#184;&#223;&#182;è
          c£oòa&#207;&#212;ê&#190;μ&#196;×&#214;·&#251;  size£o×&#214;·&#251;′óD&#161;  charColor£o×&#214;·&#251;&#209;&#213;é&#171;
          bkColor£o±3&#190;°&#209;&#213;é&#171;          mode£o&#206;a 1  &#214;&#216;μt£&#172;&#206;a 0  2&#187;&#214;&#216;μt                       
&#188;òày£o    LCD_Show_Char(40,40,24,24,'P',24,RED,WHITE,0);
**********************************************************************/
void LCD_Show_Char(u16 x,u16 y,u8 char_W,u8 char_H,u8 c,u8 size,u16 charColor,u16 bkColor,u8 mode)
{
         u8 temp,Bytes;
         u8 pos,t;
         u8 ch;
       
         LCD_Set_Window(x,y,char_W,char_H);
       
         ch=c-' ';
         Bytes=(size/8+((size%8)?1:0))*(size/2);
         for(pos=0;pos<Bytes;pos++)
                {
                        if(size==12)temp=ascii_1206[ch][pos];                  //μ÷ó&#195;1206×&#214;ì&#229;
                  else if(size==16)temp=ascii_1608[ch][pos];        //μ÷ó&#195;1608×&#214;ì&#229;
                  else if(size==24)temp=ascii_2412[ch][pos];        //μ÷ó&#195;2412×&#214;ì&#229;
                  else return;                                                                //&#195;&#187;óDμ&#196;×&#214;&#191;a
                         for(t=0;t<8;t++)
                        {
                                 if(temp&0x80)
                                 {
                                          LCD_WriteCmd(0x0022);
                                          LCD_WriteData(charColor);
                                 }
                                 else if(mode==0)
                                 {
                                          LCD_WriteCmd(0x0022);
                                          LCD_WriteData(bkColor);
                                 }
                                 temp<<=1;
                        }
                }
}
回复 支持 反对

使用道具 举报

3

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2019-5-1
在线时间
16 小时
发表于 2019-8-21 15:14:22 | 显示全部楼层
这是我略加修改的,把参数多加了几个,后面判断超界的也给去掉了,显示正常
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-16 03:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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