比神乐 发表于 2021-1-30 13:30

OLED显示的问题

今天捣鼓OLED显示,遇到一个奇怪的问题。
我想不通,请大佬解惑。
显示汉字程序为:
//显示汉字
void OLED_ShowCHinese(uint8_t x, uint8_t y, uint8_t no)
{                                
        uint8_t t,adder=0;
        OLED_Set_Pos(x,y);       
        for(t=0;t<16;t++)
        {
                OLED_WR_Byte(Hzk,OLED_DATA);
                adder+=1;
        }       
        OLED_Set_Pos(x,y+1);       
        for(t=0;t<16;t++)
        {       
                OLED_WR_Byte(Hzk,OLED_DATA);
                adder+=1;
        }                                       
}

x,y为横纵坐标,no为第几个汉字。
主程序调用代码为:
OLED_ShowCHinese(16,0,0);//
后面一个0表示显示字库里的第一个汉字。
如果字库这样写:
const uint8_t Hzk[]={
// 华(0) 大(1) 半(2) 导(3) 体(4)

0x00,0x20,0x30,0xFC,0xFE,0x04,0x20,0x20,0xFC,0xFC,0x90,0x98,0x9C,0xE8,0x80,0x00,
0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x1F,0x1F,0x02,0x02,0x02,0x02,0x03,0x02,0x00,/*"华",0*/

0x00,0x20,0x20,0x20,0x20,0xE0,0xFE,0xFE,0xEE,0xE0,0x20,0x20,0x20,0x30,0x20,0x00,
0x00,0x10,0x18,0x1C,0x0E,0x07,0x03,0x00,0x00,0x03,0x07,0x0E,0x1C,0x1C,0x08,0x08,/*"大",1*/

则显示如下:

上面是半个华,下面是半个大。
如果字库这样写:
const uint8_t Hzk[]={
// 华(0) 大(1) 半(2) 导(3) 体(4)

{0x00,0x20,0x30,0xFC,0xFE,0x04,0x20,0x20,0xFC,0xFC,0x90,0x98,0x9C,0xE8,0x80,0x00},
{0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x1F,0x1F,0x02,0x02,0x02,0x02,0x03,0x02,0x00},/*"华",0*/

{0x00,0x20,0x20,0x20,0x20,0xE0,0xFE,0xFE,0xEE,0xE0,0x20,0x20,0x20,0x30,0x20,0x00},
{0x00,0x10,0x18,0x1C,0x0E,0x07,0x03,0x00,0x00,0x03,0x07,0x0E,0x1C,0x1C,0x08,0x08},/*"大",1*/

则显示正常:

请高手解释,谢谢

xiaoxiong1988 发表于 2021-1-30 14:37

本帖最后由 xiaoxiong1988 于 2021-1-30 14:43 编辑

这里
for(t=0;t<16;t++)
      {      
                OLED_WR_Byte(Hzk,OLED_DATA);
                adder+=1;
      }         
                        
然后这里
const uint8_t Hzk[]

看出问题了么?
你上面读取Hzk; t范围0-15


你字库是按照hzk[] 按顺序排列32个都是有效数据
下面的字库 前面16个是有效数据后16为 为空

上面的字库hzk[] 你试试 看看对不对?

比神乐 发表于 2021-1-30 15:15

xiaoxiong1988 发表于 2021-1-30 14:37
这里
for(t=0;t

谢谢,好了。
页: [1]
查看完整版本: OLED显示的问题