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- حركة صف ليدات من أعلى إلى أسفل