منتديات الالكترونيات العصرية  
yoursite.com page title .

استرجاع كلمة المرور طلب كود تفعيل العضوية تفعيل العضوية
العودة   منتديات الالكترونيات العصرية > منتدى الحاكمات الدقيقة Microcontroller > منتدى المتحكمات ميكرو بلغة السي MikroC

  #1  
قديم 08-23-2012, 10:25 PM
funky112233 funky112233 غير متواجد حالياً
استاذ الكترونيات
 
تاريخ التسجيل: Sep 2009
المشاركات: 116
معدل تقييم المستوى: 12
funky112233 has a spectacular aura aboutfunky112233 has a spectacular aura about
افتراضي تعلم كيفية التعامل مع الlcd وما انواعها وكيفية التحكم بها بالميكروسى ((الجزء الرابع))



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

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

كل عام وانتم بخير

ان شاء الله هنبدء فى الجزء دة مع الشاشات ال GLCD) Graphic Lcd)

اولا
__________

هذا رابط الجزء الاول وفية تعريفات عن الشاشات وانواعها

http://www.dbaasco.com/vb/showthread.php?t=7601

....................................................

هذا رابط الجزء الثانى وهو خاص بالشاشات ال Character LCD

http://www.dbaasco.com/vb/showthread.php?t=7603
....................................................

هذا رابط الجزء الثالث وهو خاص بالشاشات ال Segment LCD

http://www.dbaasco.com/vb/showthread.php?t=7617

_______________________________________________________________________________________

الان سوف نتحدث عن الشاشات Graphic Lcd

والشرح الاول سيكون كالاتى

1 - كلام عن الشاشة وكيف سوف نكمل الشرح ان شاء الله ؟؟
2 - التعرف على انواع هذه الشاشة ؟؟
3 - شرح اوامر اول نوع من الشاشة وكيفية التعامل معه ؟؟
...........................................................................................................

1 - كلام عن الشاشة وكيف سوف نكمل الشرح ان شاء الله ؟؟

يجب ان نعلم من البداية ان التعامل مع الشاشات ال Graphic Lcd
سوف يختلف تمام عن الشاشات الاخرى
لان لها الكثير من الانواع وسوف نتحدث عن هذا الامر ان شاء الله
وهذا يعنى ان هذا الجزء يمكن ان يطول معانا

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

والتعامل مع هذه الشاشة لا يختلف فى الكثير بينة وبين الشاشات الملونة
فا فهم التعامل مع هذا النوع سوف يسهل عليك ان شاء الله التعامل مع الشاشات الالوان

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

وهذه صورة لاحدى الانواع




وبالنسبة للشرح

فسوف نبدء اولا بالسهل ثم الصعب ان شاء الله
وفى البداية لن اقوم بكتابة اية اكواد او رفع دوائر

فقط تعريف الاوامر الموجودة فى مكتبة ال MikroC وفهم كيفية عمل هذه الشاشات
والتعرف على انواعها وما المشاكل التى سوف تواجهنا ان شاء الله
وما الفائدة منها ايضا ..

_______________________________________________________________

2 - التعرف على انواع هذه الشاشة ؟؟

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

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

ولكن ببروتوكول معين وخاص لكل متحكم

وهنا هذه مشكلة لان فى الشاشات ال Graphic Lcd
كل متحكم له بروتوكول خاص بة وهذا ما يجعل لهذه الشاشات
انواع مختلفة واكواد مختلفة لكل نوع وطريقة خاصة للتعامل مع كل نوع

ولكن انتبة انا لا اتحدث عن ما ان كانت الشاشة كبيرة الحجم ام صغيرة
او بها اضاءة ام لا

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

اذن ما يهم هو نوع المتحكم الموجود بداخل الشاشة

وهناك انواع كثيرة من المتحكمات وكل شركة لها متحكم خاص بها
مثل

Toshiba T6963C Controller

كما ترى شركة توشيبا وهذا هو اسم المتحكم الخاص بالشركة
وهذه بعض اسماء الشاشات التى يتحكم بها هذا المتحكم

LM3228 LM3229 LM3267 LM3283
LM3287 LM4228 LM4265 LM4267
LM4283 LM4287

.........................

Sharp SED1520 Controller
وهذا متحكم شركة شارب
وهذه اسماء بعض الشاشات التى يستخدم فيها هذا المتحكم

AGM1232G EW12A03GLY HDM32GS12-B HDM32GS12Y-B

...........................

Sharp SED1565 Controller
وهذا المتحكم من نفس الشركة ولكن يختلف فى التعامل عن الاخر

وهذه بعض الشاشات التى يستخدم فيها هذا المتحكم

HDG12864F-1 HDS12864F-3 HDG12864L-4 HDG12864L-6
NOKIA7110 TG126410GFSB TG13650FEY

............................

Samsung KS0108 Controller

وهذا خاص بشركة سامسونج

..............................

وهكذا كل متحكم له طريقة للتعامل معه ولكن معظمهم قريب بعض الشى من الاخر
يعنى لو عرفنا نتحكم فى واحد على الاقل ان شاء الله الباقى يكون سهل

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

وهذه الشاشات تقاس من خلال عدد البكسلات
فمثلا 64*128
هذا يعنى ان الشاشة مكونة من 8192 بكسل
وهكذا تقاس هذة الشاشات

_______________________________________________________________

3 - شرح اوامر اول نوع من الشاشة وكيفية التعامل معه ؟؟

وهو النوع الموجود له مكتبة خاصة فى الميكروسى للتعامل معه بكل سهولة
واسم المكتبة هو Graphic Lcd Library

ونوع المتحكم هو Samsung KS0108/KS0107 Controller
والشاشة بحجم Lcd 128x64

فهذه المكتبة لا تعمل الا مع هذا المتحكم وهذا الحجم من الشاشات
وستجد احدى انواع هذه الشاشة فى البروتوس اسمها

AMPIRE128X64

هذه هى اوامر التحكم فى الشاشة

كود:
Glcd_Init 
Glcd_Set_Side 
Glcd_Set_X 
Glcd_Set_Page 
Glcd_Read_Data 
Glcd_Write_Data 
Glcd_Set_Ext_Buffer 

Glcd_Fill 
Glcd_Dot 
Glcd_Line 
Glcd_V_Line 
Glcd_H_Line 
Glcd_Rectangle 
Glcd_Rectangle_Round_Edges 
Glcd_Rectangle_Round_Edges_Fill 
Glcd_Box 
Glcd_Circle 
Glcd_Circle_Fill 
Glcd_Set_Font 
Glcd_Set_Font_Adv 
Glcd_Set_Ext_Font_Adv 
Glcd_Write_Char 
Glcd_Write_Char_Adv 
Glcd_Write_Text 
Glcd_Write_Text_Adv 
Glcd_Write_Const_Text_Adv 
Glcd_Image 
Glcd_Ext_Image 
Glcd_PartialImage 
Glcd_Ext_PartialImage

اول امر هو

كود:
Glcd_Init();
وهو امر التعريفات كما نعلم من الشروحات السابقة
ويكتب داخل الداله الرئيسية ال

كود:
void main()
وله تابع وهو اوامر ربط الارجل والاطراف الخاصة بالميكرو و الشاشة

وهى

كود:
sbit GLCD_CS1 at RB0_bit;
sbit GLCD_CS2 at RB1_bit;
sbit GLCD_RS  at RB2_bit;
sbit GLCD_RW  at RB3_bit;
sbit GLCD_EN at RB4_bit;
sbit GLCD_RST at RB5_bit;

sbit GLCD_CS1_Direction at TRISB0_bit;
sbit GLCD_CS2_Direction at TRISB1_bit;
sbit GLCD_RS_Direction at TRISB2_bit;
sbit GLCD_RW_Direction at TRISB3_bit;
sbit GLCD_EN_Direction at TRISB4_bit;
sbit GLCD_RST_Direction at TRISB5_bit;
وتكتب قبل الداله الرئيسية ال

كود:
void main()
...................................................................................................
ثم

كود:
Glcd_Set_Side 
Glcd_Set_X 
Glcd_Set_Page 
Glcd_Read_Data 
Glcd_Write_Data 
Glcd_Set_Ext_Buffer
هذه ليس هامة لنا الان سوف نقوم بشرحها فيما بعد ان شاء الله

...................................................................................................
ناتى لاوامر العرض على الشاشة والتحكم بها

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

ويجب ايضا تامل هذه الصورة
فهنا نجد ان الشاشة لها محورين محور افقى x ومحور راسى y
وستجد ان المحور الافقى x يقع بين 0 الى 127 وهذا يعنى 128 بكسل بالعرض
وان المحور الراسى y يقع بين 0 الى 63 وهذا يعنى 64 بكسل بالطول
وهذا ما يعنى 64*128 وهو مقاس الشاشة ويختلف من شاشة الى اخرى على حسب المقاس
وعلى اساسهم يتم تحديد امكان الرسومات على الشاشة

وايضا ستجد ان هناك 8 صفحات من 0 الى 7
وهى تقسيمة تستخدم فى الكتابة على الشاشة





ناتى لاول امر وهو

كود:
Glcd_Fill
وهو امر للتحكم فى جملة بكسلات الشاشة سواء جعلها بيضاء او سوداء
ويمكنة مسح الشاشة تماما الى الون الابيض بكتابتة هكذا

كود:
Glcd_Fill(0);
وشكلة على الشاشة كما فى الصورة



او جعلها كلها سوداء بكتابته هكذا

كود:
Glcd_Fill(255);
وشكلة على الشاشة كما فى الصورة



..............................................................................................................

ثانى امر وهو

كود:
Glcd_Dot
وهذا الامر يتيح لك التحكم فى بكسل بكسل على حدا
اى نقطة واحدة على الشاشة فى كل امر

ويكتب هكذا

كود:
Glcd_Dot(0, 0, 2);
الرقم الاول هو لتحديد مكان النقطة او البكسل بالعرض اى الخط الافقى
الرقم الثانى هو لتحديد مكان النقطة او البكسل بالطول اى الخط الراسى
اما الرقم 2 فهو يعكس لون الشاشة اذا كان ابيض تكون النقطة سوداء والعكس

