前面介绍了区位法显示汉字,但使用起来多少有些不便,为了便于中西文混排,这里介绍用指针来实现混排显示的方法。 其显示效果如图1所示,其中首行显示的是内码,次行显示是的内容。 图1混排显示
混排显示主程序为: - void main(void)
- {
- no=0;
- x=0;
- OLED_Init();
- OLED_Clear();
- LcdShowString(0,0,"啊A阿",0,1);
- while(1);
- }
复制代码
混排显示函数为: - void LcdShowString(uint32_t x,uint32_t y,uint8_t *pucCode,uint32_t color,uint32_t bgcolor)
- {
- uint32_t x_bak=x;
- uint8_t u,v,no,p;
- p=x;
- while(*pucCode)
- {
- if(*pucCode & 0x80)
- {
- u=*pucCode;
- v=(u&0xf0)>>4;
- if(v<10) OLED_ShowChar (x,y,v+'0',16);
- else OLED_ShowChar (x,y,v+55,16);
-
- x=x+8;
- v=(u&0x0f);
- if(v<10) OLED_ShowChar (x,y,v+'0',16);
- else OLED_ShowChar (x,y,v+55,16);
-
- x=x+8;
- u=*(++pucCode);
- no=u-161;
-
- v=(u&0xf0)>>4;
- if(v<10) OLED_ShowChar (x,y,v+'0',16);
- else OLED_ShowChar (x,y,v+55,16);
-
- x=x+8;
- v=(u&0x0f);
- if(v<10) OLED_ShowChar (x,y,v+'0',16);
- else OLED_ShowChar (x,y,v+55,16);
-
- *(++pucCode);
- x+=8;
- OLED_ShowCHinesey(p,y+2, no*2);
- p+=16;
- }
- else
- {
- u=*pucCode;
- v=(u&0xf0)>>4;
- if(v<10) OLED_ShowChar (x,y,v+'0',16);
- else OLED_ShowChar (x,y,v+55,16);
- x+=8;
-
- v=(u&0x0f);
- if(v<10) OLED_ShowChar (x,y,v+'0',16);
- else OLED_ShowChar (x,y,v+55,16);
- x+=8;
- OLED_ShowChar(p,y+2,u,16);
- p+=8;
- *(++pucCode);
- }
-
- if(x>113)
- {
- x = x_bak;
- }
- }
- }
复制代码
图2超长显示
|