 |
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
|
|
نشاط [ F.Abdelaziz ]
قوة السمعة:
|
|
27-08-2015, 01:54 AM
المشاركة 10
|
|
فيما يلى مثال لشاشة مكونة من 8 وحدات ليد ماتريكس :
كود:
//======================
#define CLK PORTA.B0
#define DS PORTA.B1
//=====================
#define NC 64 //// Numbers of display columns
//======================
unsigned char FONT[80]=
{
0xFF, 0xFF, 0x09, 0x09, 0x0F, 0x06, 0x00, 0x00,//P
0x00, 0x00, 0x81, 0xFF, 0xFF, 0x81, 0x00, 0x00,//I
0x1C, 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, 0x00,//C
0xFF, 0x02, 0x04, 0x08, 0x04, 0x02, 0xFF, 0x00,//M
0x00, 0x00, 0x81, 0xFF, 0xFF, 0x81, 0x00, 0x00,//I
0x1C, 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, 0x00,//C
0xFF, 0x19, 0x29, 0x49, 0x89, 0x86, 0x00, 0x00,//R
0x1C, 0x22, 0x41, 0x41, 0x41, 0x22, 0x1C, 0x00, //O
};
//==================================
unsigned char buffer[NC];
//========================
void clear_buffer()
{
unsigned char i;
for(i=0;i<NC;i++) buffer[i]=0; //clear NC bytes index from 0 to NC-1
}
//=================================
void shift_buffer()//moves the data one place to the left to give the "movement" effect
{
unsigned char i;
for(i=0;i<NC;i++) // index from 0 to NC-1
{
buffer[i]=buffer[i+1];
}
}
//==========================
void frame_scan()
{
unsigned char i ,n, speed=2;
//=======================
for(n=0;n<= speed;n++) //Repeat 25 times to obtain steady display , speed of display
{
DS=1; //put 1 on data pin
for(i=0;i<NC;i++)//from byte 0 to byte NC-1 , index from 0 to NC-1
{
CLK=1; CLK=0; DS=0;// clock pulse and clear data
PORTB=~ buffer[i]; // inverse and send buffer data byte to PORTB
delay_ms(1);
}
PORTB=0xFF; //ones to OFF all led common cathodes 8 rows
}
}
//=====================
void buffer_update()
{
unsigned char index;
//update display frame for each FONT[index] byte ,so we have 8 frames
for(index=0;index<80;index++)
{
shift_buffer();
buffer[NC-1]= FONT[index];//put first character in last buffer location , index NC-1
frame_scan();
}
}//end of display frame buffer update
//=========================
void main()
{
CMCON=7;
TRISA=0;
TRISB=0;
while(1)
{
clear_buffer();
buffer_update();
}//while end
}//main end

لعلك لاحظت بعض العيوب ، منها على سبيل المثال التحكم فى السرعة غير منتظم ، نتيجة لاستخدام تقنية مسح الأعمدة ، فمع زيادة عدد الأعمدة يزداد معدل زمن المسح وتقل سرعة العرض ، كذلك التباعد بين الحروف . وسوف يتم علاج السرعة باستخدام المقاطعة للحصول على معدل مسح ثابت ، أو استخدام مسح الصفوف أو كلاهما معا ، أما مشكلة علاج تباعد الحروف فسوف يتم علاجها باستخدام مصفوفة خريط نقط الحروف نوع 5X7 أو 6x8 أو غيرها .
|