發新話題

[問題] 改用 switch case 寫法 急~

改用 switch case 寫法 急~

#include "initial.h"
uint8_t ONOFF = 0;
uint8_t ABC=0;
uint8_t Y_Flicker = 0;
struct Flag_Bit Flag;                                                                                                                                                // Normal Status Flag
                                                                                                                                       
int main(void)
{
        cli();
        Init_WDT();                                                                                                                                                                // Initial WDT
        Init_IO();                                                                                                                                                                // Initial All I/O
        Init_Timer1();                                                                                                                                                        // Initial Timer0 - 8bit
        //Init_Timer2();                                                                                                                                                        // Initial Timer2 - 8bit
        Set_PWM();                                                                                                                                                                // Initial PWM(Timer1 - 16bit)
        Init_Status();                                                                                                                                                        // Initial All Status
        sei();                                                                                                                                                                        // Start Interrept       
        while(1)
        {
                asm("WDR");                                                                                                                                                        // Watch Dog               
        }
}

ISR(TIMER1_COMPA_vect)                                                                                                                                                // 10mS interrupt
{
        if ((PINC & 0x08) == 0x08)
        {
                if (T_10ms_01 > 0)
                T_10ms_01--;
                else
                {
                        T_10ms_01 = 50;
                        if (Flag.R_ONOFF_10ms == 0)
                        {
                                OCR0B = 0;
                        }
                        else
                        {
                                OCR0B = 0xff;
                        }
                        Flag.R_ONOFF_10ms ^= 1;
                }
                OCR0A = 0;
                OCR2B = 0;
        }
        else if ((PINC & 0x04) ==  0x04)                                                                                                                        //Y input                                                                       
        {
                if (T_10ms_02 > 0)
                        T_10ms_02--;
                else
                {
                        if (T_10ms_01 > 0)                                                                                                                                //10ms                                                                                                               
                        T_10ms_01--;
                        else
                        {
                                T_10ms_01 = 50;                                                                                                                        //DELAY 1s
                                if (Flag.R_ONOFF_10ms == F_OFF)                                                                                                //flag off                                                                                                       
                                {
                                        OCR0A = D_LED_OFF;                                                                                                                //G  OFF
                                        OCR0B = D_LED_OFF;                                                                                                                //R  OFF
                                        PORTB &= 0xFE;                                                                                                                               
                                }
                                else                                                                                                                                                       
                                {
                                        OCR0A = D_LED_Y;                                                                                                                //G  ON
                                        OCR0B = D_LED_R;                                                                                                                //R  ON
                                        //if (Flag.Alarm_Y == D_Alarm_Open)
                                                //PORTB |= 0x01;                                                                                                                       
                                }
                                Flag.R_ONOFF_10ms ^= 1;                                                                                                                //反向變1
                        }       
                }               
               
                OCR2B = 0;                                                                                                                                                        //B OFF                                                                                                               
               
        }
        else if ((PINC & 0x01) == 0x01)                                                                                                                        //B INPUT                                                                                                               
        {
                OCR0A = 0;                                                                                                                                                        //G OFF                                                                                                               
                OCR0B = 0;                                                                                                                                                        //R OFF                                                                                                                                               
                OCR2B = 255;                                                                                                                                                //B ON                                                                                                               
                Flag.R_ONOFF_10ms = F_ON;                                                                                                               
        }
        else if ((PINC & 0x02) == 0x02)                                                                                                                        //G INPUT                                                                               
        {
                OCR0A = 255;                                                                                                                                                //G ON                                                                                                               
                OCR0B = 0;                                                                                                                                                        //R OFF                                                                                                                                       
                OCR2B = 0;                                                                                                                                                        //B OFF                                                                                                                       
                PORTB &= 0xFE;                                                                                                                       
                Flag.R_ONOFF_10ms = F_ON;                                                                                                       
        }
        else                                                                                                       
   {
           if (T_10ms_01 > 0)
           T_10ms_01--;
           else
           {
                   T_10ms_01 = 100;
                   if (ABC ==0)
                   {
                           OCR0B = D_LED_R;
                           OCR2B = D_LED_OFF;
                           OCR0A = D_LED_OFF;
                           ABC++;
                   }
                   else if(ABC==1)
                   {
                           OCR0A = D_LED_G;
                           OCR0B = D_LED_OFF;
                           OCR2B= D_LED_OFF;
                           ABC++;
                   }
                   else
                   {
                           OCR2B = D_LED_B;
                           OCR0B = D_LED_OFF;
                           OCR0A = D_LED_OFF;
                           ABC=0;
                   }
           }
   }
}
ISR(TIMER2_COMPA_vect)                                                                                                                                       
{
       
}

TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。