ويمكن كتابة الرقم 0 فهو يعبر عن اللون الابيض
ويمكن كتابة الرقم 1 فهو يعبر عن اللون الاسود

ويمكن تغير مكان النقطة او البكسل على حسب ما نريد من خلال وضع ارقام مكان الصفرين

وهنا كتبت 3 نقاط على الشاشة



..............................................................................................................

ثالث امر هو

كود:
Glcd_Line
وهو امر لكتابة خط على الشاشة ويمكن ان يكون معوج او بزاوية معينة كما نريد

ويكتب هكذا

كود:
Glcd_Line(0, 0, 20, 30, 1);
الرقم الاول هو لتحديد مكان نقطة البداية للخط بالعرض اى الخط الافقى
الرقم الثانى هو لتحديد مكان نقطة البداية للخط بالطول اى الخط الراسى

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

اما الررقم الخامس فهو لتحديد اللون

وهنا الخط سوف يرسم بين النقطة 0 الى 20 وهذا يعنى ان كل النقط من 0 الى 20 سوف تتحول للون الاسود او الابيض
على حسب ما اخترنا وهذا الخيار يحدد طول الخط

اما الرقمين من 0 الى 30 فهذا يحدد ميلان الخط اى ان بداية الخط من النقطة 0
وسوف يميل حتى النقطة 30
الصور سوف توضح ذلك



هنا قمت بعمل ثلاث خطوط باطوال مختلفة وميلان مختلف
..............................................................................................................
الامر الرابع هو
كود:
Glcd_V_Line
وهو يقوم برسم خط عمودى
اى لا يكون فية زواية او ميلان لا بل عمودى

ويكتب هكذا

كود:
Glcd_V_Line(5, 25, 10, 1);
الرقم الاول لتحديد مكان نقطة بداية الخط على المحور الراسى
الرقم الثانى لتحديد مكان نقطة نهاية الخط على المحور الراسى
الرقم الثالث لتحديد مكان الخط على المحور الافقى
الرقم الرابع لتحديد اللون

الرقم الاول والثانى يحددان طول الخط على المحور الراسى
والرقم الثالث يحدد مكانة على المحور الافقى اى يحركة يمينا ويسارا



..............................................................................................................
الامر الخامس هو
كود:
Glcd_H_Line
وهو يقوم برسم خط افقى
اى لا يكون فية زواية او ميلان لا بل افقى

ويكتب هكذا

كود:
Glcd_H_Line(10, 50, 20, 1);
الرقم الاول لتحديد مكان نقطة بداية الخط على المحور الافقى
الرقم الثانى لتحديد مكان نقطة نهاية الخط على المحور الافقى
الرقم الثالث لتحديد مكان الخط على المحور الراسى
الرقم الرابع لتحديد اللون

الرقم الاول والثانى يحددان طول الخط على المحور الافقى
والرقم الثالث يحدد مكانة على المحور الراسى اى يحركة لاعلى ولاسفل



..............................................................................................................
الامر السادس هو
كود:
Glcd_Rectangle
وهويقوم برسم مستطيل او مربع على الشاشة
بالحجم الذى نريد وفى المكان الذى نريد

ويكتب هكذا

كود:
Glcd_Rectangle(5, 5, 40, 40, 1);
الرقم الاول هو لتحديد مكان نقطة البداية للضلع الافقى على الخط الافقى
الرقم الثانى هو لتحديد مكان نقطة البداية للضلع الراسى على الخط الراسى

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

اما الررقم الخامس فهو لتحديد اللون

الرقم الاول والثالث يحددان طول الضلع الافقى

اما الرقم الثانى والرابع فيحددان طول الضلع الراسى



..............................................................................................................
الامر السابع هو
كود:
Glcd_Rectangle_Round_Edges
وهو امر يقوم برسم مستطيل او مربع على الشاشة
بالحجم الذى نريد وفى المكان الذى نريد

ولكن يقوم بجعل راس المسطيل او المربع دائرى

ويكتب هكذا

كود:
Glcd_Rectangle_Round_Edges(5, 5, 40, 40, 12, 1);
الرقم الاول هو لتحديد مكان نقطة البداية للضلع الافقى على الخط الافقى
الرقم الثانى هو لتحديد مكان نقطة البداية للضلع الراسى على الخط الراسى

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

اما الرقم الخامس فهو لتحديد نصف قطر الدائرة
والرقم السادس فهو لتحديد اللون

الرقم الاول والثالث يحددان طول الضلع الافقى

اما الرقم الثانى والرابع فيحددان طول الضلع الراسى

اما الرقم الخامس فيحدد نصف قطر الدائرة
اى قيمة تقوص راس المربع او المستطيل



..............................................................................................................
الامر الثامن هو
كود:
Glcd_Rectangle_Round_Edges_Fill
وهو يقوم بعمل نفس الامر السابع
اى
يقوم برسم مستطيل او مربع على الشاشة
بالحجم الذى نريد وفى المكان الذى نريد
ويقوم بجعل راس المسطيل او المربع دائرى

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

ويكتب هكذا

كود:
Glcd_Rectangle_Round_Edges_Fill(5, 5, 40, 40, 12, 1);
وهو يقوم بما يقوم به الامر السابع مع الاختلاف الذى ذكرتة



..............................................................................................................
الامر التاسع هو
كود:
Glcd_Box
وهو يقوم برسم مربع او مستطيل على الشاشة
ويمكن التحكم فى حجمة او مكانة كما نريد
ولكن يكون مظلل مكانة

ويكتب هكذا

كود:
Glcd_Box(5, 15, 20, 40, 1);
الرقم الاول هو لتحديد مكان نقطة البداية للضلع الافقى على الخط الافقى
الرقم الثانى هو لتحديد مكان نقطة البداية للضلع الراسى على الخط الراسى

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

اما الررقم الخامس فهو لتحديد اللون

الرقم الاول والثالث يحددان طول الضلع الافقى

اما الرقم الثانى والرابع فيحددان طول الضلع الراسى



..............................................................................................................
الامر العاشر هو
كود:
Glcd_Circle
وهو يقوم برسم دائرة على الشاشة
يمكن التحكم فى حجمها ومكانها كما نريد

ويكتب هكذا

كود:
Glcd_Circle(50, 50, 10, 1);
الرقم الاول يحدد مكان نقطة مركز الدائرة على الخط الافقى
الرقم الثانى يحدد مكان نقطة مركز الدائرة على الخط الراسى
الرقم الثالث يحدد نصف قطر الدائرة
الرقم الرابع يحدد اللون

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

والرقم 10 يعنى 10 بكسل اى ان قطر الدائرة 20 بكسل



..............................................................................................................
الامر الحادى عشر هو
كود:
Glcd_Circle_Fill
وهو يقوم برسم دائرة على الشاشة
يمكن التحكم فى حجمها ومكانها كما نريد
ولكن يجعلها مظللة من الداخل

ويكتب هكذا

كود:
Glcd_Circle_Fill(50, 50, 10, 1);
وهو يقوم بما يقوم به الامر العاشر ولكن يظلل الدائرة من الداخل على حسب اللون
الذى قمنا باختيارة



..............................................................................................................
الامر الثانى عشر هو
كود:
Glcd_Set_Font
هذا الامر يقوم بتحديد شكل محدد من الرسومات كا الحروف
سواء تحديد حجمها او شكلها
وهذا لانة يحدد عدد من البكسلات لكل حرف فى الذاكرة كما نريد

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

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

ومعه هذه الاوامر

Glcd_Set_Font_Adv
Glcd_Set_Ext_Font_Adv
Glcd_Write_Char
Glcd_Write_Char_Adv
Glcd_Write_Text
Glcd_Write_Text_Adv
Glcd_Write_Const_Text_Adv

وهى اوامر الكتابة على الشاشة وتحديد شكل وحجم الحروف الخ.....

..............................................................................................................
الامر العشرون وهو
كود:
Glcd_Image
وهو الامر الذى يقوم برسم صورة على الشاشة



وسوف يتم شرحة فيما بعد ايضا فى جزء خاص بة ان شاء الله

هو وهذه الاوامر ايضا

Glcd_Ext_Image
Glcd_PartialImage
Glcd_Ext_PartialImage

نظرا لاهمية الامر ولانة يحتاج الى الكثير من الشرح ..
........................................................................ انتهى الجزء الاول من الشرح ........................................................................

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



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

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

وان كان عند احدكم اى تعليق او توضيح او حتى تكملة للشرح فليضعه
فنحن نكمل بعضنا البعض

وان شاء الله القادم كود على استخدام ما تم شرحة
ثم شرح ما تركناه ثم كود وهكذا ان شاء الله

وكل عام وانتم بخير


رد مع اقتباس
  #2  
قديم 08-30-2012, 08:39 AM
funky112233 funky112233 غير متواجد حالياً
استاذ الكترونيات
 
تاريخ التسجيل: Sep 2009
المشاركات: 116
معدل تقييم المستوى: 12
funky112233 has a spectacular aura aboutfunky112233 has a spectacular aura about
افتراضي الجزء الثانى من الشرح الكود الاول

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

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

سوف نتحدث فى هذا الجزء ان شاء الله عن كود بسيط جدا لهذا النوع من الشاشات
والذى يعمل بالمتحكم Samsung KS108/KS107 controller

واحب ان اقول ان هذا الكود ما هو الا مثل بسيط للتوضيح فقط

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

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

_______________________________________________________________

نيجى للجزء العملى

اولا شاهد هذا الفديو

http://www.youtube.com/watch?v=zBWry...ature=youtu.be


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

واستخدمت سينسور لقياس الحرارة وهو مشهور واسمة LM35
_______________________________________________________________

ثانيا

حمل الكود والدائرة وكل شىء من هنا

http://www.4shared.com/rar/1MlMwkll/GLCD.html?

_______________________________________________________________

ثالثا
شرح الكود

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

الامر الاخر

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

http://www.dbaasco.com/vb/showthread.php?t=7656

..............................................................................................................

