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

   

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



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

شكرا لك اخى alolo23 بارك الله فيك
وفقك الله الى ما يحب ويرضى

اعلانات

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


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

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

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


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

شكرا جزيلا لك يا اخى مجمد

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

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

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

وشكرا جزيلا لك على طرحك هذا


احـــمـــد
:: مهندس ::
تاريخ التسجيل: Aug 2012
الدولة: القاهرة
المشاركات: 19
نشاط [ احـــمـــد ]
قوة السمعة:
قديم 27-08-2012, 04:18 AM المشاركة 12   
افتراضي


بجد شرح رائع ربنا يباركلك ويجازيك خير

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

وهل لو حبيت ابرمج شاشة تانية هيبقى صعب عشان ملهاش library ولا هيبقى الموضوع برده بسيط ؟

وربنا يكرمك ويوفقك


الصورة الرمزية kaoutar11
kaoutar11
:: مهندس متواجد ::
تاريخ التسجيل: Feb 2012
الدولة: Algeria
المشاركات: 144
نشاط [ kaoutar11 ]
قوة السمعة:
قديم 29-08-2012, 04:47 PM المشاركة 13   
x4


بارك الله فيك اخي و كثر من أمثالك . أنتظرني بالأسئلة كما العادة أذا ما استصعب علي شيء


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


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

اسف جدا على التاخير

احـــمـــد

شكرا جزيلا لك

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

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

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

اصبر على الرز لما يستوى ههههههههههههههههههه
__________________________________________________ _________________

kaoutar11

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


الصورة الرمزية funky112233
funky112233
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 664
نشاط [ funky112233 ]
قوة السمعة:
قديم 30-08-2012, 08:45 AM المشاركة 15   
افتراضي الجزء الثانى من الشرح الكود الاول


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

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

سوف نتحدث فى هذا الجزء ان شاء الله عن كود بسيط جدا لهذا النوع من الشاشات
والذى يعمل بالمتحكم 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.qariya.com/vb/showthread.php?t=114277

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

وهذا هو الكود

كود:
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);
__________________________________________________ _____________
__________________________________________________ _____________

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

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

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


الصورة الرمزية funky112233
funky112233
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 664
نشاط [ funky112233 ]
قوة السمعة:
قديم 02-09-2012, 12:50 AM المشاركة 16   
افتراضي الجزء الثالث من الشرح


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

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

فى هذا الجزء ان شاء الله هنبدء شرح الصور وازاى نقدر نعرضها على شاشة يتحكم بها
من خلال المتحكم 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 بايت

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



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

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



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

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

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

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

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

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

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

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

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

نبدء الاول بنوعية الصورة المطلوبة
الصورة المطلوبة يجب ان تكون بامداد 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

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

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

والى هنا انتهى هذا الجزء
اى سؤال انا تحت امركم ان شاء الله


التعديل الأخير تم بواسطة : funky112233 بتاريخ 02-09-2012 الساعة 01:01 AM


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