العفو أخي..
ما فائدة اعطاء تلك المصفوفة اقام من (0) الى (9) ؟
اعتقد تسأل عن وظيفة هذه المصفوفة اصلا
لأنها تفيدنا عند العرض:
فكرة جميلة ..المصفوفة في هذه الحالة تعمل مثل 'دالة' ان فهمت قصدي
فكرة المصفوفة هنا كل ما تقوم به هو تحويل رقم (من 0 الى 9) الى 8 بتات تناسب البور والشاشة ليتم عرض ذلك الرقم
مثلا في لحظة ما تريد اظهار الرقم 8 في الشاشة:
لاحظ ان المصفوفة تقوم فقط بالترجمة ان صح التعبير..
-----------
لاحظ كيف يم استخلاص قيم وحدات ومئات والاف العدد tlong عن طريق حساب القسمة والباقي ..
ليكن tlong = 2498
يتم تعيين رقم المئات .. هكذا
والنتيجة تساوي 4 في حالتنا
هل سنرسل مباشرة القيمة 4 الى البور؟
طبعا لا .. هنا نذخل المصفوفة تتصرف كدالة ، تعود لنا بالقيمة اللازم ارسالها في البور لاظهار (4) في الشاشة
ولاحظت قبل ذلك اجراء عملية and مع القيمة 0x08 لا ادري لماذا ربما لتجنب ثغرة ما ,, المهم اعتبر الكود كما يلي
كود:
seg_data=segment[tlong%1000/100];
اتمنى ان اكون قد اجبتك ,,
واي استفسار لا تتردد ..
|
بارك الله فيك أخى ..
والله عاجز عن الشكر .. شكراااا جزيلا لك ..
فعلا شرح شافى ووافى ..
ولكن لى بعض التوضيحات ...
انا الحمد لله فهمة الغرض من المصفوفه وكتابتها بهذا الشكل
كود:
char segment[]={63,6,91,79,102,109,125,7,127,111};
وهى تشبه كثيرااا هذة الفكرة مع اختلاف بسيط..
كود:
unsigned short mask(unsigned short num){
switch (num){
case 0 : return 0xC0;
case 1 : return 0xF9;
case 2 : return 0xA4;
case 3 : return 0xB0;
case 4 : return 0x99;
case 5 : return 0x92;
case 6 : return 0x82;
case 7 : return 0xD8;
case 8 : return 0x80;
case 9 : return 0x90;
}
}
هذه الفكرة من الكود هى أختبار القيمة الداخله عليها والتحقق من الرقم لو يتشابه مع رقم من ( 0 ) الى ( 9 ) يأخذ هذا الرقم ويحولة .. أو يترجمه الى 8 بتات .. بنظام الهيكس .. أو بالديسمال .. ويبعتة الى متغير أخر ومن ثم يعرض على الشاشه .. لأن الشاشه لا تفهم الأرقام بشكل مباشر يجب تحويلها الى بتات لكى تضيء العارضات المرادفة للبتات بختلاف انواعها .. لو كانت ( أنود ) أو ( كاسود ) ..
كما نعلم أن ال7سيجمنت مكونه من 7عارضات ليدات .. وبيتم تشكيل الأرقام والرموز عليها من خلال اشعال العرضات المختارة ..
ولكن لى سؤال أو توضيح ..
كيف تتم هذة المعادلة
.. يرجى شرحها بالتفصيل وياريت لو بمثال على استخراج رقم فى خانة الأحاد .. ورقم فى خانة المئات وياريت تتم الشرح بمسال للأستخراج رقم من خانة الألاف ..
وايضاااا أشكرك لقد فهمت فكرة المصفوفه بهذا الشكل .. وهى كما وضحت حضرتك أنها تعمل مثل الدالة .. نستطيع استداعئها ونحصل على تحويل للأرقام المراد تحويلها الى 8 بتات .. أو بالنظام العشرى .. وهو نظام بتوافق مع ال 7سيجمنت ..
السؤال ..
عندنا رقم غير وليكن ( 2498 ) وتم اسناد هذا الرقم لمتغير طويل من نوع
وسمينا هذا المتغير بأسم ( tlong ) ...
وعندنا 4 شاشات 7 سيجمنت ..
السؤال هنا كيف استطيع عرض هذا الرقم على الأربع شاشات ..لكى تصبح الشاشة الأولى من ناحية الشمال معروض عليها رقم (2 ) وهى خانة الألاف ..
والشاشه الثانيه من ناحية الشمال يعرض عليها رقم ( 4 ) وهى خانة المئات ...
والشاشه الثالثة من ناحية الشمال يعرض عليها رقم ( 9 ) وهى خانة العشرات ...
والشاشه الرابعة من ناحية الشمال يعرض عليها رقم (8 ) وهى خانة الأحاد ...
أنا اعلم من خلال هذة الطريقه يتم استخراج الأرقام ومن ثوم عرضها على
الشاشات من خلال خاصية ال multiplexage .. بمعنى استخراج رقم الألاف و تحويله الى 8 بتات ومن ثم اسنادة للبورت ( B ) لكى يتم تشكيل رقم ( 2 ) على ال7سيجمنت ومن ثم تفعيل أنود الشاشة أو كاسود الشاشه الرابعة لكى يظهر عليها رقم ( 2 ) وأنتظار
لكى يعطى أسر على العين .. ومن ثم أطفاء الشاشة الرابعه ..
وبنف الطريقه يتم استخراج رقم الميئات من خلال هذة المعادلة
.. وايضااا اسناد القيمه الى بعد تحويلها الى 8 بتات الى البورت ( B ) لكى تعرض على الشاشة الثانيه من خانة الميئات ..
وهكذا مع خانة العشرات .. والأحاد ..
السؤال .. اريد فهم هذة المعادلة وكيف استطيع اخراج أى رقم منها ..
وسؤال أخر كيف يتم ارسال الرقم الناتج من خلال هذة المعادلة
الى المصفوف و يتم تحويلة الى 8 بتات بما يتناسب مع قيمه الرقم .. بمعنى لو كان الرقم المرسل الى المصفوفه هو (0 ) ترد المصفوفه هذا الرقم ب 63 وهو النظام العشرى لكى يتناسب مع ال 8 بتات ويتم عرضة على شاشه ال 7 سيجمنت ..
ما اريد فهمه كيف تمييز المصفوفه الأرقام ومن ثم ترد بالرقم المرادف ولكن بالنظام العشرى ..
وأسف جدااا على الإطالة .. ولك منى وللأخوة الكرام كل الإحترام والتقدير ..
جزاك الله كل الخير ..
تحياتى