وهذا هو الكود

كود:
char GLCD_DataPort at PORTB;

sbit GLCD_CS1 at RD0_bit;
sbit GLCD_CS2 at RD1_bit;
sbit GLCD_RS  at RD2_bit;
sbit GLCD_RW  at RD3_bit;
sbit GLCD_EN  at RD4_bit;
sbit GLCD_RST at RD5_bit;

sbit GLCD_CS1_Direction at TRISD0_bit;
sbit GLCD_CS2_Direction at TRISD1_bit;
sbit GLCD_RS_Direction  at TRISD2_bit;
sbit GLCD_RW_Direction  at TRISD3_bit;
sbit GLCD_EN_Direction  at TRISD4_bit;
sbit GLCD_RST_Direction at TRISD5_bit;

char txt[4];
unsigned tmp;

void main() {

Glcd_Init();
Glcd_Fill(0);
ADC_Init(); 

Glcd_Rectangle(5, 10, 40, 40, 1);
Glcd_Rectangle(15, 20, 50, 50, 1);
Glcd_Line(5, 10, 15, 20, 1);
Glcd_Line(40, 10, 50, 20, 1);
Glcd_Line(5, 40, 15, 50, 1);
Glcd_Line(40, 40, 50, 50, 1);


Glcd_Circle(98, 43, 8, 1);
Glcd_Rectangle(95, 0, 102, 36,1);

  while(1){

  tmp = ADC_Read(0);
  tmp = tmp/2.05;
  
  if (tmp>10){Glcd_Circle_Fill(98, 43, 7, 1);} if (tmp<10){Glcd_Circle_Fill(98, 43, 7, 0);}
  if (tmp>20){Glcd_Box(95, 30, 102, 35, 1);}   if (tmp<20){Glcd_Box(96, 30, 101, 35, 0);}
  if (tmp>30){Glcd_Box(95, 25, 102, 30, 1);}   if (tmp<30){Glcd_Box(96, 24, 101, 29, 0);}
  if (tmp>40){Glcd_Box(95, 20, 102, 25, 1);}   if (tmp<40){Glcd_Box(96, 18, 101, 23, 0);}
  if (tmp>50){Glcd_Box(95, 15, 102, 20, 1);}   if (tmp<50){Glcd_Box(96, 12, 101, 17, 0);}

  ByteToStr(tmp, txt);
  Glcd_Write_Text("o", 105,6, 1);
  Glcd_Write_Text(txt, 90,7, 1);
  Glcd_Write_Text("C :", 70,7, 1);

          }
}
ملحوظة : اذا كان هناك اى شيء من الشرح غير واضح قم بمراجعه الشرح الاول وان شاء الله يتضح كل شىء

والشرح سوف يقسم الى 3 اجزاء وسنستخدم هذا التقسيم فيما بعد ان شاء الله


اولا

تعريفات ربط ارجل الشاشة مع الميكرو من خلال هذه الاوامر

كود:
char GLCD_DataPort at PORTB;

sbit GLCD_CS1 at RD0_bit;
sbit GLCD_CS2 at RD1_bit;
sbit GLCD_RS  at RD2_bit;
sbit GLCD_RW  at RD3_bit;
sbit GLCD_EN  at RD4_bit;
sbit GLCD_RST at RD5_bit;

sbit GLCD_CS1_Direction at TRISD0_bit;
sbit GLCD_CS2_Direction at TRISD1_bit;
sbit GLCD_RS_Direction  at TRISD2_bit;
sbit GLCD_RW_Direction  at TRISD3_bit;
sbit GLCD_EN_Direction  at TRISD4_bit;
sbit GLCD_RST_Direction at TRISD5_bit;

الامر
كود:
char GLCD_DataPort at PORTB
يعنى اننى سوف اوصل اطراف الداتا بالشاشة من خلال البورت B

وهى الاطراف من D0 الى D7 فى الشاشة

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

وهذا كلة يقوم بة الميكرو سى بالنيابة عنك تذكروا هذه النقطة

..............................................................................................................

ثم قمت بتعريف متغيريين لاستخدامهم داخل الكود وهما

كود:
char txt[4];
unsigned tmp;
..............................................................................................................

ثم
كود:
Glcd_Init();
Glcd_Fill(0);
ADC_Init();
هنا قمت بكتابة امر تعريف الشاشة Glcd_Init

ثم قمت بكتابة امر مسح الشاشة
او تحويل كل البكسلات الى اللون الابيض بوضع 0 لهذا الامر Glcd_Fill

ثم امر تعريف المحول من تناظرى الى رقمى ADC

..............................................................................................................

ثم اوامر رسم الشكل الثلاثى الابعاد على الشاشة
وهو المكعب المرسوم



وهذه اوامرة

كود:
Glcd_Rectangle(5, 10, 40, 40, 1);
Glcd_Rectangle(15, 20, 50, 50, 1);
Glcd_Line(5, 10, 15, 20, 1);
Glcd_Line(40, 10, 50, 20, 1);
Glcd_Line(5, 40, 15, 50, 1);
Glcd_Line(40, 40, 50, 50, 1);
..................................................................................
وقبل البدء فى شرح الاوامر
احب ان اقول ان وحدة القياس هنا هى اصغر وحدة فى الشاشة وهى البكسل نفسة
وهذا ما تركتة من الشرح السابق ولكنى نوهت عنة فى الجزء الخاص بالدائرة
وهو ان نصف قطر الدائرة يساوى 8 او 12 او 5 مثلا
ولكن ما هى وحدة القياس مثل ما نقول 8 سنتيمتر او 12 سنتيمتر
هنا وحدة القياس هى البكسل
اى 8 بكسل او 12 بكسل
وهكذا مع كل رسم على الشاشة
ولمعرفة قياس الحجم الحقيقى للرسم على الشاشة بالسنتيمتر
قم بالاطلاع على الداتا شيت للشاشة المستخدمة
سوف تجد قياس البكسل بالمللى
وهكذا يمكن حساب الحجم الحقىقى بكل سهولة
......................................................................................


الجزء الاول

ناتى لشرح الاوامر فهذا الجزء فية خداع بصرى لان الرسمة ثنائية الابعاد
ولكن اعيننا تراها ثلاثية الابعاد

فاذا دققت فى الرسمة جيدا ستجد ان الرسمة عبارة عن مربعين
و 4 اربعه خطوط

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

ولهذا قمت برسم مربعين بنفس الحجم ولكن احدهم منخفض عن الاخر

اول مربع
كود:
Glcd_Rectangle(5, 10, 40, 40, 1);
يبدء من البكسل الخامس الى البكسل الاربعين بالنسبة للخط الافقى وطول الخط هو 35 بكسل

ويبدء ايضا من البكسل العاشر الى البكسل الاربعين بالنسبة للخط الراسى وطول الخط هو 30 بكسل

واللون هو اسود كما نرى

ثانى مربع
كود:
Glcd_Rectangle(15, 20, 50, 50, 1);
يبدء من البكسل الخامس عشر الى البكسل الخمسين بالسبة للخط الافقى وطول الخط هو 35 بكسل

ويبدء ايضا من البكسل العشرين الى البكسل الخمسين بالنسبة للخط الراسى وطول الخط هو 30 بكسل

واللون هو اسود ايضا

ثم قمت بعمل هذه الخطوط لتوصيل اطراف المربعيين مع بعضهما البعض

سوف اشرح اول خط فقط والاخرين بالمثل

اول خط هو
كود:
Glcd_Line(5, 10, 15, 20, 1);
وهو خط من النوع الذى نتحكم فى زاويتة او ميلة

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

اى ان الامرما هو الا توصيل بدايات ببدايات ونهايات بنهايات

بمعنى ان بداية اول مربع من البكسل الخامس
وهذا ما تم كتابتة كابداية للخط اى نقطة البداية لة نت البكسل الخامس ايضا
الى البكسل الخامس عشر
وهو نقطة بداية المربع الثانى وهكذا يكون طول الخط 10 بكسل
وهو الفرق بينهم

ثم ميلان الخط والميلان يعتمد ايضا على بداية الخط الراسى للمربع الاول وبدايتة للمربع الثانى

اى من البكسل العاشر الى البكسل العشرين

انظر هنا

كود:
Glcd_Rectangle(5, 10, 40, 40, 1);
Glcd_Rectangle(15, 20, 50, 50, 1);
Glcd_Line(5, 10, 15, 20, 1);
انظر الى بدايات المربعيين والى ارقام الخط ستجدها متطابقة
فبداية المربع الاول 5 وهو ما تم كتابتة كا بداية للخط

ويمتد الى البكسل ال 15 وهو بداية المربع الثانى
اما الميلان فهو بداية الخط الراسى للمرع الاول وينتهى الى بداية الخط الراسى للمربع الثانى

هذا هو كل شىء

وباقى الخطوط بالمثل اى بدايات ونهايات وتوصل ببعضها البعض

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

وهنا ياتى سؤال مهم
كيف تم تقدير مكان المربعين على الشاشة

هذا الامر يرجع لك

يمكنك فعل ذلك بالطرق الحسابية

اما انا فاستخدمت خيالى لتصور الشكل وتقدير مكانة
وبعد ذلك بالتجربة والتصحيح الخطا الى ان وصلت للشكل الذى اريد
..............................................................................................................

الجزء الثانى

الجزء الخاص بدرجات الحرارة

اولا
رسم الشكل
وهو مكون من مستطيل ودائرة



وهذه اوامر الرسمة

كود:
Glcd_Circle(98, 43, 8, 1);
Glcd_Rectangle(95, 0, 102, 36,1);
كما نرى فى البداية رسمنا الدائرة بنصف قطر 8 بكسل Glcd_Circle

وقمنا برسم المستطيل بعد ذلك Glcd_Rectangle

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

....................................................

ثم قمت بالدخول فى حلقة تكرارية الى ملا نهاية

كود:
while(1)
ثم قمت بقراءة الحساس من الطرف الاول للمحول وتخزين قيمتة فى المتغير tmp من خلال الامر

