السلام عليكم ورحمة الله وبركاته
اخواني الاعزاء
عندي سؤال في المايكروكونترولر بشكل عام
وهو كيف يمكننا ان نجعل المايكروكونترولر يفرق بين الضغطة القصيرة والضغطة الطويلة
كما نرى في بعض التطبيقات يكون التحكم بها عبر زو واحد فقط ويتم التبديل بين وضائف الجهاز بنوع الضغطة هل هي ضغطة قصيرة او ضغطة طويلة او ضغطة متكررة مثلا عندما تضغط مرة يحصل شي وعندما تضغط مرتين سريعتين يحصل شي اخر وعند الضغط مثلا لمدة طويلة تقوم باطفاء الجهاز.
|
وعليكم السلام ورحمه الله ..
أولا الميكروكنترولر لا يستطيع التفرقه بين الضغط على المفتاح ... لأن هذا الأمر يتعلق بالبرنامج المخزن على الميكرو كنترولر.. أو خلينا نقول الأمر يتعلق .. بالبرمجه ..
أخى الكريم اليك طريقتين للتحكم فى عدد كبير من المنافذ .. لاحظ المفتاح على اليسار يعمل بطريقه مختلفة عن المفتاح الموجد فى يمين الصورة ..
جرب استخدام المفتحين ولاحظ الفرق ..
أولا الأمر يتعلق بالبرمجه كما ذكرت لك ..
وهنا عند الضغط على المفتاح اليسار .. ضغطه واحد سريعه .. سيعمل الليد رقم (1)..
وايذا ضغط ضغطه وتليها ضغطه ثانيه تستمر لمدة 2 ثانيه وتم تحرير المفتاح ستلاحظ أن اليد رقم (2) قد عمل ..
ولكن هذة الطريقه ربما محدودة بعض الشئ عن طرق أخرى ..
فمثلا لو تلاحظ المفتاح اليمين .. يتحكم فى (8 منافذ من الميكرو كنترولر .. وتستطيع التحكم فى عدد أكبر من ذالك بكثير .. وأيضااا يمكن التحكم فى جميع منافذ الميكرو كنترولر من خلال مفتاح واحد فقط ..
اليك الصورة
واليك كزد البرنامج ..
كود:
//eng/ abdalla hygazy //
int LED1=0,LED2=0,LED3=0,LED4=0;
void main() {
TRISB=0; PORTB=0;
TRISD=2;
while(1){
//***********************************************************//
if( PORTD.F0==0 ){ delay_ms(450); if( PORTD.F0==1 ){LED1=1; }
if( PORTD.F0==0 ){ LED1=2;delay_ms(450); }};
//***********************************************************//
//*****************************************//
if( PORTD.F1==0 ){ LED1++; delay_ms(450); }
//****************************************//
//**************************//
if( LED1==1 ) { PORTB=1; }
if( LED1==2 ) { PORTB=2; }
if( LED1==3 ) { PORTB=4; }
if( LED1==4 ) { PORTB=8; }
if( LED1==5 ) { PORTB=16; }
if( LED1==6 ) { PORTB=32; }
if( LED1==7 ) { PORTB=64; }
if( LED1==8 ) { PORTB=128; }
//***************************//
//************************//
if( LED1==9 ) { LED1=1; }
//***********************//
}
}
وايضااا اليك المشروع كامل للتحميل والتجربة ..
https://drive.google.com/open?id=0Bx...TNmYXlycXFPMTg
تحياتى لك وانا معك فى أى توضيح أو استفسار