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