OLED/TFT顯示中文
阿新 • • 發佈:2018-12-18
一:材料準備
stm32微控制器、OLED/TFT一個
二:之前有過學習原子教程的基礎
這裡以OLED顯示中文為例(TFT一樣)
1,顯示一個字元: (16號字型舉例:寬8 高16)
自行理解這一行意思
u8 csize=(size/8 + ((size%8)?1:0)) * (size/2); //得到字型一個字元對應點陣集所佔的位元組數
/*************************************************************************/ /* 顯示字元函式 x: 0~127 y: 0~63 size: 12/16/24 mode:0,反白顯示;1,正常顯示 */ /*************************************************************************/ void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode) { u8 temp,t,t1; u8 y0=y; u8 csize=(size/8+((size%8)?1:0))*(size/2); //得到字型一個字元對應點陣集所佔的位元組數 chr=chr-' '; //得到偏移後的值 for(t=0;t<csize;t++) { if(size==12)temp=asc2_1206[chr][t]; //呼叫1206字型 else if(size==16)temp=asc2_1608[chr][t]; //呼叫1608字型 else if(size==24)temp=asc2_2412[chr][t]; //呼叫2412字型 else return; //沒有的字型檔 for(t1=0;t1<8;t1++) { if(temp&0x80)OLED_DrawPoint(x,y,mode); else OLED_DrawPoint(x,y,!mode); temp<<=1; y++; if((y-y0)==size) { y=y0; x++; break; } } } }
2,修改部分
顯示中文:(16號字型舉例:寬8*2 高16)
自行理解這一行意思
u8 csize=(size/8 + ((size%8)?1:0)) * size; //得到字型一個字元對應點陣集所佔的位元組數
/*************************************************************************/ /* 顯示一個漢字 x,y:起點座標 num :字型檔中第幾個漢字 size:字型大小 mode:模式 */ /*************************************************************************/ void OLED_ShowGBK(u8 x, u8 y, u8 num, u8 size,u8 mode) { u8 temp,t,t1; u8 y0=y; //u8 size = 16; u8 csize=(size/8 + ((size%8)?1:0)) * size; //得到字型一個字元對應點陣集所佔的位元組數 for(t=0;t<csize;t++) { // 我只定義了16,12號字型 沒有宣告其他字型 if(size==12) temp = gbk_1212[num][t]; //呼叫1212字型 else if(size==16) temp = gbk_1616[num][t]; //呼叫1616字型 // else if(size==24)temp=asc2_2412[chr][t]; //呼叫2412字型 else return; //沒有的字型檔 for(t1=0;t1<8;t1++) { if(temp&0x80)OLED_DrawPoint(x,y,mode); else OLED_DrawPoint(x,y,!mode); temp<<=1; y++; if((y-y0)==size) { y=y0; x++; break; } } } }
3,建立中文字型檔(以16號字型為例)
推薦使用PCtoLCD2002.exe漢字取模(取模方式已給出)
//16x16 漢字點陣 //每個漢字佔32個位元組 //PC2LCD2002取模方式設定:陰碼+逐列式+順向+C51格式 //每個漢字所佔用的位元組數為:(size/8+((size%8)?1:0))*(size), //其中size:是字型檔生成時的點陣大小(12/16/24...) const unsigned char gbk_1616[3][32]={ //16x16 {0x40,0x00,0x40,0x00,0x47,0xFF,0x44,0x12, 0x44,0x22,0x7F,0xC2,0x44,0x02,0x44,0x02, 0x44,0x02,0x7F,0xC2,0x44,0x22,0x44,0x22, 0x47,0xFF,0x40,0x00,0x40,0x00,0x00,0x00},/*"西",0*/ {0x00,0x02,0x42,0x02,0x41,0x82,0x40,0x62, 0x40,0x02,0x7F,0xFE,0x40,0x02,0x40,0x02, 0x40,0x02,0x7F,0xFE,0x40,0x02,0x40,0x22, 0x40,0xC2,0x43,0x02,0x00,0x02,0x00,0x00},/*"亞",1*/ {0x00,0x11,0x20,0x12,0xFF,0xF4,0x24,0x90, 0x24,0x90,0x24,0x98,0xFF,0xF4,0x20,0x13, 0x00,0x06,0x3F,0xF8,0x22,0x00,0x22,0x00, 0x23,0xFF,0x42,0x00,0x02,0x00,0x00,0x00}, /*"斯",2*/ };
有疑問者請聯絡:QQ:1735915513