كود:
// تعريف قيم الصفوف للخمسة أعمدة التى تشكل كل حرف باستخدام مصفوفات الثوابت للتخزين فى ذاكرة البرنامج
const unsigned short Alphabets[130]={
0x7e, 0x09, 0x09, 0x09, 0x7E, // A
0x7f, 0x49, 0x49, 0x49, 0x36, // B
0x3e, 0x41, 0x41, 0x41, 0x22,
0x7f, 0x41, 0x41,0x22, 0x1c,
0x7f, 0x49, 0x49, 0x49, 0x63,
0x7f, 0x09, 0x09, 0x09, 0x01,
0x3e, 0x41, 0x41, 0x49, 0x7a,
0x7f, 0x08, 0x08, 0x08, 0x7f,
0x00, 0x41, 0x7f, 0x41, 0x00, // I
0x20, 0x40, 0x41, 0x3f, 0x01,
0x7f, 0x08, 0x14, 0x22, 0x41,
0x7f, 0x40, 0x40, 0x40, 0x60,
0x7f, 0x02, 0x04, 0x02, 0x7f,
0x7f, 0x04, 0x08, 0x10, 0x7f,
0x3e, 0x41, 0x41, 0x41, 0x3e,
0x7f, 0x09, 0x09, 0x09, 0x06,
0x3e, 0x41, 0x51, 0x21, 0x5e,
0x7f, 0x09, 0x19, 0x29, 0x46,
0x46, 0x49, 0x49, 0x49, 0x31, // S
0x01, 0x01, 0x7f, 0x01, 0x01,
0x3f, 0x40, 0x40, 0x40, 0x3f,
0x1f, 0x20, 0x40, 0x20, 0x1f,
0x3f, 0x40, 0x30, 0x40, 0x3f,
0x63, 0x14, 0x08, 0x14, 0x63,
0x07, 0x08, 0x70, 0x08, 0x07,
0x61, 0x51, 0x49, 0x45, 0x43 // Z
};
// بالمثل للحروف الخاصة
const unsigned short characters[30]={
0x24, 0x2A, 0x7f, 0x2A, 0x12, // $
0x08, 0x14, 0x22, 0x41, 0x00, // <
0x41, 0x22, 0x14, 0x08, 0x00, // >
0x14, 0x14, 0x14, 0x14, 0x14, // =
0x36, 0x49, 0x55, 0x22, 0x50, // &
0x44, 0x3c, 0x04, 0x7c, 0x44, // PI
};
// إعلان المتغيرات وسوف نحتاج إلى متغير آخر كعداد لحلقة جديدة تتكرر بعدد الحروف
unsigned short count, column, num, repeat;
void main() {
TRISB = 0b00000000; // Set PORTB direction to be output
TRISD = 0x00; // Set PORTD direction to be output
PORTB = 0x00; // Turn OFF LEDs on PORTB
do{
// عرض 26 حرف أبجدى
for (num=0; num<26; num++) {// الحلقة الخارجية تتكرر كل حرف أى من الصفر إلى 25 أى العدد يكون 26حرف
for (repeat=0; repeat<100; repeat++){ // الحلقة التكرارية الوسطى لتكرار بيانات الحرف 100 مرة بغرض استقراره
column =1; // use ULN 2003 inverse it- for proteus simulation only I use inverter 74HC04 or SW
// الحلقة الداخلية لعرض الحرف وفيها أنشأنا علاقة لتكرار جميع الحروف بمتغيريين هما متغير عداد الحلقة ومتغير عدد الحروف
for(count = num*5;count < (num*5+5);count++){
PORTD = column ; // حلقة الحرف العادية
PORTB = Alphabets[count];
Delay_ms(1);
column = column<<1;
}
}
}
// عرض الحروف الخاصة بنفس الطريقة
for (num=0; num<6; num++) {
for (repeat=0; repeat<100; repeat++){
column = 1;
for(count = num*5;count < (num*5+5);count++){
PORTD = column;
PORTB = characters[count];
Delay_ms(1);
column = column<<1;
}
}
}
} while(1);
}