目录
资料下载地址:基于STM32驱动IIC0.96寸OLED屏 底层驱动+菜单程序源码
1、前言
本文针对IIC OLED屏底层驱动相关代码
16X32,32X32,128X48等下面附带相关实物图
内置简单的菜单程序,下面附带实物图
2、实物图
3、程序
stm32单片机OLED菜单源程序如下:
#define OLED_IIC_SCL PBout(4) //SCL 串行时钟
#define OLED_IIC_SDA PBout(3) //SDA 串行数据
}
void OLED_P16x32Ch(unsigned char x,unsigned char y,unsigned int N)
{
unsigned char wm=0;
unsigned int adder=64*N;
OLED_Set_Pos(x , y);
for(wm = 0;wm < 16;wm++)
{
OLED_WrDat(F16x32[adder]);
adder += 1;
}
OLED_Set_Pos(x,y+1 );
for(wm = 0;wm <16;wm++)
{
OLED_WrDat(F16x32[adder]);
adder += 1;
}
OLED_Set_Pos(x , y+2);
for(wm = 0;wm < 16;wm++)
{
OLED_WrDat(F16x32[adder]);
adder += 1;
}
OLED_Set_Pos(x,y+3 );
for(wm = 0;wm <16;wm++)
{
OLED_WrDat(F16x32[adder]);
adder += 1;
}
}
void OLED_P32x32Ch(unsigned char x,unsigned char y,unsigned int N)
{
unsigned char wm=0;
unsigned int adder=128*N;
OLED_Set_Pos(x , y);
for(wm = 0;wm < 32;wm++)
{
OLED_WrDat(F32x32[adder]);
adder += 1;
}
OLED_Set_Pos(x,y+1 );
for(wm = 0;wm <32;wm++)
{
OLED_WrDat(F32x32[adder]);
adder += 1;
}
OLED_Set_Pos(x , y+2);
for(wm = 0;wm < 32;wm++)
{
OLED_WrDat(F32x32[adder]);
adder += 1;
}
OLED_Set_Pos(x,y+3 );
for(wm = 0;wm <32;wm++)
{
OLED_WrDat(F32x32[adder]);
adder += 1;
}
}
void OLED_P128x48Ch(unsigned char x,unsigned char y,unsigned int N)
{
unsigned char wm=0;
unsigned int adder=768*N;
OLED_Set_Pos(x , y);
for(wm = 0;wm < 128;wm++)
{
OLED_WrDat(F128x48[adder]);
adder += 1;
}
OLED_Set_Pos(x,y+1);
for(wm = 0;wm <128;wm++)
{
OLED_WrDat(F128x48[adder]);
adder += 1;
}
OLED_Set_Pos(x , y+2);
for(wm = 0;wm < 128;wm++)
{
OLED_WrDat(F128x48[adder]);
adder += 1;
}
OLED_Set_Pos(x,y+3 );
for(wm = 0;wm <128;wm++)
{
OLED_WrDat(F128x48[adder]);
adder += 1;
}
OLED_Set_Pos(x,y+4 );
for(wm = 0;wm <128;wm++)
{
OLED_WrDat(F128x48[adder]);
adder += 1;
}
OLED_Set_Pos(x,y+5 );
for(wm = 0;wm <128;wm++)
{
OLED_WrDat(F128x48[adder]);
adder += 1;
}
}
// IIC协议 OLED屏 人机界面
void lnterface(void) //人机界面
{
Status_Bar();
switch(Page_Sgin)
{
case 0:
Main_Menu(); break;
case 2:
Menu_2(); break;
case 3:
Menu_3();break;
default : break;
}
}
//主菜单
void Main_Menu(void)
{
WhenTheDisplay(); //显示时分秒
DayAndDayDisplay(); //显示年月日
OLED_P16x16Ch(0*16,6,11); //显示 //菜
OLED_P16x16Ch(1*16,6,12); //显示 //单
OLED_P16x16Ch(6*16,6,13); //显示 //退
OLED_P16x16Ch(7*16,6,14); //显示 //出
if(KEY_Scan(Key_Selectio)==Determine_Choice)//判断是否按下确定按键
{
Page_Sgin=2; //页面选择置2
OLED_P128x48Ch(0,2,0); //清除内容栏
}
}
void Menu_2(void)
{
if(Choice==2||Choice==4||Choice==6)
{
OLED_P16x16Ch(0*16,Choice,44); //选择
Display(2,0,0);
switch(KEY_Scan(Key_Selectio))
{
case Superior_Choice: //上翻
OLED_P16x16Ch(0*16,Choice,37);
Choice-=2;
break;
case Subordinate_Choice: //下翻
OLED_P16x16Ch(0*16,Choice,37);
Choice+=2;
break;
case Determine_Choice: //确定
OLED_P128x48Ch(0,2,0); //清除内容栏
Page_Sgin=3;Choice=2;
break;
case Return_Choice: //返回
OLED_P128x48Ch(0,2,0);
Page_Sgin=0;
break;
default :
break;
}
}
else if(Choice>6)Choice=2;
else if(Choice<2)Choice=6;
OLED_ShowNum(6*16,6,Choice/2,1,12);
OLED_P6x8Str(6.5*16,7,"/");
OLED_P6x8Str(7*16,7,"10");
}
void Menu_3(void)
{
if(Choice==2||Choice==4||Choice==6)
{
OLED_P16x16Ch(0*16,Choice,44); //选择
Display(2,0,0);
switch(KEY_Scan(Key_Selectio))
{
case Superior_Choice: //上翻
OLED_P16x16Ch(0*16,Choice,37);
Choice-=2;
break;
case Subordinate_Choice: //下翻
OLED_P16x16Ch(0*16,Choice,37);
Choice+=2;
break;
case Determine_Choice: //确定
OLED_P128x48Ch(0,2,0); //清除内容栏
Page_Sgin=3;Choice=2;
break;
case Return_Choice: //返回
OLED_P128x48Ch(0,2,0);
Page_Sgin=2;Choice=2;
break;
default :
break;
}
}
else if(Choice>6)Choice=2;
else if(Choice<2)Choice=6;
OLED_ShowNum(6*16,6,Choice/2,1,12);
OLED_P6x8Str(6.5*16,7,"/");
OLED_P6x8Str(7*16,7,"10");
}