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

   

عمار سعيد
:: مهندس ::
تاريخ التسجيل: Aug 2011
الدولة: سوريا الحره
المشاركات: 42
نشاط [ عمار سعيد ]
قوة السمعة:
قديم 22-07-2013, 05:28 PM المشاركة 17   
افتراضي



انشاء الله سأشرح الكود في اقرب وقت ممكن

اعلانات

mokhtarragab
:: مهندس متواجد ::
تاريخ التسجيل: Jan 2006
المشاركات: 61
نشاط [ mokhtarragab ]
قوة السمعة:
قديم 24-07-2013, 03:02 PM المشاركة 18   
افتراضي


في انتظارك اخي عمار

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

guhdar
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2013
الدولة: العراق/دهوك
المشاركات: 60
نشاط [ guhdar ]
قوة السمعة:
قديم 25-07-2013, 06:08 PM المشاركة 19   
افتراضي


السلام عليكم
هل ممكن زيادة عمود و صف اخر يعني 24*104 واذا ممكن فكيف؟


عمار سعيد
:: مهندس ::
تاريخ التسجيل: Aug 2011
الدولة: سوريا الحره
المشاركات: 42
نشاط [ عمار سعيد ]
قوة السمعة:
قديم 25-07-2013, 08:55 PM المشاركة 20   
افتراضي


السلام عليكم زرحمة الله وبركاتة

اخوتي الكرام اليوم سأقوم بشرح كود مشروع الماتركس سائلاُ الله ان يوفقني بالشرح لتصل المعلومة لكل سائل

أولا دعوني اتكلم عن هارد وير المشروع
كما هو ظاهر في ملف المحاكاة ان المشروع يتكون من بيك مايكروكونترولر pic18f452 وسبب اختيار هذا المتحكم يرجع الى كبر حجم ذاكرته التي نحتاجها في هذا المشروع.
والمشروع يتضمن ابضاُ مسجل ازاحة 74hc595 لقيادة اعمدة الماتركس وسبب اختيار هذا النوع من المسجل لسهولة التعامل معه برمجيا
واخيرا وليس آخراُ من مكونات المشروع قطع الماتركس 8*8 والتي وضعنا منها 24 قطعه لتكون الشكل الكلي للماتركس الكبيرة
ويجب ان أضيف ان طريقة توصيل الماتركس هي على الشكل التالي:16 صف موجب(انود) 96 عامود سالب(كاثود) وطبعا الداتا توضع على الصفوف

نأتي الآن لشرح كود المشروع والذي تم كتابته بلغة السي والمترجم ميكرو سي برو


الكود:

كود:
#define  ENABLE_DATA_PIN PORTd.F0
#define  ENABLE_DATA_CLOCK_PIN PORTd.F1
#define  ENABLE_SHOW_CLOCK_PIN PORTd.F2
 extern const unsigned char ammar[1248];

 extern const unsigned char ammar1[1248];
 const unsigned char long_message[]= "MADE BY AMMAR MOHAMMED SAEED E-mail:ammar_saeed*hotmail.com ";

char buffer[96];
char buffer1[96];
void enable_data_clock_pulse()
  {
   ENABLE_DATA_CLOCK_PIN=0;
   ENABLE_DATA_CLOCK_PIN=1;
  }
void enable_show_clock_pulse()
  {
   ENABLE_SHOW_CLOCK_PIN=0;
   ENABLE_SHOW_CLOCK_PIN=1;
  }
