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

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

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



أفكار وحيل : شرح العديد من تقتيات البرمجة بلغة السى فى برنامج إضاءة متحركة لعامود وصف من الليدات



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





البرمجة بلغة السى والمترجم ميكروسى برو :

اعلانات

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


البرمجة بلغة السى والمترجم ميكروسى برو :
1- التعليقات :

كود:
//1- Comments //PIC16F628A , Internal clock , 4MHz // Column of LEDs moves across/back then //Row of LEDs up and down

2- إعلان المتغيرات :


كود:
//2- Declarations unsigned short count,repeat,repeat_row; unsigned short ROW_upward[7]={0x01,0x02,0x04,0x08,0x10,0x20,0x40};//Rows 1>7 unsigned short ROW_down[6]={ 0x20, 0x10, 0x08, 0x04, 0x02,0x01}; //Rows 6>1

سوف يتم فهم كل منهم فى حينه .

3- إعلان الدوال :
أ‌- دالة إعادة reset العداد 4017 عن طريق توصيل جهد مرتفع PORTA.F1=1 ثم جهد منخفض PORTA.F1=0 من طرف الميكروكونترولر RA1 إلى طرف الإعادة MR للعداد 4017 . نتيجة ذلك يتم تفعيل العامود الأول فقط والمتصل بالخرج الأول Q0 للعداد من خلال ترانزستور عاكس .


