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

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

الصورة الرمزية remon romany
remon romany
:: عضو نشط ::
تاريخ التسجيل: Feb 2011
المشاركات: 897
نشاط [ remon romany ]
قوة السمعة:0
قديم 26-09-2013, 11:08 PM المشاركة 1   
ha لماذا لا يعمل هذا الكود Twitter FaceBook Google+



هذا الكود كود ربط الكيبورد بالميكروكنترولر بلغة الميكروسى وانا استخدمت
المتحكم 16f84a فى هذا المشروع
ولكن الكود لا يعمل فما المشكلة
علما بان وظيقة هذا الكود هو اضائة الليدات الموصلة على البورت b عند الضغط على زر المسح فى الكيبورد (اللى كوده 16 )
ارجو المساعده ضرورى لو سمحتوا
كود:
                 sbit PS2_Data at Ra0_bit;
 sbit PS2_Clock at Ra1_bit;
 sbit PS2_Data_Direction at TRISa0_bit;
 sbit PS2_Clock_Direction at TRISa1_bit;
 unsigned short keydata = 0, special = 0, down = 0;
 void main() {
trisb=0b00000000; portb=0b00000000;
 Ps2_Config();
 while(1)
{ Ps2_Key_Read(&keydata, &special, &down);
 if(down==1){down=0; if(special==1){special=0;
if(keydata==16){portb=0b11111111;}
 } }
}
}

اعلانات

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


هذا الكود كود ربط الكيبورد بالميكروكنترولر بلغة الميكروسى وانا استخدمت
المتحكم 16f84a فى هذا المشروع
ولكن الكود لا يعمل فما المشكلة
علما بان وظيقة هذا الكود هو اضائة الليدات الموصلة على البورت b عند الضغط على زر المسح فى الكيبورد (اللى كوده 16 )
ارجو المساعده ضرورى لو سمحتوا
كود:
                 sbit PS2_Data at Ra0_bit;
 sbit PS2_Clock at Ra1_bit;
 sbit PS2_Data_Direction at TRISa0_bit;
 sbit PS2_Clock_Direction at TRISa1_bit;
 unsigned short keydata = 0, special = 0, down = 0;
 void main() {
trisb=0b00000000; portb=0b00000000;
 Ps2_Config();
 while(1)
{ Ps2_Key_Read(&keydata, &special, &down);
 if(down==1){down=0; if(special==1){special=0;
if(keydata==16){portb=0b11111111;}
 } }
}
}
اخي كريم
عندك معلومات حول ps2
وكيف تتم محاكاه بين كيبورد وبروتيس
وأعتذر عن عدم مساعده لاني لم تعامل مع ps2 ولكن ممكن قرأ موضوع ps2 وبعدها أستطيع مساعده بمشيئه الله

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

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


هذا الكود كود ربط الكيبورد بالميكروكنترولر بلغة الميكروسى وانا استخدمت
المتحكم 16f84a فى هذا المشروع
ولكن الكود لا يعمل فما المشكلة
علما بان وظيقة هذا الكود هو اضائة الليدات الموصلة على البورت b عند الضغط على زر المسح فى الكيبورد (اللى كوده 16 )
ارجو المساعده ضرورى لو سمحتوا
كود:
                 sbit PS2_Data at Ra0_bit;
 sbit PS2_Clock at Ra1_bit;
 sbit PS2_Data_Direction at TRISa0_bit;
 sbit PS2_Clock_Direction at TRISa1_bit;
 unsigned short keydata = 0, special = 0, down = 0;
 void main() {
trisb=0b00000000; portb=0b00000000;
 Ps2_Config();
 while(1)
{ Ps2_Key_Read(&keydata, &special, &down);
 if(down==1){down=0; if(special==1){special=0;
if(keydata==16){portb=0b11111111;}
 } }
}
}
اخي كريم هذا رسم هاردوير
https://www.google.iq/search?q=ps2&r...S2%3B881%3B315


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


