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

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

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 09-02-2016, 04:48 PM المشاركة 1   
افتراضي برمجه كيباده 4x5 Twitter FaceBook Google+



السلام عليكم

طبعا تعرفون ان مكتبه البيك تبرمج كيباده لغايه 4x4 ولكن كيف يتم برمجه كيباده اكثر من ذلك
ياريت اذا يوجد احد لديه فكره عن موضوع



تحياتي

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

مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 620
نشاط [ مشتاق الله ]
قوة السمعة:0
قديم 09-02-2016, 08:26 PM المشاركة 2   
sun


بسم الله الرحمن الرحيم

السلام عليكم و رحمة الله و بركاته

فكرة جميلة نفكر فيها طبعا هى لن تعتمد على المكتبات و لكن كتابة الكود كاملا .

الله المستعان


انا سمعنا قرانا عجبا

اللهم نسالك ان نكون مثلهم

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

الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,688
نشاط [ عبدالله حجازى ]
قوة السمعة:110
قديم 10-02-2016, 02:48 AM المشاركة 3   
افتراضي


السلام عليكم

طبعا تعرفون ان مكتبه البيك تبرمج كيباده لغايه 4x4 ولكن كيف يتم برمجه كيباده اكثر من ذلك
ياريت اذا يوجد احد لديه فكره عن موضوع



تحياتي
وعليكم السلام ورحمه الله ...



فعلا كما تفضل أخونا ... مشتاق الله .... هتكون طريقة تعريف الكيباده بكتابه كود معين لمسح ال 5 اعمدة الكيبادة ...


انا فكرت بالموضوع دة من وقت قريب ...

عندى فكرة .. استخدام محول الإشارة ADC فى اخذ عينات من مجموعة مفاتيح مربوطه مع مقومات ...


وعمل حلقة أو دالة يوجد فيها أوامر شرطيه .... مثلا لو محول الإيشارة قرأ قيمة عظمى وهى 5 فولت هذة القيمة تكافئ الرقم 1023 .... فى محول الإيشارة وبعد ذالك نجعل هذة القيمه فى أمر شرط ونقول للميكرو .. مثلا
كود:
  X = ADC_Read(1);

ونعلن عن متغير اسمه X مثلا ونحفظ فية القرأة القادمه من محول الإشارة ADC

ونعلن عن متغير أخر اسمه مثلا A ... ونضع المتغير X فى أمر شرط .. مثل هذا ..
كود:
 if(X==1023){ A =1;}
ونقول فى أمر الشرط لو X = 1023 يبقى خلى A = 1 وطبعااا هنعمل متغير لكل مفتاح ..

وهكذا أوامر شرط لكل قيمه قادمه من محول الإشارة ... تبدأ بالقيمة العظمى وتنتهى بأقل قيمه قادمه من محول الإشارة ...


طبعااااا هذة القيم هتكون عن طريق مقومات مربوطه مع كل مفتاح ...

بمعنى ربط طرف واحد لجميع المفاتيح ب 5 فولت .. وباقى ارجل المفاتيح يتم ربط كل طرف من المفاتيح بمقاومه مختلفة القية لكى نحصل على فرق جهد داخل على محول الإشارة ADC وبهذة الطريقه يمكننا تمييز كل مفتاح بفرق الجهد القادم منه الى محول الإشارة ....


وبكدة يبقى احنا وصلنا كيباد 5X5 بطرف واحد فقط فى محول الإشارة الموجود فى الميكرو كنترولر...


هذة فقط فكرة ولم اجربها من قبل ... فما رأيك هل تصلح هذة الفكرة ...



ملحوظه هذة الفكرة معتمده فى معظم اجهزة ال MP3 ....


تحياتى لك أخى حسن هادى..


........................................


التعديل الأخير تم بواسطة : عبدالله حجازى بتاريخ 10-02-2016 الساعة 03:29 AM
احصائية الشكر والاعجاب - 2 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً حسن هادي محمود, محمد ع يسى ( شكر العضو على هذه المشاركة )
اعجاب حسن هادي محمود ( أعجبته المشاركة )

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 10-02-2016, 07:23 AM المشاركة 4   
افتراضي


السلام عليكم

شكرا لكم جميعا

وجدت هذا الرابط لعله مفيد