void load()
{
 char x;
 for(x=0;x<96;x++)
  {
   ENABLE_DATA_PIN=1;
   enable_data_clock_pulse();
  }
  enable_show_clock_pulse();
  ENABLE_DATA_PIN=0;
  enable_data_clock_pulse();
  enable_show_clock_pulse();
}
void next_column()
  {
   ENABLE_DATA_PIN=1;
   enable_data_clock_pulse();
   enable_show_clock_pulse();
  }

  void show_buffer(char scroll_speed)
 {
  char show_loop,scroll_times;
   for(scroll_times=0;scroll_times<scroll_speed;scroll_times++)
     {

     load();

      show_loop=0;
     while(show_loop<96)
      {
       portb=buffer[show_loop];
       portc=buffer1[show_loop];
       delay_us(500);
       next_column();
       portb=0;
       portc=0;
       show_loop++;
      }
     }
 }
 
  void clear_the_buffer()
 {
  char loop;
  while(loop<96)
    {
     buffer[loop]=0;
     buffer1[loop]=0;
     loop++;
    }
 }

  void text_const_print(const unsigned char *text,char speed)
  {char number_of_characters,update,looop;
   int address,character;
   char x;
   number_of_characters=0;

   while(text[number_of_characters])
                                  {
                                  number_of_characters++;
                                  }
   clear_the_buffer();
   for(update=0;update<number_of_characters;update++)
      {

       address=text[update]-32;
       address=address*13;

       for(character=address;character<address+13;character++)
          {
               for(looop=95;looop>0;looop--)
                   {
                     buffer[looop]= buffer[looop-1];
                     buffer1[looop]= buffer1[looop-1];

                   }
                             buffer[0]=ammar[character];
                             buffer1[0]=ammar1[character];
                             show_buffer(speed);
          }
     }
buffer[0]=0;
buffer1[0]=0;
   for(looop=0;looop<96;looop++)
     {
      for(character=95;character>0;character--)
         {
          buffer[character]=buffer[character-1];
          buffer1[character]=buffer1[character-1];
         }


     show_buffer(speed);
     }
 }


void main() 
{


trisd=0;
trisb=0;
trisc=0;
portb=0;
portc=0;
while(1)
{
text_const_print(long_message,1);


}
}

الشرح:
ولفهم اي برنامج يجب بدء قراءة الكود من الدالة الرئيسية كما علمنا استاذنا القدير المهندس أحمد سمير فايد والذي أكن له كل الحب والتقدير عل ما اعطانا من علم نافع
نلاجظ ان في الدالة الرئيسية يتم استدعاء دالة واحدة ضمن حلقة غير منتهيه وهي الدالة text_const_print ويمرر اليها وسيطين هما long_message و1 الوسيط الأول هو عبارة عن مصفوفة مخزن بداخلها الرسالة التي نريد عرضها على الماتركس والوسيط الثاني هو سرعة حركة النص وتم اختيار رقم واحد وهي السرعة القصوى لحركة النص .
سنرى الآن ماذا تقوم به هذه الدالة:
اول شيئ صرحنا عن بعض المتغيرات وبعدها يدخل بحلقة لحساب عدد الحروف في المصفوفة التي تم كتابة النص الذي سنقوم بعرضه على الماتركس ثم يتم استدعاء دالة اسمها clear_the_buffer و وظيفتها مسح عناصر المصفوفات التي اسمها buffer التي يتم تخزين اشكال الحروف والارقام والتي سنشرح طريقة التخزين لاحقا

يتبع.......


عمار سعيد
:: مهندس ::
تاريخ التسجيل: Aug 2011
الدولة: سوريا الحره
المشاركات: 42
نشاط [ عمار سعيد ]
قوة السمعة:
قديم 25-07-2013, 11:41 PM المشاركة 21   
افتراضي


