البرنامج الاول ماخوذ من كتاب الاستاذ احمد سمير هو كالتالي:
كود:
void main()
{TRISB=0; PORTB=0;
loop:
PORTB=0B00000001; delay_ms(500); // L0 ON
PORTB=0B00000011; delay_ms(500); //L0,L1 ON
PORTB=0B00000111; delay_ms(500); //L0,L1,L2 ONPORTB=0B00001111; delay_ms(500); //L0,L1,L2,L3 ON
PORTB=0B00011111; delay_ms(500); //L0,L1,L2,L3,L4 ON
PORTB=0B00111111; delay_ms(500); //L0,L1,L2,L3,L4,L5 ON
PORTB=0B01111111; delay_ms(500); //L0,L1,L2,L3,L4,L5,L6 ON
PORTB=0B11111111; delay_ms(500); // L0,L1,L2,L3,L4,L5,L6,L7 ON
PORTB=0B00000000; delay_ms(500); // ALL LEDs OFF
و لكن لاحظت بان كل رقم هو عبارة عن الرقم الذي يسبقه مضروب ب 2+1 ب decimal
0b00000001=1
0b00000011=3...................3 =1*2+1
0b00000111=7...............7=3*2+1
وهكذا فكتبت هذا الكود
كود:
void main()
{char a,a1,a2,a3,a4,a5,a6,a7;
trisb=0;
a=1*1;
a1=a*2+1;
a2=a1*2+1;
a3=a2*2+1;
a4=a3*2+1;
a5=a4*2+1;
a6=a5*2+1;
a7=a6*2+1;
loop: portb=0; delay_ms(500);
portb=a; delay_ms(500);
portb=a1; delay_ms(500);
portb=a2; delay_ms(500);
portb=a3; delay_ms(500);
portb=a4; delay_ms(500);
portb=a5; delay_ms(500);
portb=a6; delay_ms(500);
portb=a7; delay_ms(500); goto loop;
}
ولكن ليس هذا ما اريده ما احاول عمله هو احضار محصلة العملية السابقة و ضربها ب 2+1 تلقائيا من دون اي تكرار . هل بالامكان عمل هذا ؟ وشكراُ