كود:
tmp = ADC_Read(0);
ثم قمت بقسمة القيمة على الرقم 2.05 وهو لتحويل قيمة المحول الى درجة حرارية

كود:
tmp = tmp/2.05;
...................................................

ثم اوامر العرض المتأثر بالحرارة
وهى الاوامر التى تقوم بملىء المستطيل بالون الاسود او تمسحة على حسب درجة الحرارة

وهو الشكل المتحرك فى هذا الكود

وسوف اشرح امرين فقط والباقى بالمثل

الامر الاول هو

كود:
if (tmp>10){Glcd_Circle_Fill(98, 43, 7, 1);} if (tmp<10){Glcd_Circle_Fill(98, 43, 7, 0);}
هنا قلت له اذا كانت درجة الحرارة اكبر من عشر درجات
قم بعمل دائرة مظللة بالون الاسود من خلال الامر Glcd_Circle_Fill
ولكن هنا ملحوظة الدائرة فى نفس مكان الدائرة الاساسية التى قمت برسمها فوق
ولكن لاحظ نصف القطر فى الدائرة الاساسية كان 8 بكسل
اما هنا 7 بكسل فقط
وهذا حتى لا يتاثر رسم الدائرة المظللة او اخفائها مع الدائرة الاساسية

هذه النقاط هامة ويجب مراعتها وبالتجربة كلة هيبان

ثم قلت له اذا كانت درجة الحرارة اقل من 10 درجات قم برسم نفس الدئرة
ولكن بالون الابيض وهكذا يظهر لنا اننا قمنا بمسحها

ثم يختبر مرة اخرى

كود:
if (tmp>20){Glcd_Box(95, 30, 102, 35, 1);}   if (tmp<20){Glcd_Box(96, 30, 101, 35, 0);}
اذا كانت درجة الحرارة اكبر من 20 قم برسم مستطيل بالون الاسود
بعرض 7 بكسل وايضا هذا العرض اقل ببكسل واحد فقط من حجم
المستطيل الاصلى للشكل وهو يقع داخل المسطيل الاصلى للشكل

وارتفاعه 5 بكسل من خلال 30 الى 35 قم بطرحهم ينتج 5 بكسل
وهو ارتفاع المستطيل الاسود

واذا كانت درجة الحرارة اقل من 20 قم برسم نفس المستطيل ولكن باللون الابيض
حتى يظهر وكانه ممسوح

وهكذا مع باقى الاوامر حتى الدرجة 50 ويمكنك الزيادة او النقصان كما تريد

...............................................

الجزء الثالث

ثم اوامر كتابة درجات الحرارة على الشاشة

ملحوظة :: هذا الامر لم يتم شرحة بعد بالتفصيل

اول امر هو تحويل الارقام الى اسكى كود وهذا الامر تم شرحة فى الجزء الثانى

كود:
ByteToStr(tmp, txt);
ثانى امر هو عرض علامة الدرجة بحيث تظهر فوق الرقم وهذا كلة من خلال التنسيق فى اماكن العرض
وبالطبع بالتجربة ويمكن عمل ذلك بالحسابات

كود:
Glcd_Write_Text("o", 105,6, 1);
ثالث امر هو لعرض درجة الحرارة على الشاشة

كود:
Glcd_Write_Text(txt, 90,7, 1);
رابع امر هو عرض حرف : C للدلالة على انها درجة سلزية

كود:
Glcd_Write_Text("C :", 70,7, 1);
_______________________________________________________________
_______________________________________________________________

الى هنا انتهى شرح الكود الاول للشاشة

بالنسبة للتقسم الموجود فى الشرح
فائدتة هى انة اذا كان هناك اى جزء فى الشرح به صعوبة من الاجزاء الثلاثة
اخبرنى باسم الجزء وان شاء الله اشرحة تانى بشكل مفصل اكثر وبالصور ان شاء الله خطوة خطوة

واذا كان فى اى سؤال انا تحت امركم ان شاء الله
وارجوا من الجميع التجربة فهى خير معلم
رد مع اقتباس
  #3  
قديم 09-02-2012, 12:45 AM
funky112233 funky112233 غير متواجد حالياً
استاذ الكترونيات
 
تاريخ التسجيل: Sep 2009
المشاركات: 116
معدل تقييم المستوى: 12
funky112233 has a spectacular aura aboutfunky112233 has a spectacular aura about
افتراضي الجزء الثالث من الشرح

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

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

فى هذا الجزء ان شاء الله هنبدء شرح الصور وازاى نقدر نعرضها على شاشة يتحكم بها
من خلال المتحكم Samsung KS108/KS107 controller

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

اولا
مما تتكون الصورة فى الاساس ؟؟

كما قلت فى السابق الصورة ما هى الا تحكم فى البكسلات بكسل بكسل

(( الكلام هنا على الشاشة الغير ملونة ))

والبكسل ياخذ قيمتين فقط
اما 1 او 0

1 يعنى انه يعمل 0 تعنى انه لا يعمل

وهذا ما يطبق فى البرمجة ايضا

اى ان البكسل فى الشاشة يساوى برمجيا البت

اذا بيانات صورة مقاس 64*128
تحتاج الى 8192 بت وهو نفسة نفس عدد البكسل للشاشة

ولكن هل سنقوم بارسال 8192 بت
بت بت

لا طبعا
هذا يتوقف على عدد اطراف الداتا Data المستخدمة

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

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

ولهذا تجد البرنامج المرفق مع الميكرو سى لتحويل الصور
يخرج لك 1024 بايت كا بيانات للصورة بالمقاس 64*128
فاذا قمت بقسمة 8192/8 ستجد 1024

انظر مثلا

كود:
const code char truck[1024] = {
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  

 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   

0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   

0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   

0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   

0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   

0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   

0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   

0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   

0,   0, 
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 128, 128, 

128, 128, 128,  64,  64,  64,  64,  64,  64,  32,  32,  32,  32,  32,  

32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  

32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  

32,  32,  32,  32,  32,  32,  32,  32,  32,  32, 160, 160, 160,  96, 

224, 224,  96,  96,  96,  32,   0,  32,  32,  32,  32,  32,  32,  32,  

32,  32,   0,   0,  64,  64,  64,   0, 128,   0,   0,   0,   0,   0,   

0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   

0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   

0,   0, 
  0,   0,   0,   0,   0, 254,   0,   1,   1,   1,   1,   1, 253, 253, 

253, 253,   1,   1,   1,   1,   1,   1, 253, 253, 253, 253,   1,   1,  

 1,   1, 253, 253, 253, 253, 249, 241, 225, 193, 129, 193, 225, 249, 

253, 253, 253, 253, 253,   1,   1,   1,   1, 253, 253, 253, 253, 221, 

221, 221,  29,  17,   1, 255,   1,   1,   1,   1,   0, 254,   1, 168,  

 8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,  

16, 224,  24,  36, 132,   0,   2, 130,   5,  81,  68, 112, 160, 192,  

96,  96,  32,   0, 128, 128, 192, 192, 192,  64,   0,   0,   0,   0,   

0, 128,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   

0,   0, 
  0,   0,   0,   0,   0,  63,  96,  96,  96, 224,  96,  96, 127, 127, 

127, 127, 124, 124, 124, 124,  96,  96, 127, 127, 127, 127,  96,  96,  

96,  96, 127, 127, 127, 127,  97, 103, 111, 127, 127, 111, 103,  99,  

97, 127, 127, 127, 127,  96,  96,  96,  96, 127, 127, 127, 127, 125, 

125, 125, 124, 116,  96, 127,  64,  64,  64, 160,  96, 252, 246,   1,  

14,   6,   6,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   

2,  66, 114,  60,  32,  16,  16,   0,   4,   2,   3,   2,   0,   0,   

0,   4,   4,   4,   4,  20,  16,  16,  16,  16,  16,   9,   9,  41, 

112,  32,  67,   5, 240, 126, 174, 128,  56,   0,   0,   0,   0,   0,  

 0,   0, 
  0,   0,   0,   0,   0,   0,   0,   0,   0,   1,   1,   1,   1,   1,  

 1,   1,   1,   1, 127, 127, 127, 127, 255, 255, 247, 251, 123, 191,  

95,  93, 125, 189, 189,  63,  93,  89, 177, 115, 243, 229, 207,  27,  

63, 119, 255, 207, 191, 255, 255, 255, 255, 255, 255, 255, 255, 127, 

127, 127, 127, 127, 127, 127, 127, 255, 255, 255, 127, 127, 125, 120, 

120, 120, 120, 120, 248, 120, 120, 120, 120, 120, 120, 248, 248, 224, 

135,   0,   0,   0,   0,   0,   0,   0,   0, 128, 240, 248, 120, 188, 

220,  92, 252,  28,  28,  60,  92,  92,  60, 120, 248, 248,  96, 192, 

143, 168, 216, 136,  49,  68,  72,   2, 160,  96,   0,   0,   0,   0,  

 0,   0, 
  0,   0,   0, 128, 192, 248, 248, 248, 248, 252, 254, 254, 254, 254, 

254, 254, 254, 254, 254, 254, 254, 255, 255, 255, 255, 255, 246, 239, 

208, 246, 174, 173, 169, 128, 209, 208, 224, 247, 249, 255, 255, 252, 

220, 240, 127, 255, 223, 255, 255, 255, 255, 255, 255, 254, 254, 255, 

255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 

254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 

255, 255, 255, 255, 255, 255, 254, 255, 190, 255, 255, 253, 240, 239, 

221, 223, 254, 168, 136, 170, 196, 208, 228, 230, 248, 127, 126, 156, 

216, 224, 240, 240, 242, 242, 240, 177,  32,   0,   0,   0,   0,   0,  

 0,   0, 
  0,   0,   0,   1,   1,   1,   1,   3,   3,   3,   7,   7,   7,   7,  

 7,  15,  15,  15,   7,  15,  15,  15,   7,   7,  15,  14,  15,  13,  

15,  47,  43,  43,  43,  43,  43,  47, 111, 239, 255, 253, 253, 255, 

254, 255, 255, 255, 255, 255, 191, 191, 239, 239, 239, 191, 255, 191, 

255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 

255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 

127, 127, 127, 127, 255, 255, 191, 191, 191, 191, 255, 254, 255, 253, 

255, 255, 255, 251, 255, 255, 255, 127, 125,  63,  31,  31,  31,  31,  

31,  31,  63,  15,  15,   7,   7,   3,   3,   3,   0,   0,   0,   0,   

0,   0, 
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  

 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   

0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   

0,   0,   0,   1,   1,   0,   1,   1,   0,   0,   0,   0,   0,   0,   

0,   0,   0,   0,   1,   1,   1,   1,   1,   1,   1,   1,   3,   3,   

3,  11,  11,  11,  11,   7,   3,  14,   6,   6,   6,   2,  18,  19,  

19,   3,  23,  21,  21,  17,   1,  19,  19,   3,   6,   6,  14,  15,  

15,   7,  15,  15,  15,  11,   2,   0,   0,   0,   0,   0,   0,   0,   

0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   

0,   0
};
هذه 1024 بايت

