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

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

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

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

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



البرنامج :

الكود:

#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

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

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

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

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة


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