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); //日期    

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

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>