 |
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 664
|
|
نشاط [ funky112233 ]
قوة السمعة:
|
|
09-08-2012, 09:02 AM
المشاركة 9
|
|
بسم الله الرحمن الرحيم
هنبدء النهاردة ان شاء الله مع الكود رقم 2
وان شاء الله هنوضح فية ازاى نستخدم الاوامر الى شرحتها فى بداية الموضوع
ونظهر الى احنا عايزينة على الشاشة من خلال ال 6 اوامر دول ان شاء الله
__________________________________________________ _________
اولا
فديو بسيط لتوضيح عمل الكود رقم 2
وبعد ما اتفرجنا على الفديو
نشرح اية الى تم عرضة على الفديو وهو كالاتى
1 - اظهار كلمة (Besm Allah Elrhman Elrahem)
ولكن تم اظهارها حرف حرف ورا بعض .
فائدة هذه الخطوة هى اظهار امكانية عمل حركات مختلفة فى اظهار الكلمات على الشاشة من خلال استخدام الاوامر
وايضا اظهار امكانية اظهار مصفوفة كاملة على الشاشة حرف حرف ..
2 - مسح الشاشة ثم اظهار كلمة ( AllaH Akbar ) فى الصف الاول ثم انتظار ثم
اظهار كلمة ( AllaH A3zam ) ثم انتظار ثم مسح الشاشة وتكرار نفس الخطوة .
فائدة هذه الخطوة هى اظهار امكانية عمل حركات مختلفة فى اظهار الكلمات على الشاشة من خلال استخدام الاوامر
وايضا امكانية عمل ذلك من خلال اظهار كلمات كاملة مرة واحدة ..
3 - مسح الشاشة ثم اظهار قيمة متغير كل مرة يزيد بمقدار 1 ويتم جمعه مع متغير اخر .
فائدة هذه الخطوة هى اظهار امكانية اظهار الحسابات على الشاشة
وتعلم كيفية تحويل الارقام العادية الى اسكى كود من خلال امر واحد فقط ..
دة رابط الكود رقم 2 والمحاكاة وكل شىء
http://www.4shared.com/rar/lvKBC0zU/...aracter_2.html
وفى ارقام بجانب كل امر من اوامر الشاشة يدل على ترتيبة فى الشرح
علشان لو مش فاهمينة نقدر نرجع للشرح الاساسى ونشوف فائدتة اية ##
__________________________________________________ _________
نيجى بقى لشرح الكود وازاى عرضت الكلمات بالشكل دة
.............................
اولا دة الكود
كود:
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D7_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB0_bit;
///////////////////////////////////////////////////////////////////
char text1[] ="( Besm AllaH El Rhman Elrahem )";
char text2[] ="( AllaH Akbar )";
char text3[] ="( AllaH A3zam )";
char text4;
char y,x,d=0,e=0;
char txt[4];
void main() {
Lcd_Init(); // 1
Lcd_Cmd(_LCD_CLEAR); // 6
Lcd_Cmd(_LCD_CURSOR_OFF); // 6
while(1){
x=1;
for(y=0;y<15;y++){
Lcd_Chr(1,x,text1[y]); // 4
delay_ms(200); x++;
}
x=1;
for(y=16;y<32;y++){
Lcd_Chr(2,x,text1[y]); // 4
delay_ms(200); x++;
}
delay_ms(2000);
Lcd_Cmd(_LCD_CLEAR); //6
delay_ms(500);
for(y=0;y<5;y++){
Lcd_Out(1,1,text2); //2
delay_ms(1000);
Lcd_Out(2,1,text3); //2
delay_ms(500);
Lcd_Cmd(_LCD_CLEAR); //6
delay_ms(500);
}
delay_ms(250);
d++;
text4=d+e;
ByteToStr(text4, txt);
Lcd_Out_Cp(txt);
delay_ms(3000);
Lcd_Cmd(_LCD_CLEAR);
}
}
اولا
قمت بتعريف الشاشة وتعريف الاطراف واين سوف تربط
.................................................. .................................................. .
ثم
قمت بتعريف مصفوفات بداخل كل مصفوفة كلمات واسميت المصفوفات باسم text1,2,3 ..
كود:
char text1[] ="( Besm AllaH El Rhman Elrahem )";
char text2[] ="( AllaH Akbar )";
char text3[] ="( AllaH A3zam )";
.................................................. .................................................. ..
ثم متغير باسم text4 لحفظ ناتج الجمع علية ..
ثم متغيرات اخرى تستخدم داخل الكود ..
.................................................. .................................................. ..
ثم قمت بامر التعريفات ثم امر مسح الشاشة وامر وقف المؤشر عن العمل
كود:
Lcd_Init(); // 1
Lcd_Cmd(_LCD_CLEAR); // 6
Lcd_Cmd(_LCD_CURSOR_OFF); // 6
ثم عمل حلقة تكرارية الى الابد
.................................................. .................................................. ....
ثم قمت بعمل الكود الخاص باظهار اول جزء من كلمة ( Besm AllaH El Rhman Elrahem )
وهو كالاتى
كود:
x=1;
for(y=0;y<15;y++){
Lcd_Chr(1,x,text1[y]); // 4
delay_ms(200); x++;
}
اولا جعلت قيمة المتغير x=1 وسنعلم لماذا فيما بعد
ثم جملة تكرارية بقيمة 15 مرة ((اى ان تكرار الاوامر بداخل الجملة سيتم 15 مرة))
ثم قمت بكتابة الامر Lcd_Chr
وكما نعلم من الشرح ان فائدتة اظهار الحروف حرف حرف او العدد رقم رقم
وهذا ما تم فعلا فى بداية التجربة
وكما نعلم ايضا ان اول رقم داخل هذا الامر يدل على رقم الصف وهو هنا الصف الاول 1
ثم ثانى رقم هو رقم المربع وهنا هو يساوى قيمة المتغير x ولهذا جعلته يساوى 1
فى بداية البرنامج حتى يعرض على اول مربع فى الصف
((يمكن جعل القيم المعبرة عن الصفوف والمربعات فى الاوامر تساوى متغيرات))
ونعلم ان ثالث شى فى الامر هو ما يراد اظهارة وهنا سوف يتم العرض من خلال المصفوفة text1
وكما نعلم ان هذا الامر يظهر حرف حرف
اذن يجب جلب حرف حرف من هذه المصفوفة
وهذا دور هذا الامر
كما نرى فى بداية الجملة التكرارية ان قيمة y تساوى 0
واذا وضعنا y داخل مربعات المصفوفة كما نرى
هذا يعنى ان قيمة text1 الان هى نفس قيمة الخانة التى تساوى ترتيب y
بمعنى
فى البداية قيمة y تساوى 0 كما نعلم
اذا ما هو الحرف الموجود فى هذه الخانة من المصفوفة text1
هنا هو )
اذا هذا ما سوف يتم اظهارة
ثم ينتظر البك 250 مللى ثانية ((هذا الانتظار يمكنك تقليلة او زيادتة للتحكم فى سرعه اظهار الاحرف))
ثم زيادة قيمة المتغير x بقيمة 1 وهذا للكتابة على المربع الذى يلى المربع الاول وهكذاااااا
وهنا اصبحت قيمة x تساوى 2 اى المربع الثانى
ثم يعود مرة اخرى للتكرار اذن سوف تصبح قيمة y تساوى 1
وهذا يعنى ان الحرف الذى سوف يعرض هو الحرف الذى ترتيبة فى المصفوفة text1
2 اى الفراغ ويتم تكرار ذلك 15 مرة
وكل هذا فى الصف الاول وبما ان التكرار سوف يبدء العد من 0 الى 15 اذن تم التكرار 16 مرة
وهذا هو عدد مربعات الصف الواحد فى هذه الشاشة
ولذلك سوف يخرج البك من هذه الجملة وينتقل الى الجملة الاخرى
وهى
كود:
x=1;
for(y=16;y<32;y++){
Lcd_Chr(2,x,text1[y]); // 4
delay_ms(200); x++;
}
وهى هى نفس الجملة ولكن الاختلاف فى حجتين
الاول هو ارقام التكرار اتغيرت
وان العرض هيتم على الصف الثانى
وللعلم قيمة التكرار هو هو 16 مرة ولكن تقدمت فى الارقام
لاننا نعلم ان قيمة y هى ترتيب الاحرف فى المصفوفة text1
وكان اخر ترتيب هو 14 اذان نحن نحتاج الى البدء فى الصف الثانى من الخانة 15
ولكنى كتبتها 16 لان الخانة 15 هى فاصل وانا لم ارد اظهارة وهكذا تكتمل الكلمة على السطر الثانى حتى تنتهى الكلمة
ثم قمت بالانتظار لمدة ثانيتان وبعد ذلك مسحت الشاشة لكتبة كلمات اخرى ..
كود:
delay_ms(2000);
Lcd_Cmd(_LCD_CLEAR); //6
delay_ms(500);
................................................ان تهى الجزء الاول من الكود............................................
ثم الجزء الثانى من الكود وهو
كود:
for(y=0;y<5;y++){
Lcd_Out(1,1,text2); //2
delay_ms(1000);
Lcd_Out(2,1,text3); //2
delay_ms(500);
Lcd_Cmd(_LCD_CLEAR); //6
delay_ms(500);
}
اولا قمت بعمل جملة تكرارية بقيمة 5 مرات
واول امر هو
كود:
Lcd_Out(1,1,text2); //2
اظهار الكلمة المكتوبة داخل المصفوفة text2 فى الصف الاول وبداية من المربع الاول لة مرة واحدة اى ليس حرف حرف او رقم رقم ((اذا كنت لا تعرف هذا الامر فارجع للشرح الاساسى))
ثم انتظار لمدة ثانية
ثم
كود:
Lcd_Out(2,1,text3); //2
اظهار الكلمة المكتوبة داخل المصفوفة text3 فى الصف الثانى وبداية من المربع الاول لة مرة واحدة ايضا
ثم انتظار لمدة 500 مللى ثانية
ثم
امر مسح الشاشة
كود:
Lcd_Cmd(_LCD_CLEAR); //6
ثم انتظار 500 مللى ثانية
ثم العودة وتكرار الاوامر 5 مرات ..
............................انتهى الجزء الثانى من الكود .................................................. ..........
ثم الجزء الثالث من الكود
((هذا الجزء هاااام جدا ارجوا التركيز فية))
وهو جزء اظهار ناتج حسابى ويمكن اظهار اى ناتج لقراءة حساس او اى شىء اخر بنفس الطريقة
وهو
كود:
d++;
text4=d+e;
ByteToStr(text4, txt);
Lcd_Out_Cp(txt);
delay_ms(3000);
Lcd_Cmd(_LCD_CLEAR);
فى البداية
وهذا يزيد من قيمة المتغير d كل مرة بمقدار 1
وهذا الامر هنا يعبر عن التغيرات الحسابية
اى يمكن ان يكون مكانة قراءة لحساس او ما شابة من العمليات
ثم
اجراء عملية الحساب
وجعل قيمة المتغير text4 تساوى الناتج
ثم ((وهذا هو الامر الجديد (هاااااام) ))
كود:
ByteToStr(text4, txt);
هذا الامر يقوم بتحويل قيم الاعداد العادية الى اسكى كود
حتى يتوافق مع بروتوكول الشاشة ويتم عرض الارقام او الاحرف
يمكن ان يقول احدكم ما المشكلة قم باضافة 48 الى اى رقم وسيتم تحويلة الى اسكى كود
نعم هذا صحيح ولكن هذا ينطبق على رقم واحد فقط
فاذا كان العدد مكون من رقمين مثل 25 لا تنفع هذه الطريقة
وللتحويل اى عدد وليس مجرد رقم واحد الى اسكى كود
هناك اكثر من طريقة
ولكن اسهلها هو ما قدمته الميكروسى نفسها
وهو هذا الامر
وهو يقوم بالتحويل من ارقام عادية الى اسكى كود
ولكن فى حدود خانتين فقط اى لا يزيد الرقم عن 99
ولتحويل رقم اكبر هناك اوامر اخرى مشابه
مثل
وهذا الامر يقوم بتحويل الارقام حتى 6 خانات من الارقام
وهناك اوامر بقدارات اعلى
((يمكنك الحصول على هذه الاوامر من خلال المساعدات فى الميكروسى قم بالاطلاع على هذا الرابط))
http://www.qariya.com/vb/showthread.php?p=659273#post659273
والتحويل يكون كالاتى
اولا كتابة المتغير الذى تريد تحويلة
ثم المصفوفة التى سوف تكون كل خانة فيها تساوى عدد فى المتغير الذى تريد تحويلة
وهذا كلة تعطيك الميكروسى مثال علية
وهذه الصورة توضح ذلك
انظر

