WouoUI-PageVersion/Csource/example/LittleClock/LittleClockUI.c

370 lines
17 KiB
C
Raw Normal View History

2024-02-16 04:02:53 +00:00
#include "LittleClockUI.h"
#include "string.h"
#include "../WouoUIPage/oled_ui.h"
#include "time.h"
//-------两个闹钟(结合time.h实现的闹钟)
#define CLEAR_FLAG(flag,msk) ((flag)&=(~msk))
#define SET_FLAG(flag,msk) ((flag)|=(msk))
#define FLAG_IS_SET(flag,msk) ((flag&msk) == msk)
#define ALARM1_ENABLE_MSK 0x01
#define ALARM2_ENABLE_MSK 0x02
#define ALARM1_UPDATE_MSK 0x10
#define ALARM2_UPDATE_MSK 0x20
uint8_t alarm_flag = 0x00; //闹钟是否开启的标志位
struct tm alarm1,alarm2;
void Set_Alarm(struct tm* alarm,DigitalPage* alarm_page,uint8_t flag);
void Check_Alarm(struct tm* alarm,DigitalPage* alarm_page,uint8_t flag);
2024-02-16 04:02:53 +00:00
//--------定义页面对象
TitlePage main_page;
DigitalPage calendar_page;
DigitalPage clock_page;
ListPage alarm_list_page;
DigitalPage alarm1_page;
DigitalPage alarm2_page;
RaderPicPage about_page;
RaderPicPage ring_page; //闹钟响起时的界面(空的RaderPicPage页面用于自己绘制)
//--------定义每个页面需要的一些参数
//部分页面内选项个数
#define MAIN_PAGE_NUM 5
#define CALENDAR_LABEL_NUM 7
#define ALARM_LIST_PAGE_NUM 3
#define ALARM12_LABEL_NUM 3
#define ABOUT_PAGE_NUM 1
//定义部分页面选项
//********main页面的选项
Option mian_option_array[MAIN_PAGE_NUM] =
{///{ order,max,min,step,int_val,text,} //option的成员顺序但对单纯title的页面来说只有text需要赋值
{.text = "- Calendar"}, //前两个字符是前缀,不显示,用于标识一般选项(-),二值选项(+),数值弹窗(~),确认弹窗($)
{.text = "- Clock"},
{.text = "- Alarm"},
{.text = "~ BATLevel", .item_max = 100, .item_min = 0, .step = 0,.val = 50,},
//数值弹窗电压显示(step = 0则为只读无法使用按键编辑(其实就是使操作+-0无效))
{.text = "- Aoubt"},
};
//main页面的图标
Icon main_icon_array[MAIN_PAGE_NUM] =
{
[0] = {0xF0,0xF8,0x38,0x38,0x38,0x38,0x7F,0xFF,0x7F,0x38,0x38,0x38,0x38,0x38,0x38,0x38,
0x38,0x38,0x38,0x38,0x38,0x7F,0xFF,0xFF,0x38,0x38,0x38,0x38,0xF8,0xF0,0xFF,0xFF,
0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x8E,0x8E,0xCE,0xCE,0x0E,0x0E,
0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0xFF,0xFF,0xFF,0xFF,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x1F,0x3F,0x38,0x38,0x38,0x38,
0x38,0x38,0x38,0x38,0x38,0x39,0x3B,0x3B,0x39,0x39,0x3B,0x3B,0x39,0x38,0x38,0x38,
0x38,0x38,0x38,0x38,0x38,0x38,0x3F,0x1F}, //Canlendar
[1] = {0x00,0x00,0xC0,0xE0,0xF0,0x38,0x1C,0x1C,0x0E,0x06,0x07,0x07,0x07,0x03,0xE3,0xE3,
0x03,0x07,0x07,0x07,0x06,0x0E,0x1C,0x1C,0x38,0xF0,0xE0,0xC0,0x00,0x00,0xFC,0xFF,
0x1F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x80,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x1F,0xFF,0xFC,0x0F,0x3F,0xFE,0xE0,
0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x07,
0x07,0x07,0x07,0x06,0x0E,0xCE,0xE2,0xFE,0x3F,0x0F,0x00,0x00,0x00,0x01,0x03,0x07,
0x0E,0x0E,0x1C,0x18,0x38,0x38,0x38,0x30,0x30,0x30,0x30,0x38,0x38,0x38,0x18,0x1C,
0x0E,0x0E,0x07,0x03,0x01,0x00,0x00,0x00}, //clock
[2] = {0xF0,0xF8,0x9C,0xCE,0xEE,0x76,0xBE,0xDC,0xEC,0x60,0x70,0x30,0x38,0x38,0xF8,0xF8,
0x38,0x38,0x30,0x30,0x70,0xEC,0xDC,0xFE,0xF6,0xEE,0xCE,0x9C,0xFC,0xF0,0x01,0x03,
0xE7,0xFB,0xFF,0x0F,0x03,0x01,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xFF,0xFF,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0x03,0x0F,0xFE,0xFD,0xE7,0x03,0x01,0x00,0x00,0x01,0x1F,
0x7F,0xF8,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x80,0xC0,0xF0,0x7F,0x1F,0x03,0x00,0x00,0x00,0x00,0x00,0x0C,0x1E,0x0F,
0x07,0x03,0x07,0x07,0x0E,0x0E,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0E,0x0E,0x07,0x07,
0x03,0x03,0x07,0x0E,0x1C,0x08,0x00,0x00}, //alarm
[3] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x60,
0x30,0x18,0x18,0x10,0x30,0x70,0xD8,0x98,0x18,0x30,0xE0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x80,0xC0,0xE0,0x30,0x18,0x4C,0x26,0x13,0x03,0x01,0x00,0x00,0x00,0x00,
0x0A,0x04,0x0A,0x00,0x00,0x81,0xC2,0x6F,0x39,0x00,0x00,0x00,0x00,0x00,0x1E,0x33,
0x41,0x81,0x00,0x10,0x20,0x40,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x60,0x30,0x18,
0x0C,0x06,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x02,0x06,0x0C,0x08,0x08,0x0C,0x06,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, //Bat level
[4] = {0x00,0x00,0xC0,0xE0,0xF0,0x38,0x1C,0x1C,0x0E,0x06,0x07,0x07,0x07,0x03,0x03,0x03,
0x03,0x03,0x07,0x07,0x06,0x0E,0x1C,0x1C,0x38,0xF0,0xE0,0xC0,0x00,0x00,0xFC,0xFF,
0x1F,0x01,0x00,0xC0,0xE0,0xE0,0xC0,0x00,0x00,0x00,0x00,0xC0,0xE0,0xE0,0xC0,0x00,
0x00,0x00,0x00,0xC0,0xE0,0xE0,0xC0,0x00,0x01,0x1F,0xFF,0xF8,0x0F,0x3F,0xFE,0xE0,
0xC0,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0x01,0x00,0xC0,0xF0,0xFE,0x3F,0x0F,0x00,0x00,0x00,0x01,0x03,0x07,
0x0E,0x0E,0x1C,0x18,0x38,0x38,0x38,0x30,0x30,0x30,0x30,0x38,0x38,0x38,0x18,0x1C,
0x0E,0x0E,0x07,0x03,0x01,0x00,0x00,0x00}, //more
};
//Calendar 页面的选项
Option calendar_option_array[3] =
{///{ order,max,min,step,int_val,text,}
[Digital_Pos_IndexLeft] = { .item_max = 99, .item_min = 0, .step = 1, .text = "Year"},
[Digital_Pos_IndexMid] = { .item_max = 12, .item_min = 1, .step = 1, .text = "Month"},
[Digital_Pos_IndexRight] = { .item_max = 31, .item_min = 1, .step = 1, .text = "day"},
};
//标签数组
String week_str[CALENDAR_LABEL_NUM] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
//Clock页面选项
Option clock_option_array[3]=
{
[Digital_Pos_IndexLeft] = { .item_max = 23, .item_min = 0, .step = 1, .text = "Hour"},
[Digital_Pos_IndexMid] = { .item_max = 59, .item_min = 0, .step = 1, .text = "Minute"},
[Digital_Pos_IndexRight] = { .item_max = 59, .item_min = 0, .step = 1, .text = "Second"},
};
//alarm页面选项
Option alarm_list_option_array[3]=
{
{.text = " alarm list"},
{.text = "+ Alarm1", .val = 0,}, //为二值选项单选项值由Alarm12页面控制(读全局update_flag中enable_msk位可以设置)
{.text = "+ Alarm2", .val = 0,}, //默认值为0close
};
//alarm1页面选项
Option alarm1_option_array[3]=
{
[Digital_Pos_IndexLeft] = { .item_max = 23, .item_min = 0, .step = 1, .text = "Hour"},
[Digital_Pos_IndexMid] = { .item_max = 59, .item_min = 0, .step = 1, .text = "Minute"},
[Digital_Pos_IndexRight] = { .item_max = 59, .item_min = 0, .step = 1, .text = "Second"},
};
Option alarm2_option_array[3]=
{
[Digital_Pos_IndexLeft] = { .item_max = 23, .item_min = 0, .step = 1, .text = "Hour"},
[Digital_Pos_IndexMid] = { .item_max = 59, .item_min = 0, .step = 1, .text = "Minute"},
[Digital_Pos_IndexRight] = { .item_max = 59, .item_min = 0, .step = 0, .text = "Second"},
};
String alarm12_label_array[3] = { "Close", "Open", "Delete"};
//About页面
const uint8_t QRCode[] = {
0xFF,0xFF,0xFF,0x07,0x07,0xE7,0x27,0x27,0x27,0x27,0x27,0x27,0xE7,0x07,0x07,0xFF,
0xFF,0xDF,0x1F,0x1F,0x27,0x27,0x27,0x27,0xFF,0xC7,0xC7,0x27,0x27,0x1F,0x1F,0xFF,
0xFF,0xFF,0x07,0x07,0xE7,0x27,0x27,0x27,0x27,0x27,0x27,0xE7,0x07,0x07,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x80,0x9F,0x90,0x90,0x90,0x90,0x90,0x90,0x9F,0x80,
0x80,0xFF,0xFF,0x93,0xF0,0xF0,0x90,0x90,0xF3,0xF3,0x90,0x6F,0x6F,0x9F,0x9F,0xEC,
0xEC,0x0F,0xFF,0xFF,0x80,0x80,0x9F,0x90,0x90,0x90,0x90,0x90,0x90,0x9F,0x80,0x80,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x01,0x3F,0x31,0x31,0x3F,0x3F,0xF1,0xF1,
0x3F,0xCD,0xCD,0xC3,0xC3,0xCF,0x0F,0x0F,0xFF,0xFF,0x03,0x03,0x3F,0x00,0x00,0xCF,
0xCF,0xFD,0xFD,0x0C,0x3F,0x3F,0x03,0x03,0x0F,0xCD,0xCD,0xFF,0xFF,0xCF,0xCF,0x0D,
0xC3,0xC3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x66,0x66,0x9E,0x86,0x86,0x9F,0x9F,
0x07,0x07,0x80,0x66,0x66,0x66,0x66,0xFE,0x86,0x86,0xE0,0xE0,0x98,0x98,0x7F,0x87,
0x87,0xE7,0xE7,0xFE,0xFE,0x78,0x1F,0x1F,0x60,0x60,0x66,0x1F,0x1F,0x78,0x78,0xE7,
0xE7,0x86,0xE0,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x03,0xF3,0x13,0x13,
0x13,0x13,0x13,0x13,0xF3,0x03,0x03,0xFF,0xFF,0x9C,0x00,0x00,0x73,0x73,0x10,0x10,
0xE0,0xEF,0xEF,0x80,0x80,0x70,0x70,0x00,0x1F,0x1F,0x93,0x93,0x1F,0x00,0x00,0x00,
0x00,0x7F,0x7F,0x80,0x80,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0xC0,0xCF,
0xC8,0xC8,0xC8,0xC8,0xC8,0xC8,0xCF,0xC0,0xC0,0xFF,0xFF,0xC9,0xC0,0xC0,0xFE,0xFE,
0xF6,0xF6,0xCF,0xF9,0xF9,0xFF,0xFF,0xF0,0xF0,0xC6,0xC8,0xC8,0xFF,0xFF,0xCE,0xF0,
0xF0,0xF6,0xF6,0xFE,0xFE,0xC7,0xC9,0xC9,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
}; //Qrcode
RaderPic qrcode_raderpic[ABOUT_PAGE_NUM] =
{
{.pic = QRCode, .start_x = 7, .start_y = 7, .w = 50, .h = 50, .rd = RD_RIGHT_DOWN},
};
//--------定义每个页面的回调函数
void MainPage_CallBack(const Page* cur_page_addr,Option* select_item)
2024-02-16 04:02:53 +00:00
{
switch (select_item->order)
{
case 0: OLED_UIJumpToPage((PageAddr)cur_page_addr,&calendar_page); break;
case 1: OLED_UIJumpToPage((PageAddr)cur_page_addr,&clock_page); break;
case 2: OLED_UIJumpToPage((PageAddr)cur_page_addr,&alarm_list_page); break;
2024-02-16 04:02:53 +00:00
case 3: //更新电量
select_item->val = 50;
2024-02-16 04:02:53 +00:00
break;
case 4: OLED_UIJumpToPage((PageAddr)cur_page_addr,&about_page); break;
2024-02-16 04:02:53 +00:00
default: break;
}
}
void AlarmList_CallBack(const Page* cur_page_addr,Option* select_item)
2024-02-16 04:02:53 +00:00
{
switch (select_item->order)
{
// case 0:
// OLED_UIJumpToPage(self_page_id, &ring_page); //只是作为绘制页面的跳转测试
// break;
case 1:
OLED_UIJumpToPage((PageAddr)cur_page_addr, &alarm1_page);
2024-02-16 04:02:53 +00:00
break;
case 2:
OLED_UIJumpToPage((PageAddr)cur_page_addr, &alarm2_page);
2024-02-16 04:02:53 +00:00
break;
default :break;
}
}
void Alarm12_CallBack(const Page* cur_page_addr,Option* select_item)
2024-02-16 04:02:53 +00:00
{
uint8_t update_msk = 0;
uint8_t enable_msk = 0;
if((DigitalPage*)cur_page_addr == &alarm1_page){update_msk = ALARM1_UPDATE_MSK;enable_msk = ALARM1_ENABLE_MSK;}
else if((DigitalPage*)cur_page_addr == &alarm2_page){update_msk = ALARM2_UPDATE_MSK;enable_msk = ALARM2_ENABLE_MSK;}
2024-02-16 04:02:53 +00:00
switch (select_item->order)
{
case Digital_Pos_Complete: //编辑完成
SET_FLAG(alarm_flag, update_msk);
2024-02-16 04:02:53 +00:00
break;
case Digital_Pos_IndexLabel: //click标签时
if(strcmp(select_item->text, alarm12_label_array[0]) == 0) //close
CLEAR_FLAG(alarm_flag,enable_msk);
2024-02-16 04:02:53 +00:00
else if(strcmp(select_item->text, alarm12_label_array[1]) == 0) //open
SET_FLAG(alarm_flag,enable_msk);
else
if(strcmp(select_item->text, alarm12_label_array[2]) == 0) //Delete
2024-02-16 04:02:53 +00:00
{
CLEAR_FLAG(alarm_flag,enable_msk); //闹钟标志位关闭
if((DigitalPage*)cur_page_addr == &alarm1_page)
2024-02-16 04:02:53 +00:00
OLED_DigitalPage_UpdateDigitalNumAnimation(&alarm1_page, 0,0,0,Digital_Direct_Decrease);
else if((DigitalPage*)cur_page_addr == &alarm2_page)
2024-02-16 04:02:53 +00:00
OLED_DigitalPage_UpdateDigitalNumAnimation(&alarm2_page, 0,0,0,Digital_Direct_Decrease);
}
default:
break;
}
}
void About_CallBack(const Page* cur_page_addr,Option* select_item)
2024-02-16 04:02:53 +00:00
{
uint8_t buff[10] = {0};
if(select_item->order == ABOUT_PAGE_NUM) //图像绘制完成后
{
OLED_WinDrawStr(&w_all, 64, 7, 16, buff);
OLED_WinDrawStr(&w_all, 64, 24, 16, "Scan");
OLED_WinDrawStr(&w_all, 64, 40, 16, "QrCode");
}
}
void Ring_CallBack(const Page* cur_page_addr,Option* select_item)
2024-02-16 04:02:53 +00:00
{
static float x = 2;
static float x_trg = 12;
static uint8_t color = 1;
OLED_Animation(&x, &x_trg, 200);
OLED_WinDrawBMP(&w_all, 15, 15 , 30, 30 , main_icon_array[2], color); // 实色绘制闹钟图标
OLED_SetPointColor(2); //反色绘制
int16_t len = 62-2*x;
OLED_WinDrawRBox(&w_all, x, x, len, len,2);
OLED_SetPointColor(1); //恢复正常颜色
if(x == x_trg)
{
if(x_trg == 12){x_trg = 2;color =! color;}
else if(x_trg == 2){x_trg = 12;color =! color;}
}
uint8_t ALARM1_RING_MSK = ALARM1_ENABLE_MSK<<2;
uint8_t ALARM2_RING_MSK = ALARM2_ENABLE_MSK<<2;
if(FLAG_IS_SET(alarm_flag,ALARM1_RING_MSK))
2024-02-16 04:02:53 +00:00
OLED_WinDrawStr(&w_all, 60, 8, 16, "Alarm1");
else if(FLAG_IS_SET(alarm_flag,ALARM2_RING_MSK))
2024-02-16 04:02:53 +00:00
OLED_WinDrawStr(&w_all, 60, 8, 16, "Alarm2");
OLED_WinDrawStr(&w_all, 60, 34, 8, (uint8_t*)"Press Any");
OLED_WinDrawStr(&w_all, 60, 44, 8, (uint8_t*)"Key to exit!");
2024-02-16 04:02:53 +00:00
}
//-------------一些需要用的内部函数
//--------------给主函数调用的接口函数
void LittleClockUI_Init(void)
{
// OLED_Init(); //硬件的初始化
// LL_mDelay(100);
2024-02-16 04:02:53 +00:00
OLED_ClearBuff(); //清空缓存
OLED_RefreshBuff(); //刷新屏幕(清空屏幕)
OLED_SetPointColor(1); //设置绘制颜色
OLED_TitlePageInit(&main_page, MAIN_PAGE_NUM, mian_option_array, main_icon_array, MainPage_CallBack);
OLED_DigitalPageInit(&calendar_page, calendar_option_array, CALENDAR_LABEL_NUM, week_str, '-', 0, 100, NULL);
OLED_DigitalPageInit(&clock_page, clock_option_array, CALENDAR_LABEL_NUM, week_str, ':', 50, 100, NULL); //时钟页面的标签也显示周
OLED_ListPageInit(&alarm_list_page, ALARM_LIST_PAGE_NUM, alarm_list_option_array, AlarmList_CallBack);
OLED_DigitalPageInit(&alarm1_page, alarm1_option_array, ALARM12_LABEL_NUM, alarm12_label_array, ':', 50, 100, Alarm12_CallBack);
OLED_DigitalPageInit(&alarm2_page, alarm2_option_array, ALARM12_LABEL_NUM, alarm12_label_array, ':', 50, 100, Alarm12_CallBack);
OLED_RaderPicPageInit(&about_page, ABOUT_PAGE_NUM, qrcode_raderpic, Rader_Pic_Mode_Hold, About_CallBack);
OLED_RaderPicPageInit(&ring_page, 0, NULL, Rader_Pic_Mode_Hold, Ring_CallBack); //相当于一个空的页面可以自由绘制
2024-02-16 04:02:53 +00:00
}
void LittleClockUI_Proc(void)
{
OLED_UIProc();
if((DigitalPage*)OLED_GetCurrentPage() == &calendar_page)
{
time_t t = time(NULL);
struct tm *local_time = localtime(&t);
OLED_DigitalPage_UpdateDigitalNumAnimation(&calendar_page,
local_time->tm_year-100, local_time->tm_mon + 1, local_time->tm_mday, Digital_Direct_Increase);
}
if((DigitalPage*)OLED_GetCurrentPage() == &clock_page)
{
time_t t = time(NULL);
struct tm *local_time = localtime(&t);
OLED_DigitalPage_UpdateDigitalNumAnimation(&clock_page,
local_time->tm_hour, local_time->tm_min, local_time->tm_sec, Digital_Direct_Increase);
}
Set_Alarm(&alarm1,&alarm1_page,ALARM1_UPDATE_MSK);
Set_Alarm(&alarm2,&alarm2_page,ALARM2_UPDATE_MSK);
Check_Alarm(&alarm1,&alarm1_page,ALARM1_ENABLE_MSK);
Check_Alarm(&alarm2,&alarm2_page,ALARM2_ENABLE_MSK);
// printf("当前时间:%d-%02d-%02d %02d:%02d:%02d\n",
// local_time->tm_year + 1900,
// local_time->tm_mon + 1,
// local_time->tm_mday,
// local_time->tm_hour,
// local_time->tm_min,
// local_time->tm_sec);
}
void Set_Alarm(struct tm* alarm,DigitalPage* alarm_page,uint8_t msk)
{
if(FLAG_IS_SET(alarm_flag,msk))
{
time_t t = time(NULL);
struct tm *local_time = localtime(&t);
*alarm = *local_time; //同步日期
alarm->tm_hour = alarm_page->option_array[Digital_Pos_IndexLeft].val;
alarm->tm_min = alarm_page->option_array[Digital_Pos_IndexMid].val;
alarm->tm_sec = alarm_page->option_array[Digital_Pos_IndexRight].val;
CLEAR_FLAG(alarm_flag,msk);
}
}
void Check_Alarm(struct tm* alarm,DigitalPage* alarm_page,uint8_t msk)
{
uint8_t temp_msk = msk<<2;
time_t t = 0;
struct tm *local_time = NULL;
printf("0x%X\r\n",alarm_flag);
printf("alarm1 = %02d:%02d:%02d\r\n",alarm1.tm_hour,alarm1.tm_min,alarm1.tm_sec);
// printf("localtime = %02d:%02d:%02d\r\n",local_time->tm_hour,local_time->tm_min,local_time->tm_sec);
if(FLAG_IS_SET(alarm_flag,msk) || FLAG_IS_SET(alarm_flag,temp_msk))
{
t = time(NULL);
local_time = localtime(&t);
if(FLAG_IS_SET(alarm_flag,msk))
alarm_list_page.option_array[msk].val = 1;
else
alarm_list_page.option_array[msk].val = 0;
if(alarm->tm_hour == local_time->tm_hour && alarm->tm_min == local_time->tm_min && alarm->tm_sec == local_time->tm_sec)
{
CLEAR_FLAG(alarm_flag,msk);
SET_FLAG(alarm_flag,temp_msk);
OLED_UIChangeCurrentPage(&ring_page);
}
if(FLAG_IS_SET(alarm_flag,temp_msk))
{
if(alarm->tm_hour == local_time->tm_hour && alarm->tm_sec == local_time->tm_sec
&& (alarm->tm_min+1 == local_time->tm_min ||(alarm->tm_min == 59 && alarm->tm_min+1 == local_time->tm_min == 0)))
{
CLEAR_FLAG(alarm_flag,temp_msk);
OLED_UIChangeCurrentPage((PageAddr)alarm_page);
}
}
}
2024-02-16 04:02:53 +00:00
}