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

   

الصورة الرمزية المخترع01
المخترع01
:: مهندس متميز ::
تاريخ التسجيل: Dec 2009
المشاركات: 397
نشاط [ المخترع01 ]
قوة السمعة:
قديم 22-08-2012, 12:34 PM المشاركة 41   
win شكراا



اخي الكريم بعد المتابعة وصلة الى الحل و كتبت( بسم الله )
اخي فكرتي هيا كتابة بسم الله و بعد يتبن درجات الحرارة
كيف انتقل من البسملة الى عرض اخر
هطا هو الكود
----------------------------------------------------------------------------
// LCD pinout settings
sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB1_bit;
sbit LCD_D4 at RB2_bit;
sbit LCD_D5 at RB3_bit;
sbit LCD_D6 at RB4_bit;
sbit LCD_D7 at RB5_bit;

//pin direction
sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB4_bit;
sbit LCD_D7_Direction at TRISB5_bit;
const char character[] = {0,0,1,1,1,31,0,0,0,0,0};

void CustomChar(char pos_row, char pos_char) {
char i;
Lcd_Cmd(64);
for (i = 0; i<=10; i++) Lcd_Chr_CP(character[i]);
Lcd_Cmd(_LCD_RETURN_HOME);
Lcd_Chr(pos_row, pos_char, 0);
}
const char character2[] = {0,0,5,21,21,31,0,0};

void CustomChar2(char pos_row, char pos_char) {
char i;
Lcd_Cmd(80);
for (i = 0; i<=7; i++) Lcd_Chr_CP(character2[i]);
Lcd_Cmd(_LCD_RETURN_HOME);
Lcd_Chr(pos_row, pos_char, 2);
}

const char character3[] = {0,0,0,7,5,31,16,16};

void CustomChar3(char pos_row, char pos_char) {
char i;
Lcd_Cmd(88);
for (i = 0; i<=7; i++) Lcd_Chr_CP(character3[i]);
Lcd_Cmd(_LCD_RETURN_HOME);
Lcd_Chr(pos_row, pos_char, 3);
}
const char character4[] = {16,16,16,16,16,16,16,0};

void CustomChar4(char pos_row, char pos_char) {
char i;
Lcd_Cmd(96);
for (i = 0; i<=7; i++) Lcd_Chr_CP(character4[i]);
Lcd_Cmd(_LCD_RETURN_HOME);
Lcd_Chr(pos_row, pos_char, 4);
}
const char character5[] = {9,9,9,9,9,9,15,0};

void CustomChar5(char pos_row, char pos_char) {
char i;
Lcd_Cmd(104);
for (i = 0; i<=7; i++) Lcd_Chr_CP(character5[i]);
Lcd_Cmd(_LCD_RETURN_HOME);
Lcd_Chr(pos_row, pos_char, 5);
}
const char character6[] = {0,0,28,20,28,4,7,0};

void CustomChar6(char pos_row, char pos_char) {
char i;
Lcd_Cmd(112);
for (i = 0; i<=7; i++) Lcd_Chr_CP(character6[i]);
Lcd_Cmd(_LCD_RETURN_HOME);
Lcd_Chr(pos_row, pos_char, 6);
}
const char character7[] = {4,14,14,31,31,14,14,4};

void CustomChar7(char pos_row, char pos_char) {
char i;
Lcd_Cmd(120);
for (i = 0; i<=7; i++) Lcd_Chr_CP(character7[i]);
Lcd_Cmd(_LCD_RETURN_HOME);
Lcd_Chr(pos_row, pos_char, 7);
}
const char character1[] = {4,14,14,31,31,14,14,4};

void CustomChar1(char pos_row, char pos_char) {
char i;
Lcd_Cmd(72);
for (i = 0; i<=7; i++) Lcd_Chr_CP(character1[i]);
Lcd_Cmd(_LCD_RETURN_HOME);
Lcd_Chr(pos_row, pos_char, 1);
}
void main()
{
Lcd_Init();
Lcd_Cmd(_LCD_CURSOR_OFF);
CustomChar(1, 11);
CustomChar2(1, 10);
CustomChar3(1, 9);
CustomChar4(1, 8);
CustomChar5(1, 7);
CustomChar6(1, 6);
CustomChar7(1, 4);
CustomChar1(1, 13);
}
-------------------------------------------------------------------------------------

اعلانات

الصورة الرمزية kaoutar11
kaoutar11
:: مهندس متواجد ::
تاريخ التسجيل: Feb 2012
الدولة: Algeria
المشاركات: 144
نشاط [ kaoutar11 ]
قوة السمعة:
قديم 24-08-2012, 11:53 PM المشاركة 42   
افتراضي


__________________________________________________ _____________

