كيفية تشغيل شاشة LCD 16x2 باستخدام لغة CCS C على PIC16F84A


(TheDestroyer) #1

السلام عليكم

كما وعدتكم أقدم لكم كيفية تشغيل شاشة LCD بسعة 16x2 حرف على PIC16F84A على لغة CCS C (لغة C)

آسف على تأخري في طرح الموضوع لكني منشغل في الماجستير

على العموم سأكتفي الآن بإرسال البرنامج مع الملفات المهمة معه مع شرح بسيط، وعند وجود أي سؤال الرجاء طرحه لأجيب عليه لأنني لا أملك الوقت لشرح كل شيء بالتفصيل الممل

على العموم الملف LCD.c الذي يحتوي على التعليمات الأساسية معدل نوعاً ما ليتوافق مع PIC16F84A:

تعمل الشاشة LCD على أساس الملف الرأسي LCD.c الموجود ضمن الملف المرفق.

كل تعليمات الملف LCD.c والطريقة التوصيل موجودة داخل الملف نفسه على شكل تعليقات.

سأشرح بعض هذه التعليمات للأخوة ضعيفي اللغة:

تملك الشاشة LCD 16x2 ستة عشر 16 Pin، الوصل سيتم كما يلي ليعمل البرنامج:

من 16F84A إلى الشاشة:

من B0 إلى Enable في الشاشة أي Pin رقم 6
من B1إلى RS في الشاشة أي Pin رقم 4
من B2 إلى RW في الشاشة أي Pin رقم 5
من B4 إلى D4 في الشاشة أي Pin رقم 11
من B5 إلى D5 في الشاشة أي Pin رقم 12
من B6 إلى D6 في الشاشة أي Pin رقم 13
من B7 إلى D7 في الشاشة أي Pin رقم 14

أما تغذية الشاشة LCD ستكون كما يلي:
Pin رقم 2 و 16 على 5V وهما تغذية الشاشة والإضاءة على الترتيب
Pin رقم 1 و 15 على الخط الأرضي (0V) وهما تأريض الشاشة والإضاءة على الترتيب
اترك Pin ذات الأرقام7 و 8 و 9 و 10 دون وصل
Pin رقم 3 صله إلى مقاومة متغيرة من 10 إلى 20 كيلوأوم ثم إلى التغذية أو إلى التغذية مباشرة، وعمل هذا الخط هو تحديد تباين اللون Contrast من حيث كونه غامق أو فاتح، في حال كان على الأرضي سيكون أغمق ما يمكن.

أما في ملف LCD.c يمكنك استعمال الأوامر التالية بعد تضمينه في برنامجك:

أمر بدأ التشغيل:
;()lcd_init

يجب أن تبدأ بهذا الأمر قبل أي أمر آخر كي تتمكن من استخدام الشاشة.

