OLED菜单编程实现+普中51单片机

发布时间: 2024-07-26
来源: 电子工程世界

1 实验现象

2 实验原理(略)

3 系统设计(略)

4 硬件设计(略)

5 软件设计

 

5.1 主函数

#include "OLED.H"

#include "bmp.h"


void Main_Menu(void);

void Main_Show_Menu(void);

void Set_Temperature(void);

void Set_HighTemperature(void);

void Set_LowTemperature(void);

void Set_Time(void);


u8    MENU=1;

u16 temp=125;

u16 humidity=564;

u8  year=23, month=1, day=28;

u8    hour=16, min=24, sec=30, week=5;

u16 low_alarmtemp=102,    high_alarmtemp=560;


int main(void)

{    

    u8 t=' ';            //空格,space

    OLED_Init();        //初始化OLED

    OLED_ColorTurn(0);    //0正常显示,1 反色显示

    OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示

    while(1) 

    {        

        //开机界面,显示一张图片128*64

        OLED_DrawBMP(0,0,128,64,BMP12864_BIRD);

        delay_ms(100);

        OLED_Clear();

        if(MENU==1)        //主菜单

        {

            Main_Menu();

            delay_ms(100);

            MENU=11;

            if(MENU==11)

                OLED_Clear();

        }

        

        if(MENU==11)    //主菜单的子菜单,刷新温度和湿度数据

        {

            Main_Show_Menu();

            delay_ms(100);

            MENU=2;

            if(MENU==2)

                OLED_Clear();

        }

        

        if(MENU==2)        //设置温度

        {

            Set_Temperature();

            delay_ms(100);

            MENU=21;

            if(MENU==21)

                OLED_Clear();

        }

        

        if(MENU==21)        //设置高温报警

        {

            Set_HighTemperature();

            delay_ms(100);

            MENU=22;

            if(MENU==22)

                OLED_Clear();

        }

        

        if(MENU==22)        //设置低温报警

        {

            Set_LowTemperature();

            delay_ms(100);

            MENU=3;

            if(MENU==3)

                OLED_Clear();

        }

        

        if(MENU==3)            //设置时间

        {

            Set_Time();

            delay_ms(100);

            MENU=1;

            if(MENU==1)

                OLED_Clear();

        }

    }          

}


void Main_Menu(void)

{

    //0-1页,主菜单,反显方式,

    Inverse_OLED_ShowChinese(0*16,0,18,16);    //不显示

    Inverse_OLED_ShowChinese(1*16,0,18,16);    //不显示

    Inverse_OLED_ShowChinese(2*16,0,18,16);    //不显示

    Inverse_OLED_ShowChinese(3*16,0, 0,16);    //主

    Inverse_OLED_ShowChinese(4*16,0, 1,16);    //菜

    Inverse_OLED_ShowChinese(5*16,0, 2,16);    //单

    Inverse_OLED_ShowChinese(6*16,0,18,16);    //不显示

    Inverse_OLED_ShowChinese(7*16,0,18,16);    //不显示

    

    //2-3页,当前温度:**.*'C

    OLED_ShowChinese(0*16,2, 3,16);        //当

    OLED_ShowChinese(1*16,2, 4,16);        //前

    OLED_ShowChinese(2*16,2, 5,16);        //温

    OLED_ShowChinese(3*16,2, 6,16);        //度

    OLED_ShowChar(4*16+0,2, ':',16);    //:

    OLED_ShowChar(4*16+8,2, '*',16);    //*

    OLED_ShowChar(5*16+0,2, '*',16);    //*

    OLED_ShowChar(5*16+8,2, '.',16);    //.

    OLED_ShowChar(6*16+0,2, '*',16);    //*

    OLED_ShowChar(6*16+8,2, ' ',16);    //空格

    OLED_ShowChinese(7*16,2, 19,16);    //'C

    

    //4-5页,当前湿度:**.*%

    OLED_ShowChinese(0*16,4, 3,16);        //当

    OLED_ShowChinese(1*16,4, 4,16);        //前

    OLED_ShowChinese(2*16,4, 7,16);        //温

    OLED_ShowChinese(3*16,4, 6,16);        //度

    OLED_ShowChar(4*16+0,4, ':',16);    //:

    OLED_ShowChar(4*16+8,4, '*',16);    //*

    OLED_ShowChar(5*16+0,4, '*',16);    //*

    OLED_ShowChar(5*16+8,4, '.',16);    //.

    OLED_ShowChar(6*16+0,4, '*',16);    //*

    OLED_ShowChar(6*16+8,4, ' ',16);    //空格

    OLED_ShowChar(7*16+0,4, '%',16);    //%

    OLED_ShowChar(7*16+8,4, ' ',16);    //空格

    

    //6-7页,日期:2023-01-27

    OLED_ShowChinese(0*16,6, 8,16);        //时

    OLED_ShowChinese(1*16,6, 9,16);        //间

    OLED_ShowChar(2*16+0, 6, ':',16);    //:

    OLED_ShowString(2*16+8,6,"2023-01-28",16); //日期    

}


