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

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

احمد شهيد جواد
:: مهندس متميز ::
تاريخ التسجيل: Apr 2015
الدولة: العراق
المشاركات: 324
نشاط [ احمد شهيد جواد ]
قوة السمعة:0
قديم 21-04-2015, 01:44 PM المشاركة 41   
افتراضي



تمام أخي adcon1=6 وبالنسبه ل MCLR لازم توصلها الى 5 فولت لانه غير ممكن جعله disable في هذا البك
اعطني ملف كود ومحاكاه حتى اشوف مشكله
تحياتي

تفضل استاذ حسن هذه ملفات الكود والمحاكات

http://up.top4top.net/downloadf-top4...2e741-zip.html

اعلانات

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 21-04-2015, 02:10 PM المشاركة 42   
افتراضي


السلام عليكم
أخي العزيز سبب مشكله هو ان الامر Lcd0_GotoYX_16x4 هو مخصص لشاشه 4x16 كما موضح بالامر نفسه لذا انت وضعت الشاشه اكبر من 4x16 اعتقد 4x20 وبتالي راح يحصل عندك تشفيت بالامر

اذا كنت تريد أستخدام 4x20 راجع موضوعي حول LCD ستجد شرح لمعالجه شفت في النصوص
تحياتي

احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً احمد شهيد جواد ( شكر العضو على هذه المشاركة )
اعجاب احمد شهيد جواد ( أعجبته المشاركة )
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

احمد شهيد جواد
:: مهندس متميز ::
تاريخ التسجيل: Apr 2015
الدولة: العراق
المشاركات: 324
نشاط [ احمد شهيد جواد ]
قوة السمعة:0
قديم 21-04-2015, 02:59 PM المشاركة 43   
افتراضي


السلام عليكم
أخي العزيز سبب مشكله هو ان الامر Lcd0_GotoYX_16x4 هو مخصص لشاشه 4x16 كما موضح بالامر نفسه لذا انت وضعت الشاشه اكبر من 4x16 اعتقد 4x20 وبتالي راح يحصل عندك تشفيت بالامر

اذا كنت تريد أستخدام 4x20 راجع موضوعي حول LCD ستجد شرح لمعالجه شفت في النصوص
تحياتي

في هذا الموضوع لم اجد مشاركة تخص الــ LCD 20*4 ؟؟


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 21-04-2015, 03:25 PM المشاركة 44   
افتراضي


في هذا الموضوع لم اجد مشاركة تخص الــ LCD 20*4 ؟؟
راجع مشاركه 11 فقد ذكرت ذلك لان تعتمد على factor
هنا أستخدم مكتبه الشاشه موجوده في مايكروسي لان طريقه تخص مكتبه القديمه

بالنسبه لي ارى 4x16 مناسبه لتطبيقات او 2x16

تحياتي


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 21-04-2015, 03:34 PM المشاركة 45   
افتراضي


اخوي هذا حل لشاشه 4x20 او بشكل عام لاحظ الكود الخاص بمشروعك
انا أستخدمت مكتبه جديده لماذا لاني اكدر أطبع نصوص من نوع const بينما القديمه لاأستطيع طباعتها الا بعد تحويلها من روم الى رام
كود:
//sbit lcd
sbit LCD0_RS at RB0_bit ;
sbit LCD0_EN at RB1_bit ;
sbit LCD0_D4 at RB2_bit ;
sbit LCD0_D5 at RB3_bit ;
sbit LCD0_D6 at RB4_bit ;
sbit LCD0_D7 at RB5_bit ;
sbit LCD0_RS_Direction at TRISB0_bit;
sbit LCD0_EN_Direction at TRISB1_bit;
sbit LCD0_D4_Direction at TRISB2_bit;
sbit LCD0_D5_Direction at TRISB3_bit;
sbit LCD0_D6_Direction at TRISB4_bit;
sbit LCD0_D7_Direction at TRISB5_bit;
const char txt1[]="ramadan kareem1 ";
const char txt2[]="ramadan kareem2 ";
const char txt3[]="ramadan kareem3 ";
const char txt4[]="ramadan kareem4 ";

const char facter=20;

//********************************************//
void Lcd_Out20(char row, char col, const char *txt) {

   switch (row) 
   {
      case 0: Lcd0_Command(128 +  0 + col ); break;
      case 1: Lcd0_Command(128 + 64 + col ); break;
      case 2: Lcd0_Command(128 + facter + col ); break;
      case 3: Lcd0_Command(128 + 64+facter + col ); break;
      default: return;
   }
   Lcd0_CstrOut(txt);
 }
void main()
{
 adcon1=6;
 Lcd0_Init();
 Lcd0_Command(1);
 Lcd_Out20(0,0,txt1);
 Lcd_Out20(1,0,txt2);
 Lcd_Out20(2,0,txt3);
 Lcd_Out20(3,0,txt4);

}


احمد شهيد جواد
:: مهندس متميز ::
تاريخ التسجيل: Apr 2015
الدولة: العراق
المشاركات: 324
نشاط [ احمد شهيد جواد ]
قوة السمعة:0
قديم 21-04-2015, 04:38 PM المشاركة 46   
افتراضي


السلام عليكم استاذ حسن


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