وهى خاصة بهذه الصورة



فكما ترى هذه هى الصورة على الشاشة
وفى الاعلى هى نفس الصورة ولكن برمجيا

هذا الجزء هام جدا لاننا سوف نحتاجه كثيرا عند التعامل مع اى شاشة ان شاء الله
فارجوا التركيز فية وفهمة وتخيلة وفهم كيف يرسل البيانات
وايضا هذا مفيد جدا جدا فى الماتريكس



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

وما بالك بالفديو ومابالك ايضا اذا كانت الصورة ملونة

هنا نقول سبحان الله الذى علم الانسان مالم يعلم

ولذلك نجد ان الفديو مثلا مساحتة كبيرة جدا

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

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

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

ناتى الان الى الجزء العملى

وكيفية تحويل الصورة ؟؟
وهل ينفع تحويل اى نوع من الصور ؟؟
وهل يجب ان تكون الصورة ذات امداد محدد ؟؟

نبدء الاول بنوعية الصورة المطلوبة
الصورة المطلوبة يجب ان تكون بامداد Bitmap او bmp.

وهذا الامداد هو الذى تعمل معه جميع برامج تحويل الصورة الى كود
بالنسبة لل GLCD

اذا يجب اولا تحويل الصورة الى هذه الصيغه حتى يتم تحويلها الى كود يستفاد منة
وايضا يجب ان يكون حجم الصورة مناسب لحجم الشاشة
يعنى لو الشاشة مثلا 64*128 لازم يكون حجم الصورة بنفس المقاس

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

ممكن تعمل دة من خلال برنامج التحويل format factory
او ممكن تفتح صورة من خلال الفوتوشوب او من خلال اى برنامج اخر

وتعمل للصورة حفظ بامداد جديد وهو Bitmap وبكدة تكون اتحولت الصورة وجاهزة للتحويل للكود

ولتحويل الصورة لكود
ممكن تبحث فى جوجل عن برامج للتحويل

Bitmap to code

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

وهو يقوم بتحويل الصورة الى كود مثل ما تم تحويل الصورة فى الاعلى

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

وهذا بالطبع غير الفونت font الى هنشرحة ان شاء الله فى الجزء القادم
والكتابة على الشاشة

وللدخول على برنامج التحويل

Tools<<GLCD Bitmap Editor

سيطهر لك البرنامج مثل هذا



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

..........................................................................

عند الضغط على الزرار Load BMP
هيفتحلك قائمة تختار منها الصورة الى انت عاملها



اللون الاسود دى الصورة
اللون الاحمر دة الامداد الى لازم تكون الصورة زية

.........................................................................

وبعد ما تختار الصورة

هيظهرلك البرنامج كدة



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

........................................................................

هتاخد الكود كوبى او تنسخة وهتعملة باست او لصق فى الكود بالشكل دة



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


..........................................................................

ودة اسم مصفوفة الصورة وحطيتة داخل امر العرض



اللون الاسود دة اسم المصفوفة الى قمنا بنسخة

............................................................................

ودى النتيجة على البروتوس



وطبعا ممكن نقلل حجم الخط او تكبيرة كما نريد فى تصميم الصورة اصلا
ويمكن عرض اى صورة كما نريد فقط اتبع الخطوات


لتحميل الكود والدائرة وكل شىء

http://www.4shared.com/rar/Shj6jGEN/GLCD2.html?
______________________________________________________________________________________________________________________________

اذا كيف تعرض صورة فى الميكروسى على هذا النوع من الشاشات
وفى المكتبة الى انا بتكلم عنها

هناك 4 اوامر وانا تركتهم فى اول شرح
وهم

كود:
Glcd_Image 
Glcd_Ext_Image 
Glcd_PartialImage 
Glcd_Ext_PartialImage
اول امر هو

Glcd_Image

وهو امر عرض الصورة على الشاشة وهو يقوم بعرض الصورة كاملة

ويكتب هكذا

كود:
Glcd_Image(my_image);
my_image دة اسم الصورة او اسم المصفوفة الى فيها الصورة

بمعنى اذا كانت مثلا اسم الصورة او مصفوفة الصورة كما فى الاعلى
truck

اذا يكتب هكذا

كود:
Glcd_Image(truck);
اى اسم مصفوفة الصورة يكتب داخل الامر
..............................................................................................................

الامر الثانى هو
Glcd_Ext_Image

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

وهو ان هذا الامر يقوم بعرض الصورة من مصدر خارجى
يعنى مثلا زى كارت الميمورى او اى ذاكرة خارجية وهكذا

وان شاء الله استخدام الاوامر دى هيكون فى موضوع منفصل تمام
بعد الانتهاء من مواضيع الشاشة ان شاء الله

والامر يكتب هكذا

كود:
Glcd_Ext_Image(153608);
الرقم الموجود داخل الداله دة 153608 هو رقم بداية البايت الخاص بالصورة داخل المصدر الخارجى
..............................................................................................................

الامر الثالث هو
Glcd_PartialImage

هذا الامر يقوم بعرض جزء من الصورة تقوم انت بتحديدة

ويكتب هكذا

كود:
Glcd_PartialImage(10, 12, 30, 64, 128, 64, image);
اول رقم هو لتحديد مكان بداية او بكسل فى الجزء المصوص من الصورة
بالنسبة للمحور الافقى يعنى شمال او يمين

ثانى رقم هو لتحديد مكان بداية او بكسل فى الجزء المصوص من الصورة
بالنسبة للمحور الراسى يعنى فوق او تحت

ثالث رقم هو تحديد عدد البكسلات المراد عرضها من الصورة
بالنسبة للمحور الافقى
يعنى الصورة لو 64*128 يبقى احنا هنعرض من 0 الى 30 فقط والباقى لن يعرض
دة بالنسبة للمحور الافقى يعنى ال 128 هيعرض منهم 30 بكسل فقط

رابع رقم هو تحديد عدد البكسلات المراد عرضها من الصورة
بالنسبة للمحور الراسى
يعنى الصورة لو 64*128 يبقى احنا هنعرض من 0 الى 60 فقط والباقى لن يعرض
دة بالنسبة للمحور الراسى يعنى ال 64 هيعرض منهم 60 بكسل فقط

ملحوظة :: 60 بكسل او 30 بكسل دة خط واحد فقط من الصورة يعنى من 0 الى 30 مثلا
مش 30 بكسل بالمعنى الفعلى لالا دة خط واحد يعنى
فى المثال قلنا 60*30 يعنى 1800 بكسل بالشكل الكلى


الرقم الخامس يحدد مقاس الصورة الفعلى بالنسبة للمحور الافقى
يعنى لو الصورة 64*128 يبقى نكتب فى الرقم الخامس 128
ولو 64*220 يبقى نكتب فى الرقم الخامس 220

الرقم السادس يحدد مقاس الصورة الفعلى بالنسبة للمحور الراسى
يعنى لو الصورة 64*128 يبقى نكتب فى الرقم الخامس 64
ولو 132*220 يبقى نكتب فى الرقم الخامس 132

اما اخر جزء
وهو image

فدة اسم مصفوفة الصورة

..............................................................................................................

الامر الرابع هو
Glcd_Ext_PartialImage

وهو يقوم بما يقوم بة الامر الثالث بالزبط
اى يعرض جزء مقصوص تحددة انت من الصورة

ولكن الفرق الوحيد انه ياخذ الصورة من مصدر خارجى
مثل كروت الميمورى او اى ذاكرة خارجية
______________________________________________________________________________________________________________________________

والى هنا انتهى هذا الجزء
اى سؤال انا تحت امركم ان شاء الله
رد مع اقتباس
  #4  
قديم 09-05-2012, 04:47 AM
ناصر احمد ناصر احمد غير متواجد حالياً
عضو جديد
 
تاريخ التسجيل: Sep 2010
المشاركات: 20
معدل تقييم المستوى: 0
ناصر احمد is on a distinguished road
افتراضي رد: تعلم كيفية التعامل مع الlcd وما انواعها وكيفية التحكم بها بالميكروسى ((الجزء الرابع))

بسم الله ماشاء الله

بصمتك فى كل مكان اخى محمد
بارك الله فيك وذادك من علمة
رد مع اقتباس
  #5  
قديم 09-05-2012, 02:45 PM
funky112233 funky112233 غير متواجد حالياً
استاذ الكترونيات
 
تاريخ التسجيل: Sep 2009
المشاركات: 116
معدل تقييم المستوى: 12
funky112233 has a spectacular aura aboutfunky112233 has a spectacular aura about
افتراضي رد: تعلم كيفية التعامل مع الlcd وما انواعها وكيفية التحكم بها بالميكروسى ((الجزء الرابع))

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

اخى الحبيب بشمهندس ناصر احمد

شكرا جزيلا لك على تعليقك وزادك الله من كل شىء
بارك الله فيك يا بشمهندس
رد مع اقتباس
  #6  
قديم 09-06-2012, 07:59 AM
funky112233 funky112233 غير متواجد حالياً
استاذ الكترونيات
 
