قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

   

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 01-11-2011, 01:49 AM المشاركة 9   
افتراضي



تطوير شكل البرنامج باستخدام ثابت من نوع المصفوفة وحلقة تكرار for :



كود:
// تطوير برنامج عرض الحرف باستخدام مصفوفة الثوابت وحلقة تكرار

كود:
 
//LETTER "A" using array and for loop // الإعلان عن مصفوفة ثوابت مكونة من خمس قيم كل قيمة تناظر قيمة لصفوف العامود المناظر وحفظها بذاكرة البرنامج
const unsigned short Alphabets[5]={ 0x7E, 0x09, 0x09, 0x09, 0x7E}; // A // تعريف متغيريين أحدهما لحفظ قيمة العامود والآخر كعداد لحلقة التكرار unsigned short count, column ; void main() { TRISB = 0b00000000; // Set PORTB direction to be output TRISD = 0x00; // Set PORTA direction to be output PORTB = 0x00; // Turn OFF LEDs on PORTB do{ // Display one alphabets
column = 1;// اختيار العامود الأول بإسناد القيمة واحد لمتغيره
// إنشاء حلقة تكرار , القيمة الابتدائية لعدادها هى الصفر وشرطها لعمل تكرار خمس مرات فى كل مرة عامود for(count = 0;count < 5;count++){ PORTD = column;// نسخ محتويات المتغير على المنفذ المتصل بالأعمدة PORTB = Alphabets[count];//جلب قيمة من المصفوفة وإرسالها إلى منذ الخرج المتصل بالصفوف كل عند العامود المناظر Delay_ms(1);// تأخير زمن للفصل بين الأعمدة column = column<<1;// إزاحة محتويات متغير الأعمدة للتجهيز للعامود التالى } } while(1);
}

اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 01-11-2011, 01:50 AM المشاركة 10   
افتراضي


نفس النتيجة : خطأ فى المحاكاة ببرمجيات Proteus لنفس السبب

سوف نستخدم الحل البرمجى لإنجاح المحاكاة :
مجرد زيادة مؤثر المعكوس "~" فبدلا من :
PORTD = column;

كود:
PORTD = column;
نقول

كود:
PORTD = ~column;
PORTD = ~column;

وتكون النتيجة بعد الاستغناء عن الدائرة المتكاملة (عند المحاكاة فقط ):






خطوة إلى الأمام : عرض حرف A ثم حرف B :

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 01-11-2011, 01:51 AM المشاركة 11   
افتراضي


نكرر البرنامج السابق فينتج :


كود:
//Letters "A" and "B" // نبدأ من الجدول بإعلان مصفوفة ثوابت قيم الصفوف المناظرة للأعمدة وهى عشرة , خمسة لكل حرف وقيمة لكل عامود const unsigned short Alphabets[10] = { // بداية صيغة إعلان مصفوفة الثوابت 0x7E, 0x09, 0x09, 0x09, 0x7E, // Letter A 0x7F, 0x49, 0x49, 0x49, 0x36}; // Letter B لاحظ صيغة نهاية المصفوفة // إعلان المتغيرات unsigned short count,column,repeat ; // زيادة متغير عداد حلقة التكرار لكل حرف حتى يستقر void main() { TRISB = 0b00000000; // Set PORTB direction to be output TRISD = 0x00; // Set PORTA direction to be output PORTB = 0x00; // Turn OFF LEDs on PORTB do{ // Display A for (repeat=0; repeat<100; repeat++){ // زيادة حلقة تكرار 100 مرة لكل حرف column =1; for(count = 0;count <5;count++){ PORTD = column; PORTB = Alphabets[count]; Delay_ms(1); column = column<<1; } } // Display B for (repeat=0; repeat<100; repeat++){ // زيادة حلقة تكرار 100 مرة لكل حرف column =1; for(count = 5;count <10;count++){ // لاحظ تغيير القيمة الابتدائية والشرط لتتلائم مع ترتيب القيم فى مصفوفة الثوابت PORTD =column; PORTB = Alphabets[count]; Delay_ms(1); column = column<<1; } }
} while(1); }






الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 01-11-2011, 01:52 AM المشاركة 12   
افتراضي


نفس مشكلة المحاكاة
ونفس الحل بالبرمجيات :


[CODEPORTD = ~ column; ][/CODE]

PORTD = ~ column;






الآن جاء دور عرض جميع الحروف :


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 01-11-2011, 01:53 AM المشاركة 13   
افتراضي


الآن جاء دور عرض جميع الحروف :

برنامج عرض الحروف من A إلى Z على التتابع وبعض الحروف الخاصة أيضا :




كود:
// عرض جميع الحروف والرموز
كود:
 
