قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 10-02-2013, 11:08 PM المشاركة 1   
افتراضي شرح المدخل العلمى لتحريك النصوص والأشكال على شاشة مصفوفة الليدات :اليد ماتريكس Twitter FaceBook Google+



التجربة 12 : تحريك حرف "A" من جهة اليمين إلى جهة اليسار





الدائرة الكهربائية :





الفكرة:
كما فى حالة تصوير وعرض فيلم السينيما ,أو عند تحويل عدد من الصور إلى فديو , يتم تقسيم المشهد إلى عدد من الصور تسمى إطارات frames وكل إطار يمثل وضع معين ثابت يتم عرضه عن طريق المسح وإدخال البيانات . بيانات كل إطار تتحدد بخمس بايتات ( كل بايت يناظر عامود محدد) . بعد ذلك يتم عرض الإطار الذى يلية والذى يليه إلى أن تنتهى الإطارات ثم تكرار العرض بسرعة فتبدو مجموعة الإطارات كما لو كانت مشهد متحرك . يمكن التحكم فى سرعة تحرك الإطارات عن طريق التحكم فى زمن عرض الإطار .

مثال : تحريك الحرف "A" من جهة اليسار إلى جهة اليمين .

اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 10-02-2013, 11:14 PM المشاركة 2   
افتراضي


مثال : تحريك الحرف "A" من جهة اليسار إلى جهة اليمين .









كما فى الشكل يتم تقسيم المشهد إلى 10 إطارات :
الإطار الأول فارغ وتمثله البيانات :


كود:
{0x00,0x00,0x00,0x00,0x00}, //Frame 1
الإطار الثانى يبدأ ظهور أو عامود من الحرف "A" وتمثله البيانات :

كود:
{0x00,0x00,0x00,0x00,0x3F},//Frame 2
وهكذا حتى الإطار العاشر حيث آخر عامود من الحرف "A" وتمثله البيانات :


كود:
{0x3F,0x00,0x00,0x00,0x00}//Frame 10

وبالتالى يمكن تمثيل بيانات الإطارات العشرة فى شكل مصفوفة ذو بعدين مكونة من 10 صفوف , كل صف يمثل إطار ويحتوى على 5 أعمدة , كل عامود يمثل بايت بيانات , كما يلى :


