OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2786|回复: 5

关于oled显示字符颜色反转的问题

[复制链接]

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
122
金钱
122
注册时间
2017-7-9
在线时间
21 小时
发表于 2018-8-10 14:19:36 | 显示全部楼层 |阅读模式
1金钱
用stm32驱动oled,这几天在写一个操作界面,比如:
OLED_ShowString(0,3,"NRF24L01 READY",16);
正常显示是"NRF24L01 READY"字符笔画显示出来,背景不亮
现在的问题是想显示区域反转,就是"NRF24L01 READY"字符笔画不显示,字符背景亮
有大神操作过吗???求解!!

最佳答案

查看完整内容[请看2#楼]

已解决,我在每个oled显示函数的入口参数里增加一项mode,1表示正常显示,0表示反白 void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size,u8 mode) { unsigned char c=0,i=0; c=chr-' ';//μÃμ½Æ«òÆoóμÄÖμ if(mode){ if(x>Max_Column-1){x=0;y=y+2;} if(Char_Size ==16) { OLED_Set_Pos(x,y); for(i=0;i
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
122
金钱
122
注册时间
2017-7-9
在线时间
21 小时
 楼主| 发表于 2018-8-10 14:19:37 | 显示全部楼层
已解决,我在每个oled显示函数的入口参数里增加一项mode,1表示正常显示,0表示反白
void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size,u8 mode)
{           
        unsigned char c=0,i=0;       
        c=chr-' ';//μÃμ½Æ«òÆoóμÄÖμ               
  if(mode){       
                if(x>Max_Column-1){x=0;y=y+2;}
                if(Char_Size ==16)
                        {
                        OLED_Set_Pos(x,y);       
                        for(i=0;i<8;i++)
                        OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);
                        OLED_Set_Pos(x,y+1);
                        for(i=0;i<8;i++)
                        OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);
                        }
                        else {       
                                OLED_Set_Pos(x,y);
                                for(i=0;i<6;i++)
                                OLED_WR_Byte(F6x8[c][i],OLED_DATA);
                               
                        }
                }else
          {
                        if(x>Max_Column-1){x=0;y=y+2;}
                if(Char_Size ==16)
                        {
                        OLED_Set_Pos(x,y);       
                        for(i=0;i<8;i++)
                        OLED_WR_Byte(~F8X16[c*16+i],OLED_DATA);           //模式0,这里的F8X16要取反
                        OLED_Set_Pos(x,y+1);
                        for(i=0;i<8;i++)
                        OLED_WR_Byte(~F8X16[c*16+i+8],OLED_DATA);              //模式0,这里的F8X16要取反
                        }
                        else {       
                                OLED_Set_Pos(x,y);
                                for(i=0;i<6;i++)
                                OLED_WR_Byte(~F6x8[c][i],OLED_DATA);         ///模式0,这里的F8X16要取反
                        }
          }
}
其他调用到这条函数的也要做相应修改
回复

使用道具 举报

7

主题

200

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1279
金钱
1279
注册时间
2017-7-18
在线时间
257 小时
发表于 2018-8-10 14:52:19 | 显示全部楼层
把字符点阵取反之后在重新写入oled就可以了
回复

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
122
金钱
122
注册时间
2017-7-9
在线时间
21 小时
 楼主| 发表于 2018-8-10 15:03:48 | 显示全部楼层
周易八索连山 发表于 2018-8-10 14:52
把字符点阵取反之后在重新写入oled就可以了

这样可能会使得内部储存用量翻倍啊
回复

使用道具 举报

7

主题

200

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1279
金钱
1279
注册时间
2017-7-18
在线时间
257 小时
发表于 2018-8-10 15:09:10 | 显示全部楼层
不会增加内存的
需要反白显示的时候
oled_writeByte(~ASCLL8x6[0][0],DATA);//这样写并不会增加内存使用
好像oled有的型号也是支持反白命令的,但是没用过你如果当心增加内存的话可以试试这个。
回复

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
122
金钱
122
注册时间
2017-7-9
在线时间
21 小时
 楼主| 发表于 2018-8-10 15:16:28 | 显示全部楼层
周易八索连山 发表于 2018-8-10 15:09
不会增加内存的
需要反白显示的时候
oled_writeByte(~ASCLL8x6[0][0],DATA);//这样写并不会增加内存使用
...

好的我试试
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-12 16:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表