新手上路
- 积分
- 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级菜单程序》
|
|