void Main_Show_Menu(void)

{

    //0-1页,主菜单,反显方式,

    Inverse_OLED_ShowChinese(0*16,0,18,16);    //不显示

    Inverse_OLED_ShowChinese(1*16,0,18,16);    //不显示

    Inverse_OLED_ShowChinese(2*16,0,18,16);    //不显示

    Inverse_OLED_ShowChinese(3*16,0, 0,16);    //主

    Inverse_OLED_ShowChinese(4*16,0, 1,16);    //菜

    Inverse_OLED_ShowChinese(5*16,0, 2,16);    //单

    Inverse_OLED_ShowChinese(6*16,0,18,16);    //不显示

    Inverse_OLED_ShowChinese(7*16,0,18,16);    //不显示

    

    //2-3页,当前温度:temp=12.5'C

    OLED_ShowChinese(0*16,2, 3,16);                    //当

    OLED_ShowChinese(1*16,2, 4,16);                    //前

    OLED_ShowChinese(2*16,2, 5,16);                    //温

    OLED_ShowChinese(3*16,2, 6,16);                    //度

    OLED_ShowChar(4*16+0,2, ':',16);                //:

    OLED_ShowChar(4*16+8,2, temp/100+0x30,16);        //取temp的百位

    OLED_ShowChar(5*16+0,2, temp/10%10+0x30,16);    //取temp的十位

    OLED_ShowChar(5*16+8,2, '.',16);    //.

    OLED_ShowChar(6*16+0,2, temp%10+0x30,16);        //取temp的个位

    OLED_ShowChar(6*16+8,2, ' ',16);                //空格

    OLED_ShowChinese(7*16,2, 19,16);                //'C

    

    //4-5页,当前湿度:humidity=56.4 %

    OLED_ShowChinese(0*16,4, 3,16);                    //当

    OLED_ShowChinese(1*16,4, 4,16);                    //前

    OLED_ShowChinese(2*16,4, 7,16);                    //湿

    OLED_ShowChinese(3*16,4, 6,16);                    //度

    OLED_ShowChar(4*16+0,4, ':',16);                //:

    OLED_ShowChar(4*16+8,4, humidity/100+0x30,16);    //取humidity的百位

    OLED_ShowChar(5*16+0,4, humidity/10%10+0x30,16);//取humidity的十位

    OLED_ShowChar(5*16+8,4, '.',16);                //.

    OLED_ShowChar(6*16+0,4, humidity%10+0x30,16);    //取humidity的个位

    OLED_ShowChar(6*16+8,4, ' ',16);                //空格

    OLED_ShowChar(7*16+0,4, '%',16);                //%

    OLED_ShowChar(7*16+8,4, ' ',16);                //空格

    

    //6-7页,日期:2023-01-27

    OLED_ShowChinese(0*16,6, 8,16);        //时

    OLED_ShowChinese(1*16,6, 9,16);        //间

    OLED_ShowChar(2*16+0, 6, ':',16);    //:

    OLED_ShowString(2*16+8,6,"2023-01-28",16); //日期    

文章来源于: 电子工程世界 原文链接

本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。