// تعريف قيم الصفوف للخمسة أعمدة التى تشكل كل حرف باستخدام مصفوفات الثوابت للتخزين فى ذاكرة البرنامج
const unsigned short Alphabets[130]={ 0x7e, 0x09, 0x09, 0x09, 0x7E, // A
0x7f, 0x49, 0x49, 0x49, 0x36, // B 0x3e, 0x41, 0x41, 0x41, 0x22, 0x7f, 0x41, 0x41,0x22, 0x1c, 0x7f, 0x49, 0x49, 0x49, 0x63, 0x7f, 0x09, 0x09, 0x09, 0x01, 0x3e, 0x41, 0x41, 0x49, 0x7a, 0x7f, 0x08, 0x08, 0x08, 0x7f, 0x00, 0x41, 0x7f, 0x41, 0x00, // I 0x20, 0x40, 0x41, 0x3f, 0x01, 0x7f, 0x08, 0x14, 0x22, 0x41, 0x7f, 0x40, 0x40, 0x40, 0x60, 0x7f, 0x02, 0x04, 0x02, 0x7f, 0x7f, 0x04, 0x08, 0x10, 0x7f, 0x3e, 0x41, 0x41, 0x41, 0x3e, 0x7f, 0x09, 0x09, 0x09, 0x06, 0x3e, 0x41, 0x51, 0x21, 0x5e, 0x7f, 0x09, 0x19, 0x29, 0x46, 0x46, 0x49, 0x49, 0x49, 0x31, // S 0x01, 0x01, 0x7f, 0x01, 0x01, 0x3f, 0x40, 0x40, 0x40, 0x3f, 0x1f, 0x20, 0x40, 0x20, 0x1f, 0x3f, 0x40, 0x30, 0x40, 0x3f, 0x63, 0x14, 0x08, 0x14, 0x63, 0x07, 0x08, 0x70, 0x08, 0x07, 0x61, 0x51, 0x49, 0x45, 0x43 // Z }; // بالمثل للحروف الخاصة const unsigned short characters[30]={ 0x24, 0x2A, 0x7f, 0x2A, 0x12, // $ 0x08, 0x14, 0x22, 0x41, 0x00, // < 0x41, 0x22, 0x14, 0x08, 0x00, // > 0x14, 0x14, 0x14, 0x14, 0x14, // = 0x36, 0x49, 0x55, 0x22, 0x50, // & 0x44, 0x3c, 0x04, 0x7c, 0x44, // PI }; // إعلان المتغيرات وسوف نحتاج إلى متغير آخر كعداد لحلقة جديدة تتكرر بعدد الحروف unsigned short count, column, num, repeat; void main() { TRISB = 0b00000000; // Set PORTB direction to be output TRISD = 0x00; // Set PORTD direction to be output PORTB = 0x00; // Turn OFF LEDs on PORTB do{ // عرض 26 حرف أبجدى for (num=0; num<26; num++) {// الحلقة الخارجية تتكرر كل حرف أى من الصفر إلى 25 أى العدد يكون 26حرف for (repeat=0; repeat<100; repeat++){ // الحلقة التكرارية الوسطى لتكرار بيانات الحرف 100 مرة بغرض استقراره column =1; // use ULN 2003 inverse it- for proteus simulation only I use inverter 74HC04 or SW // الحلقة الداخلية لعرض الحرف وفيها أنشأنا علاقة لتكرار جميع الحروف بمتغيريين هما متغير عداد الحلقة ومتغير عدد الحروف for(count = num*5;count < (num*5+5);count++){ PORTD = column ; // حلقة الحرف العادية PORTB = Alphabets[count]; Delay_ms(1); column = column<<1; } } } // عرض الحروف الخاصة بنفس الطريقة for (num=0; num<6; num++) { for (repeat=0; repeat<100; repeat++){ column = 1; for(count = num*5;count < (num*5+5);count++){ PORTD = column; PORTB = characters[count]; Delay_ms(1); column = column<<1; } } } } while(1); }


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 01-11-2011, 01:54 AM المشاركة 14   
افتراضي


نفس مشكلة المحاكاة
ونفس الحل بالبرمجيات :


كود:
PORTD = ~ column;
PORTD = ~ column;





الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 01-11-2011, 01:56 AM المشاركة 15   
افتراضي


الرسائل المتحركة :
الفكرة الأساسية :
مأخوذة من فكرة عرض شريط السينيما البسيط , حيث تعرض مشاهد متتابعة مشهد تلو الآخر وبسرعة كافية بحيث يتحقق الخداع البصرى ويشعر المشاهد بالحركة الدائمة كما يلى :

برنامج لتحريك الحرف "A" من اليمين إلى اليسار :

يقسم البرنامج إلى مشاهد ونستعين فى عمل كل مشهد بورقة مربعات أو بأى برمجيات مناسبة كما يلى :

المشهد الأول :






بيانات قيم الصفوف لكل عامود بالمشهد الأول


كود:
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
المشهد الثانى :


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 01-11-2011, 01:57 AM المشاركة 16   
افتراضي


المشهد الثانى :







بيانات قيم الصفوف لكل عامود بالمشهد الثانى



كود:
0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xFC,



الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 07:34 AM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)