https://electrosome.com/matrix-keypa...crocontroller/



MikroC Programming

We use the function readKeyboard() to scan the Matrix Keypad and findKey() to find the pressed key. You can edit the function findKey() to change the character corresponds to each key of the Matrix Keypad.
Function to Scan Keypad

كود:
 char readKeyboard()
  {  
   unsigned int i = 0;
   for(i=0;i<4;i++)  
    {   
     if(i == 0)   PORTB = 1;  
     else if(i == 1)   PORTB = 2;  
     else if(i == 2)   PORTB = 4;  
     else if(i == 3)   PORTB = 8;    
     if(PORTB.F4)return findKey(i,0);
     if(PORTB.F5)    return findKey(i,1);
     if(PORTB.F6)    return findKey(i,2);
     if(PORTB.F7)    return findKey(i,3);
    }  
  return ' '; 
}

This function initiates the keypad scanning and returns the character corresponds to the pressed key when a key press is detected. It uses the function findKey() to find the character corresponds to a particular row and column. In this function space (‘ ‘) is used as the null character, which is returned when no key is pressed, you may change this according to your needs.
Function to Find Keys



كود:
char findKey(unsigned short a, unsigned short b)
{  
 if(b == 0)  
  { 
   if(a == 3)return '0';  
   else if(a == 2)return '1';
   else if(a == 1)return '2';
   else if(a == 0)return '3';
  }  
else if(b == 1)  
   {
    if(a == 3)return '4';
    else if(a == 2) return '5';
    else if(a == 1)return '6';
    else if(a == 0)return '7';
    }  

else if(b == 2)  
{    
 if(a == 3)     return '8';
 else if(a == 2)     return '9';
 else if(a == 1)     return 'A';
 else if(a == 0)     return '-';
}  
else if(b == 3)  
{    

  if(a == 3)  return 'C';
  else if(a == 2)     return 'U';
  else if(a == 1)     return 'E';
  else if(a == 0)     return 'F';  
}

 }


التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 10-02-2016 الساعة 08:02 AM
احصائية الشكر والاعجاب - 2 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً محمد ع يسى, عبدالله حجازى ( شكر العضو على هذه المشاركة )
اعجاب عبدالله حجازى ( أعجبته المشاركة )

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 10-02-2016, 03:07 PM المشاركة 5   
win


السلام عليكم

تم حل مشكله كيباده وفق مشاركه السابقه

http://www.mediafire.com/download/j9...74/keypad1.rar

كود:
//#include        "keypad_lib.h"          // keypad library header, includes also user's settings
// Lcd pinout settings
sbit LCD_RS at RC4_bit;
sbit LCD_EN at RC5_bit;
sbit LCD_D7 at RC3_bit;
sbit LCD_D6 at RC2_bit;
sbit LCD_D5 at RC1_bit;
sbit LCD_D4 at RC0_bit;

// Pin direction
sbit LCD_RS_Direction at TRISC4_bit;
sbit LCD_EN_Direction at TRISC5_bit;
sbit LCD_D7_Direction at TRISC3_bit;
sbit LCD_D6_Direction at TRISC2_bit;
sbit LCD_D5_Direction at TRISC1_bit;
sbit LCD_D4_Direction at TRISC0_bit;
char findKey(unsigned short a, unsigned short b);
char readKeyboard();
void main()
 {
  adcon1=6;
  cmcon=7;
  trisb=0xF0;
  LCD_Init() ;
  LCD_Cmd(1) ;
  lcd_cmd(_LCD_CURSOR_OFF);
  LCD_Out(1, 1, "KeypadLib") ;
  while(1)
  {
  lcd_chr(2,1,readKeyboard());

  }
}


char readKeyboard()
  {
   unsigned int i = 0;

   for(i=0;i<4;i++)
    {
     if(i == 0)   PORTB = 1;
     else if(i == 1)   PORTB = 2;
     else if(i == 2)   PORTB = 4;
     else if(i == 3)   PORTB = 8;
     if(PORTB.F4)return findKey(i,0);
     if(PORTB.F5)    return findKey(i,1);
     if(PORTB.F6)    return findKey(i,2);
     if(PORTB.F7)    return findKey(i,3);
    }
  return ' ';
}