تاريخ التسجيل: Sep 2009
المشاركات: 116
معدل تقييم المستوى: 12
funky112233 has a spectacular aura aboutfunky112233 has a spectacular aura about
افتراضي رد: تعلم كيفية التعامل مع الlcd وما انواعها وكيفية التحكم بها بالميكروسى ((الجزء الرابع))

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

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

سوف نتحدث فى هذا الجزء من الشرح ان شاء الله
عن الفونت Font
وهو عبارة عن اشكال واحجام الحروف التى تعرض على الشاشة

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

ولكن ما هو الفونت Font ؟؟

من الكلام السابق يتضح ان الحروف ترسم ايضا ولها قيم مثلها مثل الصورة بالزبط

ولكن ما الفرق بينها وبين الصورة

الفرق فى الحجم فقط
الصورة تكون مقاس 64*128
اما الحرف يكون 8*8 او 7*5 او 5*3 هكذا

اى ان الحروف ما هى الا صور باحجام صغيرة

فمثلا هذا كود حرف A كابتل مقاس 7*8

كود:
{ 124, 126,  19,  19, 126, 124,   0,   0 } //'A'
كما نرى
الحرف له قيم مثل الصورة بالزبط لكن الحجم فقط هو الذى يختلف
ولكن ماذا يعنى ان الحرف 7*8 او 7*5

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

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

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

وكل فونت له حجم معين وشكل معين للحروف

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