اذا احتاج احد الى توضيح شىء اخر انا تحت امرة ان شاء الله

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

والسلام عليكم ورحمه الله وبركاته
[/SIZE][/QUOTE]
السلام عليكم و رحمة الله تعالى و بركاته:
أخي أريد أن أستفسر أين هي المرحلة الأخيرة هى التعامل مع الشاشة من خلال الاوامر Lcd CMd ولك جزيل الشكر

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

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


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

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

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

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

http://www.qariya.com/vb/showthread.php?t=113441&page=3

وهو الشرح الثالث فى الموضوع ستجد الشرح فى اول الصفحة

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

كود:
Lcd_Cmd(_LCD_CLEAR);
واذا اردت ترك الكلمة التى كتبتها او الشكل الذى كتبتة وعرض شىء اخر على الشاشة
فلا مشكلة فقط اجعل ما تريد اظهارة يكون فى مكان اخر على الشاشة
بجانب ما قمت باظهارة فى المرة الاولى

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

__________________________________________________ ____________

kaoutar11

هذا هو الكود الثالث فى الموضوع
وهو موجود ايضا فى الرابط التالى

http://www.qariya.com/vb/showthread.php?t=113441&page=3

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


الصورة الرمزية kaoutar11
kaoutar11
:: مهندس متواجد ::
تاريخ التسجيل: Feb 2012
الدولة: Algeria
المشاركات: 144
نشاط [ kaoutar11 ]
قوة السمعة:
قديم 25-08-2012, 12:33 AM المشاركة 44   
افتراضي


[QUOTE=funky112233;664389][SIZE="2"] بسم الله الرحمن الرحيم

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

كود:
Lcd_Cmd(64);
اأريد أن أعرف ما هية الرقم 64 ماذا يعني لقد قرأت الشرح الذي ذكرته لكنني لم أفهم شيء,
وما الفائدة من كتابة الأرقام من 0 ألى 7 في
كود:
Lcd_Chr(pos_row, pos_char, 0 to 7);
و ما معنى pos_rowو pos_char


الصورة الرمزية kaoutar11
kaoutar11
:: مهندس متواجد ::
تاريخ التسجيل: Feb 2012
الدولة: Algeria
المشاركات: 144
نشاط [ kaoutar11 ]
قوة السمعة:
قديم 25-08-2012, 12:59 AM المشاركة 45   
ha


[QUOTE=funky112233;664389][SIZE="2"] يسم الله الرحمن الرحيم
داله العرض التى سوف تقوم بعرض الاشكال على الشاشة

