KJY 发表于 2024-8-8 10:33:57

OLED中英混显

本帖最后由 KJY 于 2024-8-8 10:36 编辑

弄了个12864中英混显,但是如果字符有每区xxFD的汉字时,比如“昌,除"就会出错,高手帮看看哪里出问题了


//混显

void OLED_ShowText(u8 x,u8 y,char* str,u8 size1,u8 mode)
{
      char tempstr = {'\0'};
while(*str != '\0')
      {
   if(*str & 0x80)
    {
                        tempstr = *str++;
                        tempstr = *str++;
      OLED_ShowChinese(x,y,tempstr,size1,mode);
                        x+=16;if(x>=127){y+=size1/8;x=0;}            
    }
    else
   {
   OLED_ShowChar(x,y,*str++,size1,mode);
                     x+=8;if(x>=127){y+=size1/8;x=0;}         
   }      
}
}


//显示汉字
void OLED_ShowChinese(u8 x,u8 y,u8* str,u8 sizey,u8 mode)
{
      u16 index = 0;
      u16 i,size1=(sizey/8+((sizey%8)?1:0))*sizey;
      for(index =0;index <sizeof(Hzk)/34;index++)
      {
                if(Hzk.name==str && Hzk.name==str)//对比汉字区码位码
                {
               for(i=0;i<size1;i++)
            {
                  if(i%sizey==0) OLED_Set_Pos(x,y++);
                  if(mode==1)
                   {
                  if(sizey==16)
                                        OLED_WR_Byte(Hzk.dat,OLED_DATA);//16x16字号
      
                   }
                   else
                   {
                         if(sizey==16)
                                        OLED_WR_Byte(~Hzk.dat,OLED_DATA);//16x16字号
      
                   }
                  }
          }                        
      }               
}

DebugLab 发表于 2024-8-8 12:04:00

汉字后面加\xFD

123 发表于 2024-8-8 13:29:19

FD显示异常是个Keil的BUG,加个\xFD即可解决。
尽量不要在代码里出现中文可能会出现编码异常,中文或日文全部用\xHH编码(H表示十六进制数字)。

haiyang201 发表于 2024-8-8 15:01:00

又学到一点{:titter:}

soma 发表于 2024-8-8 15:14:05

打补丁后应该不要输入\xFD

哈哈哈哈 发表于 2024-8-17 09:10:00

数据手册中有提到这个问题

小涵子爸爸 发表于 2024-8-17 11:21:41

0xFD问题,手册里面专门有一章进行详细说明
页: [1]
查看完整版本: OLED中英混显