كود:
const unsigned short Character8x7[] = {
          0,   0,   0,   0,   0,   0,   0,   0, //' '
          0,   6,  95,  95,   6,   0,   0,   0, //'!'
          0,   7,   7,   0,   7,   7,   0,   0, //'"'
         20, 127, 127,  20, 127, 127,  20,   0, //'#'
         36,  46, 107, 107,  58,  18,   0,   0, //'$'
         70, 102,  48,  24,  12, 102,  98,   0, //'%'
         48, 122,  79,  93,  55, 122,  72,   0, //'&'
          4,   7,   3,   0,   0,   0,   0,   0, //'''
          0,  28,  62,  99,  65,   0,   0,   0, //'('
          0,  65,  99,  62,  28,   0,   0,   0, //')'
          8,  42,  62,  28,  28,  62,  42,   8, //'*'
          8,   8,  62,  62,   8,   8,   0,   0, //'+'
          0, 128, 224,  96,   0,   0,   0,   0, //','
          8,   8,   8,   8,   8,   8,   0,   0, //'-'
          0,   0,  96,  96,   0,   0,   0,   0, //'.'
         96,  48,  24,  12,   6,   3,   1,   0, //'/'
         62, 127, 113,  89,  77, 127,  62,   0, //'0'
         64,  66, 127, 127,  64,  64,   0,   0, //'1'
         98, 115,  89,  73, 111, 102,   0,   0, //'2'
         34,  99,  73,  73, 127,  54,   0,   0, //'3'
         24,  28,  22,  83, 127, 127,  80,   0, //'4'
         39, 103,  69,  69, 125,  57,   0,   0, //'5'
         60, 126,  75,  73, 121,  48,   0,   0, //'6'
          3,   3, 113, 121,  15,   7,   0,   0, //'7'
         54, 127,  73,  73, 127,  54,   0,   0, //'8'
          6,  79,  73, 105,  63,  30,   0,   0, //'9'
          0,   0, 102, 102,   0,   0,   0,   0, //':'
          0, 128, 230, 102,   0,   0,   0,   0, //';'
          8,  28,  54,  99,  65,   0,   0,   0, //'<'
         36,  36,  36,  36,  36,  36,   0,   0, //'='
          0,  65,  99,  54,  28,   8,   0,   0, //'>'
          2,   3,  81,  89,  15,   6,   0,   0, //'?'
         62, 127,  65,  93,  93,  31,  30,   0, //'*'
        124, 126,  19,  19, 126, 124,   0,   0, //'A'
         65, 127, 127,  73,  73, 127,  54,   0, //'B'
         28,  62,  99,  65,  65,  99,  34,   0 //'C

فكما نرى كل حرف او رقم او شكل بجانبة الكود الخاص بة

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

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

ولكن ان شاء الله هناك حلول باكثر من طريقة لا مشكلة

وتوجد بعض الشاشات الان فى السوق بها بداخلها فونتات Fonts
جاهزة باكثر من لغه وبالغه العربية ايضا
وهذا شىء رائعه لانة يوفر فى الذاكرة بشكل كبير

........................................................................................................

ناتى الان الى كيفية صنع الفونت Font بانفسنا
ويمكن رسم اى شكل نريدة ايضا مكان الحروف او مع الحروف
الامر فى غاية البساطة ان شاء الله
وهذا بسبب وجود برامج كثيرة جدا تساعدك على صنع الفونتات Fonts

اول برنامج هو برنامج خاص بالميكروسى ولكن به عيوب وسنذكرها ان شاء الله

واسم البرنامج هو

GLCD Font Creator

ورابط تحميلة من هنا

http://www.mikroe.com/downloads/get/...eator_v120.zip


دى صورة البرنامج




هدوس file >> New font

هتظهرلك القائمة دى



اللون الاحمر دة مكان تحديد عدد الاحرف الى انت هتكتبها
يعنى مثلا لو حروف عربى مثلا يبقى من 0 الى 28 هنا تكتب عدد الاحرف

ولو تلاحظ هما عاملين فى الافتراضى البداية من من 32 علشان يبقى نفس نظام الفونتات بتاعتهم
وهنعرف دة بعدين

اما الجزء الى محدد باللون الاسود فدة مقاس الحرف الواحد
اى عدد بكسلات الطول فى العرض

هنا 8*8 ويمكن تغيرها الى ما نريد

ولكن لو زادت عن 8 البرنامج بيبدء ميدكش الكود بالصورة السليمة
ودى من عيوبة

اول ما بتختار كل الحاجات دى وبتدوس اوكى

هتظهرلك الصورة كدة



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

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

اللون الاصفر دة مقاس الشكل وعدد الاحرف وهكذا

اللون الاحمر
فالمربع دة بيبنلك شكل الكتابة كانها على الشاشة

اما اللون الازرق قدة الى بندوس علية بعد منخلص كتابة الشكل
علشان يظهرلنا الكود واحدة لل GLCD العادية
والاخرى للشاشات الالوان TFT

انظر الى الصورة التالية



اللون الاسود مكان كتابة الحرف وانا هنا كتبت حرف ال H

اللون الاحمر بيبين ان الشكل الى كتبتة مش ظاهر علية
وكدة الكود مش هيتولد واول متدوس على المربع الصغير دة هتلاقية بيقولك عايز تحفظ الرسمة قلة yes
هتلاقى الشكل بان علية وكدة يتم توليد الكود

اللون الاخضر
دة شكل الحرف كانة معروض على الشاشة

نيجى لصورة التالية



اللون الاسود بيبن انى بعد دوست على المربع ظهر الشكل علية وكدة يتم توليد الكود

اللون الاصفر دة اول ما هندوس علية هتظهرلنا قائمة الى فيها الكود الى قدمكم دى

وزى ما موجود فى اللون الاحمر كدة هنختار ال MikroC وهنختار mikroc GLCD lib

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


وهناك برماج اخرى كثيرة
ومنها برنامج اسمة
(LCD Font Generator (LFG

وهو افضل من البرنامج السابق وسوف نستخدمة فى شرح اخر ان شاء الله
_______________________________________________________________
_______________________________________________________________

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

ناتى الى الجزء العملي

اولا
اوامر اختيار الفونت Font وعرضة على ال GLCD
من خلال مكتبة الميكروسى للمتحكم

Samsung KS108/KS107 controller

هى

كود:
Glcd_Set_Font 
Glcd_Set_Font_Adv 
Glcd_Set_Ext_Font_Adv 
Glcd_Write_Char 
Glcd_Write_Char_Adv 
Glcd_Write_Text 
Glcd_Write_Text_Adv 
Glcd_Write_Const_Text_Adv
اول امر
Glcd_Set_Font

وهو امر اختيار الفونت Font

ويكتب هكذا

كود:
Glcd_Set_Font(your font, 5, 7, 32);
اول خانة هى اسم الفونت Font الخاص بك او الذى تريد الكتابة به
والميكرو سى اضافت اكثر من فونت font جاهز لكى تختار منهم
وهم

كود:
Font_Glcd_System3x5 
Font_Glcd_System5x7 
Font_Glcd_5x7 
Font_Glcd_Character8x7
فقط انسخ اى اسم منهم وضعه فى الخانة الاولى
وسوف يتغير شكل الحروف الى الفونت Font الذى قمت باختيارة

ثانى خانة وثالث خانة تكتب فيهم حجم الفونت Font كما ترى مثلا اذا كان الفونت
7*5 اذا الخانة الثانية تكتب فيها 5 والثالثة 7
واذا كان 7*8 الخانة الثانية تكتب فيها 8 والثالثة 7 وهكذا ....

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

الاول ان
الفونت كما قلنا عبارة عن مصفوفة بها اشكال الحروف
وكل حرف له مكان داخل هذه المصفوفة

والثانى هو
اننا نكتب الحروف فى البرمجة بالاسكى كود اى داخل اكواد الكتابة اى داخل العلامتين " "
كما نعلم ولكن هذا يعنى ان الحرف A يعبر عنة ب الرقم 65 و B ب 66
وهكذا

ولكتابة الحرف A يجب ان يكون اول موضع له داخل المصفوفة او اول بايت له
يكون رقمة فى المصفوفة الكلية او الفونت Font هو 65 ايضا حتى تتم كتابتة

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

فالنفترض اننا قمنا بعمل فونت الحرف A بة اول بايت له هو 40
فعند كتابة الحرف A لن يظهر الحرف A لا لان رقم ال حرف A فى الاسكى كود 65 وليس 40

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

مثال لك
كما قلت اذا كان الحرف A اول موضع له فى الفونت الخاص بك هو 40
وكما نعلم ان رقمة هو 65 اذا اطرح من هذا الرقم 25 فيصبح الرقم 40 وهو الرقم المناسب
فتتم كتابة الحرف وهكذا

وفى الفوناتات Fonts الخاصة بالميكروسى الرقم المناسب للطرح هو 32
وهو ما يوضع فى الخانة الاخيرة
..............................................................................................................

الامر الثانى والثالث
Glcd_Set_Font_Adv
Glcd_Set_Ext_Font_Adv

غير مهمين لنا لذلك لن اشرحهم الان
..............................................................................................................

ناتى الى اوامر الكتابة على الشاشة

الامر الرابع
Glcd_Write_Char

وهو امر كتابة حرف او رقم فى المرة الواحدة وليس عدد او كلمة

ويكتب هكذا

كود:
Glcd_Write_Char('C', 10, 2, 1);
الخانة الاولى
هى الحرف او ارقم الذى نريد كتابتة
ويكتب بين علامتين ' '

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

الخانة الثالثة
تحدد مكان كتابة الحرف بالنسبة للخط الراسى اى اعلى او لاسفل

الخانة الرابعه
تحدد لون الحرف
..............................................................................................................

الامر الخامس
Glcd_Write_Char_Adv

خاص بالاوامر التى تركناها بالاعلى لذلك سنتركة
..............................................................................................................

الامر السادس
Glcd_Write_Text

وهو امر كتابة الاعداد والكلمات مرة واحدة

ويكتب هكذا

كود:
Glcd_Write_Text("Hello world!", 10, 2, 1);
الخانة الاولى
هى لكتابة الكلمة التى نريد عرضها وتكتب داخل هذين العلامتين " "

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

الخانة الثالثة
تحدد مكان كتابة الحرف بالنسبة للخط الراسى اى اعلى او لاسفل

الخانة الرابعه
تحدد لون الحرف
..............................................................................................................

الامر السابع والثامن
Glcd_Write_Text_Adv
Glcd_Write_Const_Text_Adv

سنتركهم ايضا
..............................................................................................................

وهذه هى النتيجة على البروتوس



الفونت Font الكبير الموجود فى الاعلى هو

7*8

اما الاصغر الموجود اسفلة

7*5

وهذا هو الكود

كود:
char GLCD_DataPort at PORTB;

sbit GLCD_CS1 at RD0_bit;
sbit GLCD_CS2 at RD1_bit;
sbit GLCD_RS  at RD2_bit;
sbit GLCD_RW  at RD3_bit;
sbit GLCD_EN  at RD4_bit;
sbit GLCD_RST at RD5_bit;

sbit GLCD_CS1_Direction at TRISD0_bit;
sbit GLCD_CS2_Direction at TRISD1_bit;
sbit GLCD_RS_Direction  at TRISD2_bit;
sbit GLCD_RW_Direction  at TRISD3_bit;
sbit GLCD_EN_Direction  at TRISD4_bit;
sbit GLCD_RST_Direction at TRISD5_bit;


void main(){

Glcd_Init();
Glcd_Fill(0);

while(1){
Glcd_Set_Font(Font_Glcd_Character8x7, 8,7, 32);
Glcd_Write_Text("Allah Akber", 10, 2, 1);
Glcd_Set_Font(Font_Glcd_System5x7, 5,7, 32);
Glcd_Write_Text("Allah Akber", 10, 4, 1);

}                

    }
وهذا رابط تحميل الكود والدائرة وكل شىء

http://www.4shared.com/rar/_9LybeaL/GLCD3.html?

_______________________________________________________________
_______________________________________________________________

الى هنا انتهى الشرح
اى سؤال انا تحت امركم ان شاء الله
رد مع اقتباس
  #7  
قديم 09-09-2012, 10:12 AM
funky112233 funky112233 غير متواجد حالياً
استاذ الكترونيات
 
تاريخ التسجيل: Sep 2009
المشاركات: 116
معدل تقييم المستوى: 12
funky112233 has a spectacular aura aboutfunky112233 has a spectacular aura about
افتراضي رد: تعلم كيفية التعامل مع الlcd وما انواعها وكيفية التحكم بها بالميكروسى ((الجزء الرابع))

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

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

بعد ان انتهينا من شرح اوامر اول مكتبة من مكتبات الميكرو سى
والتى تتحكم فى شاشة GLCD والتى يتحكم بها المتحكم

Samsung KS108/KS107 controller

يبقى لنا ان نعرف مكتبة اخرى وهى للتحكم بشاشة GLCD
ولكن المتحكم بها هو المتحكم

TOSHIBA T6963C controller

واوامرها موجودة فى مكتبات الميكروسى

وهذه هى اوامرها ايضا

كود:
T6963C_init 
T6963C_writeData 
T6963C_writeCommand 
T6963C_setPtr 
T6963C_Set_Ext_Buffer 
T6963C_waitReady 
T6963C_fill 
T6963C_dot 
T6963C_Set_Font_Adv 
T6963C_Set_Font_Ext_Adv 
T6963C_write_char 
T6963C_Write_Char_Adv 
T6963C_write_text 
T6963C_Write_Text_Adv 
T6963C_Write_Const_Text_Adv 
T6963C_line 
T6963C_rectangle 
T6963C_rectangle_round_edges 
T6963C_rectangle_round_edges_fill 
T6963C_box 
T6963C_circle 
T6963C_circle_fill 
T6963C_image 
T6963C_Ext_Image 
T6963C_PartialImage 
T6963C_Ext_PartialImage
وكل امر يستخدم بنفس الطريقة التى استخدمناه به فى المكتبة السابقة
ولا يوجد اختلاف بينهم ابدا الا فى اسم الامر فقط كما ترون

واذا كان امر لا تعرفة فلا مانع من السؤال
ولكن المعظم والاهم تم شرحة ولله الحمد

وهناك مكتبات اخرى للتعامل مع الشاشات ال GLCD التى يتحكم بها عن طريق
بروتوكول اسمة SPI

فقط قموا بالاطلاع على المكتبات داخل الميكروسى
وكل الاوامر لها نفس الاستخدام والفرق فقط فى اختلاف اسم الامر فقط

ولمعرفة كيفية الوصول الى هذه المكتبات يمكنكم الاطلاع على الرابط التالى

http://www.dbaasco.com/vb/showthread.php?t=7605

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

الى لقاء قريب ان شاء الله
رد مع اقتباس
  #8  
قديم 09-11-2012, 02:05 PM
sameer sameer غير متواجد حالياً
عضو جديد
 
تاريخ التسجيل: Sep 2012
المشاركات: 4
معدل تقييم المستوى: 0
sameer is on a distinguished road
افتراضي رد: تعلم كيفية التعامل مع الlcd وما انواعها وكيفية التحكم بها بالميكروسى ((الجزء الرابع))

بالفعل مواضيع التحكم بـ lcd وانواعها جدير بالاهتمام في هذا المنتدى المحترم.
رد مع اقتباس
  #9  
قديم 10-08-2012, 10:41 PM
funky112233 funky112233 غير متواجد حالياً
استاذ الكترونيات
 
تاريخ التسجيل: Sep 2009
المشاركات: 116
معدل تقييم المستوى: 12
funky112233 has a spectacular aura aboutfunky112233 has a spectacular aura about
افتراضي الجزء الخامس من الشرح

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


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

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

وذلك لجعلنا قادرين على التعامل ان شاء الله مع اى نوع من الشاشات ال GLCD

وان شاء الله هنقرأ الداتا شيت للشاشة دى LM6059BCW ويتم التحكم فيها من خلال المتحكم Controller ST7565



وهى موجودة فى موقع رام

http://ram-e-shop.com/oscmax/catalog...roducts_id=223

ولتنزيل الداتا شيت الخاصة بها

http://www.ram-e-shop.com/ds/lcd/LM6059BCW.rar

..............................................................................................................

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

وهذا ينطبق على الشاشة طبعا وللتعامل مع اى شاشة يجب معرفة الداتا شيت الخاصة بها

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

قبل الدخول لازم نعرف ان انواع الشاشات كثير
وفى بعض الانواع تعمل على نظام ال 8 بت اى توصيل 8 اطراف للداتا
وهناك انواع تعمل بنظامين وهو نظام 8 بت ونظام او برتوكول I2C او SPI او RS232 وهكذا كلها انواع ولكل نظام مميزاته .
.............................................................................................................................

هذا اول ما يقابلك وهو مثل الفهرس للداتا شيت



الجزء الى بالون الاحمر الى هو Basic specifications

دة بيتكلم عن الوان الشاشة اية ,, تخطيط شكلى لها ,, حجم الشاشة وابعادها ,, الاطراف الخاصة بالشاشة وفائدة كل طرف
الانظمة الى بتشتغل عليها الشاشة وهكذا .



الجزء بالون الازرق الى هو Electrical Characteristics

دة بيتكلم عن الجهد الى بتشتغل علية الشاشة بالنسبة للبكسل والعرض ,, والجهد بالنسبة للاضاءة الخلفية
والشاشة بتتعامل بكام فولت ,, وسرعه استقبال وعرض البيانات فى الشاشة وهكذا .



الجزء الى بالون الاصفر الى هو Function specifications (ودة من اهم الاجزاء فى الداتا شيت)

دة بيتكلم عن الاوامر فى الشاشة ,, اوامر التهيئة ,, اوامر العرض ,, الشكل التخطيطى للعرض على الشاشة وهكذا .


____________________________...............................................................________________________________
---------------------------------------____________________________________---------------------------------------------

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

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

اذا للتعامل هناك قسمين للاطراف داتا و تحكم .

اولا Basic specifications

هذه صورة ما يهمنا فى اول جزئية وهى خاصة باهمية كل طرف وما يفعل بالتحديد من كل اطراف الشاشة



كما نرى
الجزء الى متعلم علية بالون الاصفر دة جزء اطراف التحكم وهم فى الشاشة دى 5 اطراف وهتلاقى جنبهم مكتوب Input اى دخل فقط .
الجزء الى متعلم علية بالون الازرق دة جزء اطراف الداتا للشاشة وهذه الشاشة تعمل بنظامين نظام 8 بت ونظام serial بطرفين فقط وهم دخل او خرج .
الجزء الى متعلم علية بالون الاحمر دة جزء اطراف الكهرباء للشاشة والاضاءة الخلفية لها .

اولا اطراف التحكم :

اول طرف CS1 ,,ويسمى Chip Select وهذا الطرف يقوم بفصل او تفعيل الشريحة الخاصة بالشاشة وبالتالى يمكننا عرض المعلومات
لو CS1=L اى يساوى 0 فسوف تعرض الشاشة اما CS1=H اى يساوى 1 فلا .

ثانى طرف RES,,ويسمى Reset Signal وهذا طرف عمل ريسترت للشاشة
لو RES=L سوف تقوم بعمل ريسترت للشاشة اما RES=H فلن تقوم الشاشة بعمل ريسترت وهذا هو الوضع الافتراضى عند العمل .

ثالث طرف A0 ,,ويسمى Register Select هذا الطرف لنُعلم الشاشة اننا سوف نرسل اوامر Command ام سنرسل داتا للعرض على الشاشة
لو A0=L هذا يعنى اننا سوف نرسل اوامر لو A0=H هذا يعنى اننا نرسل داتا للعرض على الشاشة .

ستجد بجانب هذه الاوامر فى الصورة انة فى النظامين 8 بت او سريال (6800)(Serial) انك لا تحتاج الى تغير بهم وهذا يعنى استخدامهم فى النظامين .........

رابع طرف R/W ,, هذا الطرف لنُعلم الشاشة اننا سوف نقراء ام نكتب عليها .
خامس طرف E ,, هذا الطرف يستخدم عند القراءة من الشاشة او الكتابة عليها .

ستجد بجانب هذه الاوامر فى الصورة انة فى النظام 8 بت (6800) يتم استخدامهم كما هو موضح ,
اما مع نظام سيريال (Serial) ستجد مكتوب Not Used Leave Open اى لا يتم استخدامهم .


((سيتم الشرح بالتفصيل فى الجزء القادم من الشرح ان شاء الله))

ملحوظة هامة ::
يمكن ان تختلف اسماء بعض الاطراف من شاشة لاخرى لكن ما يهم هو ما يقوم بة الطرف
مثل Register Select وهو الطرف A0 مثلا اذا وجدناه D فلا مشكلة المهم انه يقوم بوظيفة Register Select ......

ثانيا اطراف الداتا :

وهم 8 اطراف من D0 الى D7 اى 8 بت وهم الخاصين بنقل البيانات سواء من الميكرو الى الشاشة فى حالة الكتابة Write او من الشاشة الى الميكرو فى حالة القراءة Read .
ولكن هذا فى نظام 8 بت (6800) اما فى نظام سيريال (Serial) فلا يستخدم غير طرفين فقط هم D6 و D7 وباقى الاطرف نتركها .

ثالثا اطراف الكهرباء :

طرف للكهرباء للشاشة وطرف للكهرباء للاضاءة الخلفية وطرف الارضى مشترك .

ملحوظة بسيطة :
للاختيار بين الانظمة التى تعمل بها الشاشة مثل (6800) او (Serial) مثلا ففى بعض الشاشات يكون من خلال السوفت وير اى بالاوامر وفى البعض الاخر من خلال الهارد وير
مثل هذه الشاشة فهناك جمبر يتم تغير مكانة للاختيار بين النظامين وللعلم النظام الثانى (Serial) هو ما تعمل بة شاشات الموبايل لتوفير الاطراف
____________________________...............................................................________________________________
---------------------------------------____________________________________---------------------------------------------

ثانيا Electrical Characteristics

هذه صورة جزئية هامة من القسم الثانى من الداتا شيت وهى عن تحديد الفولت الى نحتاجة والتيار لكى نشغل الشاشة .



كما نرى الجزء بالون الاسود يعطينا بيانات الكهرباء من الفولت وهو يقع بين 2.8 الى 3.3 فولت كا اقصى حد وانا شخصيا شغلتها على 5 فولت عادى لكن يفضل الالتزام
ونرى ايضا كم تستهلك الشاشة من الفولت فى التعامل مع الميكرو من فولت وامبير ايضا .


اما الجزء بالون الاحمر فدة بيانات الكهرباء للاضاءة الخلفية وهى 3.3 فولت ايضا و 70 مللى امبير .

وهذه صورة جزئية اخرى وهى معلومة هامة فى التعامل مع الشاشة ومعرفة امكانياتها وتسمى فى الداتا شيت ب 6800Mode System Bus Timing
وهذا يعنى ان نظام سيريال (Serial) له قياسات ايضا



وهى خاصة بسرعه الشاشة فى استقبال البيانات
فى هذه الجزئية ستجد بالاعلى مقطع للبيانات على الاطراف كلها تحت بعض وكل جزئية يحدد الوقت لها بجزء ويسمى باسم مثل taw6 وهكذا
وفى الجدول تجد ان taw6 سرعته كذا وكذا اى ان هذه النقطة يمكن ان تعمل بالسرعه دى
وزى ما احنا شايفين ان السرعات بالنانو ثانية يعنى سرعه رهيبة ودة معناه اننا نقدر نعرض فديو على الشاشة دى مش بس مجرد صور ((الامر لا يعتمد على السرعه فقط))

لان الفديو ما هو الا عرض صور مثلا 30 صورة بتتابع وبسرعه اقل من 250 مللى ثانية مجتمعه حتى تنخدع العين وتحس ان الفديو بيشمى وفية حركة زى نظام الملتيبليكس السيفن سيجمنت
وطبعا الفديو بالشكل دة يعنى بيانات كثير جدا جدا ودة عايز ذاكرة وسرعه عالية سواء من الشاشة او من الميكرو وهنا الشاشة تعمل بالنانو ثانية يعنى تكفى الباقى على الميكرو .
____________________________...............................................................________________________________
---------------------------------------____________________________________---------------------------------------------

ثالثا Function specifications ((اهم جزء فى الداتا شيت))

اول جزئية فية هى Display Memory Map اى خريطة ذاكرة العرض وهى كالاتى



وهى بتظهرلك تقسيمة الشاشة زى مانت شايف كدة عبارة عن Page Address 8 وكل واحدة منها يمكنك كتابة 8 بت فيها يعنى لو ضربناهم ببعض 8*8 = 64 بكسل ودة فعلا طول بكسلات الشاشة
وتحت هتلاقى Column Address من 00h الى 7fh وهذا يعنى من 0 الى 127 وهذا يعنى 128 بكسل وهو ايضا عرض الشاشة

وهما الاحداثى Y ,, X للكتابة فى اى بكسل نريدة على الشاشة . ((سيتم الشرح بالتفصيل فى الجزء القادم من الشرح ان شاء الله))
...................................------------------------------_____________________________________-_________________-________________

ثانى جزئية وهى هامة جدا وهى Display Command اى الاوامر التى تتحكم فى كل شىء فى الشاشة



اللون الازرق دة اسم الامر .
اللون الاحمر دة شكل الكود يعنى كل طرف من الاطراف لازم يكون زى مانتوا شافين كدا وحتى اطراف الداتا نفسها .
اللون الاسود دة وظيفة الامر وكيفية استخدامة .

ناخد مثال امر الكتابة على الشاشة الى متعلم علية بالون الاخضر
هنا علشان نعرض شىء على الشاشة لازم يكون الطرف A0 ب 1 والطرف RD الى هو E ب 1 والطرف RW ب 0 ومن D0 الى D7 دى بقى الداتا الى هتتعرض
وبما ان النظام 8 بت اى بايت كامل فمثلا كما تحدثنا فى السابق ان مثلا صورة 1024 بايت اذا ببعض الاوامر الاخرى بجانب هذا الامر يمكننا ارسال بايت بايت 1024 مرة ويتم عرض الصورة على الشاشة وهكذا .

وهناك اوامر اخرى بالاسفل وكلها مشروحه بجانب الامر كما قلت
...................................------------------------------_____________________________________-_________________-________________

الجزئية الثالثة وهى الاهم وهى Basic Operating Sequence وبداخلها Initialization Sequence



ودى التكملة



وهى اوامر التهيئة للشاشة ويجب اتباعها بالحرف قبل اى اوامر وبعد تنفيذ هذه الاوامر نبدء فى العرض
وهى مثل داله التهيئة الموجودة داخل الميكروسى التى نقوم بكتابتها فى البداية وهى تقوم بكل هذا بدلا منك
GLCD_Init

وكما نرى الخط الاحمر هو نهاية هذه الاوامر ونبدء من بعد ذلك بكتابة وعرض ما نريد

وبكدة نكون خلصنا التعرف على الداتا شيت وان شاء الله منها نقدر نتعامل مع معظم الانواع
ان شاء الله فى الشرح القادم هيكون فى مثال عملى على استخدام الدوال للعمل على الشاشة وايضا تفصيل الاوامر مع الشرح

وللعلم فقط هذا ليس الا توضيح والباقى عليك لانك لو فهمت النقط دى هتقدر ان شاء الله تتعامل مع معظم الداتا شيت الخاصة بالشاشات دى

وانا عارف ان الشرح ثقيل شوية ولكن اى شىء مش مفهوم ان شاء الله انا تحت امركم

واى خطا فى الشرح ارجوا توضيحة

السلام عليكم ورحمه الله وبركاته
رد مع اقتباس
  #10  
قديم 10-14-2012, 10:36 PM
احمد باسم محمد احمد باسم محمد غير متواجد حالياً
عضو جديد
 
تاريخ التسجيل: Oct 2012
المشاركات: 3
معدل تقييم المستوى: 0
احمد باسم محمد is on a distinguished road
افتراضي طلب ربط شاشة sharp lm089hb1t04

اخي العزيز اريد ربط شاشة sharp089hb1t04 مع البك فهل هذا ممكن وكيف علما ان هذه الشاشه موجوده في اجهزة الاستنساخ الكبيرة وشكرا
رد مع اقتباس
إضافة رد

مواقع النشر (المفضلة)

أدوات الموضوع
انواع عرض الموضوع

تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة



الساعة الآن 12:22 AM.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
الحقوق محفوظة لمنتديات الاليكترونيات العصرية

Security team

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77