أمر الكتابة:
("lcd_putc("Custom text

يمكنك عن طريق هذا الأمر الكتابة على الشاشة، لا تنسى أن الكتابة الشاشة يشبه الكتابة على الكمبيوتر، فعندما تكتب على الكمبيوتر يوجد مؤشر يحدد لك مكان الكتابة، وأيضاً في الشاشة يوجد مؤشر يجب أن تكون على علم بموضعه

لتكتب على الشاشة أدخل بدلاً من Custom text ما تريد كتابته

يمكنك أيضاً استخدام هذا الأمر من أجل تصفير الشاشة ومحو كل ما عليها وإعادة المؤشر إلى البداية في السطر الأول، يمكنك استخدام هذا الأمر عن طريق كتابة ما يلي:

(“lcd_putc(”\f

ويمكنك أيضاً إضافة ما تريد من كلمات بعد هذا الأمر مثلاً:
(“lcd_putc(”\fHi I am Samer
ستكتب Hi I am Samer بعد مسح كل ما هو مكتوب على الشاشة

يمكنك أيضاً الانتقال إلى السطر الثاني عن طريق إضافة “n” إلى كلماتك فمثلاً:
(“lcd_putc(”\fHi I am
Samer

ستمسح الشاشة أولاً ثم ستكتب Hi I am في السطر الأول ثم Samer في السطر الثاني.

ويمكنك أيضاً إرجاع المؤشر خطوة إلى الوراء عن طريق إضافة “b” بنفس الطريقة.

ويمكنك أيضاً تحريك المؤشر إلى الموضع الذي تريد عن طريق التابع التالي:
(lcd_gotoxy(x,y

حيث x,y أعداد صحيحة تدل على الإحداثي الذي تريد أن يذهب المؤشر عليه، x رقم العمود وy رقم السطر، والإحداثي 1,1 هو في أقصى اليسار في الأعلى

ويمكنك أيضاً استرجاع معلومة مكتوبة على الشاشة، مثلاً لتعرف ما هو الحرف المكتوب في الموضع 1,2 تستخدم التابع التالي بعد تعريف a على أنه متغير من نوع char أو كلمة

(a=lcd_getc(x,y

يخزن هذا التابع قيمة المكتوب على الشاشة في الإحداثي x,y على المتغير a فمثلاً من أجل الإحداثي 1,2 أي العمود الأول السطر الثاني:

(a=lcd_getc(1,2

يتضمن الملف المرفق ملف hex. الذي يمكنك ارساله مباشرة إلى PIC16F84A

ملاحظة: الملف المرفق هو برنامج مجهز لـPIC16F84A بهزاز كريستالي بتردد 4MHz (أي 4000000Hz)، إذا أردت استخدام كريستالة ذات تردد مختلف غير السطر التالي:

(use delay(clock=4000000
واكتب بدلا من 4000000 التردد الذي تريده.

انتهى الشرح…

للأسف حاولت أن أتضمن في موضوعي برنامج PIC-C كاملاً لكن للأسف لم أجد موقع رفع ملفات مناسب فالرجاء أن يدلني أحد على موقع لا يذلنا على رفع الملف ولا يذل المستخدمبن على تنزيل الملف.

وأخيراً وليس آخراً أتمنى التوفيق للجميع، وأتمنى أن تطرحوا أسئلتكم وأن تكونوا صبورين معي على الإجابة لأني مشغول جداًّ

والسلام، ولا تنسوني من حسن دعائكم


(الحب ابن الحب) #2

جازاك الله خيرا على المعلومات القيّمة و أرجو منك المساعدة في كيفيّة ربط شاشة 1X16 LCD مع ميكروكنترولر 16F876 من نوع PIC و هذا رابط لموقع تحميل ملفات كبيرة الحجم
http://www.4shared.com/index.jsp

(system) #3

شكرا على تعبك معانا بس كنت بتمنى وجود مخطط توضيحي


(metcho) #4

شكرا ليك بس انا عندى طلب منك و ياريت متكسفنيش انا محتاج مشروع اكتب حاجة على lcd عن طريق نفس البيك الى انت استخدمتها فوق بس عايز الرسمة بالتفصيل ازاى اوصل و لو حبيت اغير الكلمة اعمل ايه


(TheDestroyer) #5

المخطط مرفق مع هذا الرد

السيد الحب ابن الحب، والسيد metcho

من غير زعل أنا أحب المساعدة ولكن لا أحب الاتكالية ولا أستطيع مساعدة من لا يتقن لغة السي لأنه موضوع أكبر من أن يشرح في منتدى، لكن الموضوع الذي طرحته يحتوي المبادئ الأساسية في تشغيل الشاشة LCD والسبب اللي طرحته من أجله هو أن تعذبت كثيراً حتى اشتغلت ولا أريد أن يتعذب أحد غيري، مع العلم أني فيزيائي ولست مهندس إلكترونيات، لذلك:

السيد الحب ابن الحب رح أجيب عن سؤالك لكن ليس بالشكل التفصيلي المتوقع، لتشغيل الشاشة الـLCD افتح مشروعاً جديداً واختر نوع PIC16F876 وغير ما يلي داخل ملف LCD.c المرفق وانسخ البرنامح main.c كاملاً بعد الأمر الأساسي ()void main دون مسح التعليمات الأساسية، مع العلم أني لا أعلم ما هو شكل 16F876 لكن أكيد نفس المبدأ ولو كان سطر واحد صلها بنفس الطريقة الموضحة في المخطط، التعديلات هي التالي:

كل سطر يحتوي على:
set_tris_b
غير فيه حرف b إلى حرف البورت الذي تريد استخدامه للشاشة.

وبذلك يجب أن تعمل والله أعلم

السيد metcho:

يبدو أنك لا تتقن لغة السي تماماً ولا تعرف عنها شيئاً لذلك أنصحك بتعلم لغة السي أولاً ثم الاستمرار لأن تشغيل أي ميكروكونترولر دون العلم بأي لغة برمجة سواءً السي أو أسمبلي يصبح نوع من النسخ واللصق دون فهم وأنا لا أنصح بهذه الطريقة، على العموم كي تغير الكلام المكتوب على الشاشة يجب أن تعدل main.c وعدل على الكلمات المكتوبة التي رأيتها على الشاشة مثل Hi I’m Samer أو رقم الهاتف الذي يظهر رقم رقم كل ربع ثانية، مع العلم أن الحلقة while هدفها الأساسي هو الاستمرار في العرض دوماً أو تكرار العرض كلما انتهت اجمل.
أما السطر (delay_ms(1000 فالغاية منه هي تأخير الجملة المكتوبة أو أي أمر لمدة 1000 ميلي ثانية أي ثانية واحدة، و5000 تعني خمس ثواني

أتمنى أن أكون قد ساعدتكم

[SIZE=4]وفي هذا الرابط برنامج PIC C Compiler البرنامج الذي يمكنكم استخدامه لبرمجة أي ميكروكنترولر:

http://www.megaupload.com/?d=06T784GO

وكلمة السر هي: iamphysicist

والتي تعني “أنا فيزيائي”

إذا عانيتم من أي مشاكل في البرنامج فأنا أرحب بأسئلتكم لكن في حدود المعقول دون كسل أو اتكالية، كي تتعلم استخدام البرنامج يجب أن تحاول مرة ومرتين وألف وسأشرح القليل عنه لاحقاً

[/size]والسلام


(TheDestroyer) #6

وفي هذا الرابط برنامج PIC C Compiler البرنامج الذي يمكنكم استخدامه لبرمجة أي ميكروكنترولر:

http://www.megaupload.com/?d=06T784GO

وكلمة السر هي: iamphysicist

والتي تعني “أنا فيزيائي”

إذا عانيتم من أي مشاكل في البرنامج فأنا أرحب بأسئلتكم لكن في حدود المعقول دون كسل أو اتكالية، كي تتعلم استخدام البرنامج يجب أن تحاول مرة ومرتين وألف وسأشرح القليل عنه لاحقاً

والسلام


(metcho) #7

شكرا ليك انا فعلا معرفش لغة السى بس انا اعرف اسمبلى علشان كده بسئل بس عايز اعرف هو لو بديلت ال pic ده بـــــــــــــــــــ ال PIC16F77[B] ايه الى اغيره لانه ده فيه 40 ريجل

[/b]


(TheDestroyer) #8

إذا غيرت الـPIC يجب أن تنشئ برنامج جديد عن طريق PIC-C Compiler ثم تنسخ الأوامر الأساسية بعد void main كما ذكرت سابقاً للأخ الحب ابن الحب، وعلى العموم وجدت على الإنترنت نموذج جاهز مشغل عليه شاشة LCD على لغة الأسملبي، ولأني لا أعرف شيء في هذه اللغة رح أنزله مثل ما هو قريباً، وبتمنى يكون عندك فكرة كيف تعدله على من أجل 16F77

على العموم إذا استطعت إجراء التعديل على لغة السي فالذي تحتاجه هو فقط أن تصل الشاشة LCD إلى البورت b في PIC16F77 وإذا كانت هذه لا تملك بورت b أو أن هذا البورت مشغول استخدم نفس الطريقة التي شرحتها للحب ابن الحب بكيفية تغيير البورت المطلوب.

والسلام


(system) #9

والله حقيقتا تستحق الشكر أخي(The Destoryer) على ما تقدمه لنا من مساعدة وأرجو من الله أن يزيدك من فضله لتبقى لنا زادا والسلام


(الحب ابن الحب) #10

شكرا لك أخي على الرد و خاصّة على المرفقات فهي ما كنت قد طلبته فالكود وحده لا يمكن استعماله من غير المخطط… أنا درست برمجة السي و لكن ليست المخصّصة للميكرو كنترولر و إن شاء الله لن تصعب علي بما أنّي كنت من المتميّزين في مشاريع السي في القسم كما أنّي أستاذي المؤطر طلب منّي استعمال الميروسي في برمجة الميكروكنترولر و أنا أبحث عن ملفات بالفرنسيّة أتعلّم بها هذا البرنامج و ذلك لضعفي في اللغة الإنجليزيّة للأسف
أشكرك مرّة اخرى أخي و السلام عليكم و رحمة الله و بركاته

(chaa500) #11

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

اذا اردت اخي ان نتعاون فاتصل بي على Skype
pseudo

chaa500
email:aach1978@yahoo.fr


(TheDestroyer) #12

أخي العزيز pseudo

أولاً أعتذر عن التأخير في الرد…

أنا لست مختصاًّ في هذا الموضوع، كل الحكاية إنه أردت إني أتعلم شيء جديد في الإلكترونيات ونقلتني الصدفة إلى PIC، وأنا أصلاً فيزيائي ولست مهندس إلكترونيات، لكن حبي للغة السي سهل الأمر عشرات المرات، يمكننا أن نتفق بحيث أصمم أنا البرامج وتنزلها إنت مع الشرح على المنتدى أو أي اتفاق آخر.

أنا لا أستخدم سكايب (أعتذر لذلك) يمكنك مراسلتي على الماسنجر msn على العنوان التالي:

megasamer at msn.com

استبدل at بـ@

وأتمنى إنه إدارة المنتدى لا تعملنا مشكلة لنشر البريد لأنه هدفي هو مصلحة المنتدى وأنا ما عندي وقت كل شوي أدخل وأتفحص الردود

والسلام أفضل الختام.


(system) #13

أشكرك على هذه المعلومات الجميلة ولكن لى سؤال وهو البرنامج اللى حضرتك كتبته فيه خطأ فى السطر 32 ومش عارف ايه هو حله
برجاء قوللى أصلحه ازاى

ومرة أخرى بشكرك على هذا المجهود الكبير


(system) #14

سلام عليكم عاوز استخدام المتحكم اتوميغا فى عرض الشاشات


(system) #15

thanks so much…