第2步:将字库文件font.bin存储到SPI Flash中,我们这里在电脑端将font.bin文件存储到SD卡中(字库文件font.bin已经放在本章节配例子的Doc文件夹),然后开发板上电后将其从SD卡中加载到SPI Flash里面,加载代码如下:
复制代码
/*
*********************************************************************************************************
* 函 数 名: LoadFontLib()
* 功能说明: 从SD卡中加载字库文件到SPI FLASH
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
void LoadFontLib(void)
{
float FinishPecent;
uint32_t Count = 0;
uint16_t y, i;
uint8_t ucState;
char cDispBuf[80];
/* 清屏 */
GUI_SetBkColor(GUI_BLUE);
GUI_Clear();
/* 设置字体 */
GUI_SetFont(GUI_FONT_20_1);
y = 0;
/* 第1步:显示操作说明 ***************************************************************/
GUI_DispStringAt("SPI Flash Chinese character Lab", 0, y);
y += 20;
GUI_DispStringAt("1. Please make sure the font.bin is saved in SD", 0, y);
y += 20;
GUI_DispStringAt("2. if the font.bin is not saved in SD, this lab will fail", 0, y);
y += 20;
/* 等待10s后开始进行复制,方便客户看屏幕上的显示信息 */
for(i = 0; i < 11; i++)
{
sprintf(cDispBuf, "3. 10 seconds will start, %ds.. ", 10 - i);
GUI_DispStringAt(cDispBuf, 0, y);
GUI_Delay(1000);
}
y += 20;
/* 第2步:打开文件 ***************************************************************/
result = f_open(&file, "font.bin", FA_OPEN_EXISTING | FA_READ);
if (result != FR_OK)
{
GUI_DispStringAt("font.bin open failed", 0, y);
y += 20;
}
/* 第3步:复制SD卡中字库文件font.bin到SPI FLASH **********************************/
for(;;)
{
/* 读取一个扇区的数据到buf */
result = f_read(&file, &tempbuf, g_tSF.PageSize, &bw);
/* 读取出错或者读取完毕,退出 */
if ((result != FR_OK)||bw == 0)
{
break;
}
/* 写数据到SPI FLASH */
ucState = sf_WriteBuffer(tempbuf, Count*g_tSF.PageSize, g_tSF.PageSize);
/* 如果返回0,表示复制失败 */
if(ucState == 0)
{
GUI_DispStringAt("copy failed ", 0, y);
break;
}
/* 显示复制进度 */
Count = Count + 1;
FinishPecent = (float)(Count* g_tSF.PageSize) / file.fsize;
sprintf(cDispBuf, "copying:%02d%%", (uint8_t)(FinishPecent*100));
GUI_DispStringAt(cDispBuf, 0, y);
}
/* 等待1秒后开始进去emWin主界面 */
GUI_Delay(1000);
} |