יום ראשון, 5 ביוני 2011

סריקת לוח מקשים

אמרנו שישנם 3 שיטות לקבלת מידע מלוח מקשים. במסמך הזה אני רוצה לבדוק שיטת סריקה לוח מקשים.
שיטה הזאת מאפשרת לנו לחסוך בדקודר של לוח מקשים ולא להשתמש בפסיקה INT0. כדי לבנות את המערכת אנו מחברים ל-4 פינים כניסות של שורות הלוח ול-4 יציאות של עמודות באופן הבא:


כאשר אנחנו רוצים לבדוק האם הייתה לחיצה אנו שולחים ברגליים מ-0 עד 3 של הפורט אחד לאחר שני "0" לוגי ובודקים האם יש תגובה באחד העמודות בכניסות מ-4 עד 7. אם יש "0" בכניסה זה סימן שהייתה לחיצה וגם אפשר לדעת איזה לחיצה. אני ממליץ להשתמש בשפת C, כי משפט SWITCH נותן לנו אופציה לבנות תוכנה בצורה פשוטה וברורה.
P1=0xF7; //11110111 - חשוב ששולחים 0 ברגל 3
temp=P1&0xF0; //מאפסים מצב הרגליים 0-3
switch(temp)
{
case 0X70: answ='1'; break; //0111 0000
case 0XB0: answ='2'; break; //1011 0000
case 0XD0: answ='3'; break; //1101 0000
case 0XE0: answ='4'; break; //1110 0000
}
 לא שמתי DEFAULT בסוף המשפט בגלל שבכל זאת אין מצב שמערכת לא מכירה ב-4 CASE שרשמנו.
אותו רצף אנו צריכים לכתוב לכל אחד מהשורות.
P1=0xFB; //11111011 - חשוב ששולחים 0 ברגל 3
temp=P1&0xF0; //מאפסים מצב הרגליים 0-3
switch(temp)
{
case 0X70: answ='5'; break; //0111 0000
case 0XB0: answ='6'; break; //1011 0000
case 0XD0: answ='7'; break; //1101 0000
case 0XE0: answ='8'; break; //1110 0000
}

P1=0xFD; //11110111 - חשוב ששולחים 0 ברגל 3
temp=P1&0xF0; //מאפסים מצב הרגליים 0-3
switch(temp)
{
case 0X70: answ='9'; break; //0111 0000
case 0XB0: answ='A'; break; //1011 0000
case 0XD0: answ='B'; break; //1101 0000
case 0XE0: answ='C'; break; //1110 0000
}

P1=0xFE; //11110111 - חשוב ששולחים 0 ברגל 3
temp=P1&0xF0; //מאפסים מצב הרגליים 0-3
switch(temp)
{
case 0X70: answ='D'; break; //0111 0000
case 0XB0: answ='E'; break; //1011 0000
case 0XD0: answ='F'; break; //1101 0000
case 0XE0: answ='0'; break; //1110 0000
}
 לאחר שתקבלו תוצאה במשתנה ANSW יש אפשרות להציג אותו על LCD עם פרוצדורות סטנדרטיות.

תגובה 1:

  1. באיזה צורה בשפת C יש אפשרות לכתוב נתון בבינארי ישירות ללא הקסא?

    השבמחק