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