char findKey(unsigned short a, unsigned short b)
{
 if(b == 0)
  {
   if(a == 3)return 'C';
   else if(a == 2)return '1';
   else if(a == 1)return '4';
   else if(a == 0)return '7';
  }
else if(b == 1)
   {
    if(a == 3)return '0';
    else if(a == 2) return '2';
    else if(a == 1)return '5';
    else if(a == 0)return '8';
    }

else if(b == 2)
{
 if(a == 3)     return '=';
 else if(a == 2)     return '3';
 else if(a == 1)     return '6';
 else if(a == 0)     return '9';
}
else if(b == 3)
{

  if(a == 3)  return 'D';
  else if(a == 2)     return 'C';
  else if(a == 1)     return 'B';
  else if(a == 0)     return 'A';
}

 }
طبعا انت بأمكانك تعديل على كود كيباده بما يناسبك
وسحاول انشاء مكتبه عامه تخص هذا الموضوع

تحياتي


التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 10-02-2016 الساعة 03:11 PM
احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً عبدالله حجازى ( شكر العضو على هذه المشاركة )
اعجاب عبدالله حجازى ( أعجبته المشاركة )

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 11-02-2016, 05:13 PM المشاركة 6   
win


السلام عليكم

تم حل مشكله كيباده وعمل مكتبه لها حيث بالامكان اختيار اي الاطراف تريدها

http://www.mediafire.com/download/id...keypad+4x5.rar

كود مكتبه كيباده
كود:
//A Logic HIGH signal is given to Col1 of column inputs.
//each Row output (row1 – row4) is scanned one by one
extern sfr sbit col_1;
extern sfr sbit col_2;
extern sfr sbit col_3;
extern sfr sbit col_4;
extern sfr sbit Row_1;
extern sfr sbit Row_2;
extern sfr sbit Row_3;
extern sfr sbit Row_4;
extern sfr sbit Row_5;

extern sfr sbit col_1_dir;
extern sfr sbit col_2_dir;
extern sfr sbit col_3_dir;
extern sfr sbit col_4_dir;
extern sfr sbit Row_1_dir;
extern sfr sbit Row_2_dir;
extern sfr sbit Row_3_dir;
extern sfr sbit Row_4_dir;
extern sfr sbit Row_5_dir;


char findKey(unsigned short _row, unsigned short _col);

void keypad_4x5_init()
{
 col_1_dir=1;
 col_2_dir=1;
 col_3_dir=1;
 col_4_dir=1;
 
 Row_1_dir=0;
 Row_2_dir=0;
 Row_3_dir=0;
 Row_4_dir=0;
 Row_5_dir=0;

}
unsigned char read_keypad()
  {
   unsigned char _key = 0;

   for(_key=1;_key<=5;_key++)
    {
     Row_1=0;
     Row_2=0;
     Row_3=0;
     Row_4=0;
     Row_5=0;
     switch(_key)
     {
      case 1:Row_1=1;break;
      case 2:Row_2=1;break;
      case 3:Row_3=1;break;
      case 4:Row_4=1;break;
      case 5:Row_5=1;break;
     }
     if(col_1==1)    return findKey(_key,1);
     if(col_2==1)    return findKey(_key,2);
     if(col_3==1)    return findKey(_key,3);
     if(col_4==1)    return findKey(_key,4);
    }
  return 255;
}

unsigned char findKey(unsigned short _row, unsigned short _col)
{

 if(_col == 1)
  {
    if(_row == 5)return 'F'; //F1
   else if(_row == 4)return '1';
   else if(_row == 3)return '4';
   else if(_row == 2)return '7';
   else if(_row == 1)return 'L';//LEFT
  }
else if(_col == 2)
   {
     if(_row == 5)return 'f'; //F2
    else if(_row == 4)return '2';
    else if(_row == 3)return '5';
    else if(_row == 2)return '8';
    else if(_row == 1)return '0';
   }

else if(_col == 3)
  {
    if(_row == 5)return '#';
    else if(_row == 4)return '3';
   else if(_row == 3)return '6';
   else if(_row == 2)return '9';
   else if(_row == 1)return 'R'; // RIGHT
  }
else if(_col == 4)
  {
    if(_row == 5)return '*';
   else if(_row == 4)return 'U';//UP
   else if(_row == 3)return 'D';//DOWN
   else if(_row == 2)return 'S';
   else if(_row == 1)return 'T';

  }

 }
