|
السلام عليكم ورحمة الله وبركاته.
أنا حتى الآن لم أتقن التعامل مع الشاشات... لهذا لا يمكنني الآن أن التفاعل معكم إلا عن بعد وفي صمت.
|
السلام عليكم ورحمه الله وبركاته..
شكرااا لك أخى الكريم ...
بالمنسبه التعامل مع الشاشات ستجدة سهل جداااا ان شاء الله ..
لأن ميكروسى برو يوفر لك جميع الدوال والتعليمات التى تسهل لك التعامل مع الشاشات ...
اللهم انفعنا بما علمتنا وعلمنا ما ينفعنا وزدنا علما
أخى الكريم محمد عيسى ..
انا هرفعلك كتاب يشرح لك وبالتفصيل طريقه التعامل مع الشاشات ..
اليك الروابط أخى ..
https://drive.google.com/file/d/0Bxg...ew?usp=sharing
ودة برنامج بسيط لتوضيح فكرة التعامل مع الشاشات ..
كود:
// Lcd pinout settings
sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB1_bit;
sbit LCD_D7 at RB5_bit;
sbit LCD_D6 at RB4_bit;
sbit LCD_D5 at RB3_bit;
sbit LCD_D4 at RB2_bit;
// Pin direction
sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB1_bit;
sbit LCD_D7_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB2_bit;
int x =0 ;
char txt1[] = "mikroElektronika";
char txt2[] = "LCD TEST";
void main() {
Lcd_Init();
adcon1=0x06;
trisb=0; portb=0;
trisd=3; portd=0;
Lcd_Cmd(_LCD_CURSOR_OFF); // cursor off
Lcd_Cmd(_LCD_CLEAR);
lcd_out(1,4," Welcome ");
lcd_out(2,1,"ABDALLA HYGAZY");
delay_ms(2000);
Lcd_Cmd(_LCD_CLEAR);
lcd_out(1,1,txt1);
lcd_out(2,5,txt2);
while(1){
if(portd.f0==0){delay_ms(250);X++;};
//***************************************//
if( X==1 )
{ Lcd_Cmd(_LCD_CLEAR);
lcd_out(1,1,"0123456789");
lcd_out(2,1,"10 11 12 13 14 ");
X=2;
};
if( X==3 )
{ Lcd_Cmd(_LCD_CLEAR);
lcd_out(1,1,"ABCDEFGHIJKLMNOP");
lcd_out(2,1,"QRSTUVWXYZ");
X=4;
};
if( X==5 )
{ Lcd_Cmd(_LCD_CLEAR);
lcd_out(1,1,"*!?/><:+-*&%$^{}");
X=6;
};
if( X==7 )
{ Lcd_Cmd(_LCD_CLEAR);
lcd_out(1,3,"ABDALLA");
X=8;
};
if(x==9){x=0;};
}
}
شرح البرنامج ...
نبدأ بتحديد اطراف الشاشة الموصلع على الميكرو من خلال التعريف التالى
كود:
// Lcd pinout settings
sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB1_bit;
sbit LCD_D7 at RB5_bit;
sbit LCD_D6 at RB4_bit;
sbit LCD_D5 at RB3_bit;
sbit LCD_D4 at RB2_bit;
// Pin direction
sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB1_bit;
sbit LCD_D7_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB2_bit;
هذا الأمر مهم جدااا .. لأنه يحجز اطراف الميكرو الموصله مع الشاشة وتكون هذة الأطراف مخصصه للشاشه فقط وفى الغالب يستخدم المبرموجون البوت B للربط مع الشاشه هذا لأن البورت B يتميز بأن اطرافة متجاورة ومنسقه جنب بعض ويسهل عمليه الهارد وير ..
.......
وهذة الداله تخبر الميكرو أن يوجد شاشه موصله .. وتعمل تهيئة للشاشه ..
وهذة الدالة توضع مباشرة بعد الدالة الرائسية للبرنامج
وطبعاااا هذة التعليمات معروفه ومفهومه .. وهى لتهيئه بورتات الميكرو ام دخل او خرج ..
كود:
trisb=0; portb=0;
trisd=3; portd=0;
وهذة التعليمه لإقاف أخر خانة للكتابة فى الشاشة ويمكنك مسحها من الكود ولاحظ الفرق ..
كود:
Lcd_Cmd(_LCD_CURSOR_OFF); // cursor off
وايضااا هذة التعليمه مهمه جدااا فى التعامل مع الشاشات ..
فهى تمسح البينات الموجودة على الشاشة وتستخدم عندما تكون الشاشة مكتوب عليها بينات وتريد ادخال او كتابة بينات اخرى على الشاشة ف تستخد هذة التعليه لمسح الكتابة الموجوده فى الشاشة ..
وهذا الأمر يطبع الكلام على الشاشة مباشر ..
كود:
lcd_out(1,4," Welcome ");
ولاحظ وجود رقمان فى هذا الأمر الرقم الأول هو رقم الصف فى الشاشة والرقم الثانى هو رقم العمود فى الشاشة ..
وللتوضيح اكثر نحن هنا نستخدم شاشة 2 * 16 مربع او بيكسل ..
وهذة الصور توضح اكثر اطراف الشاشة
وهذة الصورة توضح عدد المربعات الموجودة فى هذة الشاشة
لو تلاحظ يوجد صفان كل صف مكون من 16 مربع وبيتم أختيار المربع الذى تبدأ الكتابه عليه من خلال هذة التعليمه ..
كود:
lcd_out(1,4," Welcome ");
لو تلاحظ أن كلمة "Welcome" مكونة من 7 حروف وانت تريد ان تظهر هذة الكلمه فى منتصف الشاشة فى الصف الأول هتكتب التعليمه دى ..
كود:
lcd_out(1,4," Welcome ");
رقم واحد يخبر الشاشه انه تم اختيار الصف الأول للكتابه علية ورقم اربعة يخبر الشاشة انه سوف يتجاهل اربع اعمدة من الصف الأول وبعد ذالك يكتب كلمة "Welcome" مباشر بعد العمود الرابع ..
ويوجد طريقة اخرى للكتابه على الشاشة مثلا لو عندك عبارة او رسالة هتستخدمها فى اكثر من موقع فى البرنامج يبقى افضل طريقه هى الإعلان عن متغير واسناد العبارة اوالرساله لهذا المتغير .. ولكن يجب المتغير يكون من نوع
وبيتم الأعلان عنة بهذة الطريقة
كود:
char txt1[] = "mikroElektronika";
void main() {
Lcd_Init();
Lcd_Cmd(_LCD_CURSOR_OFF); // cursor off
Lcd_Cmd(_LCD_CLEAR);
lcd_out(1,1,txt1);
ولاحظ ان تم اسناد قيمة المتغير للعرض على الشاشة من خلال هذا الأمر
ودة رابط للبرنامج وملف المحاكاة للتجربة والتعديل على البرنامج لتتعرف على اهمية التعليمات التى تم شرحها
https://drive.google.com/file/d/0Bxg...ew?usp=sharing
ان شاء الله هرفعلك دروس أخرى وتحت امرك أخى الكريم .. انت لك الفضل الكبير على .. بارك الله فيك ...
وبالتوفيك