السلام عليكم
اخي الحبيب / حسن هادي اعتذر عن ازعاجك
ولكن نفس المشكلة قائمة
اريد ان تشرح لي هذا الكود
كود:
void display_7seg()
{
char y;
GIE_bit=0;
for(x=0;x<16;x++){ds1=1;sh1=1;sh1=0;}// OFF all 7 seg
ST1=1;st1=0;
for(x=0;x<8;x++) // ???? ????? ????? ???? ???? ??? ???? ?? ????
{
if(Check_bit(segbit[7-colomn],7-x))ds1=1;
else DS1=0;
SH1=0;SH1=1;
}
for(x=0;x<8;x++) //
{
if(Check_bit(segment[num[colomn]],7-x))DS1=1;
else DS1=0;
SH1=0;SH1=1;
}
ST1=1; ST1=0;
colomn++;
if(colomn==6)colomn=0;
GIE_bit=1;
}
ولماذ تظهر التعليقات عندي كعلامات الإستفهام
اشكرك اخي وبارك الله لك
|
السلام عليكم
علامه الاستفهام تعني ان هناك تعليقات بلغه العربيه لربما يحدث أحيانا خربطه او عدم أظهار لغه العربيه ولا أعرف حقيقه السبب
على عموم انا معاك أخي الى أن تحل مشكله وسأكون بمشيئه الله متابع معك اول بأول
شرح الكود//
تعريف متغير سميته y , والايقاف الانتربت لضمان عرض البيانات بشكل صحيح لان بدون ذلك سبب ارتعاش في سفن سكمنت وهذا بسبب عدم ظهور بيانات بشكل كامل لانه وقت ألانتربت قليل فعندما يريد تشغيل او تنفيذ أمر يخص سفن سكمنت فيحدث مقاطعه مسببه عدم تنفيذ الاوامر بشكل صحيح
بعدها وهذا أمر ضروري جدا جدا هو أطفاء سفن سكمنت قبل تشغيل لضمان الاضاءه كامله وايضا لضمان حدوث عمليه خداع البصري بشكل جيد
وهذا هو كود
كود:
for(x=0;x<16;x++){ds1=1;sh1=1;sh1=0;}// OFF all 7 seg
ST1=1;st1=0;
تلاحظ انه يتم ارسال 1 مع عمل شفت ولكن رقم 16 يعني عندك 2 من 74hc959
اخي عندي ملاحظه بدلا من ترسل 1 ارسل 0 لان كمن كاثود سفن سكمن تكون مطفيه عندما نرسل 0 لذا أخي قم بتصحيح الكود ليصبح كتالي
كود:
for(x=0;x<16;x++){ds1=0;sh1=1;sh1=0;}// OFF all 7 seg
ST1=1;st1=0;
وبعد ذلك نقوم بأظهار بيانات عن طريق ارسال نبضه الى store
الان سفن سكمنت أنطفت بالكامل وهذا امر ضروري جدا قبل تشغيل سفن سكمنت
=====================
الان راح ارسل البيانات لسفن سكمنت لقوم بتشغيلها قطعه بعد قطعه يعني تشتغل الاولى بعدها نطفيها ثم نشغل ثانيه ثم نطفيها ثم الثالثه وهكذا وهي كما تعرف بطريقه الخداع البصري انظر الكود ادناه جيدا
كود:
for(x=0;x<8;x++)
{
if(Check_bit(segbit[7-colomn],7-x))ds1=1;
else DS1=0;
SH1=0;SH1=1;
}
تلاحظ اني ارسل البيانات اولا الى الاطراف enable لسفن سكمنت
بعد ذلك ارسل البيانات داتا الى سفن سكمنت
اي
كود:
for(x=0;x<8;x++) //
{
if(Check_bit(segment[num[colomn]],7-x))DS1=1;
else DS1=0;
SH1=0;SH1=1;
}
بعد نرسل بيانات الى سفن سكمنت بدفعه واحده لان هذه البيانات لاتزال مخزونه في ذاكره متكامله 74hc595 ولم يتم أظهارها الا بعد أعطاء نبضه
تلاحظ اني ارسلت بيانات الى enable لسفن سكمنت اولا بعدين الى الاطراف سفن سكمنت لانه حسب ماتعرف المتكامله 74hc595 ترسل البيانات بشكل معكوس يعني اول يصبح ترتيبه الاخير يعني
انا اريد تشغيل سفن سكمنت رقم 6
بأول راح ارسل هذه البيانات 0xFE اي 11111110 الان ماذا أفعل راح عمل and مع 1 فأذا كان AND يعني النتيجه لاتساوي 0 فهذا يعني ان رقم هو 1 واذا كانت نتيجه 0 فهذا يعني ان بت هو 0
هنا طالما متكامله تعمل بطريقه ان اول يصبح أخير اذن لازم أعكس البيانات ولهذا تجد اني اختبرت البت الاخير اولا فأذا كان نتيجه لاتساوي 0 ارسل 1 واذا نتيجه تساوي 0 ارسل 0 اذن 11111110 يصبح عند ارساله بهذا طريقه 01111111
وبتالي وبتالي 0 سوف يظهر عند Q0 للمتكامله الثانيه
للحديث بقيه ان شالله (( حاليا وقت صلاه ))