كود:
void RESET_4017(viod){ PORTA.F1=1; //Reset 4017 : Line HIGH, column 1 on PORTA.F1=0; //then LOW, allow 4017 to clock via clock line }

ب‌- دالة توقيت clock العداد 4017 عن طريق توصيل جهد مرتفع PORTA.F0=1 ثم جهد منخفض PORTA.F0=0 من طرف الميكروكونترولرRA0 إلى طرف الساعة clk للعداد 4017 . نتيجة ذلك يتم تفعيل العامود الثانى فقط والمتصل بالخرج الثانى Q1 للعداد من خلال ترانزستور عاكس . فى كل مرة يتم فيها استدعاء دالة التوقيت يتم تفعيل العامود التالى فقط .

كود:
void CLOCK_4017(void){ PORTA.F0=1; // Clock 4017 : Line HIGH PORTA.F0=0; //then LOW
}
4- الدالة الرئيسية :

كود:
void main (){ //Start …….. …….. } //END


5- إعدادت السجلات والمنافذ :
أ‌- فصل وحدات المقارنة الداخلية CMCON=0x7للميكروكونترولر PIC16F628A , وتمكين الأطراف للعمل كمداخل / مخارج رقمية عادية .
ب‌- جعل جميع أطراف المنفذ PORTA كمخارج بالأمر TRISA=0 وكذلك المنفذ PORTB بالأمر TRISB .


كود:
CMCON=0x7; // Turn comparators off andenable pins for I/O functions TRISA=0; // Make all RA lines output TRISB=0; //Make all RB lines output




6- إنشاء حلقة لانهائية :

كود:
while(1){ //Endless loop SART ….. }// Endless loop END
7- الجزء الأول من البرنامج : تحريك عامود ليدات من جهة اليسار إلى جهة اليمين :

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

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


7- الجزء الأول من البرنامج : تحريك عامود ليدات من جهة اليسار إلى جهة اليمين :
أ‌- لابد من البدء بعمل إعادة للعداد 4017 لنضمن أننا نبدأ بحالة معروفة وهى تفعيل العامود الأول (من جهة اليسار) عن طريق استدعاء الدالة RESET_4017( ) .
ب‌- الآن وبعد أن تم تفعيل العامود الأول عن طريق توصيل جهد سالب إلى كاثودات الليدات , لإضاءة ليدات هذا العامود , كل ما علينا هو إخراج جهد مرتفع على جميع أطراف المنفذ PORTB السبعة والمتصلة بأنودات ليدات الصفوف السبعة عن طريق الأمر PORTB=0x7F = 0b01111111 .
ت‌- الانتظار فى وضع إضاءة ليدات العامود الأول لفترة زمنية مناسبة تسمح بملاحظة الإضاءة بشكل جيد , عن طريق دالة التأخير الزمنى المدمجة بمترجم الميكروسى برو Delay_ms(500) .
ث‌- يلى ذلك إطفاء لعامود الليدات الأول للتجهيز لإضاءة العامود الثانى لمنع ظهور انعكاس أو خيال عن طريق الأمر PORTB=0 .
ج‌- حان وقت تفعيل العامود الأول , عن طريق استدعاء دالة التوقيت CLOCK_4017( ) فيختفى الخرج Q0 ويظهر الخرج Q1 والمتصل بالعامود الثانى خلال ترانزستور عاكس .
ح‌- الآن وبعد أن تم تفعيل العامود الثانى عن طريق توصيل جهد سالب إلى كاثودات الليدات , لإضاءة ليدات هذا العامود , كل ما علينا هو إخراج جهد مرتفع على جميع أطراف المنفذ PORTB السبعة والمتصلة بأنودات ليدات الصفوف السبعة عن طريق الأمر PORTB=0x7F = 0b01111111 .
خ‌- الانتظار فى وضع إضاءة ليدات العامود الثانى لفترة زمنية مناسبة تسمح بملاحظة الإضاءة بشكل جيد , عن طريق دالة التأخير الزمنى المدمجة بمترجم الميكروسى برو Delay_ms(500) .
د‌- يلى ذلك إطفاء لعامود الليدات الأول للتجهيز لإضاءة العامود الثانى لمنع ظهور انعكاس أو خيال عن طريق الأمر PORTB=0 .
ذ‌- نكرر ما سبق للعامود الثالث والرابع والخامس .
وبالتالى يكون برنامج الأعمدة كما يلى :
العامود الأول :

كود:
RESET_4017( ); // Reset the 4017 , Column 1 only ON PORTB=0x7F; // Turn on 7 outputs (rows) for LEDs Delay_ms(500); // Call Delay 500 ms PORTB=0; // Turn off LEDs to prevent mirroring


العامود من الثانى إلى الخامس :

كود:
CLOCK_4017( ); //Clock the 4017 , Column 2 only ON PORTB=0x7F; // Turn on 7 outputs (rows) for LEDs Delay_ms(500); // Call Delay 500 ms PORTB=0; // Turn off LEDs to prevent mirroring CLOCK_4017( ); //Clock the 4017 , Column 3 only ON PORTB=0x7F; // Turn on 7 outputs (rows) for LEDs Delay_ms(500); // Call Delay 500 ms PORTB=0; // Turn off LEDs to prevent mirroring CLOCK_4017( ); //Clock the 4017 , Column 4 only ON PORTB=0x7F; // Turn on 7 outputs (rows) for LEDs Delay_ms(500); // Call Delay 500 ms PORTB=0; // Turn off LEDs to prevent mirroring CLOCK_4017( ); //Clock the 4017 , Column 5 only ON PORTB=0x7F; // Turn on 7 outputs (rows) for LEDs Delay_ms(500); // Call Delay 500 ms PORTB=0; // Turn off LEDs to prevent mirroring

لعلك لاحظت تكرار مجموعات العبارات , لذلك يمكن دمجها معا عن طريق استخدام حلقة for بالشكل التالى :


كود:
// 7- Moving a column >> forward RESET_4017( ); // Reset the 4017 , Column 1 only ON for(count=0;count<5;count++){ PORTB=0x7F; // Turn on 7 outputs (rows) for LEDs Delay_ms(500); // Call Delay 500 ms PORTB=0; // Turn off LEDs to prevent mirroring CLOCK_4017( ); //Clock the 4017 , next Column only ON }//END of for loop

لعلك لاحظت استخدام المتغير count كعداد لحلقة for , لذلك يجب إعلانه قبل استخدام الحلقة .
يصبح شكل البرنامج حتى الآن حتى الآن كما يلى :


كود:
unsigned short count; void RESET_4017(viod){ PORTA.F1=1; //Reset 4017 : Line HIGH, column 1 on PORTA.F1=0; //then LOW, allow 4017 to clock via clock line } void CLOCK_4017(void){ PORTA.F0=1; // Clock 4017 : Line HIGH PORTA.F0=0; //then LOW
} void main (){
CMCON=0x7; // Turn comparators off andenable pins for I/O functions TRISA=0; // Make all RA lines output TRISB=0; //Make all RB lines output while(1){ //Endless loop // 7- Moving a column >> forward RESET_4017( ); // Reset the 4017 , Column 1 only ON for(count=0;count<5;count++){ PORTB=0x7F; // Turn on 7 outputs (rows) for LEDs Delay_ms(500); // Call Delay 500 ms PORTB=0; // Turn off LEDs to prevent mirroring CLOCK_4017( ); //Clock the 4017 , next Column only ON }//END of for loop }//END of while(1) loop }//END of main
إنتهى برنامج الحركة من اليسار إلى اليمين . وحان وقت الحركة العكسية من اليمين إلى اليسار .


8- تحريك عامود ليدات من جهة اليمين إلى جهة اليسار .


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


8- تحريك عامود ليدات من جهة اليمين إلى جهة اليسار .
تحريك العامود عند العودة ليس سهلا مثل الحركة للأمام لأن العداد 4017 يتم توقيته فقط من اليسار إلى اليمين .
لتحريك العامود جهة اليسار , يجب إعادة reset العداد 4017 ( لذلك فأنت تعرف أن الخرج الأول يكون مرتفعا HIGH ) , بعد ذلك يتم توقيته ثلاثة مرات بحيث يكون الخرج "الرابع" مرتفعا HIGH . عندئذ يمكن توصيل الليدات .
يتم تكرار ذلك عن طريق توقيت العداد 4017 لمرتين لتفعيل العامود الثالث ولمرة واحدة لتفعيل لعامود الثانى . وفى النهاية تتم الإعادة لتفعيل العامود الأول .

البرمجة :
تبدأ العودة من العامود الرابع , ونبدأ باستدعاء دالة الأعادة ثم ثلاثة استدعاءات لدالة التوقيت فيكون خرج العداد هو الخرج الرابع فقط Q3 والذى يقوم بتفعيل العامود الرابع فقط من خلال ترانزستور عاكس. كود هذا الجزء يكون بالشكل التالى :


كود:
//Backward direction //back from column 4 RESET_4017( );// Reset the 4017 CLOCK_4017( ); CLOCK_4017( ); CLOCK_4017( ); //3 Clock the 4017 PORTB=0x7F; // Turn on 7 outputs for LEDs Delay_ms(500); // Call Delay 500 ms PORTB=0; // Turn off LEDs to prevent mirroring



لفصل العامود الرابع وتفعيل العامود الثالث يجب البدء من جديد باستدعاء دالة الإعادة ثم استدعاء دالة التوقيت مرتين فيكون خرج العداد هو الخرج الثالث Q2 والذى يقوم بتفعيل العامود الثالث من خلال ترانزستور عاكس . كود هذا الجزء يكون بالشكل التالى :


كود:
//column 3 RESET_4017( );// Reset the 4017 CLOCK_4017( ); CLOCK_4017( ); //2 Clock the 4017 PORTB=0x7F; // Turn on 7 outputs for LEDs Delay_ms(500); // Call Delay 500 ms PORTB=0; // Turn off LEDs to prevent mirroring


لفصل العامود الثالث وتفعيل العامود الثانى يجب البدء من جديد باستدعاء دالة الإعادة ثم استدعاء دالة التوقيت مرة واحدة فيكون خرج العداد هو الخرج الثانى Q1 والذى يقوم بتفعيل العامود الثانى من خلال ترانزستور عاكس . كود هذا الجزء يكون بالشكل التالى :

كود:
// coulun 2 RESET_4017( );// Reset the 4017 CLOCK_4017( ); //1 Clock the 4017 PORTB=0x7F; // Turn on 7 outputs for LEDs Delay_ms(500); // Call Delay 500 ms PORTB=0; // Turn off LEDs to prevent mirroring


لفصل العامود الثانى وتفعيل العامود الأول يكتفى باستدعاء دالة الإعادة فيكون خرج العداد هو الخرج الأول Q0 والذى يقوم بتفعيل العامود الأول من خلال ترانزستور عاكس . كود هذا الجزء يكون بالشكل التالى :

كود:
// coulun 1 RESET_4017( );// Reset the 4017 PORTB=0x7F; // Turn on 7 outputs for LEDs Delay_ms(500); // Call Delay 500 ms PORTB=0; // Turn off LEDs to prevent mirroring


يمكن استخدام البرنامج كما هو أعلاه , وهنا سوف نستعرض استخدام حلقة for لتكرار أربعة حالات مختلفة باستخدام عبارة switch…case كما يلى :

كود:
//8-Backward direction //back from column 4 for(count=0;count<4;count++){ RESET_4017( );// Reset the 4017 switch(count){ case 0 :// count=0 CLOCK_4017( ); CLOCK_4017( ); CLOCK_4017( ); break; case 1: //count=1 CLOCK_4017( ); CLOCK_4017( ); break; case 2 : //count=2 CLOCK_4017( ); break; default : //count=3 RESET_4017( ); } //switch end PORTB=0x7F; // Turn on 7 outputs for LEDs Delay_ms(500); // Call Delay 500 ms PORTB=0; // Turn off LEDs to prevent mirroring }


إنتهى تنفيذ الحركة للأمام وللخلف وحان وقت الحركة من أسفل لأعلى .
9- حركة صف ليدات من أسفل إلى أعلى :


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



9- حركة صف ليدات من أسفل إلى أعلى :
هذه الحركة تختلف عن الحركات السابقة حيث يتم تحريك صف (مكون من خمس أعمدة) دفعة واحدة , لذك يمكن تقسيم تشكيل هذه الحركة كما يلى :
  • فى البداية يتم تشكيل الصف عن طريق : تفعيل عامود تلو الآخر (المسح) , مع إضاءة ليدات كل عامود فى حينه ثم فصله بعد تأخير زمنى بسيط , وتكرار هذه العملية عدد من المرات وبسرعة كافية حتى يمكن رؤية الصف مستقرا .
  • بعد ذلك يتم الانتقال للصف الذى يليه بنفس الطريقة .
ملاحظة :
هذه الحركة تعتبر المدخل لحركة الرسائل النصية والأشكال على شاشة مصفوفة الليد (ليد ماتريكس) .

البرمجة :
تشكيل الصف الأول من أسفل:
  • أول ليد سفلى أيسر (تفعيل العامود الأول ,الأيسر RESET_4017( ) – وتوصيل ليد الصف الأول ,السفلىPORTB=0x01 – تأخير زمنى بسيط Delay_ms(1)فصل الليد) :

كود:
RESET_4017( );// Reset = Column 1 PORTB=0x01;// Row 1, 0b00000001 Delay_ms(1); // Call Delay 1 ms PORTB=0;
وبنفس الطريقة :
  • ثانى ليد سفلى أيسر (عامود ثانى أيسر – صف أول سفلى) :
كود:
CLOCK_4017( );// 1st Clock = Column 2 PORTB=0x01;// Row 1, 0b00000001 Delay_ms(1); // Call Delay 1 ms PORTB=0;

  • ثالث ليد سفلى أيسر (عامود ثالث أيسر – صف أول سفلى) :
كود:
CLOCK_4017( );//2nd Clock = Column 3 PORTB=0x01;// Row 1, 0b00000001 Delay_ms(1); // Call Delay 1 ms PORTB=0;

  • رابع ليد سفلى أيسر (عامود رابع أيسر – صف أول سفلى) :
كود:
CLOCK_4017( );//3rd Clock = Column 4 PORTB=0x01;// Row 1, 0b00000001 Delay_ms(1); // Call Delay 1 ms PORTB=0;

  • خامس ليد سفلى أيسر (عامود خامس أيسر – صف أول سفلى) :
كود:
CLOCK_4017( );//4th Clock = Column 5 PORTB=0x01;// Row 1, 0b00000001 Delay_ms(1); // Call Delay 1 ms PORTB=0;


ونظرا لوجود أربعة أجزاء متكررة , لذلك يمكن دمجها فى حلقة تكرار for ووضع تشكيل الصف الأول السفلى بالشكل التالى :


كود:
RESET_4017( );// Reset = Column 1 PORTB=0x01;// Row 1, 0b00000001 Delay_ms(1); // Call Delay 1 ms PORTB=0; for(count=0;count<4;count++){ CLOCK_4017( );// Clock = New Column PORTB=0x01;// Row 1, 0b00000001 Delay_ms(1); // Call Delay 1 ms PORTB=0; }

كما يمكن التكرار لخمس مرات , مع إعادة ترتيب تسلسل السطور , كما يلى:


كود:
RESET_4017( );// Reset = Column 1 for(count=0;count<5;count++){ PORTB=0x01;// Row 1, 0b00000001 Delay_ms(1); // Call Delay 1 ms PORTB=0; CLOCK_4017( );// Clock = New Column }


حتى يستقر تشكيل هذا الصف لمدة زمنية معينة , تسمح بملاحظته, يتم تكرار هذا التشكيل عدد من المرات المناسبة كما يلى :


كود:
for(repeat=0;repeat<100;repeat++){ RESET_4017( );// Reset = Column 1 for(count=0;count<5;count++){ PORTB=0x01;// Row 1, 0b00000001 Delay_ms(1); // Call Delay 1 ms PORTB=0; CLOCK_4017( );// Clock = New Column }


لعلك لاحظت استخدام متغير آخر هو repeat , لذلك يجب إعلانه قبل استخدامه كما سبق فى حالة المتغير count .







هذه المجموعة من التعليمات تتكرر سبع مرات (سبع صفوف) لتحريك الصف لأعلى مع تغيير بيانات الصف من الصف الأول PORTB=0x01 إلى الصف الثانى PORTB=0x02 ثم الصف الثالث
PORTB=0x04 = 0b00000100 وهكذا حتى الصف السابع PORTB=0x40 = 0b01000000 .
يمكن دمج الحركة لأعلى كتكرار بحلقة for مع تمرير القيم السابقة إلى الحلقة بعد إعلانها كمصفوفة ( أعداد ثابتة) كما يلى :


كود:
unsigned short ROW_upward[7]={0x01,0x02,0x04,0x08,0x10,0x20,0x40}; // 9-upward direction PORTB=0x01; for(repeat_row =0; repeat_row <7; repeat_row ++){ for(repeat=0;repeat<100;repeat++){ RESET_4017( );// Reset = Column 1 for(count=0;count<5;count++){ PORTB= ROW_upward [repeat_row] ;// Rows Delay_ms(1); // Call Delay 1 ms PORTB=0; CLOCK_4017( );// Clock = New Column }//end of count loop }//end of repeat loop }//end of repeat_row loop

ملاحظة :
يجب إعلان المصفوفة والمتغير الجديد لتكرار الصف repeat_row قبل استخدامها .

10- حركة صف ليدات من أعلى إلى أسفل


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



10- حركة صف ليدات من أعلى إلى أسفل
بالمثل يكون الكود الخاص بحركة صف لأسفل بدءا من بعد إنتهاء الحركة لأعلى إى من الصف السادس إلى الصف الأول كما يلى:





كود:
unsigned short ROW_down[6]={ 0x20, 0x10, 0x08, 0x04, 0x02,0x01};//From row 6 to row 2 // 10-downward direction PORTB=0x01; for(repeat_row =0; repeat_row <6; repeat_row ++){ for(repeat=0;repeat<100;repeat++){ RESET_4017( );// Reset = Column 1 for(count=0;count<5;count++){ PORTB= ROW_down [repeat_row] ;// Rows Delay_ms(1); // Call Delay 1 ms PORTB=0; CLOCK_4017( );// Clock = New Column }//end of count loop }//end of repeat loop }//end of repeat_row




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


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


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


كود:
//1- Comments //PIC16F628A , Internal clock , 4MHz // Column of LEDs moves across/back then //Row of LEDs up and down //2- Declarations unsigned short count,repeat,repeat_row; unsigned short ROW_upward[7]={0x01,0x02,0x04,0x08,0x10,0x20,0x40};//Rows 1>7 unsigned short ROW_down[6]={ 0x20, 0x10, 0x08, 0x04, 0x02,0x01}; //Rows 6>1 //3- Functions void RESET_4017(viod){ //Reset counter 4017 PORTA.F1=1; //Reset 4017 : Line HIGH, column 1 on PORTA.F1=0; //then LOW, allow 4017 to clock via clock line } void CLOCK_4017(void){ //Clocl counter 4017 PORTA.F0=1; // Clock 4017 : Line HIGH PORTA.F0=0; //then LOW } //4-Main function void main (){ //5-Registers and PORTS Confuguratins CMCON=0x7; // Turn comparators off and enable pins for I/O functions TRISA=0; // Make all RA lines output TRISB=0; //Make all RB lines output //6- Endless loop while(1){ //Endless loop START // 7- Moving a column >> forward RESET_4017( ); // Reset the 4017 , Column 1 only ON for(count=0;count<5;count++){ PORTB=0x7F; // Turn on 7 outputs (rows) for LEDs Delay_ms(500); // Call Delay 500 ms PORTB=0; // Turn off LEDs to prevent mirroring CLOCK_4017( ); //Clock the 4017 , next Column only ON }//END of for loop //8-Backward direction //back from column 4 for(count=0;count<4;count++){ RESET_4017( );// Reset the 4017 switch(count){ case 0 :// count=0 CLOCK_4017( ); CLOCK_4017( ); CLOCK_4017( ); break; case 1: //count=1 CLOCK_4017( ); CLOCK_4017( ); break; case 2 : //count=2 CLOCK_4017( ); break; //default : //count=3 case 3 : RESET_4017( ); } //switch end PORTB=0x7F; // Turn on 7 outputs for LEDs Delay_ms(500); // Call Delay 500 ms PORTB=0; // Turn off LEDs to prevent mirroring } // 9-upward direction PORTB=0x01; for(repeat_row =0; repeat_row <7; repeat_row ++){ for(repeat=0;repeat<100;repeat++){ RESET_4017( );// Reset = Column 1 for(count=0;count<5;count++){ PORTB= ROW_upward [repeat_row] ;// Rows Delay_ms(1); // Call Delay 1 ms PORTB=0; CLOCK_4017( );// Clock = New Column }//end of count loop }//end of repeat loop }//end of repeat_row loop // 10-downward direction PORTB=0x01; for(repeat_row =0; repeat_row <6; repeat_row ++){ for(repeat=0;repeat<100;repeat++){ RESET_4017( );// Reset = Column 1 for(count=0;count<5;count++){ PORTB= ROW_down [repeat_row] ;// Rows Delay_ms(1); // Call Delay 1 ms PORTB=0; CLOCK_4017( );// Clock = New Column }//end of count loop }//end of repeat loop }//end of repeat_row loop }//END of while(1) loop }//END of main




عبدالله زهير
:: مهندس جيد ::
تاريخ التسجيل: Sep 2012
المشاركات: 272
نشاط [ عبدالله زهير ]
قوة السمعة:0
قديم 09-02-2013, 09:38 PM المشاركة 8   
افتراضي


يشرفني أن أكون أول من يرد بارك الله فيك

إضافة رد

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

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

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


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

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