 |
:: مهندس متواجد ::
تاريخ التسجيل: Oct 2010
الدولة: العراق
المشاركات: 159
|
|
نشاط [ كرار العامري ]
قوة السمعة:
|
|
11-08-2012, 12:22 PM
المشاركة 18
|
|
بسم الله الرحمن الرحيم
الكود الثالث والاخير
وهو عن استخدام امر 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 ثمان اشكال فقط
ومن المشاكل الاخرى هى ان الاشكال لها بروتوكول فى كتابتها
اولا
قبل ارسال اى شكل او قيم من مصفوفة الشكل المراد اظهارة
يجب اولا ارسال امر مثل وكما ترى مكتوب بداخلة 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;
ثم 8 مصفوفات لل8 اشكال الى عملتهم وكل مصفوفة تعبر عن شكل
كود:
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);
}
زى ما احنا شايفين هنا الامر قمت بكاتبة متغير اسمة x بداخلة
وفى كل مرة اغير فيها الشكل اغير معه قيمة x
وهكذا مع الامر الثانى
كود:
Lcd_Chr(pos_row, pos_char, x1);
اظن الامر اصبح مفهوم الان
وايضا جعلت المصفوفة التى سوف يتم عرضها هى وعند كتابة الشكل المراد انقل خانات مصفوفة اى شكل الى هذه المصفوفة ليتم عرض الشكل
الان ساقوم بشرح طريقة عرض شكل واحد فقط للتوضيح والباقى بالمثل
وهو اول شكل
كود:
for(y=0;y<7;y++){text2[y]=character0[y];}
x=64;x1=0;
CustomChar(1,1);
delay_ms(500);
اولا
يجب نقل خانات مصفوفة الشكل الذى اريد نقلة الى المصفوفة ولذلك قمت بعمل جملة تكرارية بقيمة 7 مرات
ثم جعلت المتغير y الذى يزيد كل مرة من مرات التكرار بقيمة 1
هو الذى يقوم بالتبديل للمصفوفتان
فا فى البداية تكون قيمتة 0
وعندما اضعه داخل مربعات المصفوفة هذا يعنى ان ابدل الخانة رقم صفر اى بقيمة y
وهكذا الخانة رقم 0 من مصفوفة الشكل character0 سوف تنقل الى الخانة رقم صفر من المصفوفة text2
وهكذا 7 مرات لنقل 7 خانات
ثم
جعلت قيمة x و x1 تساوى قيم لاول شكل
وهى هنا لكى يتم عرض شكل واحد ولا يحدث تداخل بين الاشكال
ثم
وهذا هااااااااام
قد اصبح كل شىء جاهز الان لعرض الشكل على الشاشة
وهذا يتم من خلال الامر
وهو يعنى الذهاب الى داله العرض
وعرض الشكل فى الصف الاول والمربع الاول ايضا
فالرقم الاول يعنى الصف والرقم الثانى يعنى المربع
ثم قمت بالانتظار لمدة 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);}
وهناك امر انتظار 300 مللى ثانية حتى لا تجرى الكلمة بسرعه عالية
ثم قمت بمسح الشاشة
كود:
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
|
اخي الحبيب
ماشاء الله عليكم اللهم يزيدك من العلم
انا منتظر منك المزيد من الابداع والتواصل ومن جميع المبدعين في هذا المنتدى
وفقكم الله
|