平淡~简单 发表于 2014-6-29 21:04:20

【STM32F429开发日志】汉字显示(取模方式)

拿到F429-Discovery一个月了,才写这个,实在抱歉。下面进入正题。
该例程使用的是Discovery板上的彩屏,以及SDRAM作为显存,其中的屏和SDRAM的驱动使用的是Discovery例程中自带的驱动。
本人只是做了小的改动,使其能显示汉字,采用的取模方式,字体大小是24*24。下面简单的说明一下做了哪些改动。
要驱动屏,需要调用以下几个函数:
LCD_Init();
LCD_LayerInit();
 LTDC_Cmd(ENABLE);
其中前两个是stm32f429i_discovery_lcd.c中的函数,最后那个函数是外设库里面的函数。
其中要说一下,在LCD_LayerInit();函数中,对LTDC_Layer_InitStruct结构体的这个参数设置就是把SDRAM的地址,赋值给LCD的显示,使SDAM成为LCD的显存。
/* Start Address configuration : the LCD Frame buffer is defined on SDRAM */   
  LTDC_Layer_InitStruct.LTDC_CFBStartAdress = LCD_FRAME_BUFFER;
主要是对LCD_DisplayStringLine();函数做了改造,又增加了两个写汉字的函数。下面贴图上来说明。

在这个函数中,首先是判断了下面要显示的是字符还是汉字,如果是字符则设置字符的字体,然后显示字符即可,如果是汉字则显示汉字的字体,然后调用LCD_DisplayChinese();函数进行汉字的显示。注意下面指针ptr要累加两次,因为汉字的内码是占用两个字节。有一点缺陷的是这样写之后似乎只能使用一种字体显示。如果要使用不同字体显示,可以增加一个设置汉字字体的函数和结构体。不知各位大神有什么好的方法。

这个函数的主要任务就是查找到汉字对应的点阵数据,这里创建了一个汉字点阵的结构体。
typedef struct {                               /*汉字字模数据结构           */
    unsigned char Index;                    /* 汉字内码索引                */
    unsigned char Msk;                     /* 汉字点阵数据                   */
}FNT_GB24;
汉字内码是占两个字节,因为字体大小是24*24的,所以是72字节。同时,这个汉字的数据信息是使用的是字符的那个数据结构。
sFONT Font24x24 = {
  (const uint16_t*)Chinese24x24_Table->Index,
  24, /* Width */
  24, /* Height */
};

最后就是逐一打点即可,注意偏移位置的计算,最后的红色方框,是判断是否打完一行数据,一行数据是3个字节。
最后附上一张效果图,以及工程文件,欢迎大家批评指正。


以后要更多的参与ST的活动,希望ST社区越来越旺!

wangbao619 发表于 2014-6-30 11:35:20

RE:【STM32F429开发日志】汉字显示(取模方式)

谢谢分享!:)

沐紫 发表于 2014-6-30 17:21:21

RE:【STM32F429开发日志】汉字显示(取模方式)

哈哈,多谢楼主分享!还有祝福~:D

szruan 发表于 2014-8-1 17:05:46

回复:【STM32F429开发日志】汉字显示(取模方式)

呵呵,挺好的

ienping 发表于 2014-8-21 23:02:04

回复:【STM32F429开发日志】汉字显示(取模方式)

h 不错 学习
  学习
 

请叫我华仔 发表于 2014-12-22 01:10:54

多谢LZ,在楼主的工程帮助下,不仅做了24x24的,还做了32x32的,多谢了

低头@想 发表于 2015-1-14 22:54:48

lz:字摸怎么取?用字摸软件取出来的都对不上

北斗光寒 发表于 2015-1-15 08:52:44

楼主大赞

caizhiwei 发表于 2015-1-15 08:53:46

很好,赞一个!

北斗光寒 发表于 2015-1-15 09:34:20

楼主真是太给力了
页: [1] 2 3
查看完整版本: 【STM32F429开发日志】汉字显示(取模方式)