前面介紹了區位法顯示漢字,但使用起來多少有些不便,為了便于中西文混排,這里介紹用指針來實現混排顯示的方法。 其顯示效果如圖1所示,其中首行顯示的是內碼,次行顯示是的內容。
1.png (367.63 KB, 下載次數: 53)
下載附件
2020-7-18 08:28 上傳
圖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.png (378.04 KB, 下載次數: 59)
下載附件
2020-7-18 08:28 上傳
圖2超長顯示
|