نأتي الى شرح الكود و نسئل الله التوفيق ..
char const data[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,1 9,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35, 36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52 ,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,6 9,70,71,72,73,74,75};
char x=0,i=0,j=0;
void col(char x){
portb.f1=x.f0;portb.f0=0;portb.f0=1;
portb.f1=x.f1;portb.f0=0;portb.f0=1;
portb.f1=x.f2;portb.f0=0;portb.f0=1;
portb.f1=x.f3;portb.f0=0;portb.f0=1;
portb.f1=x.f4;portb.f0=0;portb.f0=1;
portb.f1=x.f5;portb.f0=0;portb.f0=1;
portb.f1=x.f6;portb.f0=0;portb.f0=1;
portb.f1=x.f7;portb.f0=0;portb.f0=1;}
void main(){
trisb=0;portb=0;
loop:
for(i=0;i<25;i++){
for(j=0;j<3;j++)
col(data[i*3+j]);
portb.f2=0;portb.f2=1;
delay_ms(5000);}
goto loop;
}
نبدأ بشرح الدالة
هذه الدالة هي ام الشغل كله ... يتم ارسال البيانات اليها من المصفوفة الواحد تلو الاخر .
تقوم هذه الدالة بتحويل الرقم المرسل اليها الى 8 بتات و تقوم بادخالها الى المسجلات من الاعلى الى الاسفل و لذلك فان الرقم الاول من كل مجموعة سيذهب الى المسجل الاخير و الرقم الثاني الى المسجل الوسط و الرقم الثالث الى المسجل الاول .
الى هنا تم ادخال اول ثلاث ارقام الى المسجلات و هي طبعا تمثل العمود الواحد .
العداد الاول I قيمته تساوي عدد الاعمدة
العداد الثاني J قيمته تساوي عدد المجموعات لكل عمود و هي طبعا نفسها عدد المسجلات ..
هذه الجملة مهمة و فيها حيلة رياضية لجلب كل ثلاث اعداد معا .
عندما i=0 فان J تتغير من صفر الى 2 يعني ستأخذ ثلاث قيم و هكذا نكون قد استدعينا اول ثلاث ارقام ..
عندما i=1 سيكون عندنا 3 تضاف اليها قيمة J و التي تتغير من صفر الى 2 و هكذا نكون قد ارسلنا الرقم الرابع و الخامس و السادس .
عندما I=2 نكون قد بدأنا بالعدد السابع ثم الثامن ثم التاسع
و هكذا .. الى ان نصل الى كل البيانات ..
كود:
portb.f2=0;portb.f2=1;
هذه الجملة و كما تشاهدون وضعت بحيث تعمل بعدما تنتهي الدالة col من عملها و الذي هو ارسال البيانات الى مسجلات الازاحة كما ذكرنا .
و مهمة هذه الجملة قدح المسجلات لاظهار ما بداخلها من بيانات دفعة واحدة .
و كما تلاحظون ايضا انها تعمل بعد انتهاء العداد J .
ثم نعطي فترة تأخير بين اشتغال كل عمودين ...
ما ينقص الكود هو فترة التاخير التي تكون الدائرة فيها مطفئة و هذه اتركها لحضراتكم لتختاروا مكانها في الكود و مقدار التاخير فيها ..
هذا شرح الكود ...
وانا حاضر لاي سؤال ..