最近在調畢業設計的板子,在除錯OLED的程序中發現了一個漢字顯示上的BUG;
初始漢字顯示函式:
void OLED_ShowCHinese(u8 x,u8 y,u8 no)
{
u8 t,adder=0;
OLED_Set_Pos(x,y);
for(t=0;t<16;t++)
{
OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
adder+=1;
}
OLED_Set_Pos(x,y+1);
for(t=0;t<16;t++)
{
OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
adder+=1;
}
}
取字模的陣串列
/*************************智能開關********************/
{0x00,0x00,0xA0,0x60,0x58,0xF6,0x50,0xA8,0x28,0x70,0x90,0x90,0x50,0x30,0x10,0x00},
{0x00,0x00,0x04,0x02,0x01,0x00,0x7E,0x4A,0x2A,0x2A,0xFE,0x02,0x00,0x00,0x00,0x00},/*"智",37*/
{0x00,0x00,0x60,0x50,0x4C,0xC4,0x30,0x00,0x7E,0x90,0x90,0x88,0x40,0x00,0x00,0x00},
{0x00,0x00,0x34,0x0B,0x0B,0x66,0x39,0x00,0x1F,0x24,0x44,0x42,0x20,0x30,0x00,0x00},/*"能",38*/
{0x00,0x80,0x80,0x80,0x80,0x90,0xF8,0x88,0x88,0xF8,0x88,0x88,0x40,0x40,0x00,0x00},
{0x00,0x00,0x00,0x20,0x18,0x07,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00},/*"開",39*/
{0x00,0x00,0x00,0x00,0x00,0x48,0x58,0xC0,0x20,0x38,0x26,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x42,0x22,0x12,0x0D,0x03,0x05,0x09,0x31,0x61,0x61,0x41,0x40,0x00},/*"關",40*/
使用此函式時,當呼叫Hzk[][32]陣列中所存放的第37個漢字時,會出現如下顯示:

可以看出,漢字被砍成了兩半,并且上下顛倒,而在陣列中所存放的前32個漢字能夠正常顯示,基于這種情況,只能夠分段處理陣列中的兩行資料,
修改后的代碼:
void OLED_ShowCHinese(u8 x,u8 y,u8 no)
{
u8 t,adder=0;
OLED_Set_Pos(x,y);
if(no < 32)
{
for(t=0;t<16;t++)
{
OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
adder+=1;
}
OLED_Set_Pos(x,y+1);
for(t=0;t<16;t++)
{
OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
adder+=1;
}
}
if(no >= 32)
{
for(t=0;t<16;t++)
{
OLED_WR_Byte(Hzk[2*no-1][t],OLED_DATA); //處理所存放的第33個漢字時,首先寫入第二行資料
adder+=1;
}
OLED_Set_Pos(x,y+1);
for(t=0;t<16;t++)
{
OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
adder+=1;
}
}
}
修改后,就能夠正確顯示漢字了,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/256433.html
標籤:其他
