تدريب للتعرف على مبدأ تحريك الأحرف : تحريك حرف “A” جهة اليسار أو جهة اليمين :
منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر :: برمجة الميكروكونترولر PIC بلغة السى مع المترجم CCS - C
صفحة 1 من اصل 1
تدريب للتعرف على مبدأ تحريك الأحرف : تحريك حرف “A” جهة اليسار أو جهة اليمين :
تدريب للتعرف على مبدأ تحريك الأحرف : تحريك حرف “A” جهة اليسار أو جهة اليمين :
البرنامج :
شرح أجزاء البرنامج :
1- تعريف مصفوفات الحرف ، المصفوفة A[8] ، نوع الحرف ، لتخزين البايتات الثمانية التى تشكل نقط الحرف ، والمعروفة مسبقا ، والمصفوفة A_copy[8] ، نوع الحرف ، وبنفس عدد عناصر المصفوفة السابقة ، وهى مصفوفة مساعدة ، أو وسيطة لتنفيذ عملية الإزاحة كما سوف يرد لاحقا .
2- المسح و العرض : كما سبق فى الأمثلة السابقة ، بغرض عرض الحرف بشكل ثابت فى البداية :
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] ، وتكون النتيجة إزاحة العرض جهة اليسار .
البرنامج :
- الكود:
#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
}
}
مواضيع مماثلة
» ترجمة وإعداد كتاب البرمجة بلغة السى المدمجة وتطبيقات لغة السى والميكروكونترولر PIC مع المترجم CCS C : Embedded C Programming Techniques and Applications of C and PIC® MCUS
» تدريب : عرض وتحريك رسالة نصية على وحدة LCD :
» المؤقت NE555 : مبدأ العمل ، تجارب ، مشاريع ، تطبيقات
» برمجة تطبيقات الوندوز بلغة السى شارب للمبتدئين كليا
» مبدأ برمجة سجل الإزاحة 74164 ، دخل تسلسلى خرج متوازى بدون ماسك مع الليد ماتريكس والمترجم CCS C :
» تدريب : عرض وتحريك رسالة نصية على وحدة LCD :
» المؤقت NE555 : مبدأ العمل ، تجارب ، مشاريع ، تطبيقات
» برمجة تطبيقات الوندوز بلغة السى شارب للمبتدئين كليا
» مبدأ برمجة سجل الإزاحة 74164 ، دخل تسلسلى خرج متوازى بدون ماسك مع الليد ماتريكس والمترجم CCS C :
منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر :: برمجة الميكروكونترولر PIC بلغة السى مع المترجم CCS - C
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى