طبعا هذه الطريقة ليس عملية لان الزمن بين كل ليد لو اصبح مثلا واحد ثانية فيتوجب عليك ان تمسك المفتاح اكثر من 4 ثواني لتحقيق الشرط ....
اي ان زمن امساك المفتاح = عدد الليدات × زمن اشتغال كل ليد ....
لذلك من الافضل استخدام مقاومة متغيرة يتم ادخالها على المنفذ التناظري للتحكم بسرعة الاشتغال ....
عموما هذا هو مخطط الدائرة و الكود ...
كود:
int y=1,i=0;
int x;
void on(char x)
{
portb=1;
vdelay_ms(x*500);
for(i=1;I<4;I++){
portb=2*portb;
vdelay_ms(x*500);
if(portb>8)portb=1;
}
}
void main()
{cmcon=7;
trisa=0xff;trisb=0;portb=0;
while(1)
{
if(porta.f1==0){while(porta.f1==0){on(y);}y++;}
if(porta.f0==0){while(porta.f0==0){on(y);}y--;}
if(y<1)y=1;
else if(y>10)y=10;
on(y);
}
}
انا جعلت اقل زمن هو نصف ثانية و اعلى زمن 5 ثواني بمعدل زيادة نصف ثانية زيادة او نقصان مع كل ضغطة على مفتاح الزيادة او على مفتاح النقصان ...
يمكنك استخدام المذبذب الداخلي للبك ...
|
شكرا لك اخي الفاضل ولكن كيف استخدام مقاومة متغيرة يتم ادخالها على المنفذ التناظري للتحكم بسرعة الاشتغال
ولك جزيل الشكر