我正在研究我需要在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;
}