#include <xc.h>
#define _XTAL_FREQ 4000000

__CONFIG(FOSC_INTOSCIO & WDTE_OFF & PWRTE_ON & MCLRE_OFF & CP_OFF & CPD_OFF & BOREN_ON & IESO_OFF & FCMEN_OFF);
__IDLOC(F683); //PIC12F683

void LED_ON_OFF(unsigned char);
void LED_CHANGE(unsigned char);

void main(void)
{
    unsigned char i; //スイッチ用フラグに使用

    OSCCON = 0b01100000; //3V電圧なのでクロック周波数を4MHzにする
    ANSEL = 0;
    TRISIO = 0b00111000; //入出力設定。GP3,GP4,GP5を入力、GP0,GP1,GP2は出力
    CMCON0 = 7;

    GPIO = 0b00000000;

    i = 1;

    while(1) //無限ループ構造
    {
        ADCON0 = 0b00001101; //GP4(AN3)をAD変換対象にする。GP3とGP5はもともとデジタル？
        __delay_ms(20);
        GO = 1; //変換の開始
        while(GO); //変換が終わるまで待つ

        if(GP3 == 0) //電源スイッチが押されたときの処理。
        {
            __delay_ms(10); //チャタリング除去

            if(i == 1) //スイッチが一回押されたとき(起動時)
            {
                LED_ON_OFF(i);
                i++;
            }
            else if(i == 2) //スイッチが二回押されたとき
            {
                LED_ON_OFF(i);
                i++;
            }
            else //スイッチが三回押されたとき
            {
                LED_ON_OFF(i);
                i = 1;
            }
        }

        if((GP4 == 0) || (GP5 == 0) && ((i == 2) || (i == 3)))
        {
            LED_CHANGE(i-1);
        }
    }
}

void LED_ON_OFF(unsigned char n)
{
    if(n == 1)
    {
        GP0 = 0;
        GP1 = 0;
        GP2 = 1; //緑を点灯
    }
    else if(n == 2)
    {
        GP0 = 0;
        GP1 = 1; //青を点灯
        GP2 = 0;
    }
    else
    {
        GP0 = 0;
        GP1 = 0;
        GP2 = 0;
    }
}

void LED_CHANGE(unsigned char n)
{
    unsigned char x;

    for(x=0; x<10; x++) //赤を点滅
    {
        GP0 = 1;
        GP1 = 0;
        GP2 = 0;
        __delay_ms(50);
        GP0 = 0;
        GP1 = 0;
        GP2 = 0;
        __delay_ms(50);
    }

    LED_ON_OFF(n);
}
