OpenEdv-开源电子网

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

战舰LCD显示汉字

[复制链接]

16

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
214
金钱
214
注册时间
2015-12-21
在线时间
18 小时
发表于 2016-1-3 11:53:23 | 显示全部楼层 |阅读模式
在学习调试LCD实验的时候发现只能显示字符,可能是汉字字库太大,原子没有实现,所以自己把汉字显示加上了。
在font.h里面定义一个汉字结构体
typedef struct _chinese
{
    unsigned char *index;
    unsigned char word[24*3]; //取决于最大的汉字, 这里是24X24
}chinese;
接着定义汉字字库,提取方式与例程字符相同
const chinese ch_12_12[] =
{
    {"正",0x00,0x10,0x40,0x10,0x47,0xF0,0x40,0x10,0x40,0x10,0x7F,0xF0,0x42,0x10,0x42,0x10,0x42,0x10,0x42,0x10,0x00,0x10,0x00,0x00},/*0*/
    {"点",0x00,0x10,0x0F,0xA0,0x08,0x80,0x08,0xA0,0x08,0x90,0xF8,0x80,0x48,0xA0,0x48,0x90,0x48,0x80,0x4F,0xA0,0x40,0x10,0x00,0x00},/*1*/
    {"原",0x00,0x10,0x7F,0xE0,0x40,0x10,0x5F,0x20,0x55,0x40,0x75,0x10,0x55,0xF0,0x55,0x00,0x55,0x40,0x5F,0x20,0x40,0x10,0x00,0x00},/*2*/
    {"子",0x02,0x00,0x02,0x00,0x42,0x00,0x42,0x10,0x42,0x10,0x4F,0xF0,0x52,0x00,0x62,0x00,0x42,0x00,0x02,0x00,0x02,0x00,0x00,0x00},/*3*/
    ......
};
const chinese ch_16_16[] =
{
    {"正",0x00,0x02,0x40,0x02,0x40,0x02,0x43,0xFE,0x40,0x02,0x40,0x02,0x40,0x02,0x7F,0xFE,0x41,0x02,0x41,0x02,0x41,0x02,0x41,0x02,0x41,0x02,0x40,0x02,0x00,0x02,0x00,0x00},/*0*/
    {"点",0x00,0x01,0x00,0x02,0x03,0xEC,0x02,0x20,0x02,0x20,0x02,0x28,0xFE,0x26,0x12,0x20,0x12,0x28,0x12,0x26,0x12,0x20,0x13,0xE0,0x10,0x08,0x10,0x07,0x00,0x00,0x00,0x00},/*1*/
    {"原",0x00,0x01,0x00,0x06,0x7F,0xF8,0x40,0x02,0x40,0x04,0x4F,0xE8,0x49,0x22,0x59,0x21,0x69,0x3E,0x49,0x20,0x49,0x20,0x4F,0xE8,0x40,0x04,0x40,0x02,0x40,0x00,0x00,0x00},/*2*/
    {"子",0x01,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x02,0x41,0x01,0x47,0xFE,0x45,0x00,0x49,0x00,0x51,0x00,0x61,0x00,0x41,0x00,0x01,0x00,0x01,0x00,0x00,0x00},/*3*/
    ......
};
const chinese ch_24_24[] =
{
    {"正",0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x08,0x10,0x00,0x08,0x10,0x00,0x08,0x10,0x00,0x08,0x10,0xFF,0xF8,0x10,0x40,0x08,0x10,0x00,0x08,0x10,0x00,0x08,0x10,0x00,0x08,0x10,0x00,0x08,
          0x1F,0xFF,0xF8,0x10,0x10,0x08,0x10,0x10,0x08,0x10,0x10,0x08,0x10,0x10,0x08,0x10,0x10,0x08,0x10,0x10,0x08,0x10,0x30,0x08,0x30,0x10,0x18,0x10,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00},        
    {"点",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x06,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x7F,0x80,0x00,0x41,0x00,0x00,0x41,0x20,0x00,0x41,0x1C,0x00,0x41,0x0C,0x7F,0xC1,0x00,
          0x24,0x41,0x00,0x04,0x41,0x20,0x04,0x41,0x18,0x04,0x41,0x0C,0x04,0x41,0x00,0x04,0x7F,0x80,0x04,0x7F,0xA0,0x0C,0x00,0x10,0x04,0x00,0x1C,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00},
    ......
}