كود:
const unsigned short int Column_Data[10][5]={//10 rows X 5 Column {0x00,0x00,0x00,0x00,0x00}, //Frame 1 {0x00,0x00,0x00,0x00,0x3F},//Frame 2 {0x00,0x00,0x00,0x3F,0x48},//Frame 3 {0x00,0x00,0x3F,0x48,0x48},//Frame 4 {0x00,0x3F,0x48,0x48,0x48},//Frame 5 {0x3F,0x48,0x48,0x48,0x3F},//Frame 6 {0x48,0x48,0x48,0x3F,0x00},//Frame 7 {0x48,0x48,0x3F,0x00,0x00},//Frame 8 {0x48,0x3F,0x00,0x00,0x00},//Frame 9 {0x3F,0x00,0x00,0x00,0x00}//Frame 10 };
ملحوظة :
إعلان المصفوفة بنوع "ثابت" const تجعل المترجم يقوم بحفظها فى ذاكرة البرنامج الكبيرة نسبيا بدلا من ذاكرة المعطيات RAM الصغيرة والتى نحتاجها فى تنفيذ خطوات البرنامج .

ملخص البرنامج :

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 10-02-2013, 11:17 PM المشاركة 3   
افتراضي


ملخص البرنامج :
1- كما فى حالة الحرف الساكن , يتم "عرض الأطار الواحد" بجزء الكود :


كود:
Reset(); for(Display_column =0; Display_column <5; Display_column ++){ // }//each frame loop PORTB= Array_Data[Frame_no][ Display_column]; Delay_ms(1); // output port and call DELAY PORTB=0; // Turn off the output before loading the next Clk(); // value into the port to prevent "Mirroring" on the display }//end of each frame


ملحوظة :
تمرير مصفوفة بتات البيانات ثنائية الأبعاد إلى المنفذ PORTB يتم بالصيغة :


كود:
PORTB= Array_Data[Frame_no][ Display_column];

حيث نبدأ بتمرير بتات بيانات الإطار (الصف) الأول إلى أعمدة الشاشة وفقا للترتيب [Frame_no][ Display_column] . ثم الأطار الإطار الثانى وهكذا .


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 10-02-2013, 11:18 PM المشاركة 4   
افتراضي


2- للتحكم فى سرعة الحركة يتم التحكم فى زمن عرض الإطار عن طريق تكرار "عرض الإطار الواحد" عدد من المرات ليصبح الكود كما يلى :

كود:
for(repeat=0;repeat<50;repeat++){ //repeat frame display=time=speed Reset(); for(Display_column =0; Display_column <5; Display_column ++){ // }//each frame loop PORTB= Array_Data[Frame_no][ Display_column]; Delay_ms(1); // output port and call DELAY PORTB=0; // Turn off the output before loading the next Clk(); // value into the port to prevent "Mirroring" on the display }//end of each frame }//end of repeat


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 10-02-2013, 11:20 PM المشاركة 5   
افتراضي


3- يتم تكرار الجزء السابق بعدد الإطارات ليصبح الكود كما يلى :


كود:
for(Frame_no=0;Frame_no<10;Frame_no++){ //repeat for 10 frames
for(repeat=0;repeat<50;repeat++){ //repeat frame display=time=speed Reset(); for(Display_column =0; Display_column <5; Display_column ++){ // }//each frame loop PORTB= Array_Data[Frame_no][ Display_column]; Delay_ms(1); // output port and call DELAY PORTB=0; // Turn off the output before loading the next Clk(); // value into the port to prevent "Mirroring" on the display }//end of each frame }//end of repeat }//end of frames


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 10-02-2013, 11:24 PM المشاركة 6   
افتراضي


البرنامج الكامل


كود:
//Program for PIC16F628A. // Two-dimensional array declaration const unsigned short int Array_Data [10][5]={ //10 rows X 5 Column {0x00,0x00,0x00,0x00,0x00}, //Frame 1 {0x00,0x00,0x00,0x00,0x3F}, //Frame 2 {0x00,0x00,0x00,0x3F,0x48}, //Frame 3 {0x00,0x00,0x3F,0x48,0x48}, //Frame 4 {0x00,0x3F,0x48,0x48,0x48}, //Frame 5 {0x3F,0x48,0x48,0x48,0x3F}, //Frame 6 {0x48,0x48,0x48,0x3F,0x00}, //Frame 7 {0x48,0x48,0x3F,0x00,0x00}, //Frame 8 {0x48,0x3F,0x00,0x00,0x00}, //Frame 9 {0x3F,0x00,0x00,0x00,0x00} //Frame 10 };
//Variables declaration unsigned short Display_column , repeat ,Frame_no;
//Functions void Reset(void){ PORTA.F1=1;// Reset 4017 PORTA.F1=0; } void Clk(void){ PORTA.F0=1; // Colck the 4017 for next column PORTA.F0=0; } void main(){ //Main function CMCON=0x7; // Turn comparators off and enable pins for I/O functions TRISA=0; TRISB=0; while(1){
for(Frame_no=0;Frame_no<10;Frame_no++){ //repeat for 10 frames
for(repeat=0;repeat<50;repeat++){ //repeat frame display=time=speed Reset(); for(Display_column =0; Display_column <5; Display_column ++){ // }//each frame loop PORTB= Array_Data[Frame_no][ Display_column]; Delay_ms(1); // output port and call DELAY PORTB=0; // Turn off the output before loading the next Clk(); // value into the port to prevent "Mirroring" on the display }//end of each frame }//end of repeat }//end of frames }//endless loop }//main loop


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 10-02-2013, 11:28 PM المشاركة 7   
افتراضي


برنامج تحريك حرفين :

الإطار الأول : نبدأ بالإطار الأول فارغ كحالة :

كود:
{0x00,0x00,0x00,0x00,0x00}, //Frame 1

الإطار الثانى : يبدأ ظهور أو عامود بالإطار الثانى عن طريق نقل (إزاحة) بياناته (0x40) :

كود:
{0x00,0x00,0x00,0x00,0x40},

الإطار الثالث : نقل مع إزاحة فى الإطار السابق :


كود:
{0x00,0x00,0x00,0x40,0x40},

وهكذا نحصل على المصفوفة :


كود:
{0x00,0x00,0x00,0x00,0x00},//13 frames X 5 columns {0x00,0x00,0x00,0x00,0x40}, {0x00,0x00,0x00,0x40,0x40}, {0x00,0x00,0x40,0x40,0x7F}, {0x00,0x40,0x40,0x7F,0x40}, {0x40,0x40,0x7F,0x40,0x40}, {0x40,0x7F,0x40,0x40,0x00}, {0x7F,0x40,0x40,0x00,0x7F}, {0x40,0x40,0x00,0x7F,0x49}, {0x40,0x00,0x7F,0x49,0x49}, {0x00,0x7F,0x49,0x49,0x41}, {0x7F,0x49,0x49,0x41,0x41}, {0x49,0x49,0x41,0x41,0x00},

البرنامج

كود:
//Program for PIC16F628A.
// Two-dimensional array declaration
const unsigned short int Array_Data [13][5]={             //10 rows X 5 Column
{0x00,0x00,0x00,0x00,0x00},//13 frames X 5 columns
{0x00,0x00,0x00,0x00,0x40},
{0x00,0x00,0x00,0x40,0x40},
{0x00,0x00,0x40,0x40,0x7F},
{0x00,0x40,0x40,0x7F,0x40},
{0x40,0x40,0x7F,0x40,0x40},
{0x40,0x7F,0x40,0x40,0x00},
{0x7F,0x40,0x40,0x00,0x7F},
{0x40,0x40,0x00,0x7F,0x49},
{0x40,0x00,0x7F,0x49,0x49},
{0x00,0x7F,0x49,0x49,0x41},
{0x7F,0x49,0x49,0x41,0x41},
{0x49,0x49,0x41,0x41,0x00},

};


//Variables declaration
unsigned short Display_column , repeat ,Frame_no;

//Functions
void Reset(void){
PORTA.F1=1;// Reset 4017
PORTA.F1=0;
}
void Clk(void){
PORTA.F0=1; // Colck the 4017 for next column
PORTA.F0=0;
}
void main(){                             //Main function
CMCON=0x7;                         // Turn comparators off and enable pins for I/O functions
TRISA=0;
TRISB=0;
while(1){
for(Frame_no=0;Frame_no<13;Frame_no++){ //repeat for 10 frames
كود:
for(repeat=0;repeat<50;repeat++){ //repeat frame display=time=speed Reset(); for(Display_column =0; Display_column <5; Display_column ++){ // }//each frame loop PORTB= Array_Data[Frame_no][ Display_column]; Delay_ms(1); // output port and call DELAY PORTB=0; // Turn off the output before loading the next Clk(); // value into the port to prevent "Mirroring" on the display }//end of each frame }//end of repeat }//end of frames }//endless loop }//main loop


الصورة الرمزية taha emara
taha emara
:: مهندس متواجد ::
تاريخ التسجيل: Aug 2009
الدولة: Egypt - Damietta
المشاركات: 126
نشاط [ taha emara ]
قوة السمعة:0
قديم 11-02-2013, 04:48 PM المشاركة 8   
افتراضي


بارك الله فيك و في علمك.

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 10:27 AM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025