新手入门
- 积分
- 11
- 金钱
- 11
- 注册时间
- 2019-12-3
- 在线时间
- 5 小时
|
各位大佬,你们好,最近在学习汉字显示试验,遇到了问题,需要大佬们搭把手啊
是这样的,首先将编码方式设置成 Chinese GB2313 然后编译显示错误
main函数:
int main(void)
{
TFT_FSMC_GPIO();
TFT_FSMC_Init();
TFT_Init();
GPIO_SetBits(GPIOB, GPIO_Pin_0);
write_hz(100,100,16,"啊"); 此处是26行
while(1);
}
然后编译
..\HARDWARE\HZ\hz.h(9): warning: #1-D: last line of file ends without a newline
void Get_HzMat(uint8_t *code,unsigned char *mat,u8 size);
main.c(26): error: #8: missing closing quote
write_hz(100,100,16,"鍟?);
main.c(27): error: #18: expected a ")"
while(1);
main.c(28): warning: #1-D: last line of file ends without a newline
}
main.c: 2 warnings, 2 errors
"main.c" - 2 Error(s), 2 Warning(s).
然后就上网查找资料,就有网友提供了两种解决方案,主要是在魔术棒-------C/C++ ------MIsc Controls 添加--locale=english或者--no-multibyte-chars
试了下,两种方式编译都可以成功通过。于是就选择添加了--locale=english进行下一步测试。
然后就是这个函数
write_hz(100,100,16,"啊");
将汉字 “啊” 传到下面的函数
uint8_t write_hz(uint16_t x,uint16_t y,uint8_t size,uint8_t *hz) //size为电脑端字体大小
{
uint8_t i,j,x1,k,y0;
uint32_t temp,Hp,sizenumber;
uint32_t offsize;
uint8_t GBKH,GBKL;
uint8_t BUFF[32]={0};
k=0;
GBKH=*hz;
GBKL=*(++hz);
。。。。。
}
通过debug发现此处 GBKH=0XE5 GBkL=0X95 然而 汉字‘啊’的内码是 GBKH=0XB0 GBkL=0XA1 但是汉字'啊'的uft_8码是E5958A
也就时说MDK在已经将编码方式设置为GB2312的情况下,还是默认将汉字编码成UFT_8的格式。
所以问题就来了,我讲原子的程序下载到单板里就一切现实正常,而我的确不行(程序没有问题,我直接设置GBKH=0XB0 GBkL=0XA1,屏幕上可以正常现实“”“啊” )
大佬们,有没有知道为什么的,白色不得姐啊
网上看了很多答案,有说MDK5.14(战舰板提供的版本)不支持汉字编码的,有的说要将程序先搞成GBK编码的等,但是为啥原子的程序可以呢???
|
-
.jpg
|