كود:
void Lcd_Out20(char row, char col, const char *txt) {




هل المتغيرين row و col ثوابت ( لا اقصد const وانما ك أسماء ) وماهي وظيفتهم



بالنسبة للــ
كود:
const char *txt


لماذا جعلت الــ txt بوينتر ؟؟؟ ولماذا هو const ؟؟؟





هذه الاوامر
كود:
 case 0: Lcd0_Command(128 + 0 + col ); break;



كود:
 
case 1: Lcd0_Command(128 + 64 + col ); break;
 
case 2: Lcd0_Command(128 + facter + col ); break;
 
case 3: Lcd0_Command(128 + 64+facter + col ); break;
ماهو عملها ؟؟؟؟؟



التعديل الأخير تم بواسطة : احمد شهيد جواد بتاريخ 21-04-2015 الساعة 04:45 PM

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 22-04-2015, 02:40 AM المشاركة 47   
افتراضي


السلام عليكم استاذ حسن


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



كود:
void Lcd_Out20(char row, char col, const char *txt) {




هل المتغيرين row و col ثوابت ( لا اقصد const وانما ك أسماء ) وماهي وظيفتهم



بالنسبة للــ
كود:
const char *txt


لماذا جعلت الــ txt بوينتر ؟؟؟ ولماذا هو const ؟؟؟





هذه الاوامر
كود:
 case 0: Lcd0_Command(128 + 0 + col ); break;



كود:
 
case 1: Lcd0_Command(128 + 64 + col ); break;
 
case 2: Lcd0_Command(128 + facter + col ); break;
 
case 3: Lcd0_Command(128 + 64+facter + col ); break;
ماهو عملها ؟؟؟؟؟

السلام عليكم
أخي العزيز داله void Lcd_Out20 هي مجرد اسم يمكنك تغيره هذه داله وضعت فيها ثلاث متغيرات char row, char col, const char *txt ' طبعا هي كلها اسماء يمكنك تغيرها يعني كل متغير انت تعطيه اسم
ملاحظه// كلمه ذات لون اسود غامق شويه في مايكروسي فهي كلمات ثابته ومحجوزه في كومبايلر او لغه C مثلا اذا كتبت متغير اسمه data او Return و switch , ....
سترى لونه يختلف عن كلمات اخرى يعني اسود غامق هذه كلمات ثابته ولاتستخدم كمتغيرات اما البقيه انطيها اي اسم بس حاول تعطيها اسم مقارب لحدث مثلا في حالتنا فرضت row تمثل الاعمده و col تمثل صفوف


اذن داله void Lcd_Out20 تحتاج رقم عمود ورقم الصف و رساله ومتمثله بــ txt
طبعا طالما رساله هي مصفوفه اذن لازم txt متغير من نوع بوينتر ولازم من نوع ثابت ليش لانه رساله الي خزنتها هي من نوع ثابت يعني لازم تتقيد بحاله الرساله هي مخزونه في روم ام في رام يعني هنا لايمكن ان اضع رساله من نوع char مخزونه في رام واضعها في txt لانه راح يخبرك كومبايلر عندك خطأ بأنه لايستطيع التحويل من روم الى رام


اما الاوامر موجوده في switch مهمتها وضع مؤشر في مكان الصحيح
شوف أخي الامر Lcd0_Command هو الامر ينفذ جميع الاوامر الشاشه ولكن يحتاج الى رقم معين على سبيل مثال
(lcd_cmd(_lcd_clear تذكر هذا الامر يمسح الشاشه بس انت تكدر تكتبها بالارقام ( lcd_cmd(1
قرأ بتمعن مشاركه 11 ستلاحظ الارقام
يعني خليني اختصر لك كلام تكدر تكول مثل اتصال السريع
طبعا lcd_cmd للمكتبه القديمه اما الجديده Lcd0_Command كلاهما يأخذون نفس الارقام وهذه الارقام ثوابت يعني 1 للمسح يعني لايمكن تغيره
يعني تكدر تتعامل مع الشاشه بلغه كتابه مثلا تنطيه رقم عمود ورقم صف عندها ماذا يحدث مفروض يتحرك مؤشر الى مكان الذي انت اعطيته له او تقول له مباشره اذهب الى هذا مكان عن طريق command

تلاحظ case0 و1 و2و3 هذا حسب رقم عمود الي انت تضعه

طبعا احنا صعب علينا تعامل مع الارقام ولكن هذه داله تكدر تحفظها لانها مهمتها وضع مؤشر في مكان الصحيح وهي مفيده للشاشات اكثر من عمودين


احمد شهيد جواد
:: مهندس متميز ::
تاريخ التسجيل: Apr 2015
الدولة: العراق
المشاركات: 324
نشاط [ احمد شهيد جواد ]
قوة السمعة:0
قديم 22-04-2015, 12:58 PM المشاركة 48   
افتراضي


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

بالنسبة لهذا الكود

كود:
void Lcd_Out20(char row, char col, const char *txt) {

   switch (row)
   {
      case 0: Lcd0_Command(128 +  0 + col ); break;
      case 1: Lcd0_Command(128 + 64 + col ); break;
      case 2: Lcd0_Command(128 + facter + col ); break;
      case 3: Lcd0_Command(128 + 64+facter + col ); break;
      default: return;
   }
   Lcd0_CstrOut(txt);
 }
حسب ماهو معروف ان جملة switch تقارن بين المتغيير الذي بداخلها مع الحالات (case) فمتى ما تحقق الشرط نفذ الامر المسنود له ولكن هنا وفي هذا الكود المتغير row يبقى ثابت حسب قيمته الافتراضية فكيف ينفذ الحالات الاربعة دون ان تزداد قيمته ؟؟؟؟؟ فعندما يكون بواحد ينفذ الحلة الاولى وعندما يكون 2 ينفذ الحالة الثانية وهكذا ....
السؤال الثاني : ماهو دور المتغير col داخل كل جملة ؟؟؟؟
السؤال الثالث : لماذا txt موجودة فقط ;(Lcd0_CstrOut(txt اين الــ txt2 و الــ txt3

إضافة رد

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

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

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


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

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