/*
 * STM32F103C8T6 + 0.96" OLED 5ҳл
 * I2C: PB8=SCL, PB9=SDA
 * : PA4(KEY0) PA5(KEY1) PC14(KEY2) PC15(KEY3) PA15(KEY4)
 */
#include "delay.h"
#include "sys.h"
#include "OLED.h"
#include "key.h"

#define PAGE_COUNT 5

// ҳ0: ӭ/ϵͳϢ
void page0_show(void)
{
    OLED_Clear();
    OLED_ShowString(0, 0, "=== STM32F103 ===");
    OLED_ShowString(1, 0, "0.96 OLED Demo");
    OLED_ShowString(2, 0, "Press KEY0~KEY4");
    OLED_ShowString(3, 0, "Switch Page 1~5");
    OLED_ShowString(5, 0, "I2C: PB8 PB9");
    OLED_ShowString(6, 0, "OLED Addr: 0x78");
    OLED_ShowString(7, 0, "Ready!          ");
}

// ҳ1: ʵʱ
void page1_show(int count)
{
    OLED_Clear();
    OLED_ShowString(0, 0, "== Page 1/5 ==");
    OLED_ShowString(1, 0, "Counter Demo");
    OLED_ShowString(2, 0, "Count:");
    OLED_ShowNum(2, 7, count, 5);
    OLED_ShowString(4, 0, "KEY0: Reset");
    OLED_ShowString(5, 0, "KEY1: +1");
    OLED_ShowString(6, 0, "KEY2: -1");
    OLED_ShowString(7, 0, "KEY4: Back");
}

// ҳ2: ¶/ѹģ
void page2_show(void)
{
    OLED_Clear();
    OLED_ShowString(0, 0, "== Page 2/5 ==");
    OLED_ShowString(1, 0, "Sensor Display");
    OLED_ShowString(2, 0, "Temp:  25.5 C");
    OLED_ShowString(3, 0, "Humi:  60 %");
    OLED_ShowString(4, 0, "Volt:  3.300 V");
    OLED_ShowString(5, 0, "Press ADC or");
    OLED_ShowString(6, 0, "connect real");
    OLED_ShowString(7, 0, "sensors here.   ");
}

// ҳ3: ʾ
void page3_show(void)
{
    OLED_Clear();
    OLED_ShowString(0, 0, "== Page 3/5 ==");
    OLED_ShowString(1, 0, "Arrow Keys Demo");
    OLED_ShowString(3, 2, "[UP]    ");
    OLED_ShowString(4, 0, "[LEFT][OK][RIGHT]");
    OLED_ShowString(5, 2, "[DOWN]  ");
    OLED_ShowString(7, 0, "Try pressing keys");
}

// ҳ4: ϵͳ״̬
void page4_show(void)
{
    OLED_Clear();
    OLED_ShowString(0, 0, "== Page 4/5 ==");
    OLED_ShowString(1, 0, "System Status");
    OLED_ShowString(2, 0, "CPU: STM32F103");
    OLED_ShowString(3, 0, "Clock: 72 MHz");
    OLED_ShowString(4, 0, "Flash: 64 KB");
    OLED_ShowString(5, 0, "RAM: 20 KB");
    OLED_ShowString(6, 0, "OLED: 128x64");
    OLED_ShowString(7, 0, "I2C Speed: 100k");
}

// ҳ5: 
void page5_show(void)
{
    OLED_Clear();
    OLED_ShowString(0, 0, "== Page 5/5 ==");
    OLED_ShowString(1, 0, "About");
    OLED_ShowString(2, 0, "OLED Display v1.0");
    OLED_ShowString(3, 0, "Key Scan Demo");
    OLED_ShowString(4, 0, "Author: User");
    OLED_ShowString(6, 0, "PB8=SCL PB9=SDA");
    OLED_ShowString(7, 0, "Thank you!       ");
}

int main(void)
{
    u8 page = 0;
    u8 key;
    int counter = 0;

    delay_init();
    OLED_Init();
    KEY_Init();

    OLED_Clear();
    page0_show();

    while (1)
    {
        key = KEY_Scan(0);

        if (key)
        {
            switch (key)
            {
                case KEY0_PRES:  // KEY0: еҳ1
                    page = 1;
                    counter = 0;
                    page1_show(counter);
                    break;

                case KEY1_PRES:  // KEY1: еҳ2
                    page = 2;
                    page2_show();
                    break;

                case KEY2_PRES:  // KEY2: еҳ3
                    page = 3;
                    page3_show();
                    break;

                case KEY3_PRES:  // KEY3: еҳ4
                    page = 4;
                    page4_show();
                    break;

                case KEY4_PRES:  // KEY4: еҳ5
                    page = 5;
                    page5_show();
                    break;
            }
        }

        // ҳ1ڰܣ
        if (page == 1)
        {
            key = KEY_Scan(0);
            if (key)
            {
                if (key == KEY0_PRES) { counter = 0; page1_show(counter); }
                if (key == KEY1_PRES) { counter++; page1_show(counter); }
                if (key == KEY2_PRES) { counter--; page1_show(counter); }
                if (key == KEY4_PRES) { page = 0; page0_show(); }
            }
        }
    }
}