هذا الكود كود ربط الكيبورد بالميكروكنترولر بلغة الميكروسى وانا استخدمت
المتحكم 16f84a فى هذا المشروع
ولكن الكود لا يعمل فما المشكلة
علما بان وظيقة هذا الكود هو اضائة الليدات الموصلة على البورت b عند الضغط على زر المسح فى الكيبورد (اللى كوده 16 )
ارجو المساعده ضرورى لو سمحتوا
كود:
                 sbit PS2_Data at Ra0_bit;
 sbit PS2_Clock at Ra1_bit;
 sbit PS2_Data_Direction at TRISa0_bit;
 sbit PS2_Clock_Direction at TRISa1_bit;
 unsigned short keydata = 0, special = 0, down = 0;
 void main() {
trisb=0b00000000; portb=0b00000000;
 Ps2_Config();
 while(1)
{ Ps2_Key_Read(&keydata, &special, &down);
 if(down==1){down=0; if(special==1){special=0;
if(keydata==16){portb=0b11111111;}
 } }
}
}
اعتقد تعديل في قائمه while وأعتقد انت مش محتاج صفر down , special لانها تصبح قيمها بــ 1 عند ضغط سويج وعند رفع اليد عن سويج تصبح 0
down
انظر شرح
كود:
unsigned short Ps2_Key_Read(unsigned short *value, unsigned short *special, unsigned short *pressed);
وهذه اما ترجع بـ 1 في حاله ضغط على سويج وترجع 0 في حاله عدم ضغط
Parameters :

value: holds the value of the key pressed. For characters, numerals, punctuation marks, and space value will store the appropriate ASCII code. Routine “recognizes” the function of Shift and Caps Lock, and behaves appropriately. For special function keys see Special Function Keys Table.

special: is a flag for special function keys (F1, Enter, Esc, etc). If key pressed is one of these, special will be set to 1, otherwise 0.

pressed: is set to 1 if the key is pressed, and 0 if it is released.

