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

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

abdo1992
:: مهندس جيد ::
تاريخ التسجيل: Aug 2010
الدولة: مصر
المشاركات: 225
نشاط [ abdo1992 ]
قوة السمعة:0
قديم 30-08-2013, 09:25 PM المشاركة 1   
ha مشكلة في عرض علي شاشة lcd Twitter FaceBook Google+



السلام عليكم ..
شباب انا عندي مشكلة وهي اني مش بعرف اتعامل كويس مع عرض الكلام علي الشاشة lcd...
فمثلا انا كنت عاوز اعمل برنامج بسيط جدا وهو متكون من sw &lcd & pic
لما تضغط علي السوتش يظهر sw=on
ولما متضغطش يظهر السوتش sw=off
بس انا عاوز كلمة on ,off يبقا في متغير واحد اسمة char ff
ودة البرنامج اللي عملتة
كود:
//sbit
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;

sbit sw at portc.b0;
//var
 char ff[];
 
//medules

void display(){
lcd_out(1,1,"sw=");
if(sw==1)
{ff="on";}          /////// error
else{ff="off";}    /////// error
lcd_out_cp(ff);
}

void main() {
//setup
trisc=1;
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
while(1)
 {
  display();
 }
}
عارف ان ممكن اعمل الموضوع دة بطريقة ابسط من دون الدخول في ال CHR بس انا مش فاهم ازاي بتعامل معاة .....
وشكرا

اعلانات

الصورة الرمزية kaoutar11
kaoutar11
:: مهندس متواجد ::
تاريخ التسجيل: Feb 2012
الدولة: Algeria
المشاركات: 145
نشاط [ kaoutar11 ]
قوة السمعة:0
قديم 30-08-2013, 10:04 PM المشاركة 2   
افتراضي


