Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
void pow (unsigned char port0,unsigned char port1,unsigned char port2,unsigned char port3)
{
if ( TCNT0>=port0)PORTD.0 =0;
else PORTD.0 =1;
if ( TCNT0>=port1)PORTD.1 =0;
else PORTD.1 =1;
if ( TCNT0>=port2)PORTD.2 =0;
else PORTD.2 =1;
if ( TCNT0>=port3)PORTD.3 =0;
else PORTD.3 =1;
}
теперь если в main() написать
while(1)
{
pow(40,150,74,0);
}
то всё будет отлично.
НО!!!!!!!
мне нужно плавно гасить и зажигать св.диоды, причём за разное время.
написал функцию для плавного загорания и погасания 4х св.диодов поочерёдно:
void var1(void)
{
while(1)
{
for (a=0;a<=8;a++)
{
if(a==0)//первый светодиод загорается
{
for(i=H;i<=250;i++)
{
delay_ms(TMI);
pow (i,0,0,0);
}
}
if(a==1)//первый светодиод гаснет
{
for(i=250;i>=H;i--)
{
delay_ms(TMI);
pow (i,0,0,0);
}
}
if(a==2)//второй светодиод загорается
{
for(i=H;i<=250;i++)
{
delay_ms(TMI);
pow (0,i,0,0);
}
}
if(a==3) //второй светодиод гаснет
{
for(i=250;i>=H;i--)
{
delay_ms(TMI);
pow (0,i,0,0);
}
}
if(a==4) //третий светодиод загорается
{
for(i=H;i<=250;i++)
{
delay_ms(TMI);
pow (0,0,i,0);
}
}
if(a==5) //третий светодиод гаснет
{
for(i=250;i>=H;i--)
{
delay_ms(TMI);
pow (0,0,i,0);
}
}
if(a==6) //четвертый светодиод загорается
{
for(i=H;i<=250;i++)
{
delay_ms(TMI);
pow (0,0,0,i);
}
}
if(a==7) //четвертый светодиод гаснет
{
for(i=250;i>=H;i--)
{
delay_ms(TMI);
pow (0,0,0,i);
}
}
}
}
}
TMI - время задержки.
При TMI равным 1 или 2 всё работает нормально, но если пытаться увеличить это время, то становиться заметным мерцание св.диодов.
Я думаю что применение задержек delay_ms здесь не уместно.
Что вы можете посоветовать?