本人学生水平一般,没有钱购买STM32的开发板,最近使用手头有的一些元件,制作了一块主控芯片为stm32f103c8t6的开发板。
这两天研究了一下中文字库的实现,采用W25Q64存储了GBK码的中文字库,显示到oled 的屏幕上。
实现方法主要是通过fatfs文件系统读取sd卡中的字库文件,将字库文件写入到flash中,然后根据汉字的GBK码计算出汉字点阵存放的地址,读取之后显示在oled屏幕上。也可以通过串口发送字库文件到单片机,然后在写入到flash中,方法都差不多。
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "key.h"
#include "flash.h"
#include "mmc_sd.h"
#include "malloc.h"
#include "usart.h"
#include "ff.h"
#include "exfuns.h"
#include "fontupd.h"
#include "text.h"
#include "usmart.h"
int main(void)
{
u8 key;
// u8 res;
//u8 data_FAFTS[24];
// UINT bww;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
uart_init(9600); //串口初始化为9600
OLED_Init(); //初始化液晶
LED_Init(); //LED初始化
KEY_Init(); //按键初始化
SPI_Flash_Init();
usmart_dev.init(72); //usmart初始化
mem_init(); //初始化内存池
exfuns_init(); //为fatfs相关变量申请内存
f_mount(fs[0],"0:",1); //挂载SD卡
f_mount(fs[1],"1:",1); //挂载FLASH.
OLED_Init(); //初始化OLED
OLED_Clear();
while(font_init()) //检查字库
{
OLED_Clear();
while(SD_Initialize()) //检测不到SD卡
{
OLED_ShowString(0,0,"SD Card Error!",8);
delay_ms(500);
OLED_ShowString(0,0,"Please Check! ",8);
delay_ms(500);
LED0=!LED0;//DS0闪烁
}
OLED_ShowString(0,0,"SD Card OK",8);
key=update_font(0,1,8);//更新字库 更新失败返回值为0
while(key)//更新失败
{
OLED_ShowString(0,1,"Font Update Failed!",8);
delay_ms(500);
LED0=!LED0;//DS0闪烁
}
OLED_ShowString(0,1,"Font Update Success!",8);
delay_ms(1000);
OLED_Clear();
}
Show_Str(0,0,"中文字库实验",12,0);
Show_Str(0,2,"STM32自制开发板",16,0);
Show_Str(0,4,"电子发烧友论坛",16,0);
OLED_ShowString(0,6,"2018/3/5",16);
while(1);
}
这里附上三个字库文件: GBK字库文件.zip
|