[code]for(y=0;y<7;y++){text2[y]=character0[y];}
x=64;x1=0;
CustomChar(1,1);
delay_ms(500);[/code
اولا
يجب نقل خانات مصفوفة الشكل الذى اريد نقلة الى المصفوفة
كود:
text2[]
ولذلك قمت بعمل جملة تكرارية بقيمة 7 مرات
ثم جعلت المتغير y الذى يزيد كل مرة من مرات التكرار بقيمة 1
هو الذى يقوم بالتبديل للمصفوفتان
فا فى البداية تكون قيمتة 0
وعندما اضعه داخل مربعات المصفوفة هذا يعنى ان ابدل الخانة رقم صفر اى بقيمة y
وهكذا الخانة رقم 0 من مصفوفة الشكل character0 سوف تنقل الى الخانة رقم صفر من المصفوفة text2

وهكذا 7 مرات لنقل 7 خانات

ثم
جعلت قيمة x و x1 تساوى قيم لاول شكل
وهى هنا
كود:
x=64;x1=0;
لكى يتم عرض شكل واحد ولا يحدث تداخل بين الاشكال

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

كود:
CustomChar(1,1);
وهو يعنى الذهاب الى داله العرض
وعرض الشكل فى الصف الاول والمربع الاول ايضا
فالرقم الاول يعنى الصف والرقم الثانى يعنى المربع

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

[code]for(y=0;y<7;y++){text2[y]=character0[y];}
x=64;x1=0;
CustomChar(1,1);
delay_ms(500);[/code
اولا
يجب نقل خانات مصفوفة الشكل الذى اريد نقلة الى المصفوفة
كود:
text2[]
ولذلك قمت بعمل جملة تكرارية بقيمة 7 مرات
ثم جعلت المتغير y الذى يزيد كل مرة من مرات التكرار بقيمة 1
هو الذى يقوم بالتبديل للمصفوفتان
فا فى البداية تكون قيمتة 0
وعندما اضعه داخل مربعات المصفوفة هذا يعنى ان ابدل الخانة رقم صفر اى بقيمة y
وهكذا الخانة رقم 0 من مصفوفة الشكل character0 سوف تنقل الى الخانة رقم صفر من المصفوفة text2

وهكذا 7 مرات لنقل 7 خانات

ثم
جعلت قيمة x و x1 تساوى قيم لاول شكل
وهى هنا
كود:
x=64;x1=0;
لكى يتم عرض شكل واحد ولا يحدث تداخل بين الاشكال
[COLOR="Blue"]
لقد فهمت هذا الجزء
لكن ما الفائدة من x1=0;[/COLOR]
و[COLOR="Red"] الأمر
كود:
CustomChar(1,1);
سوف يعرض الشكل فى الصف الاول والمربع الاول ولكن كيف لنا ان نعرض مثلا الشكل فى الصف الثاني في المريع المربع الثاني لماذا لم نكتب[ code]CustomChar(2,2);[/code
و هكذا إلى أن نصل
[
code]CustomChar(4,4);[/code

بما أننا لدينا 8 أشكال,عذرا لأسئلتي التي يمكن ان لا تكون في المستوى و لكن أرجوا أان أجد أذان صاغية لها مشكورين[/COLO
R]


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


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

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


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

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

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

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

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

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

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

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

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

__________________________________________________ __________________________________________________ __________________________

كود:
Lcd_Cmd(64);
الرقم 64 هو رقم خاص بالذاكرة الخاصة بالشاشة
وهو امر خاص ببروتوكول ال IC الخاص بالشاشة
اى ان ليس لنا دخل فية وانا لم اصنعه بل الشركة المصنعه

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

كود:
Lcd_Chr(pos_row, pos_char, 0 to 7);
فائدة وضع الارقام من 0 الى 7
هو عمل رمز لكل شكل بحيث ان كل رقم يكون محدد لشكل معين

وفائدة ال pos_row, pos_char

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

كود:
CustomChar(1,1);
اى ان pos_row تاخذ اول قيمة وهى هنا 1
وpos_char تاخذ ثانى قيمة وهى هنا 1 ايضا

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

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

فائدتة هذا الامر
كود:
x1=0;
هو انى فى كل مرة اغيرة لكى اغير الارقام من 0 الى 7 فى الداله التى قمت بشرحها

وهذا للاختصار ليس الا
واذا اطلعتى على الكود كاملا سوف تجدى اننى عند عرض شكل معين
اعطة رقمين جداد من خلال المتغيرين
كود:
x=64;x1=0;
وهذا لان كل شكل لة رقم محدد كما قلت

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

اما بالنسبة لسؤالك عن هذا الامر

كود:
CustomChar(1,1);
وعن تغير مكان عرض الاشكال
فلن اجيبة وساترك انت تجيبى نفسك
جربى الى فى دماغك يمكن يكون صح

وان شاء الله توصلى للمطلوب
ولو معرفتيش عرفينى

.................................................. .................................................. ..........
بالنسبة لهذا الامر

كود:
for(y=0;y<7;y++){text2[y]=character0[y];}
فكما نعرف ان لكل شكل مما نقوم برسمة على الشاشة
له اكثر من قيمة لان لكل بكسل فى الشاشة له قيمة
ولهذا مثلا شكل البطارية على الشاشة مثلا
سوف يكون له مصفوفة لكى تعبر عنة
والمصفوفة هى عدد من المتغيرات تكون باسم واحد
مثل character0

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

وهذا الامر هو الذى يقوم بنقلها قيمة قيمة
لان المصفوفة تحمل 7 قيم ويجب نقلها لهذا كان التكرار 7 مرات

وان كان هذا الجزء صعب ولم تفهمية
فلا مشكلة

انظرى الى الكود الذى وضعه الاخ المخترع 01

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

او انظرى الى هذه الداله فهى تعبر عن اظهار شكل على الشاشة

كود:
const char character[] = {10,0,14,17,17,17,14,0};

void CustomChar(char pos_row, char pos_char) {
  char i;
    Lcd_Cmd(64);
    for (i = 0; i<=7; i++) Lcd_Chr_CP(character[i]);
    Lcd_Cmd(_LCD_RETURN_HOME);
    Lcd_Chr(pos_row, pos_char, 0);
}
وهذه لعرض شكل واحد ولعرض 8 اشاكل يجب تكرارها 8 مرات
وانا قمت باختصارها فى داله عرض واحدة لهذا تجدين صعوبة فى فهمها

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

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

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


الصورة الرمزية kaoutar11
kaoutar11
:: مهندس متواجد ::
تاريخ التسجيل: Feb 2012
الدولة: Algeria
المشاركات: 144
نشاط [ kaoutar11 ]
قوة السمعة:
قديم 25-08-2012, 11:52 PM المشاركة 47   
افتراضي


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


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


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

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



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