如何使用七段开关

时间:2013-02-13 16:17:05

标签: c embedded

我正在研究我需要在RGB led上显示不同颜色的项目。我正在使用pwm在LED上驱动不同的颜色。我的Pic是PIC24FJ64GA004,我正在使用它。该项目的基本概念是使用开关来控制颜色。

RGB led上的颜色将根据一年中的天数和月份而定。为此,我使用带有开关的7段LED来计算日期和月份。

问题是我的主板上只有一个开关。我已经设计了硬件和位,它也经过了测试。所以硬件工作正常。

目前我的问题是图片代码。

我现在卡在开关使用中。我有一个开关。我需要显示7段上按下的开关次数。问题是我是Pic代码的新手并且也很混淆。将检查第一个开关状态。如果按下开关两秒钟,它将进入天模式。否则会坚持到几个月的模式。它会根据那个显示月份或日期。我在这里粘贴了我的代码,请给我一些积极的建议。

我想知道这种编码是否正确。

void switch_function(void)   
{
    if (PORTAbits.RA4==1) {             // is SW1 pressed?
        IEC0bits.T1IE       = 1;        // Enable Output Compare interrupts
        T1CONbits.TON       = 1;        // Start Timer1 with assume settings   
        if (modecounter==0) { // Checking status of month  
            if (PORTAbits.RA4==1)  {    
                counter++;
                if (counter== 12) {   
                    counter = 0;
                }
            }
        } 
        else if(modecounter ==1) {      // Checking status of days
            if (PORTAbits.RA4==1) { 
                counter++;
                if (counter== 32) {  
                    counter = 0;
                }
            }
        }
        else {
        } 
    }
    else {
        counter =0;
    }
    return ;
}

//***** Timer1 interrupt *****//

void __attribute__((interrupt, auto_psv)) _T1Interrupt(void)
{  
    timer_counter++;
    if (timer_counter== 2) {
        if (PORTAbits.RA4==1)  { // is SW1 still has pressed status after 2sec delay?
            modecounter = 1;     // switch to days 
        }
        else {
            modecounter = 0;  // switch to months
        }          
    }
    else {
    }
    IFS0bits.T1IF=0; /* clear timer1 interrupt flag */      
    return;
}

/ /***** Timer2 interrupt *****//

void __attribute__ ((__interrupt__, no_auto_psv)) _T2Interrupt(void)
{
    IFS0bits.T2IF = 0; /* clear timer2 interrupt flag */    
    return;
}

0 个答案:

没有答案