接着在lcd.c中添加一个显示汉字的函数
void LCD_ShowChinese(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;  //得到字体一个字符对应点阵集所占的字节数
  
    int index = -1;
   
    if(size == 12)
    {
        for(t=0; t<sizeof(ch_12_12)/sizeof(ch_12_12[0]); t++)
        {
            if((num[0] == ch_12_12[t].index[0]) && (num[1] == ch_12_12[t].index[1]))
            {
                index = t;
                break;
            }
        }   
    }
    else if(size == 16)
    {
        for(t=0; t<sizeof(ch_16_16)/sizeof(ch_16_16[0]); t++)
        {
            if((num[0] == ch_16_16[t].index[0]) && (num[1] == ch_16_16[t].index[1]))
            {
                index = t;
                break;
            }
        }   
    }
    else if(size == 24)
    {
        for(t=0; t<sizeof(ch_24_24)/sizeof(ch_24_24[0]); t++)
        {
            if((num[0] == ch_24_24[t].index[0]) && (num[1] == ch_24_24[t].index[1]))
            {
                index = t;
                break;
            }
        }   
    }
    else
    {
        return;    // 没有对应的字库
    }
   
    if(index == -1)  return;  // 字库中没有找到要显示的汉字
   
for(t=0;t<csize;t++)
{   
        if(size == 12)       temp=ch_12_12[index].word[t];
        else if(size == 16) temp=ch_16_16[index].word[t];
        else if(size == 24) temp=ch_24_24[index].word[t];
        
  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;
          }
      }   
}   
}
接着修改原来的显示字符串函数,添加显示汉字功能
void LCD_ShowString(u16 x,u16 y,u16 width,u16 height,u8 size,u8 *p)
{         
u8 x0=x;
width+=x;
height+=y;
   
    while((*p!=127)&&(*p>=' ')) // 127是del符号
    {
        if(x>=width){x=x0;y+=size;}
        if(y>=height)break;//退出
        
        if(*p >127)    // 汉字大于127
        {
            LCD_ShowChinese(x,y,p,size,0);
            x += size;
            p += 2;
        }
        else
        {
            LCD_ShowChar(x,y,*p,size,0);
            x += size >> 1;
            p++;            
        }
    }
}

验证功能
LCD_ShowString(0, 0,  240, 12, 12, "正点原子ALIENTEK战舰");
LCD_ShowString(0, 12, 240, 12, 12, "星翼电子科技有限公司");
LCD_ShowString(0, 24, 240, 16, 16, "正点原子ALIENTEK战舰");
LCD_ShowString(0, 40, 240, 16, 16, "星翼电子科技有限公司");
LCD_ShowString(0, 56, 240, 24, 24, "正点原子ALIENTEK战舰");
LCD_ShowString(0, 80, 240, 24, 24, "星翼电子科技有限公司");


P60103-112233.jpg
P60103-112009.jpg
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

16

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
214
金钱
214
注册时间
2015-12-21
在线时间
18 小时
 楼主| 发表于 2017-7-17 22:42:17 | 显示全部楼层
我本将心向明月,明月何时照我还。

实验13 TFTLCD显示实验.rar

2.44 MB, 下载次数: 6570

实验15 RTC实验.rar

3.6 MB, 下载次数: 553

回复 支持 2 反对 0

使用道具 举报

14

主题

115

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
358
金钱
358
注册时间
2015-12-19
在线时间
307 小时
发表于 2016-3-14 16:54:16 | 显示全部楼层
楼主,能把你的测试历程上传一份吗?小弟万分感激啊
回复 支持 2 反对 0

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
发表于 2017-9-6 11:16:06 | 显示全部楼层
JIMLEE 发表于 2017-7-27 09:47
为什么只显示时钟,不显示汉字啊9341

检查一下程序,whlie后面有;
qq1950361006,互帮互助,共同进步。
回复 支持 1 反对 0

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2016-5-2
在线时间
6 小时
发表于 2017-7-19 11:29:58 | 显示全部楼层
明月松间照,清泉石上流。
楼主发资源,必然有回报。
回复 支持 1 反对 0

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2016-1-3 12:40:42 | 显示全部楼层
谢谢分享.....
原子哥有专门的汉子显示例程哦,不过楼主自己实现了掌握的会更多更深入,赞一个
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 1 反对 0

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2016-1-3 17:42:46 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