======================================

كود البرنامج الرئيسي
كود:
#include "keypad_lib.h"

// Lcd module connections
sbit LCD_RS at LATB4_bit;
sbit LCD_EN at LATB5_bit;
sbit LCD_D4 at LATB0_bit;
sbit LCD_D5 at LATB1_bit;
sbit LCD_D6 at LATB2_bit;
sbit LCD_D7 at LATB3_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;
// End Lcd module connections

// Keypad pinout settings

sbit col_1 at RC0_bit;
sbit col_2 at RC1_bit;
sbit col_3 at RC2_bit;
sbit col_4 at RC3_bit;
sbit row_1 at LATC4_bit;
sbit row_2 at LATC5_bit;
sbit row_3 at LATC6_bit;
sbit row_4 at LATC7_bit;
sbit row_5 at LATE0_bit;


// Pin direction

sbit col_1_dir at TRISC0_bit;
sbit col_2_dir at TRISC1_bit;
sbit col_3_dir at TRISC2_bit;
sbit col_4_dir at TRISC3_bit;

sbit row_1_dir at TRISC4_bit;
sbit row_2_dir at TRISC5_bit;
sbit row_3_dir at TRISC6_bit;
sbit row_4_dir at TRISC7_bit;
sbit row_5_dir at TRISE0_bit;





void main()
{
  ANSELA=0;
  ANSELB = 0;                        // Configure PORTB pins as digital
  ANSELC=0;
  ANSELD=0;
  ANSELE=0;
  SLRCON=0;
  keypad_4x5_init();
  Lcd_Init();                        // Initialize Lcd

  Lcd_Cmd(_LCD_CLEAR);               // Clear display
  Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off

  lcd_out(1,1,"key= ");
  while(1) 
  {                         // Endless loop

   if(read_keypad()!=255) lcd_chr(1,5,read_keypad());

  }
}


الصورة الرمزية Semmoor
Semmoor
:: مهندس متميز ::
تاريخ التسجيل: Oct 2011
المشاركات: 300
نشاط [ Semmoor ]
قوة السمعة:0
قديم 12-02-2016, 09:02 AM المشاركة 7   
افتراضي


فعلا مثل هذه المواضيع هي التي تجعل الواحد يفهم المجال والبرمجة. لان المكاتب في الـ Compilers تخفي الاكواد عن المبرمج. وراح تكون مجبر انك تتبع المكتبات في اللغة ولن تستطيع انك تحل المشاكل مثل المشكلة اللي في هذا الموضوع.

مشكوور على الموضوع الرائع .

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

الصورة الرمزية فادي النهار
فادي النهار
:: مهندس ::
تاريخ التسجيل: Feb 2016
الدولة: السعودية
المشاركات: 10
نشاط [ فادي النهار ]
قوة السمعة:0
قديم 13-02-2016, 04:31 PM المشاركة 8   
افتراضي


قد نتمكن من برمجتها بلغة تقليدية كان نربط الاعمدة بمجموعة d في المايكروكنترولر والصفوف بمجموعة c , ثم نستخدم الجملة الشرطية لتنفيذ العمليات المراد عملها على سبيل المثال :
لو فرضنا ان الرقم 1 مربوط على المدخل d0 و c0 فسنفرض جملة شرطية كالتالي:
if portd.d0=1
portc.c0=1
(x==1)
مع الاخذ بالحيطة اننا قد عرفنا المتغير x في اعلى الكود
وبذلك نكون تمكنا من جعل المايكروكنترولر يتعرف على رقم 1 في الكيباد وهلما جر بالنسبة لكل الاعداد الاخرى، فالمايكروكنترولر سيقرا قيمة العدد ويخزنه داخل الذاكرة لتتمكن من ربط اي عملية اخرى كعرضه على lcd او عمل عملية حسابية او اي تطبيق اخر
الجدير بالذكر ان هذه الطريقة نافعة فقط اذا كان الكيباد لا يحتوي على multiplixer
والى احتجت الى طريقة اخرى في البرمجة تعتمد على التصميم الرقمي للكيباد
للتذكير السطر اعلاه ليس الكود ولكن لتقريب المقصد لاذهاننا

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

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

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

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


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

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