السلام عليكم اخي عبدالله
مشروع جميل وفية استفادات كثيرة حياك الله ورفع ذكرك بين الناس
اسمح لي بسؤال انا استخدم IC 74HC595 ولكن بطريقة مملة جدا فانا استخدم FOR LOOP & ARRAY فيسبح لتنفيذ امر يجب ان اسجله في ARRAY عن طريق مؤشر ثم اخراجه لتنفيذ الامر تجد ان في كل مرة ااكرر اكود لكن لاحظت عندك اخي الكريم ان الكود بسيط ما لفت انتباهي فا انا لكي اتحكم في 4 متكاملات فقط كتبت كود حوالي 800 تعليمة واكثر فارجو شرح طريقتك اخي بشئ من اليسر ولو تعرف المتكاملة 74HC165 التي تعمل عكسها تكون مدخل بدل مخرج اكون شاكر لك وتعم الفادة علي الجميع أخي الكريم
|
وعليكم السلام ورحمه الله وبركاته ..
أخي الكريم يمكنك اختيار طريقتين .. الأولي هي استخدام مؤشر للعنوان .. والثانيه هي استخدام الدوال ..
أما بالنسبه للطريق اللتي استعملتها هي مؤشر للعنوان ..
لاحظ الكود ..
من خلال هذا تستطيع أن تضع أمامه عدد من الأوامر والتعليمات ,, وتسميتها بأي اسم تشاء بشرط لا يكون هذا الأسم هو اسم لأحد المتغيرات أو الدوال أو الرموز الرياضيه الموجوده في لغه البرمجه .. مثل > < + = / ^ & ! ( ) ~ "" l وهكذا من تعليمات تستخدم في العمليات الرياضيه .. في البرنامج ..
لاحظ هذا الكود ...
كود:
#define DATA PORTE.F0
كود:
#define CLOCK PORTE.F1
كود:
#define LATCH PORTE.F2
لاحظ هه الأكواد تم وضع عنوان للكود وتسميته بال DATA وهذا الأمر هو
ايذااا اذا استدعينا العنوان DATA في أي مكان في الكود سوف يذهب البرنامج لتنفيذ الأوامر اللتي تكون موجوده في هذا العنوان وهذا الأوامر هي PORTE.F0 ..
يمكنك أن تكتب ما تشاء من تعليمات وأوامر أمام هذا العنوان بشرط لايجوز وضع الدوال في هذه العناوين ..
نتكلم عن مسجل الإزاحه الشهير 74HC595 كما نعرف أنه يوجد ثلاث اطراف في هذه المتكامله نتحكم في طريقه ازاحه وعرض البيانات من خلال هذه الأطراف وهم .. DATA ... CLOCK .. LATCH ..
وهنا لكي ننظم سير البرنامج ونستطيع تسميه الأوامر بكلمات تسهل علينا ادارة البرنامج نستخدم العناوين لكي نستطيع فهم ومعرفه اسم الأمر ..
لاحظ هذا الكود بدون استخدام طريقه العناوين ..
كود:
PORTE.F0
PORTE.F1
PORTE.F2
بهذه الطريقه سيكون الكود صعب فهمه لأن ستحتاج الي وقت كثير لكي تفهم التعليمه الخاصه بأرسال الداتا لمسجل الإزاحه وايضاا التعليمه الخاصه بتشغيل الساعه وايضاا التعليمه الخاصه بالماسك في مسجل الإزاحه ..
ولكن لاحظ لو تم استخدام العناوين في إدارة الكود ...
هنا اصبح الكود اسهل لأنك تعرف أن أمر داتا هو لأرسال البتات أو ارسال اوحايد والأصفار الي المتكامله مسجل الإزاحه .. وايضا CLOCK هي الساعه اللتي يتم عملها علي مسجل الإزاحه ..
سيكون الكود بهذه السهوله ..
لاحظ هذا الكود تم ارسال رقم واحد وهو يساوي 5 فولت لمسجل الإزاحه وتم ازاحه هذا الرقم الي أخر بت في مسجل الإزاحه ..
لاحظ سهوله الكود
كود:
DATA=1; CLOCK=0; CLOCK=1; CLOCK=0; LATCH=0; LATCH=1; PORTB = mask(SEGMENT9); delay_ms(1);
DATA=0; CLOCK=0; CLOCK=1; LATCH=1; LATCH=0; LATCH=1; PORTB = mask(SEGMENT8); delay_ms(1);
DATA=0; CLOCK=0; CLOCK=1; LATCH=1; LATCH=0; LATCH=1; PORTB = mask(SEGMENT7); delay_ms(1);
DATA=0; CLOCK=0; CLOCK=1; LATCH=1; LATCH=0; LATCH=1; PORTB = mask(SEGMENT6); delay_ms(1);
DATA=0; CLOCK=0; CLOCK=1; LATCH=1; LATCH=0; LATCH=1; PORTB = mask(SEGMENT5); delay_ms(1);
DATA=0; CLOCK=0; CLOCK=1; LATCH=1; LATCH=0; LATCH=1; PORTB = mask(SEGMENT4); delay_ms(1);
DATA=0; CLOCK=0; CLOCK=1; LATCH=1; LATCH=0; LATCH=1; PORTB = mask(SEGMENT3); delay_ms(1);
DATA=0; CLOCK=0; CLOCK=1; LATCH=1; LATCH=0; LATCH=1; PORTB = mask(SEGMENT2); delay_ms(1);
DATA=0; CLOCK=0; CLOCK=1; LATCH=1; LATCH=0; LATCH=1; PORTB = mask(SEGMENT1); delay_ms(1);
بالنسبه لهذه المتكامله 74HC165 لم اتعامل معها من قبل .. وأن شاء الله سوفاقرأ الداتا شيت الخاصه بها وفهم طريقه التعامل معها ...
تحياتي لك