赞
踩
1)实验平台:正点原子APM32E103最小系统板
2)平台购买地址:https://detail.tmall.com/item.htm?id=609294757420
3)全套实验源码+手册+视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban
本章将介绍正点原子提供的字库管理库的使用,通过使用字库能够在LCD或其他显示设备上显示中文字符,对应中文应用的开发,是一个很有用的工具。通过本章的学习,读者将学习到正点原子字库管理库的使用。
本章分为如下几个小节:
48.1 硬件设计
48.2 程序设计
48.3 下载验证
48.1 硬件设计
48.1.1 例程功能
图48.2.1.1 正点原子字库管理库文件
字库管理库中fonts.c和fonts.h两个文件提供了字库更新和初始化的函数,test.c和test.h文件中提供了在LCD上显示中文字符的函数。
字库管理库在显示中文字符至LCD上时会使用NOR Flash中的中文字库,因此需要确保NOR Flash中的中文字库无误,若NOR Flash中没有中文字库的数据,那么在进行字库初始化时就会提示失败,这时就需要使用字库管理库中提供的字库更新函数更新NOR Flash中的中文字库数据,更新字库是读取SD卡中的字库文件将其写入NOR Flash,因此需确保SD卡中有对应的中文字库文件。
本章实验所需的中文字库文件可在A盘5,SD卡根目录文件SYSTEMFONT中找到,建议将A盘5,SD卡根目录文件中的所有文件按照该目录的目录结构复制到SD卡中,方便后续实验的使用。
48.2.2 实验应用代码
本章实验的应用代码,如下所示:
int main(void) { uint8_t t; uint8_t key; uint8_t res; uint32_t fontcnt; uint8_t i; uint8_t j; uint8_t fontx[2]; NVIC_ConfigPriorityGroup(NVIC_PRIORITY_GROUP_4); /* 设置中断优先级分组为组4 */ sys_apm32_clock_init(15); /* 配置系统时钟 */ delay_init(120); /* 初始化延时功能 */ usart_init(115200); /* 初始化串口 */ usmart_dev.init(120); /* 初始化USMART */ led_init(); /* 初始化LED */ key_init(); /* 初始化按键 */ lcd_init(); /* 初始化LCD */ my_mem_init(SRAMIN); /* 初始化内部SRAM内存池 */ exfuns_init(); /* 为exfuns申请内存 */ f_mount(fs[0], "0:", 1); /* 挂载SD卡 */ f_mount(fs[1], "1:", 1); /* 挂载NOR Flash */ while (fonts_init() != 0) /* 检查字库 */ { UPD: lcd_clear(WHITE); lcd_show_string(30, 30, 200, 16, 16, "APM32", RED); while (sd_init() != SD_OK) /* 初始化SD卡 */ { lcd_show_string(30, 50, 200, 16, 16, "SD Card Failed!", RED); delay_ms(200); lcd_fill(30, 50, 200 + 30, 50 + 16, WHITE); delay_ms(200); } lcd_show_string(30, 50, 200, 16, 16, "SD Card OK", RED); lcd_show_string(30, 70, 200, 16, 16, "Font Updating...", RED); /* 更新字库 */ res = fonts_update_font(20, 90, 16, (uint8_t *)"0:", RED); while (res != 0) /* 更新失败 */ { lcd_show_string(30, 90, 200, 16, 16, "Font Update Failed!", RED); delay_ms(200); lcd_fill(20, 90, 200 + 20, 90 + 16, WHITE); delay_ms(200); } lcd_show_string(30, 90, 200, 16, 16, "Font Update Success! ", RED); delay_ms(1500); lcd_clear(WHITE); } text_show_string(30, 30, 200, 16, "正点原子APM32开发板", 16, 0, RED); text_show_string(30, 50, 200, 16, "GBK字库测试程序", 16, 0, RED); text_show_string(30, 70, 200, 16, "ATOM@ALIENTEK", 16, 0, RED); text_show_string(30, 90, 200, 16, "KEY0: 更新字库", 16, 0, RED); text_show_string(30, 110, 200, 16, "内码高字节:", 16, 0, BLUE); text_show_string(30, 130, 200, 16, "内码低字节:", 16, 0, BLUE); text_show_string(30, 150, 200, 16, "汉字计数器:", 16, 0, BLUE); text_show_string(30, 180, 200, 24, "对应汉字为:", 24, 0, BLUE); text_show_string(30, 204, 200, 16, "对应汉字(16*16)为:", 16, 0, BLUE); text_show_string(30, 220, 200, 12, "对应汉字(12*12)为:", 12, 0, BLUE); while (1) { fontcnt = 0; /* GBK内码高字节范围为0x81~0xFE */ for (i=0x81; i<0xFF; i++) { fontx[0] = i; lcd_show_num(118, 110, i, 3, 16, BLUE); /* 显示内码高字节 */ for (j=0x40; j<0xFE; j++) /* GBK内码低字节范围为0x40~0x7E、0x80~0xFE) */ { if (j == 0x7F) { continue; } fontcnt++; lcd_show_num(118, 130, j, 3, 16, BLUE);/* 显示内码低字节 */ /* 汉字计数显示 */ lcd_show_num(118, 150, fontcnt, 5, 16, BLUE); fontx[1] = j; text_show_font(30 + 132, 180, fontx, 24, 0, BLUE); text_show_font(30 + 144, 204, fontx, 16, 0, BLUE); text_show_font(30 + 108, 220, fontx, 12, 0, BLUE); t = 200; while ((t--) != 0) /* 延时,同时扫描按键 */ { delay_ms(1); key = key_scan(0); if (key == KEY0_PRES) { /* 跳转到UPD位置(强制更新字库) */ goto UPD; } } LED0_TOGGLE(); } } } }
从上面的代码中可以看出,本实验的应用代码中,在完成文件系统等一系列初始化后,便调用函数fonts_init()初始化字库管理库,若初始化失败则说明NOR Flash中没有对应的字库数据,因此需要进行更新字库,更新字库时,会从SD卡中读入字库数据并将其写入NOR Flash中,因此需要在SD中提前准备好字库文件。
当NOR Flash有了字库数据后,便在LCD上使用中文显示本实验的实验信息,并不断的显示中文字符,同时检测按键输入,若检测到KEY0按键被按下,则强制进行字库更新。
48.3 下载验证
在完成编译和烧录操作后,将根目录存放了A盘5,SD卡根目录文件中文件的SD卡插入开发板板载的SD卡卡座后,若NOR Flash中没有字库数据,则能够看到LCD显示了正在更新字库的提示,更新完成后,便可以在LCD上看到中文显示的实验信息和不断刷新显示的中文字符,此时可以按下KEY0按键强制更新字库。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。