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

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

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 16-03-2011, 08:43 PM المشاركة 1   
افتراضي التعامل مع المفاتيح الضاغطة Button- ومكتبة المفاتيح الضاغطة BUTTON LIBRARY : Twitter FaceBook Google+



التعامل مع المفاتيح الضاغطة Button- ومكتبة المفاتيح الضاغطة BUTTON LIBRARY :

تحتوى هذه المكتبة على العديد من الروتينات المفيدة لتطوير المشروع .
صيغة دالة المفتاح الضاغط :






حيث نبدأ بكتابة كلمة المفتاح Button (متغير نوع unsigned short أى سعته بايت أى مداه 0-255 ) ثم داخل قوسين (…,…) نكتب مؤشر للمنفذ المتصل به المفتاح *port (متغير نوع unsigned short ) وفاصلة ثم الطرف المتصل به المفتاح pin (متغير نوع unsigned short ) وفاصلة ثم زمن منع الارتدادات فى المفتاح بالملى ثانية time (متغير نوع unsigned short ) وفاصلة حالة المفتاح وهو فعال active_state (متغير نوع unsigned short ) .

تعليق :
المؤشرات Pointers
المؤشرات هي كائنات خاصة لحفظ (أو "الإشارة إلى ") عناوين بالذاكرة.
في المترجم mikroC PROيمكن الحصول على عنوان كائن بالذاكرة عن طريق العامل( & ).
نستخدم العامل (*) كمؤشر للوصول إلى الكائن المشار إليه .

العائدات RETURNS : 0-255

الوصف :
  • تقوم الدالة بمعالجة الارتدادات الناتجة عند الضغط على المفتاح de-bouncing .
  • البارامتر port يحدد موقع المفتاح الضاغط (المنفذ) .
  • والبارامتر pin هو رقم الطرف فى المنفذ port ويمكن أن يكون 0….7 .
  • والبارامتر time هو الزمن اللازم لمعالجة الارتدادات بالملى ثانية .
  • والبارامتر active_state يمكن أن يكون 0 أو 1 ويحدد أن كان المفتاح فعال فى الحالة المنطقية 0 أو الحالة المنطقية 1 .
المطالب : يجب إعداد الطرف المتصل بالمفتاح كمدخل .
مثال :

قراءة الطرف المتصل بالمفتاح RB0 , وعند التحول من 1 إلى 0 أى الضغط على المفتاح (فيصبح الطرف RB0 فى الحالة المرتفعة 1 ) ثم تحرير المفتاح (فيصبح الطرف RB0 فى الحالة المنخفضة 0 ) يتم عكس حالة المنفذ PORTD كمثال لفعل ما ويتم ذلك كما يلى :
  • إنشاء حلقة غير منتهية do{….}while .
  • عندما يتحقق الضغط على المفتاح فإن عبارة الشرط if (Button(&PORTB, 0, 1, 1)) تتحقق ويتم تنفيذ التعبير oldstate = 1 أى حفظ حالة الطرف RB0 أى حالة المفتاح عندما يصبح فى الحالة المرتفعة 1 (عند الضغط) فى الخانة المسماة oldstate أى الحالة القديمة . لماذا؟
  • لأننا سوف نقارنها بحالة جديدة وهى تحرير المفتاح حتى نتأكد من أنه قد تم الضغط على المفتاح ثم تحريرة فتنتقل حالة الطرف RB0 من الحالة المرتفعة 1 إلى الحالة المنخفضة 0 ويتم ذلك بعبارة الشرط (التحقق) if (oldstate && Button(&PORTB, 0, 1, 0)) .
  • الشرط هنا : نتيجة عملية AND المنطقية && وعلى جانبيها مدخليها . فإن كان المدخل الأول oldstate فى الحالة المرتفعة true=1 وكان المدخل الآخر Button(&PORTB, 0, 1, 0) متحقق (المفتاح غير مضغوط أو تم تحريره) أى فى الحالة المرتفعى true=1 فإن ناتج عملية AND المنطقية تكون مرتفعة true=1 أى تتحقق عبارة الشرط ويجبي تنفيذ التعبير الذى يليها وهو PORTD = ~PORTD; (عكس حالة جميع خانات المنفذ PORTD ) و تصفير خانة حفظ حالة المفتاح لتهيئتها للضغطة القادمة oldstate = 0; .