كما ترى داخل المربع الاصفر
يتجد انه فى البداية قال لك انة يجب تعرف متغير ويكون مساوى لقيمة
وهنا هو t
وبعد ذلك تقوم بتعريف مصفوفة مكونة من 4 خانات
وهنا هى تسمى txt
وبعد ذلك ...... وهى تعنى انك يجب ان تعرف هذه المتغيرات فى بداية الكود قبل
الداله الرئيسية ثم يقول لك كيف يكون شكل الامر
ثم تعليق // ويقول لك ان قيمة txt اصبحت تساوى قيمة المتغير وهى هنا 24 ولكن بالاسكى كود " 24"
وبعد التحويل
لا يتبقى الا العرض على الشاشة
والذى يعرض طبعا هو المصفوفة التى تم التحويل اليها
ثم انتظار 3 ثوانى ثم مسح الشاشة
ثم العودة لتكرار البرنامج من البداية ..
..................................انتهى الكود بحمد الله .................................................. ................
__________________________________________________ _____________
اذا احتاج احد الى توضيح شىء اخر انا تحت امرة ان شاء الله
ياريت لو حد جرب الكود او فهم الشرح كويس
يعرفنى علشان ننتقل للمرحلة الاخيرة ان شاء الله
وهى التعامل مع الشاشة من خلال الاوامر المباشرة
Lcd_Cmd
والسلام عليكم ورحمه الله وبركاته
|