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

   

الصورة الرمزية mohamedalikahli
mohamedalikahli
:: مهندس متواجد ::
تاريخ التسجيل: Dec 2010
الدولة: مصر -- الاسكندرية
المشاركات: 153
نشاط [ mohamedalikahli ]
قوة السمعة:
قديم 02-09-2012, 12:24 PM المشاركة 17   
افتراضي



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

اعلانات

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


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

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

goldfinger2
:: عضوية غير مفعلة ::
تاريخ التسجيل: Oct 2006
الدولة: egypt
المشاركات: 186
نشاط [ goldfinger2 ]
قوة السمعة:
قديم 04-09-2012, 12:12 AM المشاركة 19   
افتراضي


جزاك الله خيرا وربنا يبارك فى امثالك شرح موفق


الصورة الرمزية kaoutar11
kaoutar11
:: مهندس متواجد ::
تاريخ التسجيل: Feb 2012
الدولة: Algeria
المشاركات: 144
نشاط [ kaoutar11 ]
قوة السمعة:
قديم 05-09-2012, 05:06 PM المشاركة 20   
ha


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

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

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

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

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

والى هنا انتهى هذا الجزء
اى سؤال انا تحت امركم ان شاء الله
االحمد لله اخي لقد فهمت هذا الجزء كما انني قمت بنفس التجربة لكن مع صورة أخرى قمت بتحميلها من النت لكن النتيجة كانت سلبية,لقد أردت أن أقدم هدية لمنتدانا الغالي ألى و هي ظهور رمز المنتدى على شاشة glcd علما ان أمتداد الصورة 50*50 و هذه هي الصورة http://www.google.com/imgres?um=1&hl...r:3,s:51,i:249
و لقد غيرت أمتدادها ليصبح BMP وهذا هو الكود
// ------------------------------------------------------
// GLCD Picture name: BV.bmp
// GLCD Model: T6963C 240x64
// ------------------------------------------------------

const code char BV[350] = {
0, 0, 0, 0, 0, 0, 0,
0, 31, 255, 255, 255, 0, 0,
1, 0, 0, 0, 0, 96, 0,
2, 0, 0, 0, 0, 16, 0,
0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0,
16, 0, 0, 0, 0, 0, 0,
32, 0, 0, 0, 0, 1, 0,
0, 0, 49, 0, 0, 0, 0,
0, 132, 128, 0, 0, 0, 0,
64, 0, 6, 0, 0, 0, 128,
64, 0, 0, 0, 0, 0, 128,
64, 0, 0, 0, 0, 0, 128,
64, 6, 224, 0, 0, 0, 128,
64, 32, 56, 0, 0, 0, 128,
64, 128, 6, 0, 0, 0, 128,
65, 3, 15, 0, 1, 128, 128,
64, 18, 29, 128, 7, 192, 128,
66, 62, 28, 192, 0, 192, 128,
68, 62, 62, 193, 240, 0, 128,
64, 14, 7, 194, 1, 0, 128,
72, 142, 131, 226, 3, 56, 128,
72, 29, 128, 228, 39, 140, 128,
72, 5, 198, 100, 59, 4, 128,
74, 6, 255, 228, 2, 108, 128,
72, 7, 255, 228, 132, 16, 128,
74, 7, 95, 196, 134, 32, 128,
78, 143, 24, 196, 67, 224, 128,
76, 195, 193, 196, 96, 16, 128,
68, 227, 143, 132, 48, 48, 128,
71, 111, 191, 0, 24, 48, 128,
67, 102, 126, 2, 127, 224, 128,
65, 195, 252, 11, 120, 192, 128,
64, 255, 248, 71, 135, 128, 128,
64, 63, 241, 6, 12, 0, 128,
64, 0, 0, 8, 0, 0, 128,
64, 0, 0, 16, 0, 0, 128,
64, 0, 1, 73, 0, 0, 128,
66, 12, 0, 168, 48, 0, 128,
64, 0, 0, 48, 0, 0, 128,
0, 0, 1, 192, 0, 144, 0,
0, 0, 0, 2, 0, 65, 0,
32, 0, 0, 4, 0, 1, 0,
16, 1, 3, 195, 0, 0, 0,
8, 0, 0, 0, 0, 4, 0,
8, 0, 0, 0, 0, 8, 0,
2, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 96, 0,
0, 63, 255, 255, 255, 0, 0,
0, 0, 0, 0, 0, 0, 0
};



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(255);
glcd_image(BV);

}
و النتيجة تظهر هكذا
http://upload.qariya.info/images/qar...bdc4214989.png


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


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

اخى mohamedalikahli

شكرا جزيلا لك وفقك الله الى ما يحب ويرضى

اخى احـــمـــد

شكرا جزيلا لك جزاك الله كل خير

اخى goldfinger2

شكرا جزيلا لك على تعليقك بارك الله فيك ووفقك الله الى ما يحب ويرضى

kaoutar11

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

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

لذلك يجب ان تكون 64*128 حتى لو الزيادة على الصورة ابيض تماما

ثانيا
T6963C 240x64

هذا ليس نوع المتحكم وليس حجم الشاشة التى تتعاملين معها



اللون الاحمر دة مكان اختيار نوع المتحكم

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

KS0108

وليس المتحكم الثانى T6963

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

ويجب ايضا ان يكون حجم الصورة 64*128

حتى تعمل بصورة جيدة

واى استفسار اخر لا تترددى


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


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

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

سوف نتحدث فى هذا الجزء من الشرح ان شاء الله
عن الفونت 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?

__________________________________________________ _____________
__________________________________________________ _____________

الى هنا انتهى الشرح
اى سؤال انا تحت امركم ان شاء الله


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


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

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

بعد ان انتهينا من شرح اوامر اول مكتبة من مكتبات الميكرو سى
والتى تتحكم فى شاشة 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.qariya.com/vb/showthread.php?t=112652

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

الى لقاء قريب ان شاء الله


goldfinger2
:: عضوية غير مفعلة ::
تاريخ التسجيل: Oct 2006
الدولة: egypt
المشاركات: 186
نشاط [ goldfinger2 ]
قوة السمعة:
قديم 08-09-2012, 05:17 PM المشاركة 24   
adevil


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



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