قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

   

الصورة الرمزية funky112233
funky112233
:: عضو ذهبي ::
تاريخ التسجيل: 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
ثم عمل حلقة تكرارية الى الابد
كود:
while(1){
.................................................. .................................................. ....

ثم قمت بعمل الكود الخاص باظهار اول جزء من كلمة ( 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

وكما نعلم ان هذا الامر يظهر حرف حرف
اذن يجب جلب حرف حرف من هذه المصفوفة
وهذا دور هذا الامر
كود:
text1[y]
كما نرى فى بداية الجملة التكرارية ان قيمة 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++
وهذا يزيد من قيمة المتغير d كل مرة بمقدار 1

وهذا الامر هنا يعبر عن التغيرات الحسابية
اى يمكن ان يكون مكانة قراءة لحساس او ما شابة من العمليات

ثم
اجراء عملية الحساب
كود:
text4=d+e;
وجعل قيمة المتغير text4 تساوى الناتج

ثم ((وهذا هو الامر الجديد (هاااااام) ))

كود:
ByteToStr(text4, txt);
هذا الامر يقوم بتحويل قيم الاعداد العادية الى اسكى كود
حتى يتوافق مع بروتوكول الشاشة ويتم عرض الارقام او الاحرف

يمكن ان يقول احدكم ما المشكلة قم باضافة 48 الى اى رقم وسيتم تحويلة الى اسكى كود
نعم هذا صحيح ولكن هذا ينطبق على رقم واحد فقط
فاذا كان العدد مكون من رقمين مثل 25 لا تنفع هذه الطريقة
وللتحويل اى عدد وليس مجرد رقم واحد الى اسكى كود

هناك اكثر من طريقة
ولكن اسهلها هو ما قدمته الميكروسى نفسها
وهو هذا الامر
كود:
ByteToStr
وهو يقوم بالتحويل من ارقام عادية الى اسكى كود
ولكن فى حدود خانتين فقط اى لا يزيد الرقم عن 99

ولتحويل رقم اكبر هناك اوامر اخرى مشابه
مثل
كود:
IntToStr
وهذا الامر يقوم بتحويل الارقام حتى 6 خانات من الارقام
وهناك اوامر بقدارات اعلى

((يمكنك الحصول على هذه الاوامر من خلال المساعدات فى الميكروسى قم بالاطلاع على هذا الرابط))
http://www.qariya.com/vb/showthread.php?p=659273#post659273

والتحويل يكون كالاتى
اولا كتابة المتغير الذى تريد تحويلة
ثم المصفوفة التى سوف تكون كل خانة فيها تساوى عدد فى المتغير الذى تريد تحويلة

وهذا كلة تعطيك الميكروسى مثال علية

وهذه الصورة توضح ذلك
انظر



كما ترى داخل المربع الاصفر
يتجد انه فى البداية قال لك انة يجب تعرف متغير ويكون مساوى لقيمة
وهنا هو t
وبعد ذلك تقوم بتعريف مصفوفة مكونة من 4 خانات
وهنا هى تسمى txt

وبعد ذلك ...... وهى تعنى انك يجب ان تعرف هذه المتغيرات فى بداية الكود قبل
الداله الرئيسية
كود:
void main()
ثم يقول لك كيف يكون شكل الامر
ثم تعليق // ويقول لك ان قيمة txt اصبحت تساوى قيمة المتغير وهى هنا 24 ولكن بالاسكى كود " 24"
وبعد التحويل
لا يتبقى الا العرض على الشاشة

كود:
Lcd_Out_Cp(txt);
والذى يعرض طبعا هو المصفوفة التى تم التحويل اليها

ثم انتظار 3 ثوانى ثم مسح الشاشة
ثم العودة لتكرار البرنامج من البداية ..
..................................انتهى الكود بحمد الله .................................................. ................
__________________________________________________ _____________

اذا احتاج احد الى توضيح شىء اخر انا تحت امرة ان شاء الله

ياريت لو حد جرب الكود او فهم الشرح كويس
يعرفنى علشان ننتقل للمرحلة الاخيرة ان شاء الله
وهى التعامل مع الشاشة من خلال الاوامر المباشرة
Lcd_Cmd

والسلام عليكم ورحمه الله وبركاته

اعلانات

الصورة الرمزية mohamedalikahli
mohamedalikahli
:: مهندس متواجد ::
تاريخ التسجيل: Dec 2010
الدولة: مصر -- الاسكندرية
المشاركات: 153
نشاط [ mohamedalikahli ]
قوة السمعة:
قديم 09-08-2012, 01:29 PM المشاركة 10   
افتراضي


بسم الله ما شاء الله ......
شرح رااااااااااااااااائع اخي محمد ...اكمل علي بركة الله..
و من تقدم اللي تقدم باذن الله...

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

الصورة الرمزية funky112233
funky112233
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 664
نشاط [ funky112233 ]
قوة السمعة:
قديم 09-08-2012, 07:10 PM المشاركة 11   
افتراضي


بسم الله الرحمن الرحيم

شكرا جزيلا لك يا اخى
وان شاء الله نكمل الشرح قريبا
تقبل الله صيامك وقيامك


هل الشرح على مستوى مفهوم يا اخوانى ام لا

هل فهمنا كيفية التعامل مع الشاشة واصبح الامر سهل ان شاء الله ام لا

اذا كان لا سوف اعيد الشرح تمام ان شاء الله
واذا كان نعم اكمل ان شاء الله


تامر حسين
:: مهندس ::
تاريخ التسجيل: Mar 2008
المشاركات: 10
نشاط [ تامر حسين ]
قوة السمعة:
قديم 09-08-2012, 11:02 PM المشاركة 12   
افتراضي


بالمنسبة ممكن نتعامل مع الLCD بطريقة سهلة جدا بواسطة برنامج الفلو كود V4
ونكتب اللى احنا عايزينه عليها


الصورة الرمزية funky112233
funky112233
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 664
نشاط [ funky112233 ]
قوة السمعة:
قديم 10-08-2012, 01:07 AM المشاركة 13   
افتراضي


بسم الله الرحمن الرحيم

لا اعلم شىء عن برنامج الفلوكود يا اخى
وانا كاتب بالميكروسى

ولكن
لما لا تقوم بشرح درس عن الكتابة على ال LCD من خلال برنامج فلوكود
وتشرح الطريقة السهله التى تحدثت عنها

جزاك الله كل خير


الصورة الرمزية كرار العامري
كرار العامري
:: مهندس متواجد ::
تاريخ التسجيل: Oct 2010
الدولة: العراق
المشاركات: 159
نشاط [ كرار العامري ]
قوة السمعة:
قديم 10-08-2012, 04:07 PM المشاركة 14   
افتراضي


مشكور أخي العزيز وفقك الله لكل ما يحب ويرضى وجعل هذا العمل في ميزان حسناتك ومبروك عليكم شهر رمضان الكريم جعلكم الله من صائميه وقائميه
وننتظر منك المزيد من الابداع


aiman-sony
:: مهندس جيد ::
تاريخ التسجيل: Dec 2010
المشاركات: 282
نشاط [ aiman-sony ]
قوة السمعة:
قديم 10-08-2012, 05:51 PM المشاركة 15   
افتراضي


بارك الله فيك و جزاك كل خير


الصورة الرمزية funky112233
funky112233
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 664
نشاط [ funky112233 ]
قوة السمعة:
قديم 11-08-2012, 03:40 AM المشاركة 16   
افتراضي


بسم الله الرحمن الرحيم

كرار العامري
شكرا جزيلا لك
تقبل الله منك صيامك وقيامك وزادك من فضلة

aiman-sony
جزاك الله بما اجازة ان شاء الله
تقبل الله صيامك وقيامك



الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 05:03 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)