改用 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)
{
}