stc15F204EA 0.96寸oled的使用IIC协议,显示图片和只讲屏幕点亮关闭可以,但显示汉字一直不成功,为什么?程序问题吗

2019-07-14 19:44发布

void delay(int ms)
{
   int ii,jj;
   if (ms<1) ms=1;
   for(ii=0;ii<ms;ii++)
     for(jj=0;jj<500;jj++);        
}

/****主函数*****/
void main(void)
{
OLED_Init();
delay(5);
while(1)
{
  OLED_ShowCN(3,0,1);
  OLED_ShowCN(21,0,2);
  delay(500);
//delay(500);
  //OLED_Fill(0xff);
  //delay(1000);
}
}
/*******************************************
//OLED: x,y -- 起始点坐标(x:0~127, y:0~7); N:汉字在codetab.h中的索引        ----OK
********************************************/
void OLED_ShowCN(unsigned char x, unsigned char y, unsigned char N)
{
        unsigned char wm=0;
        unsigned int  adder=32*N;
        OLED_SetPos(x , y);
        for(wm = 0;wm < 16;wm++)
        {
                Write_IIC_Data(F16x16[adder]);
                adder += 1;
        }
        OLED_SetPos(x,y + 1);
        for(wm = 0;wm < 16;wm++)
        {
                Write_IIC_Data(F16x16[adder]);
                adder += 1;
        }
}/***************************16*16的点阵字体取模方式:共阴——列行式——逆向输出*********/
const unsigned char F16x16[] =                    
{

0x7F,0x8F,0xFF,0x00,0xDF,0xEF,0xF7,0xB7,0xB7,0x00,0xB7,0xB7,0xB7,0xB7,0xF7,0xFF,
0x7F,0x9F,0xE7,0xF8,0xF7,0xCF,0xFD,0xFD,0xFD,0x00,0xFD,0xFD,0xED,0xDD,0xE1,0xFF,//"炜",0
0x80,0x70,0x00,0xFF,0x20,0x10,0x08,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0x08,0x00,
0x80,0x60,0x18,0x07,0x08,0x30,0x02,0x02,0x02,0xFF,0x02,0x02,0x12,0x22,0x1E,0x00,//"炜",0

};
引脚设置没问题,程序能成功编译

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
布乃翁炜
1楼-- · 2019-07-16 02:59
meimengxing2014 发表于 2017-4-6 18:53
看看你取的字模和LCD显示的方向是否一致,或是你的描点函数有问题

我也是刚学习这个的,,取的字模都是按设定,共阴——列行式——逆向输出,描点函数指的是这个吗
/*******************************************
//OLED: x,y -- 起始点坐标(x:0~127, y:0~7); N:汉字在codetab.h中的索引        ----OK
********************************************/
void OLED_ShowCN(unsigned char x, unsigned char y, unsigned char N)
{
        unsigned char wm=0;
        unsigned int  adder=32*N;
        OLED_SetPos(x , y);
        for(wm = 0;wm < 16;wm++)
        {
                Write_IIC_Data(F16x16[adder]);
                adder += 1;
        }
        OLED_SetPos(x,y + 1);
        for(wm = 0;wm < 16;wm++)
        {
                Write_IIC_Data(F16x16[adder]);
                adder += 1;
        }
}
用的也都是网上能获取的例程拿来用的,图片能显示,汉字就不能显示很困惑
人中狼
2楼-- · 2019-07-16 07:08
没看到这个代码OLED_SetPos(x , y);,或者直接用 Write_IIC_Command(0xb0+y);来代替,有可能地址设置出错,显示汉字前先清屏,这样除非显示全空,不然总会有点东西显示。另外unsigned int  adder=32*N;,建议改为unsigned int  adder=32*(N-1);,数组起始应该是0。
布乃翁炜
3楼-- · 2019-07-16 10:02
 精彩回答 2  元偷偷看……
人中狼
4楼-- · 2019-07-16 13:17
最好把显示地址固定,直接写死,比如屏幕的最左上角为显示起点,现在查问题,能固定的参数最好都固定了。至于N,只是在于你如何定义而已,如果定义N =0为数组中第一个汉字,那就不需要做N-1,如果定义N=1为数组第一个汉字,那就应该要做N-1了
布乃翁炜
5楼-- · 2019-07-16 15:13
人中狼 发表于 2017-4-6 19:30
最好把显示地址固定,直接写死,比如屏幕的最左上角为显示起点,现在查问题,能固定的参数最好都固定了。至于N,只是在于你如何定义而已,如果定义N =0为数组中第一个汉字,那就不需要做N-1,如果定义N=1为数组第一个汉字,那就应该要做N-1了 ...

谢谢你的建议,改了另一个例程,能够成功显示了,问了懂的朋友,说是oled中的函数有问题,相信日后会慢慢把问题找出来

一周热门 更多>