|

楼主 |
发表于 2021-2-5 13:11:37
|
显示全部楼层
- /* 包含头文件 ----------------------------------------------------------------*/
- #include "task/MainTask.h"
- #include "language.h"
- /* 私有类型定义 --------------------------------------------------------------*/
- /* 私有宏定义 ----------------------------------------------------------------*/
- /* 私有变量 ------------------------------------------------------------------*/
- /* 用于选择使用的显示方法 */
- #define Method3
- extern FATFS fs;
- /* FatFs文件系统对象 */
- extern FIL file;
- /* 文件对象 */
- extern FRESULT f_res; /* 文件操作结果 */
- extern UINT fnum; /* 文件成功读写数量 */
- #define XBF_KAITI24_ADDR 0X600000 //字库存放在SPI_FLash地址
- uint8_t tempbuf[256]={0}; /* 从SD卡读取数据的缓冲 */
- #define XBF_KAITI24_SIZE (520) // kaiti24.xbf字库文件存占用扇区数(每个扇区为4096个字节)
- void PG_PrintText(char *_str);
- /* 扩展变量 ------------------------------------------------------------------*/
- /* 私有函数原形 --------------------------------------------------------------*/
- /* 函数体 --------------------------------------------------------------------*/
- /**
- * 函数功能: 对话框信息
- * 输入参数: 无
- * 返 回 值: 无
- * 说 明: 无
- */
- static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
- { WINDOW_CreateIndirect, "ARMM", 0, 0, 0, 320,480,0,0},
- { TEXT_CreateIndirect, "新年快乐", GUI_ID_TEXT0, 0, 30, 80, 20, 0, 0x0, 0},
- { TEXT_CreateIndirect, "新年快乐", GUI_ID_TEXT1, 0, 120, 80, 120, 0, 0x0, 0},
- { TEXT_CreateIndirect, "新年快乐", GUI_ID_TEXT2, 0, 240, 240, 240, 0, 0x0,0},
- { TEXT_CreateIndirect, "新年快乐", GUI_ID_TEXT3, 0, 340, 320, 320, 0, 0x0, 0},
- };
- /**
- * 函数功能: 重绘
- * 输入参数: 无
- * 返 回 值: 无
- * 说 明: 无
- */
- void PaintDialog(WM_MESSAGE * pMsg)
- {
- // WM_HWIN hWin = pMsg->hWin;
- }
- /**
- * 函数功能: 对话框初始化
- * 输入参数: 无
- * 返 回 值: 无
- * 说 明: 无
- */
- void InitDialog(WM_MESSAGE * pMsg)
- {
- WM_HWIN hWin = pMsg->hWin;
- #if 0
- /* 使能UTF-8编码 必须要使能 */
- GUI_UC_SetEncodeUTF8();
-
- GUI_SetColor(GUI_WHITE); /*设置文本颜色为白色*/
-
- /*也可以这样调用 在实际项目中很实用 */
- /*英文*/
- GUI_SetFont(FontWm[ENGLISH]); /*设置字体*/
- GUI_DispStringAt (s_LangValue[ENGLISH] ,0, 100+50*ENGLISH); /*显示内容*/
-
- /*中文*/
- GUI_SetFont(FontWm[CHINESE]); /*设置字体*/
- GUI_DispStringAt (s_LangValue[CHINESE] ,0, 100+50*CHINESE); /*显示内容*/
-
- /*日文*/
- GUI_SetFont(FontWm[JAPANESE]); /*设置字体*/
- GUI_DispStringAt (s_LangValue[JAPANESE],0, 100+50*JAPANESE); /*显示内容*/
-
- /*土耳其语*/
- GUI_SetFont(FontWm[TURKISH]); /*设置字体*/
- GUI_DispStringAt (s_LangValue[TURKISH] ,0, 100+50*TURKISH); /*显示内容*/
- GUI_Delay(2000);
-
- GUI_Clear();
- GUI_Exec();
- // GUI_UC_SetEncodeNone();
- #endif
- //
- //GUI_ID_TEXT0
- //
- TEXT_SetTextColor(WM_GetDialogItem(hWin,GUI_ID_TEXT0), GUI_BLUE);
- TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT0),&GUI_FontHZ12);
- TEXT_SetTextColor(WM_GetDialogItem(hWin,GUI_ID_TEXT1), GUI_CYAN);
- TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT1),&GUI_FontHZ16);
- TEXT_SetTextColor(WM_GetDialogItem(hWin,GUI_ID_TEXT2), GUI_RED);
- TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT2),&GUI_FontHZ24);
- TEXT_SetTextColor(WM_GetDialogItem(hWin,GUI_ID_TEXT3), GUI_GREEN);
- TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT3),&GUI_FontHZ32);
- }
- /**
- * 函数功能: 对话框回调函数
- * 输入参数: 无
- * 返 回 值: 无
- * 说 明: 无
- */
- static void _cbCallback(WM_MESSAGE * pMsg)
- {
- int NCode, Id;
- WM_HWIN hWin = pMsg->hWin;
- switch (pMsg->MsgId)
- {
- case WM_PAINT:
- PG_PrintText("16号字体吧你\r\n");
- PaintDialog(pMsg);
- break;
-
- case WM_INIT_DIALOG:
- InitDialog(pMsg);
- break;
-
- case WM_KEY:
- switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key)
- {
- case GUI_KEY_ESCAPE:
- GUI_EndDialog(hWin, 1);
- break;
-
- case GUI_KEY_ENTER:
- GUI_EndDialog(hWin, 0);
- break;
- }
- break;
-
- case WM_NOTIFY_PARENT:
- Id = WM_GetId(pMsg->hWinSrc);
- NCode = pMsg->Data.v;
- switch (Id)
- {
- case GUI_ID_OK:
- if(NCode==WM_NOTIFICATION_RELEASED)
- GUI_EndDialog(hWin, 0);
- break;
-
- case GUI_ID_CANCEL:
- if(NCode==WM_NOTIFICATION_RELEASED)
- GUI_EndDialog(hWin, 0);
- break;
- }
- break;
-
- default:
- WM_DefaultProc(pMsg);
- }
- }
- /**
- * 函数功能: 往SPIFlash写入字库文件
- * 输入参数: 无
- * 返 回 值: 无
- * 说 明: 无
- */
- void LoadFontLib(void)
- {
- uint32_t j;
- uint32_t write_addr=0;
- /* 开背光 */
- LCD_BK_ON();
- /* 清屏 */
- GUI_SetBkColor(GUI_BLUE);
- GUI_Clear();
- /* 第2步:打开文件 ***************************************************************/
- f_res = f_open(&file, "0:gbk16.bin", FA_OPEN_EXISTING | FA_READ );
- // f_res = f_open(&file, "0:GBK16.FON", FA_OPEN_EXISTING | FA_READ );
- if (f_res != FR_OK)
- {
- printf("font.bin文件打开失败");
- }
- write_addr=XBF_KAITI24_ADDR;
- for(j=0;j<XBF_KAITI24_SIZE;j++)//擦除扇区
- {
- SPI_FLASH_SectorErase(write_addr+j*4096);
- }
-
- /* 第3步:复制SD卡中字库文件font.bin到SPI FLASH **********************************/
- write_addr=XBF_KAITI24_ADDR;
- while(f_res == FR_OK)
- {
- /* 读取一个扇区的数据到tempbuf */
- f_res = f_read(&file, tempbuf, sizeof(tempbuf), &fnum);
- if(f_res!=FR_OK)break; //执行错误
- /* 写数据到SPI FLASH */
- SPI_FLASH_BufferWrite(tempbuf, write_addr, 256);
- write_addr+=256;
- j++;
- if(fnum !=256)break;
- }
- f_close(&file);
-
- printf("updata font is ok \r\n");
- /* 等待1秒后开始进去emWin主界面 */
- GUI_Delay(1000);
- }
- /*
- *********************************************************************************************************
- * 函 数 名: StrUTF8ToGBK
- * 功能说明: 将UTF8字符串转换GBK字符串
- * 形 参: utf8 输入字符串
- * gbk 输出字符串
- * gbk_size 字符串size
- * 返 回 值: 字符串
- *********************************************************************************************************
- */
- char *StrUTF8ToGBK(char *utf8, char *gbk, uint16_t gbk_size)
- {
- uint8_t code1, code2;
- char *_ptr;
- char *_pOut;
- uint16_t len = 0;
-
- _ptr = utf8;
- _pOut = gbk;
-
- /* 开始循环处理字符 */
- while (*_ptr != 0)
- {
- code1 = *_ptr; /* 读取字符串数据, 该数据可能是ascii代码,也可能汉字代码的高字节 */
- if (code1 < 0x80)
- {
- if (len + 1 < gbk_size)
- {
- *_pOut++ = code1;
-
- len++;
- }
- }
- else
- {
- /* 解读 UTF-8 编码非常简单。
- 如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。
- UNICODE 最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0
-
- 110XXXXX 10XXXXXX -- 支持
- 1110XXXX 10XXXXXX 10XXXXXX -- 支持
- 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX -- 本转换程序不支持
- */
- {
- uint8_t code3;
- uint32_t unicode1;
- uint16_t gb;
-
- if ((code1 & 0xE0) == 0xC0) /* 2字节 */
- {
- code2 = *++_ptr;
- if (code2 == 0)
- {
- break;
- }
- unicode1 = ((uint32_t)(code1 & 0x1F) << 6) + (code2 & 0x3F);
- }
- else if ((code1 & 0xF0) == 0xE0) /* 3字节 */
- {
- code2 = *++_ptr;
- code3 = *++_ptr;
- if (code2 == 0 || code3 == 0)
- {
- break;
- }
- unicode1 = ((uint32_t)(code1 & 0x0F) << 12) + ((uint32_t)(code2 & 0x3F) << 6) + (code3 & 0x3F);
- }
- else if ((code1 & 0xF8) == 0xF0) /* 4字节 */
- {
- code2 = *++_ptr;
- if (code2 == 0)
- {
- break;
- }
- }
- else
- {
- code2 = *++_ptr;
- if (code2 == 0)
- {
- break;
- }
- }
-
- /* 将UNICODE码转换为GB2312 */
- if (unicode1 > 0xFFFF)
- {
- break;
- }
- gb = ff_convert(unicode1, 0); /* Unicode -> OEM */
-
- code1 = gb >> 8;
- code2 = gb;
-
- if (len + 2 < gbk_size)
- {
- *_pOut++ = code1;
- *_pOut++ = code2;
-
- len += 2;
- }
- }
- }
-
- _ptr++;
- }
-
- *_pOut = 0;
-
- return gbk;
- }
- /*
- *********************************************************************************************************
- * 函 数 名: PG_PrintText
- * 功能说明: 烧录过程输出消息
- * 形 参: _str : 字符串
- * 返 回 值: 无
- *********************************************************************************************************
- */
- void PG_PrintText(char *_str)
- {
- char str[128];
-
- /* 输出文本 */
- StrUTF8ToGBK(_str, str, sizeof(str));
- GUI_SetColor(GUI_WHITE); /*设置文本颜色为白色*/
- GUI_SetFont(&GUI_FontHZ16);
- GUI_DispStringAt(str,0,0);//:那你纳尼电子
- GUI_Delay(1000);
- }
- /**
- * 函数功能: GUI功能函数
- * 输入参数: 无
- * 返 回 值: 无
- * 说 明: 无
- */
- void MainTask(void)
- {
- uint8_t i;
- /* 初始化 */
- GUI_Init();
-
- LCD_BK_ON();
- // LoadFontLib();
- // /* 创建对话框 */
-
- PG_PrintText("16号字体吧你\r\n");
- #if 1
- /* 使能UTF-8编码 必须要使能 */
- GUI_UC_SetEncodeUTF8();
-
- GUI_SetColor(GUI_WHITE); /*设置文本颜色为白色*/
-
- /*也可以这样调用 在实际项目中很实用 */
- /*英文*/
- GUI_SetFont(FontWm[ENGLISH]); /*设置字体*/
- GUI_DispStringAt (s_LangValue[ENGLISH] ,0, 100+50*ENGLISH); /*显示内容*/
-
- /*中文*/
- GUI_SetFont(FontWm[CHINESE]); /*设置字体*/
- GUI_DispStringAt (s_LangValue[CHINESE] ,0, 100+50*CHINESE); /*显示内容*/
-
- /*日文*/
- GUI_SetFont(FontWm[JAPANESE]); /*设置字体*/
- GUI_DispStringAt (s_LangValue[JAPANESE],0, 100+50*JAPANESE); /*显示内容*/
-
- /*土耳其语*/
- GUI_SetFont(FontWm[TURKISH]); /*设置字体*/
- GUI_DispStringAt (s_LangValue[TURKISH] ,0, 100+50*TURKISH); /*显示内容*/
- GUI_Delay(2000);
- GUI_Clear();
-
- // GUI_SetColor(GUI_WHITE); /*设置文本颜色为白色*/
- // GUI_SetFont(&GUI_FontHZ16);
- // GUI_DispStringAt("16号字体吧你\r\n",0,0);//:那你纳尼电子 ALIENTEK!
- // GUI_Delay(1000);
- // GUI_Clear();
- PG_PrintText("16号字体吧你\r\n");
-
-
-
- GUI_Exec();
- // GUI_UC_SetEncodeNone();
- #endif
- GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0);
- while(1)
- {
- GUI_Delay(10);
- }
- }
复制代码
|
|