السلام عليكم أخي جرب هذا الكود مع كتابة التعليمات الخاصة بالشاشة زائد هذا الكود:
while(1)
{ if(portB.F0==1);
Lcd_out(1,1,"on");
delay_ms(500);
else(lcd_out(1,1,"off");
}

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

abdo1992
:: مهندس جيد ::
تاريخ التسجيل: Aug 2010
الدولة: مصر
المشاركات: 225
نشاط [ abdo1992 ]
قوة السمعة:0
قديم 30-08-2013, 10:35 PM المشاركة 3   
افتراضي


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


abdo1992
:: مهندس جيد ::
تاريخ التسجيل: Aug 2010
الدولة: مصر
المشاركات: 225
نشاط [ abdo1992 ]
قوة السمعة:0
قديم 31-08-2013, 08:52 PM المشاركة 4   
افتراضي


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


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,687
نشاط [ حسن هادي محمود ]
قوة السمعة:137
قديم 31-08-2013, 09:27 PM المشاركة 5   
افتراضي


اية يا شباب محدش رد لية انا المشكلة اني مش بعرف اتعامل مع char بس ومش بعرف اغير القيم بتاعتها
واعرضها علي الشاشة
اخي كريم الامر بسيط
حل بسيط
انا حسب مافتهمت من حضرتك انك تريد تعامل مع متغير
انظر كود
كود:
char txt[]="OFF";
طبعا انا قمت بخزن رساله في مصفوفه سميتها txt

اما كيف يتم عرض على شاشه
كود:
lcd_out(1,1,txt);
ملاحظه علامه " تعني انه ماتضعه بين علامتي " تظهر على شاشه اي انها تحولها الى اسكي كود
طبعا اذا عند رسائل كثيره كيف تعرضها
طبعا يمكنك كتابه عده مصفوفات كما في اعلاه ولكن لديه لك نصيحه اذا كانت رسائل كثيره أكتبها في روم واي رساله تريد عرضها حولها الى رام ثم أعرضها لماذا لانك ستواجه مشاكل منها تعلق مايكرو ولايعمل بشكل صحيح يرجع ذلك الى ترتيب خزن بيانات في رام
شاهد هذه رسائل
كود:
const char loading[]               ="LOADING         ";
const char master_password[]       ="master code     ";
const char press_enter[]           ="   PRESS ENTER  ";
const char closed[]                ="     CLOSED     ";
const char open[]                  ="      OPEN      ";
const char clear[]                 ="                ";
const char auto_operation[]        ="auto operation  ";
const char munal_operation[]       ="munal operation ";
const char cooling[]               ="coolng          ";
const char heating[]               ="heating         ";
const char system_off[]            ="system OFF      ";
const char cool_temperature[]      ="cool temperature";
const char heat_temperature[]      ="heat temperature";
const char store_value[]           ="value is store  ";
const char out_off_range[]         ="out_off_range   ";
const char temp_display[]          ="temp            ";
const char Tmax_show[]             ="cool Tmax       ";
const char Tmin_show[]             ="heat Tmin       ";
تلاحظ اذا وضعت كلمه const في بدايه لاحظ كود مره اخرى معناها انا خزنت رسائل بروم وليس في رام طبعل اخي انت تعلم ان رام صغيره جدا بينما روم كبيره ورسائل اعلاه بحاجه الى مساحه تخزين لذا فهي طريقه مفضله
تلاحظ ايضا ان يجب ان تصبح رساله متساويه في كل مصفوفات وابعادها = طول شاشه اي انني استخدمت شاشه عدد احرف فيها 16

هل يمكن عرض رساله بطريقه تاليه
كود:
lcd_out(1,1,loading);
جواب لا لماذا لاني loading مخزونه في روم وليس رام اذا كيف يتم عرض رساله
نحول رساله الى رام وبعدها يتم عرض
انظر كود عرض رسائل مخزونه في روم
كود:
void message(const char *message,char zz)
{
 for(x=0;x<16;x++) my_txt[x]=message[x];
 lcd_out(zz,1,my_txt);
}
هنا اعطيه فقط اسم مصفوفه طبعا اذا مخزونه في روم لازم اكتب امام مصفوفه const وعليه كتبت const char *message
اما zz فانها تمثل العمود فانه مثلا اريد عرض رساله في عمود الاول او الثاني

امثله
كود:
message(Welcome,1);
message (loading ,2);
كود:
message(auto_operation,1);
وهكذا يتم عرض رساله بشكل مبسط وايضا هذه طريقه تقلل في حجم الكود
اتمنى ان تكون هذه معلومات مفيده


abdo1992
:: مهندس جيد ::
تاريخ التسجيل: Aug 2010
الدولة: مصر
المشاركات: 225
نشاط [ abdo1992 ]
قوة السمعة:0
قديم 31-08-2013, 10:37 PM المشاركة 6   
افتراضي


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

يعني لو انا دلوقتي عندي برنامج زي الاتي
كود:
void main() {
Lcd_Init();
char txt[]="first";
lcd_out(1,1,txt);
Lcd_Cmd(_LCD_CLEAR);
/*
.
.
.

*/
 txt[]="sec";
 lcd_out(1,1,txt);
}
عرفت متغير اسمهة txt وحطيت فية قيمة وهيا first وبعديها عرضة القيمة دة
وبعد كدة عملت اي حاجة
وبعديها كنت عاوز استخدم نفس المتغير txt دة وامسح اللي فية واحط فية قيمة جديدة
ازاي اعمل كدة ؟؟؟؟؟
يعني عاوز اغير قيمة الحاجة اللي متخزنة فية بس

دة اولا ثانيا

الكود دة كدة
كود:
void message(const char *message,char zz) { for(x=0;x<16;x++) my_txt[x]=message[x]; lcd_out(zz,1,my_txt); }
علشان اعرض النصوص اللي مخزنة في ال روم وتعرضها علطول صح كدة


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,687
نشاط [ حسن هادي محمود ]
قوة السمعة:137
قديم 01-09-2013, 02:57 AM المشاركة 7   
افتراضي


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

يعني لو انا دلوقتي عندي برنامج زي الاتي
كود:
void main() {
Lcd_Init();
char txt[]="first";
lcd_out(1,1,txt);
Lcd_Cmd(_LCD_CLEAR);
/*
.
.
.

*/
 txt[]="sec";
 lcd_out(1,1,txt);
}
عرفت متغير اسمهة txt وحطيت فية قيمة وهيا first وبعديها عرضة القيمة دة
وبعد كدة عملت اي حاجة
وبعديها كنت عاوز استخدم نفس المتغير txt دة وامسح اللي فية واحط فية قيمة جديدة
ازاي اعمل كدة ؟؟؟؟؟
يعني عاوز اغير قيمة الحاجة اللي متخزنة فية بس

دة اولا ثانيا

الكود دة كدة
كود:
void message(const char *message,char zz) { for(x=0;x<16;x++) my_txt[x]=message[x]; lcd_out(zz,1,my_txt); }
علشان اعرض النصوص اللي مخزنة في ال روم وتعرضها علطول صح كدة
سلام عليكم
انت تقصد تريد متغير واحد تخزن فيه عده رسائل
1- عليك اولا تخزن كل رسائل التي تريد عرضها في روم
2- بعدها يأتي دور هذه داله
كود:
void message(const char *message,char zz) { for(x=0;x<16;x++) my_txt[x]=message[x]; lcd_out(zz,1,my_txt); }
هذه داله مهمتها عرض رسائل بشكل مباشر كيف تعمل:
داله for تعد من 0 الى 16 طبعا هنا 16 تمثل طول رساله طبعا ايضا تمثل طول شاشه لضمان عرض كل معلومات
[my_txt[x هذه مصفوفه تخزن معلومات في رام
داله for عندما x=0 يتم خزن عنصر الاول من اي رساله في [my_txt[0
وعندما x=1 يتم خزن العنصر الثاني من اي رساله في[ my_txt[1 , وهكذا
وبعدين لما اكملت عمليه تحويل من روم الى رام بعدها استطيع عرض رساله
عن طريق امر
كود:
lcd_out(1,1,txt);
اما كود الذي كتبته كمثال يصبح كتالي

كود:
void message(const char *message,char zz);
const char first[]="first           ";
 const char sec[]="sec             ";
void main() {
Lcd_Init();
message(first,1);
Lcd_Cmd(_LCD_CLEAR);
/*
.
.
.

*/
 
 message(sec,1);
}
void message(const char *message,char zz)
{
 for(x=0;x<16;x++) my_txt[x]=message[x];
 lcd_out(zz,1,my_txt);
}


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,687
نشاط [ حسن هادي محمود ]
قوة السمعة:137
قديم 01-09-2013, 03:03 AM المشاركة 8   
افتراضي


سلام عليكم
في حاله كانت شاشه طولها 40 حرف او كنت حجم روم مهم عندك
فيوجد حل انظر رابط التالي
http://www.qariya.com/vb/showthread....875#post781875
طبعا معلومات التي كتبتها اعلاه لاتحتاج الى امر مسح شاشه لانها سوف تمسح رساله نفسها تلقائيا لكون رساله مغطيه كل العمود شاشه الا اذا كانت هناك رساله في عمود الاول وثاني هنا يجب مسح لكي لاتظهر احرف انت لاتريدها
اما ماذكر هنا يجب استخدام امر مسح قبل اظهار رساله

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


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

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2026