13

主题

107

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1235
金钱
1235
注册时间
2015-9-26
在线时间
355 小时
发表于 2016-1-4 12:48:30 | 显示全部楼层
谢谢分享   正好用上
回复 支持 反对

使用道具 举报

7

主题

14

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
357
金钱
357
注册时间
2015-12-3
在线时间
40 小时
发表于 2016-4-7 21:01:58 | 显示全部楼层
能发下源程序吗?谢谢
回复 支持 反对

使用道具 举报

12

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2016-3-7
在线时间
23 小时
发表于 2016-4-18 20:31:52 来自手机 | 显示全部楼层
膜拜大神!读毕代码,受益匪浅,不说了,我去学习了
回复 支持 反对

使用道具 举报

28

主题

303

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2014-8-14
在线时间
67 小时
发表于 2016-4-23 14:57:00 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

21

主题

68

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2016-2-1
在线时间
68 小时
发表于 2016-4-28 20:11:27 | 显示全部楼层
请问能分享下你的源码吗?我按照你的步骤做了,可是现实..\HARDWARE\LCD\font.h(322): error:  #144: a value of type "int" cannot be used to initialize an entity of type "unsigned char *"
回复 支持 反对

使用道具 举报

0

主题

13

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2016-5-17
在线时间
8 小时
发表于 2016-5-31 10:15:16 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

17

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
298
金钱
298
注册时间
2016-7-24
在线时间
107 小时
发表于 2016-8-5 12:25:37 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2016-8-5
在线时间
0 小时
发表于 2016-8-5 16:29:27 | 显示全部楼层
多谢分享
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2016-8-5
在线时间
0 小时
发表于 2016-8-5 16:29:47 | 显示全部楼层
多谢分享
回复 支持 反对

使用道具 举报

39

主题

212

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
303
金钱
303
注册时间
2016-4-21
在线时间
129 小时
发表于 2016-8-13 19:53:13 | 显示全部楼层
楼主,取摸软件呢?能不能发一下
本人交流群:136045527,欢迎各位大佬和萌新
回复 支持 反对

使用道具 举报

39

主题

212

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
303
金钱
303
注册时间
2016-4-21
在线时间
129 小时
发表于 2016-8-13 20:38:06 | 显示全部楼层
一只风筝 发表于 2016-8-13 19:53
楼主,取摸软件呢?能不能发一下

我知道了
本人交流群:136045527,欢迎各位大佬和萌新
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
29
金钱
29
注册时间
2016-8-1
在线时间
2 小时
发表于 2016-8-17 10:24:54 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
29
金钱
29
注册时间
2016-8-1
在线时间
2 小时
发表于 2016-8-17 15:56:29 | 显示全部楼层
楼主,我用的Pctolcd2002字模生成软件生成的字模,生成的汉字都在注释里面,请问你是直接生成在{。。。}里的还是说手动复制的?@zzu65
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
34
金钱
34
注册时间
2016-10-9
在线时间
5 小时
发表于 2016-11-9 19:40:57 | 显示全部楼层
我去  好不真实  按上面修改了还是可以显示字母但是不可以显示汉字   要是有例程就好学习了
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2016-11-10
在线时间
0 小时
发表于 2016-11-15 21:32:59 | 显示全部楼层
谢谢,楼主,找了几个小时资料才知道怎么使用字模
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2016-9-6
在线时间
0 小时
发表于 2016-11-16 00:44:33 | 显示全部楼层
我也来学习下,刚整了块学习板
回复 支持 反对

使用道具 举报

25

主题

135

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
404
金钱
404
注册时间
2016-8-23
在线时间
50 小时
发表于 2017-3-29 20:10:17 | 显示全部楼层
楼主使用这个取模的吗?Pctolcd2002
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2016-3-1
在线时间
3 小时
发表于 2017-5-25 17:49:03 | 显示全部楼层
楼主  我想亲你一口   太给力了
回复 支持 反对

使用道具 举报

24

主题

57

帖子

0

精华

高级会员

Rank: 4

积分
800
金钱
800
注册时间
2016-11-25
在线时间
93 小时
发表于 2017-5-26 21:48:41 | 显示全部楼层
楼主能不能分享下整个代码啊?
回复 支持 反对