كود:
 if (Ps2_Key_Read(&keydata, &special, &down)) {
      if (down && (keydata == 16)) {                  // Backspace
       portb=255;
      }


التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 27-09-2013 الساعة 03:34 AM

الصورة الرمزية remon romany
remon romany
:: عضو نشط ::
تاريخ التسجيل: Feb 2011
المشاركات: 897
نشاط [ remon romany ]
قوة السمعة:0
قديم 27-09-2013, 09:37 AM المشاركة 5   
افتراضي


اعتقد تعديل في قائمه while وأعتقد انت مش محتاج صفر down , special لانها تصبح قيمها بــ 1 عند ضغط سويج وعند رفع اليد عن سويج تصبح 0
down
انظر شرح
كود:
unsigned short Ps2_Key_Read(unsigned short *value, unsigned short *special, unsigned short *pressed);
وهذه اما ترجع بـ 1 في حاله ضغط على سويج وترجع 0 في حاله عدم ضغط
Parameters :

value: holds the value of the key pressed. For characters, numerals, punctuation marks, and space value will store the appropriate ASCII code. Routine “recognizes” the function of Shift and Caps Lock, and behaves appropriately. For special function keys see Special Function Keys Table.

special: is a flag for special function keys (F1, Enter, Esc, etc). If key pressed is one of these, special will be set to 1, otherwise 0.

pressed: is set to 1 if the key is pressed, and 0 if it is released.

كود:
 if (Ps2_Key_Read(&keydata, &special, &down)) {
      if (down && (keydata == 16)) {                  // Backspace
       portb=255;
      }
شكرا لمساعدتك استاذ حسن هادى محمود
بس لو سمحت تكتبلى الكود النهائى كامل حتى استطيع فهمة
وبالنسبة للشرح اللى باللغة الانجليزية
انا ضعيف جدا فى الانجليزى ياريت لو حضرتك تشرحه بالعربى
وشكرا لك مره اخرى


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 27-09-2013, 10:19 AM المشاركة 6   
افتراضي


شكرا لمساعدتك استاذ حسن هادى محمود
بس لو سمحت تكتبلى الكود النهائى كامل حتى استطيع فهمة
وبالنسبة للشرح اللى باللغة الانجليزية
انا ضعيف جدا فى الانجليزى ياريت لو حضرتك تشرحه بالعربى
وشكرا لك مره اخرى
اخي كريم
راح اشرح الي أفتهمته من help موجود بمايكروسي
كود
كود:
unsigned short Ps2_Key_Read(unsigned short *value, unsigned short *special, unsigned short *pressed);
هذه داله من نوع متغير اي ترجع قيمه اذا تم ضغط على سويج فانها قيمتها=1 واذا لم يتم ضغط على اي سويج ترجع قيمه 0

في داخل هذه داله ثلاث متغيرات يتم تعريفها في بدايه برنامج
يتم خزن قيمه كود طبعا بااسكي كود في متغير اسمه value
هنا عندك حالتين
مفاتيح خاصه واخرى عاديه
اذا ضغطت على مفاتيح عاديه يكون متغير pressed=1 واذا رفعت ايدك راح يكون pressed=0
اذا ضغطت على مفاتيح خاصه يكون متغير special=1 واذا رفعت ايدك راح يكون special=0
انت برمجه بعد تعريف تجي الى هذه خطوه
كود:
if (Ps2_Key_Read(&keydata, &special, &down)==1)
او
كود:
if (Ps2_Key_Read(&keydata, &special, &down))
كلاهما صحيح
هنا اخبرته هل تم ضغط على مفتاح اذا كان=1 نفذ كذا
وهذا كود
كود:
if (down && (keydata == 16))
يعني اذا كان down==1 وكان keydata == 16 اي ضغطت على Backspace نفذ كذا
طبعا down تعني قيمه pressed
keydata تمثل value

اما مفاتيح خاصه
طبعا تلكاها في help لمايكروسي
Key Value returned
F1 1
F2 2
F3 3
F4 4
F5 5
F6 6
F7 7
F8 8
F9 9
F10 10
F11 11
F12 12
Enter 13
Page Up 14
Page Down 15
Backspace 16
Insert 17
Delete 18
Windows 19
Ctrl 20
Shift 21
Alt 22
Print Screen 23
Pause 24
Caps Lock 25
End 26
Home 27
Scroll Lock 28
Num Lock 29
Left Arrow 30
Right Arrow 31
Up Arrow 32
Down Arrow 33
Escape 34
Tab 35

اما كود نهائي امسح كود موجود في while(1 واضيف كود الي كتبه بردي سابق

ولكن سؤالي كيف تتم عمليه محاكاه


الصورة الرمزية remon romany
remon romany
:: عضو نشط ::
تاريخ التسجيل: Feb 2011
المشاركات: 897
نشاط [ remon romany ]
قوة السمعة:0
قديم 27-09-2013, 02:45 PM المشاركة 7   
ha


اخي كريم
راح اشرح الي أفتهمته من help موجود بمايكروسي
كود
كود:
unsigned short Ps2_Key_Read(unsigned short *value, unsigned short *special, unsigned short *pressed);
هذه داله من نوع متغير اي ترجع قيمه اذا تم ضغط على سويج فانها قيمتها=1 واذا لم يتم ضغط على اي سويج ترجع قيمه 0

في داخل هذه داله ثلاث متغيرات يتم تعريفها في بدايه برنامج
يتم خزن قيمه كود طبعا بااسكي كود في متغير اسمه value
هنا عندك حالتين
مفاتيح خاصه واخرى عاديه
اذا ضغطت على مفاتيح عاديه يكون متغير pressed=1 واذا رفعت ايدك راح يكون pressed=0
اذا ضغطت على مفاتيح خاصه يكون متغير special=1 واذا رفعت ايدك راح يكون special=0
انت برمجه بعد تعريف تجي الى هذه خطوه
كود:
if (Ps2_Key_Read(&keydata, &special, &down)==1)
او
كود:
if (Ps2_Key_Read(&keydata, &special, &down))
كلاهما صحيح
هنا اخبرته هل تم ضغط على مفتاح اذا كان=1 نفذ كذا
وهذا كود
كود:
if (down && (keydata == 16))
يعني اذا كان down==1 وكان keydata == 16 اي ضغطت على Backspace نفذ كذا
طبعا down تعني قيمه pressed
keydata تمثل value

اما مفاتيح خاصه
طبعا تلكاها في help لمايكروسي
Key Value returned
F1 1
F2 2
F3 3
F4 4
F5 5
F6 6
F7 7
F8 8
F9 9
F10 10
F11 11
F12 12
Enter 13
Page Up 14
Page Down 15
Backspace 16
Insert 17
Delete 18
Windows 19
Ctrl 20
Shift 21
Alt 22
Print Screen 23
Pause 24
Caps Lock 25
End 26
Home 27
Scroll Lock 28
Num Lock 29
Left Arrow 30
Right Arrow 31
Up Arrow 32
Down Arrow 33
Escape 34
Tab 35

اما كود نهائي امسح كود موجود في while(1 واضيف كود الي كتبه بردي سابق

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


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 27-09-2013, 02:57 PM المشاركة 8   
افتراضي


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

إضافة رد

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

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

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


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

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