![]() |
#1
|
|||
|
|||
![]() بسم الله الرحمن الرحيم فى هذا الجزء ان شاء الله هنبدء مع اول نوع وهو Character LCD وازاى نتحكم فية من خلال الميكروسى وللاطلاع على اول جزء اتفضل ادخل على الرابط التالى http://www.dbaasco.com/vb/showthread.php?t=7601 _____________________________________________________________ اولا مما يتكون هذا النوع وكيف يعمل ؟؟ هذا النوع عبارة عن مربعات موضوعه على شكل اعمدة وصفوف وكل مربع مكون من عدد من البكسل فية 7*5 وفى 5*10 دة عدد البكسل لمربع واحد بس والصورة دى تبين الكلام ![]() زى مانت شايف كدة البكسل عبارة عن نقطة وبيتم التحكم فى نقطة نقطة لاظهار كل شىء على الشاشة ((من المعروف ان مخ الانسان له القدرة على تجميع الكثير من النقط فى صورة واحدة )) سبحان الله الخالق العظيم وهذه صورة اخرى تبين المربعات وازاى بتتشكل عليها الحروف والكلمات ![]() وتقاس بعدد هذه المربعات وهذا ما يقال علية ان الشاشة مثلا 2*16 هذا يعنى ان هناك صفان فى كل صف 16 مربع اى الشاشة كاملة تحتوى على 32 مربع اى 32 حرف او رمز او رقم يمكن عرضهم مرة واحدة ولكن انتظر كيف سنتحكم فى كل هذا العدد من البكسل ويا سلام لو الشاشة اكبر شوية دى تبقى حاجة معقدة جدا جدا علينا وعايزة محترفين علشان يتعاملوا معاها احب اقلك ان الشركات المصنعه مش نايمة على ودنها هههههههههههههه الشركات المصنعة قامت بكل هذا بالنيابة عنك وقامت بوضع ICs خاصة للتعامل مع الشاشة والتحكم فيها فقط كل ما عليك انك هتتخاطب مع الشاشة ببروتوكول محدد ومن خلال البروتوكول دة ((وهو ما يحدد الكتابة بما يسمى الاسكى كود)) ال IC الى فى الشاشة هيعرف انت بعت انهى حرف ولا انهى رمز ولا انهى رقم وهيكتبهولك على الشاشة وكل دة مخزن على الذاكرة بتاعته الداخلية مثلا لو الحرف" A " هو عارف هيشغل انهى بكسل وهيطفى انهى بكسل فى المربع الى انت اخترتة علشان يظهرلك الى انت بعتة وطبعا الطريقة دى بتسهل علينا شغل كتيرررر اوى ودة شكل الشاشة وشكل ال IC الى بيقوم بالوظيفة دى ![]() النقطة السوداء الى على ظهر الشاشة هو دة ال IC تمام نفهم من كدة ان الكتابة على الشاشة دى محدودة نوعا ما لاننا لو كتبنا اى حاجة غير المتسجل على ذاكرة ال IC مش هيظهر حاجة لان الشاشة متعرفتش علية وفعلا دة صحيح لو جبت شاشة من دول وكتبت عليها حرف عربى مش هيتعرض والشاشة هتخرف لية لان الشاشة متعرفش الشكل دة ودلوقتى بدئوا ينتجوا شاشات تقرا الحروف العربى وتظهرها ولكن الشركات قامت بشىء جميل جدا وهو انك تقدر تامر ال IC دة يكتب الى انت بتدهولة بالزبط يعنى انت نفسك تقدر تكتب وتشغل البكسلات بكسل بكسل وتتحكم فيها علشان تقدر تعمل الشكل او الرمز الى انت عايزة وهذا شىء رائع اى ليس شرطا قطعيا ان يكون ال IC يعرف نفس الشكل الذى ترسلة له ______________________________________________________________ بعد ما تعرفنا على هذه الشاشة نيجى للشغل العملى ازاى نقدر نكتب على الشاشات دى من خلال الميكروسى قبل البدء احب ااقولكم ان الامر فى غاية السهولة والبساطة ان شاء الله ...................................................................................................... اوامر الكتابة على هذا النوع من الشاشات عبارة عن 6 دوال فقط اى 6 اوامر وهم كود:
Lcd_Init Lcd_Out Lcd_Out_Cp Lcd_Chr Lcd_Chr_Cp Lcd_Cmd كود:
Lcd_Init(); اى الامر الذى يخبر البك بان هناك شاشة سوف تركب علية وان هناك بروتوكول يجب اتباعه مع هذه الشاشة فى العمل وهناك تابع لهذا الامر وهو تعريف الارجل التى سوف توصل بالشاشة لاخراج البيانات من خلالها وهذا يعطيك الحرية فى اختيار هذه الاطراف كما تريد سوف نتحدث عن هذا التابع فيما بعد _______________________________________________________________ ثانى امر هو كود:
Lcd_Out يعنى لو عايز تخرج كلمة او عدد فى مكان محدد مثلا الصف الثانى وبداية اظهار هذه الكلمة تكون فى المربع الخامس هذا الامر هو ما يفعل ذلك لك ولكن هذا الامر لاخراج الكلمات مرة واحدة واخراج العدد مرة واحدة اى ليس حرف حرف او رقم رقم لا بل كلمة مرة واحدة ويمكنة ايضا اظهار حرف حرف ولكن الادق له كلمة او عدد وتوضع الكلمة داخل هذا الرمز "هنا تضع الكلمة" مهما كان حجم الكلمة ولكن اذا زادت عن عدد مربعات الشاشة فلن يظهر البقية ويمكنك ايضا كتابة كلمة داخل متغير ثم كتابة اسم المتغير داخل هذا الامر وهو سوف يعرض الكلمة التى داخل هذا المتغير مثلا اذا اردنا اظهار كلمة Hello فى الصف الاول العمود السابع تكون هكذا كود:
Lcd_Out(1, 7, "Hello"); ثم الكلمة بين هذا الرمز "" وهنا حرف ال H سيكون فى المربع السابع اى بداية الكلمة اما الحرف e فسيكون فى المربع الثامن وهكذا بالتتابع _______________________________________________________________ ثالث امر هو كود:
Lcd_Out_Cp ويمكنة اخراج حرف حرف ولكن الادق له اخراح كلمة كاملة او عدد كامل وايضا يخرج الكلمة بين هذا الرمز "هنا تضع الكلمة" ويمكنك ايضا كتابة كلمة داخل متغير ثم كتابة اسم المتغير داخل هذا الامر وهو سوف يعرض الكلمة التى داخل هذا المتغير اى انه مثل الامر السابق بالزبط اذا ما الفرق بينهم الفرق ان هذا الامر لا يخرج الكلمات او الاعداد حسب المكان الذى تريد لا بل حسب مكان اخر مربع قمت بالكتابة علية ويمكن القول حسب مكان المؤشر اى اذا كنت كتبت كلمة Go على المربع الاول فى الصف الثانى هذا يعنى ان المربع الاول تم كتابة حرف G علية ثم المربع الثانى تم كتابة الحرف O علية اذن المؤشر يقف على المربع الثانى وهو اخر ما تم الكتابة علية اذن قم بكتابة الكلمة Mohamed على الشاشة من خلال هذا الامر الان اى هكذا كود:
Lcd_Out_Cp("Mohamed"); اين سوف يبدء اى اين سوف يكون حرف ال M وهو الحرف الاول من الكلمة يكون بعد اخر مربع تم الكتابة علية او بعد المربع الذى يوجد علية المؤشر وهنا هو المربع الثالث اى الشاشة سوف تظهر الكلمات كلها هكذا GoMohamed اظن هذا مفهوم ويمكنك وضح فاصل بالمسطرة بتاعت الكيبورد قبل كلمة Mohamed داخل الرموز "Mohamed " لتظهر فاضل بين الكلمتين كما ترى الفراغ الصغير بجانب الكلمة _______________________________________________________________ الامر الرابع هو كود:
Lcd_Chr واذا كتبت علية اكثر من ذلك فى المرة الواحدة فلن يظهر شى ويجب وضع الحرف او الرقم داخل هذا الرمز ' هنا تضع الحرف او الرقم ' وهو الافضل فى اظهار رقم او حرف واحد فى المرة الواحدة واذا اردنا اظهار الحرف R فى الصف الاول المربع الخامس يكون هكذا كود:
Lcd_Chr(1, 5, 'R'); ثم الحرف بين هذا الرمز ' ' _______________________________________________________________ الامر الخامس هو كود:
Lcd_Chr_Cp واذا كتبت علية اكثر من ذلك فى المرة الواحدة فلن يظهر شى ويجب وضع الحرف او الرقم داخل هذا الرمز ' هنا تضع الحرف او الرقم ' وهو الادق لاظهار حرف او رقم فى المرة الواحدة ولكن انت لا تحدد مكان العرض بل بمكان المؤشر او اخر مربع تم الكتابه علية واظن الحتة دى فهمناها واذا اردت كتابة الحرف W على اخر مكان للمؤشر يكون هكذا كود:
Lcd_Chr_Cp('W'); وقبل كتابة الامر السادس والاخير اقولك لك تلخيص بسيط ثانى وتالت امر هما لاظهار كلمات او اعداد مرة واحدة على الشاشة الثانى يظهر بمكان تحددة انت اما الثالث فيظهر على حسب مكان المؤشر اما رابع وخامس امر فيظهر حرف حرف او رقم رقم الامر الرابع يظهر الحرف او الرقم فى مكان تحددة انت اما الخامس فيظهرة على حسب مكان المؤشر .............................................................................................................. الامر السادس هو كود:
Lcd_Cmd وانا مغرم بة هههههههههههههههه هذا الامر ما تحدثت عنة فى البداية وهو لكتابة اشكال واعطاء اوامر للشاشة بمعنى اذا اردت مسح الشاشة او تحريك المؤشر او تحرك الكلمات على الشاشة او او او او الى اخر الاوامر وهذا جميل والاجمل انه من خلالة يمكنك كتابة اشكال ورموز كما تريد وهو ما يجعلك تتحكم فى بكسل بكسل زى ما قولت فى الاول وهذه الصورة بها الاوامر التى تستخدم للشاشة ![]() وكل امر بجانبة شرحة واذا لم يعرف احد ما يفعلة الامر يمكنك كتابتة فى مشاركة وان شاء الله هرد عليك ولكتابة امر مسح الشاشة مثلا يكتب هكذا كود:
Lcd_Cmd(_LCD_CLEAR); يكتب هكذا كود:
Lcd_Cmd(_LCD_CURSOR_OFF); بعد فهم هذا الجزء اولا الى هنا انتهى شرح الاوامر وكيفية الكتابة على شاشة LCD من النوع Character ........................................................................................................ يوجد امر اخير وهو التابع للامر الاول وهو تعرف الارجل التى سوف يربط عليها ال LCD Character مع البك وهذه الاوامر ثابتة وما يتغير فيها هو الارجل التى سوف تربط بها البك بالشاشة وهى كود:
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; مثلا كود:
LCD_RS at RB4_bit LCD_RS سوف يربط مع الطرف RB4 اى الطرف رقم 4 فى البورت B فى الميكرو وهكذا واذا اردت مثلا تغير مكان تركيب الاطراف فغير فى الجزء الخاص بالبورت مثلا مكان RB4 يكون RA4 وهكذا وهذه الاوامر يجب كتابتها فى بداية الكود اى قبل ال كود:
void main() كود:
void main() ............................................انتهى......................................................... هذا رابط كود للكتابة واظهار كلمات على شاشة من نفس النوع 16*2 مع المحاكاة وكل شىء وهو فقط مجرد مثال وكل امر سوف تجد بجانبة رقم وهو للدالاله على ترتيبة فى الشرح http://www.4shared.com/rar/hi1rSnBc/LCD_Character.html وان شاء الله هيكون فى اكواد تانية توضح اكثر واكثر ولكن نفهم الاساس الاول _ ______________________________________________________________ اما عن التوصيل فى الحقيقة فهو كما فى المحاكاة وايضا هذه صورة من الداتا شيت لاحدى الشاشات تبين كل رجل وما فائدتها ![]() الرجل رقم 1 فهى للارضى الرجل رقم 2 فهى للموجب الرجل رقم 3 فهى لتحديد مستوى التباين للشاشة وصلة لل موجب على طول الرجل رقم 4 فهى لتحديد سجلات داخل الشاشة الرجل رقم 5 فهى لاختيار هل تسكتب على الشاشة ام ستقراء منها الرجل رقم 6 فهى طرف تفعيل البيانات الرجل رقم 7 الى الرجل رقم 14 فهم اطراف الداتا التى سوف تتناقل بين البك والشاشة الرجل رقم 15 فهى طرف تشغيل الاضاءة الخلفية الطرف الموجب الرجل رقم 16 فهى طرف تشغيل الاضاءة الخلفية الطرف السالب _______________________________________________________________ ومن فهم هذا الشرح وينظر بعد ذلك الى اى كود LCD Character سوف يفهم جيدا ان شاء الله ويعلم كل امر لماذا وضع وهذا الشرح من اجتهادى الخاص اذا كان هناك خطا ارجوا توضيحة واذا احتاج احد لشىء انا تحت امرة ان شاء الله والسلام عليكم ورحمه الله وبركاته |
#2
|
|||
|
|||
![]() ماشاء الله شرح مميز وجميل جدا
بارك الله فيك بالنسبة أستاد Funky للشاشات الأخرى مثل بعض شاشات النوكيا الموجودة في مكتبة البروتيس شاشات Color LCD كيف يكون التعامل معها من جهة العرض والكتابة عليها بمعنى ماهي الاكواد التي يمكننا أستخدامها في تعريفها للبرمجة بالميكروسي |
#3
|
|||
|
|||
![]()
بسم الله الرحمن الرحيم
اخى alolo ان شاء الله سوف يكون هناك دروس قدر المستطاع وعلى قد علمى عن الشاشات وكيفية التعامل معها وزى مانت شايف الموضوع اجزاء لكن لازم نبدء بالسهل الاول علشان نفهم المبادئ وبعد كدا نخوش على الصعب ان شاء الله تقبل الله صيامك وقيامك |
#4
|
|||
|
|||
![]() تمام أخي شكرا جزيلا لك
وفي أنتظار دروسك القادمة أن شاء الله على أحر من الجمر أعانك الله أستاد Funky |
#5
|
||||
|
||||
![]()
راااااااااااااااائع يا باشمهندس
وفى انتظار دروسك الجديدة ![]() |
#6
|
|||
|
|||
![]()
بسم الله الرحمن الرحيم
شكرا جزيلا لك يا بشمهندس عمرو ان شاء الله قريبا تقبل الله صيامك وقيامك |
#7
|
|||
|
|||
![]() بسم الله الرحمن الرحيم هنبدء النهاردة ان شاء الله مع الكود رقم 2 وان شاء الله هنوضح فية ازاى نستخدم الاوامر الى شرحتها فى بداية الموضوع ونظهر الى احنا عايزينة على الشاشة من خلال ال 6 اوامر دول ان شاء الله ___________________________________________________________ اولا فديو بسيط لتوضيح عمل الكود رقم 2 LCD Character 2 - YouTube
وبعد ما اتفرجنا على الفديو نشرح اية الى تم عرضة على الفديو وهو كالاتى 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++; } ثم جملة تكرارية بقيمة 15 مرة ((اى ان تكرار الاوامر بداخل الجملة سيتم 15 مرة)) ثم قمت بكتابة الامر Lcd_Chr وكما نعلم من الشرح ان فائدتة اظهار الحروف حرف حرف او العدد رقم رقم وهذا ما تم فعلا فى بداية التجربة وكما نعلم ايضا ان اول رقم داخل هذا الامر يدل على رقم الصف وهو هنا الصف الاول 1 ثم ثانى رقم هو رقم المربع وهنا هو يساوى قيمة المتغير x ولهذا جعلته يساوى 1 فى بداية البرنامج حتى يعرض على اول مربع فى الصف ((يمكن جعل القيم المعبرة عن الصفوف والمربعات فى الاوامر تساوى متغيرات)) ونعلم ان ثالث شى فى الامر هو ما يراد اظهارة وهنا سوف يتم العرض من خلال المصفوفة text1 وكما نعلم ان هذا الامر يظهر حرف حرف اذن يجب جلب حرف حرف من هذه المصفوفة وهذا دور هذا الامر كود:
text1[y] واذا وضعنا 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); } واول امر هو كود:
Lcd_Out(1,1,text2); //2 ثم انتظار لمدة ثانية ثم كود:
Lcd_Out(2,1,text3); //2 ثم انتظار لمدة 500 مللى ثانية ثم امر مسح الشاشة كود:
Lcd_Cmd(_LCD_CLEAR); //6 ثم العودة وتكرار الاوامر 5 مرات .. ............................انتهى الجزء الثانى من الكود ............................................................ ثم الجزء الثالث من الكود ((هذا الجزء هاااام جدا ارجوا التركيز فية)) وهو جزء اظهار ناتج حسابى ويمكن اظهار اى ناتج لقراءة حساس او اى شىء اخر بنفس الطريقة وهو كود:
d++; text4=d+e; ByteToStr(text4, txt); Lcd_Out_Cp(txt); delay_ms(3000); Lcd_Cmd(_LCD_CLEAR); كود:
d++ وهذا الامر هنا يعبر عن التغيرات الحسابية اى يمكن ان يكون مكانة قراءة لحساس او ما شابة من العمليات ثم اجراء عملية الحساب كود:
text4=d+e; ثم ((وهذا هو الامر الجديد (هاااااام) )) كود:
ByteToStr(text4, txt); حتى يتوافق مع بروتوكول الشاشة ويتم عرض الارقام او الاحرف يمكن ان يقول احدكم ما المشكلة قم باضافة 48 الى اى رقم وسيتم تحويلة الى اسكى كود نعم هذا صحيح ولكن هذا ينطبق على رقم واحد فقط فاذا كان العدد مكون من رقمين مثل 25 لا تنفع هذه الطريقة وللتحويل اى عدد وليس مجرد رقم واحد الى اسكى كود هناك اكثر من طريقة ولكن اسهلها هو ما قدمته الميكروسى نفسها وهو هذا الامر كود:
ByteToStr ولكن فى حدود خانتين فقط اى لا يزيد الرقم عن 99 ولتحويل رقم اكبر هناك اوامر اخرى مشابه مثل كود:
IntToStr وهناك اوامر بقدارات اعلى ((يمكنك الحصول على هذه الاوامر من خلال المساعدات فى الميكروسى قم بالاطلاع على هذا الرابط)) http://www.dbaasco.com/vb/showthread.php?t=7605 والتحويل يكون كالاتى اولا كتابة المتغير الذى تريد تحويلة ثم المصفوفة التى سوف تكون كل خانة فيها تساوى عدد فى المتغير الذى تريد تحويلة وهذا كلة تعطيك الميكروسى مثال علية وهذه الصورة توضح ذلك انظر ![]() كما ترى داخل المربع الاصفر يتجد انه فى البداية قال لك انة يجب تعرف متغير ويكون مساوى لقيمة وهنا هو t وبعد ذلك تقوم بتعريف مصفوفة مكونة من 4 خانات وهنا هى تسمى txt وبعد ذلك ...... وهى تعنى انك يجب ان تعرف هذه المتغيرات فى بداية الكود قبل الداله الرئيسية كود:
void main() ثم تعليق // ويقول لك ان قيمة txt اصبحت تساوى قيمة المتغير وهى هنا 24 ولكن بالاسكى كود " 24" وبعد التحويل لا يتبقى الا العرض على الشاشة كود:
Lcd_Out_Cp(txt); ثم انتظار 3 ثوانى ثم مسح الشاشة ثم العودة لتكرار البرنامج من البداية .. ..................................انتهى الكود بحمد الله .................................................................. _______________________________________________________________ اذا احتاج احد الى توضيح شىء اخر انا تحت امرة ان شاء الله ياريت لو حد جرب الكود او فهم الشرح كويس يعرفنى علشان ننتقل للمرحلة الاخيرة ان شاء الله وهى التعامل مع الشاشة من خلال الاوامر المباشرة Lcd_Cmd والسلام عليكم ورحمه الله وبركاته |
#8
|
|||
|
|||
![]() بسم الله الرحمن الرحيم الكود الثالث والاخير وهو عن استخدام امر Lcd_Cmd وصنع اشكال كما نريد وطباعتها على الشاشة وايضا تحريك الكلام على الشاشة كما نريد ان شاء الله اولا شاهد هذا الفديو الذى يوضح التجربة ويوضح عمل الكود Custom character (( LCD Character 3 )) - YouTube
فى هذا الفديو قمت بعمل بعض الاشكال واظهارها وللعلم يمكنك صنع ما تريد من الاشكال وباحجام مختلفة ايضا وقمت ايضا بتحريك كلمات على الشاشة .............................................................................................................. فى هذا الجزء من الشرح يجب ان تعلم انك هنا سوف تقوم بالتحكم فى بكسلات الشاشة بنفسك واعطاء اوامر لكل مربع على حدى لكى تتحكم فى بكسل بكسل وهذا ما ستتعرف علية ان شاء الله داخل الكود ولكن الامر هام هنا لانى سوف اتحدث عن البكسل وهذا يعنى فهم لكيفية عمل الشاشات وايضا اعطاء مفهوم جيد وفكرة عامة للتحكم فى السى ان سى ومما تتكون الصورة فى الاساس وهذا سوف يفدنا كثيرا عند التعامل مع الشاشات الاخرى ان شاء الله اولا الكلام هنا سوف يكون عن الشاشات الغير ملونة للتحكم فى البكسل نحتاج الى استخدام قيمتى الديجتال وهما ال 0 او 1 اى يعمل البكسل او ينطفىء وبهذا تتكون الصورة لكن على عدد كبير طبعا وهكذا التعامل مع الصور وايضا مع السى ان سى البسيط فهنا تقوم الماكينة بطبع البكسل او عدم طباعته للتكون صورة على الورق او الخشب او او وا وزى ما قولت قبل كدة كل ما قل حجم البكسل وزاد عددة كانت الصورة انقى وافضل وهذه الصور خير من الف كلمة ![]() كما ترى هكذا تكون الصور وهكذا تطبع اما عن الشاشات الملونة وايضا السى ان سى المتطور فالامر اكثر صعوبة قليلا ولكن المبادىء نفسها هى هى .............................................................................................................. ننتقل لمرحلة العملية ______________________ فى الشاشات ال LCD Character يتكون كل مربع من 7*5 بكسل او 10*5 بكسل وال5 بكسل بيكونوا هما عرض المربع اما ال 7 او 10 بكسل هما طول المربع ((للعلم مربع هذا مجرد تسمية وليس الشكل الفعلى)) ولكى نتحكم فى بكسل بكسل نحتاج الى التعامل مع بروتوكول الشاشة وهو كا الاتى تكوين مصفوفة عبارة عن 7 خانات كل خانة تحمل قيمة للتتحكم فى 5 بكسل مرة واحدة وبارسال خانة خانة نكون اتحكمنا فى كل البكسلات الى عندنا ولحسن حظنا ان الشركة المصنعه للميكروسى قامت بعمل برنامج خاص ترسم علية ما تريد من من الاشكال وهو يولد لك الكود والمصفوفة جاهز وهذا البرنامج يسمى mikroelektronika lcd character Custom generator وللحصول علية اتبع الخطوات الاتية Tools >> lcd character Custom ودى صورتة ![]() الجزء الى متعلم علية بالون الاخضر دة هو المكان الى بتشكل فية الشكل الى انت عايزة اما الجزء الى بالون الاحمر فدة الكود الى من خلالة بتعرض الشكل على الشاشة اما الجزء الى بالون الازرق فهذا هو الهام زى مانت شايف كدة هى دى خانات الشكل هم 8خانات وكل خانة بها رقم يعبر عن 5 بكسل وبكدة يكتمل عدد بكسلات المربع الواحد .. وعلى فكرة اى صورة بيكون ليها نفس شكل المصفوفة ولكن طبعا الارقام بتختلف وعدد الارقام او خانات المصفوفة بيكون كبير جدا ودة على حسب عدد البكسل وهو يعمل كالاتى ترسم الشكل الى انت عايزة وبعد كدة تدوس على Generator code الى موجود تحت هتلاقية كتبلك كود داله العرض وكتبلك مصفوفة الشكل وانا قمت باخذ داله العرض كما هى وقمت بتغير بعض التغيرات عليها والمصفوفة قمت بتغير اسمها حتى يتناسب مع عرض 8 اشكال وهى من character0 الى character7 ولكن هناك مشكلة مع اظهار الاشكال على الشاشة وهى ان ال IC لا يقبل اظهار اكثر من 8 ثمان اشكال فقط ومن المشاكل الاخرى هى ان الاشكال لها بروتوكول فى كتابتها اولا قبل ارسال اى شكل او قيم من مصفوفة الشكل المراد اظهارة يجب اولا ارسال امر مثل كود:
Lcd_Cmd(64); وهو يزيد عنة ب 8 ارقام وهو يبدء من 64 الى 120 فمثلا 64 هذا شكل واذا اردنا كتابة شكل اخر مختلف عنة نكتب 72 واذا اردنا اخر نكتب 80 وهكذا حتى نصل الى 120 ونزيد 8 ارقام لان هذا هو عدد البكسلات بالطول واذا تركنا شكلين مختلفيين بنفس الامر فسوف يظهر شكل واحد فقط منهم وايضا يجب كتابة ارقام من 0 الى 7 فى اخر دالة العرض فى هذا الجزء كود:
Lcd_Chr(pos_row, pos_char, 0 to 7); اذا ما المشكلة فى هذا البروتوكول المشكلة هى انة عند تغير الشكل يجب تغير هذه الارقام وهذا يعنى تكرار دالة العرض 8 مرات حتى يتم التغير فيهم وهذا طبعا مكلف جدا فى مساحة الذاكرة ولكنى قمت باختصارها فى داله عرض واحدة وسنرى كيف فى الكود ........................................................................................................... ننتقل الى مرحلة الكود __________________ اولا حمل الكود والمحاكاة وكل شىء من هنا http://www.4shared.com/rar/ioGStI0l/...aracter_3.html _________________________________________ ملحوظة انا عملت الكود بشكل مختصر بعض الشى للتوفير فى المساحة وبطريقة جميلة وسهلا ولكن هى احدى الطرق هناك الكثير من الطرق للاختصار وهذه احداها وابسطها على ما اظن واذا اراد احد طريقة اخرى للاختصار انا تحت امرة ان شاء الله _________________________________________ نيجى للشرح فى البداية تعريفات الشاشة ثم مصفوفات بداخلها الكلمات التى سوف تعرض كود:
char text0[] ="(Besm Allah Elrhman Elrahem)"; char text1[] ="(AllaH Akbar AllaH A3zem)"; كود:
char text2[8]; char y,x,x1; كود:
const char character0[] = {1,3,7,31,31,7,3,1}; const char character1[] = {0,0,0,10,0,17,14,0}; const char character2[] = {1,3,5,9,11,27,24,0}; const char character3[] = {0,0,10,0,0,14,17,0}; const char character4[] = {0,0,10,21,17,10,4,0}; const char character5[] = {14,14,4,14,21,4,10,0}; const char character6[] = {14,31,17,17,17,31,31,31}; const char character7[] = {0,0,10,0,31,17,14,0}; داله العرض التى سوف تقوم بعرض الاشكال على الشاشة كود:
void CustomChar(char pos_row, char pos_char) { char i; Lcd_Cmd(x); for (i = 0; i<=7; i++) Lcd_Chr_CP(text2[i]); Lcd_Cmd(_LCD_RETURN_HOME); Lcd_Chr(pos_row, pos_char, x1); } كود:
Lcd_Cmd(x); وفى كل مرة اغير فيها الشكل اغير معه قيمة x وهكذا مع الامر الثانى كود:
Lcd_Chr(pos_row, pos_char, x1); وايضا جعلت المصفوفة التى سوف يتم عرضها هى كود:
text2[] الان ساقوم بشرح طريقة عرض شكل واحد فقط للتوضيح والباقى بالمثل وهو اول شكل كود:
for(y=0;y<7;y++){text2[y]=character0[y];} x=64;x1=0; CustomChar(1,1); delay_ms(500); يجب نقل خانات مصفوفة الشكل الذى اريد نقلة الى المصفوفة كود:
text2[] ثم جعلت المتغير y الذى يزيد كل مرة من مرات التكرار بقيمة 1 هو الذى يقوم بالتبديل للمصفوفتان فا فى البداية تكون قيمتة 0 وعندما اضعه داخل مربعات المصفوفة هذا يعنى ان ابدل الخانة رقم صفر اى بقيمة y وهكذا الخانة رقم 0 من مصفوفة الشكل character0 سوف تنقل الى الخانة رقم صفر من المصفوفة text2 وهكذا 7 مرات لنقل 7 خانات ثم جعلت قيمة x و x1 تساوى قيم لاول شكل وهى هنا كود:
x=64;x1=0; ثم وهذا هااااااااام قد اصبح كل شىء جاهز الان لعرض الشكل على الشاشة وهذا يتم من خلال الامر كود:
CustomChar(1,1); وعرض الشكل فى الصف الاول والمربع الاول ايضا فالرقم الاول يعنى الصف والرقم الثانى يعنى المربع ثم قمت بالانتظار لمدة 500 مللى ثانية .. .................................................انتهى............................................................ نيجى لجزء تحريك الكلمات وهو بسيط وسهل جدا كود:
Lcd_Out(1, 13, text0); //2 for(y=0;y<40;y++){delay_ms(300);Lcd_Cmd(_LCD_SHIFT_RIGHT);} //6 Lcd_Cmd(_LCD_CLEAR); Lcd_Out(2, 16, text1); //2 for(y=0;y<40;y++){delay_ms(300);Lcd_Cmd(_LCD_SHIFT_RIGHT);} //6 Lcd_Cmd(_LCD_CLEAR); //6 قمت بعرض اول مصفوفة وبداخلة كلمات وهى (Besm Allah Elrhman Elrahem) وقمت بعرضها فى اواخر المربعات بحيث تظهر فى البدء وكانها مختفية ثم قمت بكتابة امر التحريك او الازاحة الى اليمين ولكن مكرر 40 مرة ورقم التكرار انت الذى تحددة على حسب ما تشاء وعلى حسب عدد حروف الكلمات ايضا كود:
for(y=0;y<40;y++){delay_ms(300);Lcd_Cmd(_LCD_SHIFT_RIGHT);} ثم قمت بمسح الشاشة كود:
Lcd_Cmd(_LCD_CLEAR); ولكن لعرض كلمات اخرى وهى (AllaH Akbar AllaH A3zem) الى هنا انتهى الكود ولله الحمد وانتهى الجزء الثانى الذى يخص الشاشة LCD Character اى حد لية سؤال انا تحت امرة ان شاء الله فى حدود علمى ___________________________________________________________________________________ ___________________________________________________________________________________ تابع للشرح هذا الشرح ما هو الا اساس بسيط للدخول فى عالم ال LCD فيجب على من يحب التعلم البحث والتعب والجهد لايجاد المعلومة وليس تقليد اكواد فقط ولهذا انا تركت بعض الثغرات البسيطة جدا فى الاكواد ولكنها غير مؤثرة الا فى اكواد معينة وهى سهلة الاكتشاف فقط لمن يجرب ويتعب واترككم مع بعض فديوهات الاجنبية والتى تستخدم فيها تقنيات التحكم فى ال LCD Character 1 - ADC Value Display in Graphical Format on a 16x2 Character LCD using FireBird V P89V51RD2 Robot - YouTube
2 - Animation on a 16x2 Character LCD using FireBird V P89V51RD2 Robot - YouTube
3 - Animaçمo display LCD / Microgenios - YouTube
4 - Arduino LCD Super Mario Game - YouTube
5 - Visualizacion Caracter de Doble Line - LCD 16x2 - Modelo 1 - Desarrollos Tecnologicos - YouTube
|
#9
|
|||
|
|||
![]()
بارك الله فيك
|
#10
|
|||
|
|||
![]()
بسم الله الرحمن الرحيم
شكرا جزيلا يا اخى red_stone تقبل الله صيامك وقيامك |
![]() |
مواقع النشر (المفضلة) |
أدوات الموضوع | |
انواع عرض الموضوع | |
|
|