التدريب الأساسى : عملية المسح والعرض لحرف واحد غير متحرك :

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

التدريب الأساسى : عملية المسح والعرض لحرف واحد غير متحرك :

مُساهمة من طرف Admin في الأربعاء مايو 20, 2015 12:20 pm

التدريب الأساسى : عملية المسح والعرض لحرف واحد غير متحرك  :
الدائرة الكهربية :




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


الكود:

int8 A[]={0xFF,0x03,0x01,0xEE,0xEE,0x01,0x03,0xFF}; // ‘A’ , on cathodes , 0 0n , 1 off


كل ما هو مطلوب نقل (إرسال) هذه البايتات الثمانية إلى المنفذ PORTB ، لكن كل بايت فى حينها ، حيث يتم تفعيل الصف ( العامود) المناظر وعدم تفعيل باقى الصفوف (الأعمدة) الأخرى . علما بأن أطراف الماتريكس المتصلة بالمنفذ PORTB هى الكاثودات المشتركة .
2- داخل الدالة الرئيسية ، وداخل الحلقة الغير منتهية ، يتم :
أ‌- تفعيل (اختيار) الصف الأول فقط ، بجعل الطرف D0 فقط بواحد (أنودات مشتركة) output_d(1) ، ثم إرسال (عرض) البايت الأول من مصفوفة الحرف إلى المنفذ  PORTBبالشكل output_b(A[0] ، ثم تأخير زمنى صغير جدا لثبات العرض delay_ms(5) ، وبالتالى تكون الصيغة كما يلى :


الكود:


       output_d(1); output_b(A[0]; delay_ms(5);//row 1 , byte 1 , delay
ب‌-   تكرار العملية السابقة مع الصف الثانى ، والثالث ، وحتى الصف الثامن :
output_d(2); output_b(A[1]; delay_ms(5); //row 2 , byte 2 , delay
output_d(4); output_b(A[2]; delay_ms(5); //row 3 , byte 3 , delay
……………………………………………………………………..
………………………………………………………………………..
output_d(128); output_b(A[7]; delay_ms(5); //row 8 , byte 8 , delay



3- يتم تكرار جميع الخطوات السابقة بشكل سريع داخل الحلقة الغير منتهية ، وتكون النتيجة احساس العين بعرض الحرف بكامله بشكل مستمر كما فى الشكل أدناه.
















البرنامج :


الكود:

#include <16F877A.h>     //
#use delay (clock=4000000)   // oscillator frequency used for delay function

//Define Matrix Character Information as 8 byte array
int8 A[]={0xFF,0x03,0x01,0xEE,0xEE,0x01,0x03,0xFF}; // 'A' , on cathodes , 0 0n , 1 off

void main()
{
While(true)
   {
   output_d(1); output_b(A[0]); delay_ms(5);//row 1 , byte 1 , delay
   output_d(2); output_b(A[1]); delay_ms(5); //row 2 , byte 2 , delay
   output_d(4); output_b(A[2]); delay_ms(5); //row 3 , byte 3 , delay
   output_d(8); output_b(A[3]); delay_ms(5); //row 4 , byte 3 , delay
   output_d(16); output_b(A[4]); delay_ms(5); //row 5 , byte 3 , delay
   output_d(32); output_b(A[5]); delay_ms(5); //row 6 , byte 3 , delay
   output_d(64); output_b(A[6]); delay_ms(5); //row 7 , byte 3 , delay
   output_d(128); output_b(A[7]); delay_ms(5); //row 8 , byte 8 ,delay
   }
}


البرنامج مع المترجم CCS C : ثانيا : مع استخدام الحلقات :

Admin
Admin

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

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

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

البرنامج مع المترجم CCS C : ثانيا : مع استخدام الحلقات ، وتقنيات البرمجة بلغة السى :

مُساهمة من طرف Admin في الأربعاء مايو 20, 2015 1:06 pm

البرنامج مع المترجم CCS C : ثانيا : مع استخدام الحلقات ، وتقنيات البرمجة بلغة السى :
البرنامج :

الكود:


/******************************************************
LED Matrix Display
Display one fixed character: 'A'
*******************************************************/
#include <16F877A.h>    //
#use delay (clock=4000000)  // oscillator frequency used for delay function

//Define Matrix Character Information as 8 byte array
int8 A[]={0xFF,0x03,0x01,0xEE,0xEE,0x01,0x03,0xFF}; // 'A' , on cathodes , 0 0n , 1 off
int8 i,s ;  // Variables , loop counter , select row
/********* main function********/
void main ()
{
    while(true)
  {
        s=1;          // Initially  select row #1

        for(i=0;i<8;i++)    //Repeat for 8 Bytes for each character
// display process cycle (loop) is made up of :
        {
            output_D(s);       //1-select ROW ,and send the value to port D for scanning
            output_B(A[i]);       //2-For this ROW:Send character data to columns
//connected to port B to display information
            delay_ms(5);            // 3-Short delay
           s=s<<1;      // 4-select next row
        }
           
  }
}





ملاحظة :
فيما سبق اعتمدنا على التكرار السريع للمسح عن طريق الحلقة الغير منتهية ، وينبغى إدخال حلقة تكرار لكل حرف حتى يكون الحرف مستقرا بغض النظر عن الحلقة الغير منتهية وخاصة عند عرض حروف متعددة ، كما سوف يأتى لاحقا ، وبالتالى يصبح البرنامج كما يأتى :


الكود:


/******************************************************
LED Matrix Display
Display one fixed character : A
*******************************************************/
#include <16F877A.h>    //
#use delay(clock=4000000)  // oscillator frequency used for delay function

//Define Matrix Character Information as 8 byte array
int8 A[]={0xFF,0x03,0x01,0xEE,0xEE,0x01,0x03,0xFF}; // A , on cathodes , 0 0n , 1 off
int8 i,j,s ;  // Variables
/********* main function********/
void main ()
{
 
  while(true)
  {
   
       
    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
        }
      }
       
  }
}


Admin
Admin

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

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

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

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

مُساهمة من طرف Admin في الأربعاء مايو 20, 2015 1:30 pm

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


الكود:

/******************************************************
LED Matrix Display
Display one fixed character : A
Using functions
*******************************************************/
#include <16F877A.h>     //
#use delay(clock=4000000)   // oscillator frequency used for delay function

//1-Define Matrix Character Information as 8 byte array
int8 A[]={0xFF,0x03,0x01,0xEE,0xEE,0x01,0x03,0xFF}; // A , on cathodes , 0 0n , 1 off
 
//2-******* ROW Selection Function (scanning) using switch(select)************
int select_ROW (int s) // return int , s=0 for ROW 1 , s=1 for ROW 2 ........
{
   switch (s)
   {
     case 0: return(1);break;  // 1. ROW 1 ON, AND other  ROWs OFF 0b00000001 PIN_D0 = 1  pin 1 0ff Protus LED matrix
     case 1: return(2);break;  // 2. ROW 2 ON, AND other  ROWs OFF 0b00000010 PIN_D1 = 1
     case 2: return(4);break;  // 3. ROW 3 ON, AND other  ROWs OFF 0b00000100 PIN_D2 = 1
     case 3: return(8);break;  // 4. ROW 4 ON, AND other  ROWs OFF 0b00001000 PIN_D3 = 1
     case 4: return(16);break; // 5. ROW 5 ON, AND other  ROWs OFF 0b00010000 PIN_D4 = 1
     case 5: return(32);break; // 6. ROW 6 ON, AND other  ROWs OFF 0b00100000 PIN_D5 = 1
     case 6: return(64);break; // 7. ROW 7 ON, AND other  ROWs OFF 0b01000000 PIN_D6 = 1
     case 7: return(128);break;// 8. ROW 8 ON, AND other  ROWs OFF 0b10000000 PIN_D7 = 1
   }
}

//3-******* Matrix Data sending Function*******
void send_characters_matrix (char character[], int repeat) // return void , 2 arguments : character array and no. of repeat
{
   int i,j;  // Counter loops Variables

   for (i=1;i<repeat;i++)  // No. of repeated cycles (loops) to display each character on LED matrix
       {
         for(j=0;j<8;j++) // 8 Bytes each character display process cycle (loop) is made up of :
         {
            output_D(select_ROW(j)); //1-For each ROW : select ROW to get function return,and send the value to port D for scanning
            output_B(character[j]);     //2- For this ROW:Send character data to columns connected to port B to display information
            delay_ms(5);          // Short delay
         }
      }
}

/********* main function********/

void main ()
{

      
   while(true)
   {
        send_characters_matrix (A,50);// Show character "A"  : arguments : array A ,50 repeat times
        
   }
}



Admin
Admin

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

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

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

عرض عدة أحرف ورموز وأشكال ولفظ الجلالة بشكل ثابت وعلى التتابع :

مُساهمة من طرف Admin في الأربعاء مايو 20, 2015 6:57 pm

عرض عدة أحرف ورموز وأشكال ولفظ الجلالة بشكل ثابت وعلى التتابع :




البرنامج :

الكود:

/******************************************************
LED Matrix Display
Display multi fixed character : A,B,C,D,E,+,<--->, face , Allah , ......
Using functions
*******************************************************/
#include <16F877A.h>    //
#use delay(clock=4000000)  // oscillator frequency used for delay function

//1-Define Matrix Character Information as 8 byte array
int8 A[]={0xFF,0x03,0x01,0xEE,0xEE,0x01,0x03,0xFF}; // A , on cathodes , 0 0n , 1 off

 int B[]={0XFF,0X91,0X6E,0x6E,0X6E,0X00,0X00,0xFF};
 int C[]={0XFF,0X99,0X18,0X3C,0X3C,0X00,0X81,0xFF};
 int D[]={0XFF,0X81,0X42,0X3C,0X3C,0X00,0X00,0xFF};
 int E[]={0XFF,0X3C,0X24,0X24,0X24,0X00,0X00,0xFF};
 int plus[]={0XFF,0XE7,0XE7,0X81,0X81,0XE7,0XE7,0XFF};
 int double_arrow[]={0XFF,0XDB,0XBD,0X00,0X00,0XBD,0XDB,0XFF};
 int face[]={0XC3,0XBD,0X6A,0X5E,0X5E,0X6A,0XBD,0XC3};
 int Allah[]={0X01,0X01,0X7F,0X01,0X7F,0X07,0XB7,0XCF};
 int Love[]={0XE3,0XC1,0X81,0X03,0X03,0X81,0XC1,0XE3};
 int Arrow[]={0XDF,0XCF,0XC7,0X00,0X00,0XC7,0XCF,0XDF};
 
//2-******* ROW Selection Function (scanning) using switch(select)************
int select_ROW (int s) // return int , s=0 for ROW 1 , s=1 for ROW 2 ........
{
  switch (s)
  {
    case 0: return(1);break;  // 1. ROW 1 ON, AND other  ROWs OFF 0b00000001 PIN_D0 = 1  pin 1 0ff Protus LED matrix
    case 1: return(2);break;  // 2. ROW 2 ON, AND other  ROWs OFF 0b00000010 PIN_D1 = 1
    case 2: return(4);break;  // 3. ROW 3 ON, AND other  ROWs OFF 0b00000100 PIN_D2 = 1
    case 3: return(8);break;  // 4. ROW 4 ON, AND other  ROWs OFF 0b00001000 PIN_D3 = 1
    case 4: return(16);break; // 5. ROW 5 ON, AND other  ROWs OFF 0b00010000 PIN_D4 = 1
    case 5: return(32);break; // 6. ROW 6 ON, AND other  ROWs OFF 0b00100000 PIN_D5 = 1
    case 6: return(64);break; // 7. ROW 7 ON, AND other  ROWs OFF 0b01000000 PIN_D6 = 1
    case 7: return(128);break;// 8. ROW 8 ON, AND other  ROWs OFF 0b10000000 PIN_D7 = 1
  }
}

//3-******* Matrix Data sending Function*******
void send_characters_matrix (char character[], int repeat) // return void , 2 arguments : character array and no. of repeat
{
  int i,j;  // Counter loops Variables

  for (i=1;i<repeat;i++)  // No. of repeated cycles (loops) to display each character on LED matrix
      {
        for(j=0;j<8;j++) // 8 Bytes each character display process cycle (loop) is made up of :
        {
            output_D(select_ROW(j)); //1-For each ROW : select ROW to get function return,and send the value to port D for scanning
            output_B(character[j]);    //2- For this ROW:Send character data to columns connected to port B to display information
            delay_ms(5);          // Short delay
        }
      }
}

/********* main function********/

void main ()
{

     
  while(true)
  {
        send_characters_matrix (A,25);// Show character "A"  : arguments : array A ,25 repeat times
     
        send_characters_matrix (B,25);// Show character "B"
        send_characters_matrix (C,25);// Show character "C"
        send_characters_matrix (D,25);// Show character "D"
        send_characters_matrix (E,25);// Show character "E"
        send_characters_matrix (plus,25);//Show character "+"
        send_characters_matrix (double_arrow,25);// Show character "<-->"  Two-way arrows
        send_characters_matrix (face,25);// Show face
        send_characters_matrix (Allah,25);// Show Allah
        send_characters_matrix (Love,25);// Show Love
        send_characters_matrix (Arrow,25);// Show Arrow
  }
}




Admin
Admin

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

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

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

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


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