تدريب

اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 16-03-2011, 08:46 PM المشاركة 2   
افتراضي


تدريب

المقدمة :
  • اسم البرنامج :
Button وهو لعرض استخدام مكتبة المفاتيح الضاغطة Button Library .
  • الوصف :
هذا البرنامج يعرض استخدام مفتاح بلوحة متصل بالمنفذ PORTB كمدخل على الطرف RB0 . عند كل تغير (تحول انتقال) فى حالة الطرف RB0 من الواحد (1) إلى الصفر يتم عكس حالة جميع خانات المنفذ PORTC .
  • الميكروكونترولر المستخدم PIC16F887 .
  • تردد المذبذب HS, 08.0000 MHz
  • المترجم mikroC PRO for PIC
  • يتم التحكم فة إضاءة وإطفاء الليدات المتصلة بالمنفذ PORTC .
الدائرة الكهربية :
  • الحالة الابتدائية :



  • الضغط على المفتاح :




  • بعد تحرير المفتاح :



البرنامج :






التعليق على البرنامج :

1- الإعلان عن خانةbit كعلم باسم oldstate "الحالة القديمة"لحفظ حالة المفتاح ومقارنتها بحالة أجدد منها :
bit oldstate; // Old state flag
2- الدالة الرئيسية :
void main() {

3- إعداد المنافذ :
  • إعداد جميع الأطراف التناظرية كمداخل / مخارج رقمية :
ANSEL = 0; // Configure AN pins as digital I/O


ANSELH = 0;
  • إعداد الطرف الأول من المنفذ PORT B كمدخل (لاحظ طريقة استخدام خانة مفردة ):
TRISB0_bit = 1; // set RB0 pin as input
  • إعداد جميع أطراف المنفذ PORT C كمخارج :
TRISC = 0x00; // Configure PORTC as output
  • القيمة الابتدائية للمنفذ PORTC = 0xAA = 0b10101010 (مثال لنموذج )
PORTC = 0xAA; // Initial PORTC value
  • الحالة الابتدائية للخانة هى الصفر لتهيئتها للعمل
oldstate = 0;
4- بدء إنشاء حلقة do{….}while الغير منتهية

do {
  • كشف حالة المفتاح باستخدام عبارة الشرط : هل المفتاح منضغط ؟
if (Button(&PORTB, 0, 1, 1)) { // Detect logical one
  • إذا كان المفتاح منضغط (تحقق الشرط) عندئذ نحفظ حالتة بالخانة oldstate حتى يمكن مقارنتها بحالته إذا تغيرت .
oldstate = 1; // Update flag
}
  • إكتشاف الانتقال من الواحد إلى الصفر ، هل يحدث ذلك ؟ هل نتيجة عملية AND (&&) بين الخانة oldstate (فى الحالة المرتفعة) وحالة المفتاح (فى الحالة المنخفضة إى غير مفعل أى تم تحريرة) تكون (1)true أو (0)false ؟

if (oldstate && Button(&PORTB, 0, 1, 0)) { // Detect one-to-zero transition
  • تحقق الشرط لأن كل من جانبى المؤثر && متحقق عندئذ يتم عكس حالة أطراف المنفذ PORTC و عودة الخانة oldstate إلى حالة الصفر للتجهيز لحالة قادمة .
PORTC = ~PORTC; // Invert PORTC
oldstate = 0; // Update flag
}
} while(1); // Endless loop
}




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

الصورة الرمزية zanyhand
zanyhand
:: مهندس متواجد ::
تاريخ التسجيل: Aug 2009
الدولة: المغرب
المشاركات: 95
نشاط [ zanyhand ]
قوة السمعة:0
قديم 17-03-2011, 04:33 PM المشاركة 3   
Smile


باراكا الله فيك و جعله الله في ميزان حسناتك المقبول


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 17-03-2011, 04:55 PM المشاركة 4   
افتراضي


باراكا الله فيك و جعله الله في ميزان حسناتك المقبول
اخى الكريم

شكرا جزيلا لك

بارك الله فيك

مع تمنياتى بدوام التوفيق

إضافة رد

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

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

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


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

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