التدريب الأساسى : عملية المسح والعرض لحرف واحد غير متحرك :
منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر :: برمجة الميكروكونترولر PIC بلغة السى مع المترجم CCS - C
صفحة 1 من اصل 1
التدريب الأساسى : عملية المسح والعرض لحرف واحد غير متحرك :
التدريب الأساسى : عملية المسح والعرض لحرف واحد غير متحرك :
الدائرة الكهربية :
البرنامج مع المترجم CCS C : أولا : بدون استخدام الحلقات :
فى هذا البرنامج سوف نستخدم المبادىء الأساسية ، والغرض شرح عملية المسح والعرض .
1- فى بداية البرنامج يتم حجز ثمانى مواقع ذاكرة لتخزين 8 بيايت ، عن طريق إعلان (تعريف) مصفوفة من نوع الحرف ذات 8 عناصر ، باسم int8 A[] ، مع تعيين هذه العناصر من واقع التمثيل النقطى للحرف بدءا من اليسار إلى اليمين كما هو معتاد مع المصفوفات .
كل ما هو مطلوب نقل (إرسال) هذه البايتات الثمانية إلى المنفذ PORTB ، لكن كل بايت فى حينها ، حيث يتم تفعيل الصف ( العامود) المناظر وعدم تفعيل باقى الصفوف (الأعمدة) الأخرى . علما بأن أطراف الماتريكس المتصلة بالمنفذ PORTB هى الكاثودات المشتركة .
2- داخل الدالة الرئيسية ، وداخل الحلقة الغير منتهية ، يتم :
أ- تفعيل (اختيار) الصف الأول فقط ، بجعل الطرف D0 فقط بواحد (أنودات مشتركة) output_d(1) ، ثم إرسال (عرض) البايت الأول من مصفوفة الحرف إلى المنفذ PORTBبالشكل output_b(A[0] ، ثم تأخير زمنى صغير جدا لثبات العرض delay_ms(5) ، وبالتالى تكون الصيغة كما يلى :
3- يتم تكرار جميع الخطوات السابقة بشكل سريع داخل الحلقة الغير منتهية ، وتكون النتيجة احساس العين بعرض الحرف بكامله بشكل مستمر كما فى الشكل أدناه.
البرنامج :
البرنامج مع المترجم CCS C : ثانيا : مع استخدام الحلقات :
الدائرة الكهربية :
البرنامج مع المترجم 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 : ثانيا : مع استخدام الحلقات :
البرنامج مع المترجم CCS C : ثانيا : مع استخدام الحلقات ، وتقنيات البرمجة بلغة السى :
البرنامج مع المترجم 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
}
}
}
}
نفس البرنامج مع تقنية استخدام الدوال فى البرمجة والتى هى عصب لغة السى :
نفس البرنامج مع تقنية استخدام الدوال فى البرمجة والتى هى عصب لغة السى :
- الكود:
/******************************************************
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
}
}
عرض عدة أحرف ورموز وأشكال ولفظ الجلالة بشكل ثابت وعلى التتابع :
عرض عدة أحرف ورموز وأشكال ولفظ الجلالة بشكل ثابت وعلى التتابع :
البرنامج :
البرنامج :
- الكود:
/******************************************************
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
}
}
مواضيع مماثلة
» الدرس الثانى : جولة داخل بيئة التطوير المتكاملة لبرنامج LDMicro والمستخدم فى البرمجة بلغة منطق السلم :
» الموديول CCP ووضع تعديل عرض النبضة PWM مع المترجم CCS C - البرنامج الأساسى :
» البرمجة بلغة السى - أمثلة الجزء الأول – البرنامج الخامس : إيجاد قيمة كود أسكى ASCII لحرف .
» جهاز قياس الجهد باستخدام الميكروكونترولر PIC12F675 ومسجل الإزاحة 74595 والعرض على 4 وحدات سفن سيجمنت مع المترجم CCS C :
» الليد ماتريكس LED MATRIX علميا وعمليا والبرمجة بلغة السى والمترجم MIKROC والمترجم CCS C :
» الموديول CCP ووضع تعديل عرض النبضة PWM مع المترجم CCS C - البرنامج الأساسى :
» البرمجة بلغة السى - أمثلة الجزء الأول – البرنامج الخامس : إيجاد قيمة كود أسكى ASCII لحرف .
» جهاز قياس الجهد باستخدام الميكروكونترولر PIC12F675 ومسجل الإزاحة 74595 والعرض على 4 وحدات سفن سيجمنت مع المترجم CCS C :
» الليد ماتريكس LED MATRIX علميا وعمليا والبرمجة بلغة السى والمترجم MIKROC والمترجم CCS C :
منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر :: برمجة الميكروكونترولر PIC بلغة السى مع المترجم CCS - C
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى