ثانيا : الحركة جهة اليمين :
المعطيات :
بيانات الإطار الساكن :
كود:
{0x1C,0x14,0x1E,0x02,0x7E,0x02,0x7E,0x7E}
كتابة مصفوفة البيانات ثنائية الأبعاد :
الأطار الأول : عرض بدء ظهور أول عامود للكلمة من جهة اليمين :
كود:
{0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
الإطار الثانى : ينتج من إزاحة الإطار الأول بخطوة واحدة جهة اليمين (على سبيل المثال) ووضع البايت الجديد :
كود:
{0x7E, 0x7E,0x00,0x00,0x00,0x00,0x00,0x00}
وفى النهاية نحصل على مصفوفة البيانات :
كود:
//{0x1C,0x14,0x1E,0x02,0x7E,0x02,0x7E,0x7E} > Still
{0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//frame 1
{0x7E, 0x7E,0x00,0x00,0x00,0x00,0x00,0x00},//frame 2
{0x02,0x7E, 0x7E,0x00,0x00,0x00,0x00,0x00},//frame 3
{0x7E,0x02,0x7E, 0x7E,0x00,0x00,0x00,0x00},//frame 4
{0x02,0x7E,0x02,0x7E, 0x7E,0x00,0x00,0x00},//frame 5
{0x1E,0x02,0x7E,0x02,0x7E, 0x7E,0x00,0x00},//frame 6
{0x14,0x1E,0x02,0x7E,0x02,0x7E, 0x7E,0x00},//frame 7
{0x1C,0x14,0x1E,0x02,0x7E,0x02,0x7E, 0x7E},//frame 8
{0x00,0x1C,0x14,0x1E,0x02,0x7E,0x02,0x7E},//frame 9
{0x00,0x00,0x1C,0x14,0x1E,0x02,0x7E,0x02},//frame 10
{0x00,0x00,0x00,0x1C,0x14,0x1E,0x02,0x7E},//frame 11
{0x00,0x00,0x00,0x00,0x1C,0x14,0x1E,0x02},//frame 12
{0x00,0x00,0x00,0x00,0x00,0x1C,0x14,0x1E},//frame 13
{0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x14},//frame 14
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C},//frame 15
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}//frame 16
بالرحوع إلى برنامج التحريك مع تغيير مصفوفة البيانات وكل ما يلزم نحصل على البرنامج :
كود:
//Program for PIC16F628A.
// Two-dimensional array declaration
const unsigned short int Array_Data [16][8]={ //16 rows X 8 Column
//{0x1C,0x14,0x1E,0x02,0x7E,0x02,0x7E,0x7E} > Still
{0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//frame 1
{0x7E, 0x7E,0x00,0x00,0x00,0x00,0x00,0x00},//frame 2
{0x02,0x7E, 0x7E,0x00,0x00,0x00,0x00,0x00},//frame 3
{0x7E,0x02,0x7E, 0x7E,0x00,0x00,0x00,0x00},//frame 4
{0x02,0x7E,0x02,0x7E, 0x7E,0x00,0x00,0x00},//frame 5
{0x1E,0x02,0x7E,0x02,0x7E, 0x7E,0x00,0x00},//frame 6
{0x14,0x1E,0x02,0x7E,0x02,0x7E, 0x7E,0x00},//frame 7
{0x1C,0x14,0x1E,0x02,0x7E,0x02,0x7E, 0x7E},//frame 8
{0x00,0x1C,0x14,0x1E,0x02,0x7E,0x02,0x7E},//frame 9
{0x00,0x00,0x1C,0x14,0x1E,0x02,0x7E,0x02},//frame 10
{0x00,0x00,0x00,0x1C,0x14,0x1E,0x02,0x7E},//frame 11
{0x00,0x00,0x00,0x00,0x1C,0x14,0x1E,0x02},//frame 12
{0x00,0x00,0x00,0x00,0x00,0x1C,0x14,0x1E},//frame 13
{0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x14},//frame 14
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C},//frame 15
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}//frame 16
};
//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 16 frames
for(repeat=0;repeat<50;repeat++){ //repeat frame display=time=speed
Reset();
for(Display_column =0; Display_column <8; 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

|