使用道具 举报

1

主题

22

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
228
金钱
228
注册时间
2016-11-21
在线时间
43 小时
发表于 2017-5-27 07:21:41 来自手机 | 显示全部楼层
Mark谢谢分享
回复 支持 反对

使用道具 举报

15

主题

96

帖子

0

精华

高级会员

Rank: 4

积分
648
金钱
648
注册时间
2017-4-21
在线时间
151 小时
发表于 2017-7-5 22:43:30 | 显示全部楼层
为什么按照楼主的显示e "int" cannot be used to initialize an entity of type "unsigned char *"
回复 支持 反对

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2017-7-27
在线时间
0 小时
发表于 2017-7-27 09:47:22 | 显示全部楼层
为什么只显示时钟,不显示汉字啊9341
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2017-7-31
在线时间
10 小时
发表于 2017-8-24 20:24:34 | 显示全部楼层
厉害!!!
回复 支持 反对

使用道具 举报

7

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2016-5-3
在线时间
31 小时
发表于 2017-9-19 20:34:10 | 显示全部楼层
能不能给点注释啊   上面的程序有点看不懂   照着这个程序是显示处汉字了   可是我想显示更大的汉字却显示不出来  ,显示汉字的那个函数就看不懂
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2018-6-23
在线时间
18 小时
发表于 2018-9-21 10:40:49 | 显示全部楼层
取模怎么会前面有汉字?请问怎么弄的?
回复 支持 反对

使用道具 举报

3

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
137
金钱
137
注册时间
2018-11-7
在线时间
40 小时
发表于 2018-12-15 10:36:25 | 显示全部楼层
嬴政天下yhj 发表于 2018-9-21 10:40
取模怎么会前面有汉字?请问怎么弄的?

取模软件会自动生成的,是提供检索汉字用的。
回复 支持 反对

使用道具 举报

8

主题

152

帖子

0

精华

高级会员

Rank: 4

积分
713
金钱
713
注册时间
2011-11-12
在线时间
149 小时
发表于 2018-12-15 17:08:02 | 显示全部楼层
感谢楼主分享,手头没战舰版,移植到探索者上可以正常显示。
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2018-6-23
在线时间
18 小时
发表于 2018-12-28 21:05:41 | 显示全部楼层
hujj 发表于 2018-12-15 10:36
取模软件会自动生成的,是提供检索汉字用的。

哪个取模软件啊?
回复 支持 反对

使用道具 举报

109

主题

5562

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10541
金钱
10541
注册时间
2017-2-18
在线时间
1908 小时
发表于 2018-12-28 21:46:13 | 显示全部楼层
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2019-5-14
在线时间
11 小时
发表于 2019-5-14 00:09:44 | 显示全部楼层
zzu65 发表于 2017-7-17 22:42
我本将心向明月,明月何时照我还。

显示的汉字在取字软件里是怎么设置的?急求
回复 支持 反对

使用道具 举报

25

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
468
金钱
468
注册时间
2017-6-10
在线时间
66 小时
发表于 2019-6-11 15:50:48 | 显示全部楼层
楼主牛逼
回复 支持 反对

使用道具 举报

8

主题

161

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5186
金钱
5186
注册时间
2013-3-16
在线时间
610 小时
发表于 2019-6-12 17:41:31 | 显示全部楼层
战舰LCD显示汉字
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2019-7-5
在线时间
4 小时
发表于 2019-7-14 10:03:03 | 显示全部楼层
if((num[0] == ch_24_24[t].index[0]) && (num[1] == ch_24_24[t].index[1]))
哥们 这串代码说的啥意思
回复 支持 反对

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2019-5-4
在线时间
31 小时
发表于 2019-8-2 17:11:50 | 显示全部楼层
十分感谢~~~
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2020-7-18
在线时间
4 小时
发表于 2020-10-14 11:19:35 | 显示全部楼层
龙之谷 发表于 2016-1-3 12:40
谢谢分享.....
原子哥有专门的汉子显示例程哦,不过楼主自己实现了掌握的会更多更深入,赞一个

兄弟,能给我发下吗
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2021-4-15
在线时间
13 小时
发表于 2023-5-9 17:14:12 | 显示全部楼层

请问是什么软件呢
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 09:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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