Controle de Carga AC com PIC

Boa Tarde!

Tenho uma placa ja pronta que utiliza PIC 16F628A.
Preciso criar um código que, com um único botão seja possível controlar a potencia em uma lampada 12vac.
A placa utiliza o sistema de zero cross detector e um dimmer com triac.
Ao apertar o botão uma vez e soltar a lampada liga no brilho máximo;
Ao apertar novamente e soltar a lampada apaga;
Agora se deixar o botão pressionado por 3 segundos essa lampada apaga e começa a aumentar o brilho do mínimo até o máximo em loop (ate soltar o botão) Utilizo o MikroC
Algúem pode dar uma sugestão? sou iniciante em programação.

Faltou o arquivo do código q comecei a desenvolver


#define subida_encosto RA0_bit
#define descida_encosto RA1_bit
#define subida_cadeira RA2_bit
#define descida_cadeira RA3_bit
#define lamp RA4_bit
#define lamp_on RB0_bit
#define subida_encosto_on RB1_bit
#define descida_encosto_on RB2_bit
#define subida_cadeira_on RB3_bit
#define descida_cadeira_on RB4_bit
#define lamp_control RB7_bit

bit flag_lamp;
int counter;
unsigned short time_L = 0x00; //Variável P/ o byte menos significativo do tempo de disparo
unsigned short time_H = 0x00; //Variável P/ o byte mais significativo do tempo de disparo
unsigned time = 0x00; //Variável P/ tempo de disparo (16 bits)

void interrupt()
{
if (INTF_bit) //Houve a Interrupção?
{
INTF_bit = 0x00; //Limpa a flag INTF_bit
TMR1ON_bit = 0x01; //Liga Timer1
}

}

void volta_zero();

void main()
{

CMCON      = 7;
OPTION_REG = 0X40;
INTCON     = 0XD0;
TMR1IE_bit = 0X01;
T1CON      = 0X00;
TRISA      = 0xff;
TRISB      = 0;
PORTA      = 0xff;
PORTB      = 0xfe;

while(1)
{
    if(Button(&PORTA, 0, 50, 0))
    subida_encosto_on = 0;
    counter++;
    if(counter == 2000000000000)
    RB7_bit = 0;
    else
    subida_encosto_on = 1;
    counter = 0;
    if(Button(&PORTA, 1, 50, 0))
    descida_encosto_on = 0;
    else
    descida_encosto_on = 1;

    if(Button(&PORTA, 2, 50, 0))
    subida_cadeira_on = 0;
    else
    subida_cadeira_on = 1;

    if(Button(&PORTA, 3, 50, 0))
    descida_cadeira_on = 0;
    else
    descida_cadeira_on = 1;

    if(Button(&PORTA, 4, 50, 0) && (flag_lamp == 0))
    {lamp_on = ~lamp_on;
     flag_lamp = 1;
    }
    if(!Button(&PORTA, 4, 50, 0) && (flag_lamp == 1))
    flag_lamp = 0;

    if(Button(&PORTA, 7, 50, 0))
    volta_zero();


}

}

void volta_zero()
{

lamp_on = 0;
subida_encosto_on = 0;
descida_cadeira_on = 0;
delay_ms(7000);

}