基于STM32驱动IIC0.96寸OLED屏 底层驱动+菜单程序源码

目录

1、前言

2、实物图

3、程序

资料下载地址:基于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");         
}
        

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

森旺电子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值