متابعة الشرح :
وبعدها يدخل في حلقة و وظيفة هذه الحلقه انها ترجع قيمة ترتيب الحرف حسب موقعه في جدول الاسكي كود .
لو بحثت في جوجل عن جدول الاسكي كود ستجد أن لكل حرف او رقم او اي شكل على لوحة المفاتيح له رمز او رقم بالقيمة العشرية او السادس عشرية وايضاً ستلاحظ ان موقع المسافة (space) في لوحة المفاتيح هو 32 بالنظام العشري لذلك قمنا بطرح 32 من القيمة الكلية لكي تكون المسافة هي اول عنصر يتم استدعائة من مصفوفة أشكال الحروف التي سنتحدث عنها لاحقاً وبعد ذلك تم ضرب هذه القيمة بـ 13 والسبب يعود الى ان كل حرف او رقم او شكل تم تمثيله بـ 13 نقطه عرضية في الماتركس.
ثم يدخل في حلقة بدايتها من موقع الحرف في مصفوفة الاشكال الى موقع الحرف مضافاً اليه 13 وبعدها يدخل في حلقة تتكرر الى طول مصفوفات التخزين المؤقت ليتم تحريك عناصر المصفوفة.
من الملاحظ اننا وضعنا مصفوفتين باسم buffer و buffer1 كل واحده بحجم 96 عنصر وكل مصفوفة تمثل 8 صفوف لذا حجم الماتركس هو 16 صف ونجد اننا وضعنا في اول عنصر من كلتا المصفوفتين اول بايت من شكل الحرف من مصفوفة اشكل الاحرف حيث ان اول عنصر هو اول عامود من اليمين في الماتركس و في كل دورة يتم ازاحة عناصر المصفوفة الى اليسار و وضع العنصر التالي من مصفوفة اشكال الاحرف في العنصر الاول في مصفوفتي التخزين المؤقت.

ثم يتم اسدعاء الدالة show_buffer و وظيفة هذه الدالة هي عرض العناصر المخزنة في مصفوفتي التخزين المؤقت وشرح هذه الدال كالتالي:
استدعاء الدالة load و وظيفتها هي تهيئة مسجلات الازاحة لأخراج واحد منطقي لكل مخارج مسجلات الازاحة ما عدا الرجل الاولى في اول مسجل ازاحة تكون قيمته صفر منطقي وبعدها تدخل الدالة في حلقة تكرارية 96 مرة ويتم اسناد قيمة مصفوفتي التخزين المؤقت الى portb و portc ثم تأخير زمني بسيط وبعدها امر للتقدم خطوة الى الامام في مسجلات الازاحة عن طريق الدالة next_column
اما بالنسبة لمصفوفتي اشكال الاحرف تم استخراج هذه القيم عن طريق برنامج اسمه GLCD Font Creator وهي المصفوفتي المسميات باسم ammar و ammar1
المصفوفة الاولى للصفوف الثمانية الاولى والمصفوفة الثانية للصفوفة الثمانية الثانية

اما بالنسبة لمسجلات الازاحة ارجو مراجعة بعض مواضيع الاخوة التي تم شرحها بشكل وافي وانا لم اتطرق لشرحها لكي لا تتكر المواضيع

ارجو ان اكون قد وفقت بالشرح ولأي استفسار او تعليق انا جاهز .

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

أخوكم عمار عبد المجيد محمد سعيد


عمار سعيد
:: مهندس ::
تاريخ التسجيل: Aug 2011
الدولة: سوريا الحره
المشاركات: 42
نشاط [ عمار سعيد ]
قوة السمعة:
قديم 25-07-2013, 11:42 PM المشاركة 22   
افتراضي


ونسيت ان اشكر الاستاذ القدير صاحب الفكرة العامة للمشروع الاستاذ أحمد طباخ


الصورة الرمزية lovevb6
lovevb6
:: عضو فضي ::
تاريخ التسجيل: May 2010
الدولة: LIBYA-BENGHAZY
المشاركات: 1,473
نشاط [ lovevb6 ]
قوة السمعة:
قديم 26-07-2013, 10:43 PM المشاركة 23   
افتراضي


بارك الله فيك عمار ..وادامك خيراا للامة الاسلاميه


عمار سعيد
:: مهندس ::
تاريخ التسجيل: Aug 2011
الدولة: سوريا الحره
المشاركات: 42
نشاط [ عمار سعيد ]
قوة السمعة:
قديم 27-07-2013, 01:22 AM المشاركة 24   
افتراضي


شكرا لك اخي عبد السلام على الرد الطيب والمشجع



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