منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

تدريب للتعرف على مبدأ تحريك الأحرف : تحريك حرف “A” جهة اليسار أو جهة اليمين :

اذهب الى الأسفل

تدريب للتعرف على مبدأ تحريك الأحرف : تحريك حرف “A” جهة اليسار أو جهة اليمين : Empty تدريب للتعرف على مبدأ تحريك الأحرف : تحريك حرف “A” جهة اليسار أو جهة اليمين :

مُساهمة من طرف Admin في الخميس مايو 21, 2015 12:18 am

تدريب للتعرف على مبدأ تحريك الأحرف : تحريك حرف “A” جهة اليسار أو جهة اليمين :

تدريب للتعرف على مبدأ تحريك الأحرف : تحريك حرف “A” جهة اليسار أو جهة اليمين : 1210

البرنامج :

الكود:

#include <16F877A.h>
#use delay(clock=4000000)
 
unsigned int8 i,j,s,
A[8]={0xFF,0x03,0x01,0xEE,0xEE,0x01,0x03,0xFF},
A_copy[8];
 
void main()
{
       
    while(true)
    {
            ///////////1- Initially display the fixed photo data "A"  ////////////////////////
       
      for (i=1;i<25;i++)  //25 =  No. of repeated cycles (loops) to display each character on LED matrix
          {
          s=1; // select row #1
        for(j=0;j<8;j++) // 8 Bytes each character display process cycle (loop) is made up of :
        {
            output_D(s); //select ROW ,and send the value to port D for scanning
            output_B(A[j]);    //For this ROW:Send character data to columns connected to port B to display information
            delay_ms(5);          // Short delay
        s=s<<1; // select next row
        }
      }
   
    ////////end of display fixed photo //////////////*/
   
      //2-Shift data ///////////////
      /////a- Copy : Array A contains 8 element : say index  0.,1,2,3,4,5,6,7 to shift array A_copy
              for(j=0;j<=7;j++)  // Repeat 8 times
        {
          A_copy[j]=A[j]; // copy 8 elements from A[] to A_copy[] , the 2 arrays contain same elements
        }
      //////b-Shift part1 /////////////////////////////////
        for(j=0;j<7;j++)  //Repeat 10 times //
        {
            A[j]=A_copy[j+1];  // A[0]=A_copy[1] ,A[1]=A_copy[2],.....A[6]=A_copy[7] ie now array A[] contains shifted data Except A[7] , so : 
        }
      ////////c-shift part2 /////////////////////////////
        A[7]=A_copy[0];  //copy last element of A_copy[] to frist element of A[] , shift it
        //at the next loop display shift one position to LEFT 
 
    }
}



شرح أجزاء البرنامج :
1- تعريف مصفوفات الحرف ، المصفوفة A[8] ، نوع الحرف ، لتخزين البايتات الثمانية التى تشكل نقط الحرف ، والمعروفة مسبقا ، والمصفوفة A_copy[8] ، نوع الحرف ، وبنفس عدد عناصر المصفوفة السابقة ، وهى مصفوفة مساعدة ، أو وسيطة لتنفيذ عملية الإزاحة كما سوف يرد لاحقا .

الكود:


A[8]={0xFF,0x03,0x01,0xEE,0xEE,0x01,0x03,0xFF},
A_copy[8];


2- المسح و العرض : كما سبق فى الأمثلة السابقة ، بغرض عرض الحرف بشكل ثابت فى البداية :

الكود:

///////////1- Initially display the fixed photo data "A"  ////////////////////////
       
      for (i=1;i<25;i++)  //25 =  No. of repeated cycles (loops) to display each character on LED matrix
          {
          s=1; // select row #1
        for(j=0;j<8;j++) // 8 Bytes each character display process cycle (loop) is made up of :
        {
            output_D(s); //select ROW ,and send the value to port D for scanning
            output_B(A[j]);    //For this ROW:Send character data to columns connected to port B to display information
            delay_ms(5);          // Short delay
        s=s<<1; // select next row
        }
      }
   
    ////////end of display fixed photo ///////////

3- الإزاحة جهة اليمين أو جهة اليسار : وأخيرا إزاحة العرض ليبدو للعين وكأن الحرف يتحرك . هنا :
أ‌- يتم أولا نسخ بايتات المصفوفة A[] إلى المصفوفة المساعدة A_copy[j]=A[j] كما هى .
ب‌- بعد ذلك يتم إعادة نسخ البايتات من المصفوفة المساعدة إلى المصفوفة A[] ، لكن بترتيب محدد لنحصل على الإزاحة المطلوبة ، بمعنى A[0]=A_copy[1] أى يتم نسخ البايت الثانى إلى البايت الأول و A[1]=A_copy[2] أى نسخ البايت الثالث إلى البايت الثانى ، وهكذا حتى A[6]=A_copy[7] أى نسخ البايت الثامن إلى البايت السابع ، وفى النهاية ولتكملة الدورة يتم نسخ البايت الأول إلى البايت الثامن A[7]=A_copy[0] ، وتكون النتيجة إزاحة العرض جهة اليسار .

الكود:


//2-Shift data ///////////////
      /////a- Copy : Array A contains 8 element : say index  0.,1,2,3,4,5,6,7 to shift array A_copy
              for(j=0;j<=7;j++)  // Repeat 8 times
        {
          A_copy[j]=A[j]; // copy 8 elements from A[] to A_copy[] , the 2 arrays contain same elements
        }
      //////b-Shift part1 /////////////////////////////////
        for(j=0;j<7;j++)  //Repeat 10 times //
        {
            A[j]=A_copy[j+1];  // A[0]=A_copy[1] ,A[1]=A_copy[2],.....A[6]=A_copy[7] ie now array A[] contains shifted data Except A[7] , so : 
        }
      ////////c-shift part2 /////////////////////////////
        A[7]=A_copy[0];  //copy last element of A_copy[] to frist element of A[] , shift it
        //at the next loop display shift one position to LEFT 
 
    }
}

Admin
Admin

عدد المساهمات : 1188
تاريخ التسجيل : 28/01/2014

https://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى