OpenEdv-开源电子网

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

stm32f2驱动OLED ssd1306,如何实现某行反色显示来表示选中功能呢

[复制链接]

3

主题

6

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2014-3-7
在线时间
0 小时
发表于 2014-7-16 09:45:15 | 显示全部楼层 |阅读模式
5金钱
我用stm32驱动ssd1306的OLED,想完成类似以前旧式mp3的歌曲选中功能,怎么实现呢?
我大概知道是修改ssd1306的A6/A7h寄存器,但修改完毕后就全屏反色了。

各位大侠,谁知道如何将某行反色显示代表选中功能呢?

pic.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-7-16 12:52:52 | 显示全部楼层
改变整行的背景颜色不行么?
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-7-16 20:16:19 | 显示全部楼层
可以参考下ZLG gui的代码,反色显示很方便。
站在巨人的肩膀上不断的前进。。。
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2020-10-20
在线时间
5 小时
发表于 2020-10-20 19:07:56 | 显示全部楼层
第一步,把显示字符和字符串的函数修改一下,增加一个参数,(这里定义为bit fanbai)例如:void OLED_ShowChar(unsigned char x,unsigned char y, bit fanbai,unsigned char chr)  // fanbai=0正常显示,fanbai=1反白显示
{             
                 unsigned char c=0,i=0;       
                c=chr-' ';//得到偏移后的值                       
                if(x>Max_Column-1){x=0;y=y+2;}
                if(SIZE ==16)   //如果F8X16[]的字体时
               {
                     OLED_Set_Pos(x,y);       
                     for(i=0;i<8;i++)
                    {
                            if(fanbai==0)
                            {
                                  OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);//正常显示
                            }
                            else
                           {
                                  OLED_WR_Byte(~(F8X16[c*16+i]),OLED_DATA);//反白显示,也就是将字模数据取反
                           }   
                    }
            OLED_Set_Pos(x,y+1);
            for(i=0;i<8;i++)
            {
                     if(fanbai==0)
                     {
                          OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);
                     }
                     else
                    {
                           OLED_WR_Byte(~(F8X16[c*16+i+8]),OLED_DATA);
                    }   
            }
        }
        else   //否则F6x8[]的字体时
        {       
            OLED_Set_Pos(x,y+1);
            for(i=0;i<6;i++)
            {
                if(fanbai==0)
                {
                    OLED_WR_Byte(F6x8[c],OLED_DATA); //正常显示
                }
                else
                {
                    OLED_WR_Byte(~(F6x8[c]),OLED_DATA); //反白显示,也就是将字模数据取反
                }
            }
        }
}

/*******************************************************************************************************/
第二步:把显示字符串的函数也修改一下,增加反白显示的参数(这里定义为bit fanbai)例如:
void OLED_ShowString(unsigned char x,unsigned char y,bit fanbai,unsigned char *chr)  //fanbai=0正常显示,fanbai=1反白显示
{
        unsigned char j=0;
        while (chr[j]!='\0')
        {               
                OLED_ShowChar(x,y,fanbai,chr[j]);
                x+=8;
                if(x>120){x=0;y+=2;}
                j++;
        }
}


/*******************************************************************************************************/
第三步:在你需要反白显示的行显示字符串
    OLED_ShowString(0,0,0, "Menu1"); //第1行正常显示
    OLED_ShowString(0,2,0, "Menu2");  //第2行正常显示
    OLED_ShowString(0,4,1, "Menu3           "); //第3行整行反白显示,注意要把这行字符串后面没有字符的部分都用空白补上,此处补11个空白,整行反白显示完美解决
    OLED_ShowString(0,6,0, "Menu4");  //第4行正常显示


反白显示效果

反白显示效果


如还不懂;加我微信 z15850726338,给源文件拿去研究,精简高效的《n级菜单程序》

回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 16:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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