- מדוע אנו זקוקים למקלדת 4x4:
- כיצד עובד לוח המקשים של מטריקס 4x4:
- חומר נדרש:
- תרשים מעגל:
- הסבר על תכנות:
לוח המקשים נעשה שימוש נרחב בהתקני קלט המשמשים בפרויקטים אלקטרוניים שונים ופרויקטים משובצים. הם משמשים כדי לקחת תשומות בצורה של מספרים ואלפבית, ולהאכיל אותם למערכת לעיבוד נוסף. במדריך זה אנו הולכים להתממשק לוח מקשים מטריצה 4x4 עם PIC16F877A.
לפני שנכנס ללוגיקת הפרטים ונלמד כיצד להשתמש בלוח המקשים, נצטרך לדעת כמה דברים.
מדוע אנו זקוקים למקלדת 4x4:
בדרך כלל אנו משתמשים בסיכת קלט / פלט יחידה של יחידת מיקרו-בקר כדי לקרוא את האות הדיגיטלי, כמו כניסה למתג. בכמה יישומים בהם יש צורך במפתחות 9, 12, 16 למטרות קלט, אם נוסיף כל מפתח ביציאת מיקרו-בקר, נשתמש בסופו של דבר ב- 16 יציאות קלט / פלט. 16 יציאות קלט / פלט אלה מיועדות לא רק לקריאת אותות קלט / פלט, אלא הן יכולות לשמש גם כחיבורים היקפיים, כמו תומכי ADC, חיבורי I2C, SPI נתמכים גם על ידי אותם סיכות קלט / פלט. מכיוון שסיכות אלה מחוברות למתגים / מקשים, איננו יכולים להשתמש בהם אלא רק כיציאות קלט / פלט. זה בכלל לא הגיוני. אז איך להפחית את ספירת הסיכות? התשובה היא באמצעות מקלדת hex או לוח מקשים מטריציוני; אנחנו יכולים להפחית את ספירת הסיכות, המקשרים מקשי מטריצה 4x4. הוא ישתמש בשמונה פינים מתוכם 4 מחוברים בשורות ו -4 מחוברים בעמודות, ולכן יחסוך 8 פינים של המיקרו-בקר.
כיצד עובד לוח המקשים של מטריקס 4x4:
בתמונה העליונה מוצג משמאל מודול מקשי מטריצה. בצד ימין החיבור הפנימי מוצג כמו גם חיבור יציאה. אם אנו רואים את היציאה יש 8 פינים, 4 הראשונים משמאל לימין הם X1, X2, X3 ו- X4 הם השורות, וארבעה האחרונים משמאל לימין הם Y1, Y2, Y3, Y4 הם ארבעה עמודות. אם אנחנו עושים 4 שורות או X בצד כמו פלט ולגרום להם נמוך היגיון או 0, ולהפוך את 4 עמודות כמו קלט ולקרוא את המפתחות נוכל לקרוא בעיתונות מתג כאשר כתב Y מקבל 0.
אותו דבר יקרה במטריצת nxn כאשר n הוא המספר. זה יכול להיות 3x3, 6x6 וכו '.
עכשיו רק חושב ש -1 נלחץ. ואז ה- 1 ממוקם בשורה X1 ובעמודה Y1. אם X1 הוא 0, אז ה- Y1 יהיה 0. באותה צורה נוכל לחוש כל מפתח בשורה X1, על ידי חישה של העמודה Y1, Y2, Y3 ו- Y4. הדבר הזה קורה לכל מתג ואנחנו נקרא את מיקום המתגים במטריצה.
כל עיגולים ירוקים הם המתג ושניהם מחוברים יחד באותו אופן.
במדריך זה נתממשק את לוח המפתח עם המפרט הבא-
- נשתמש ב- pull up פנימי
- נוסיף אפשרות ביטול הקפצה
אבל כאשר המתגים אינו לחוץ אנחנו צריכים להפוך את Y1, Y2, Y3 ו Y4 כפי גבוה או 1. אחרת לא נוכל לזהות את שינויי ההיגיון כאשר המתג הוא להיות לחוץ. אבל לא הצלחנו להגיע לקודים או לתכניות בגלל שסיכות אלה משמשות כקלט ולא כמוצא. לכן, נשתמש במרשם הפעלה פנימי במיקרו-בקר ונפעיל את הפינים האלה כמצב מופעל של משיכה כלפי מעלה. באמצעות זה, יהיה מצב הפעלה גבוהה של לוגיקה כאשר הוא נמצא במצב ברירת המחדל.
כמו כן, כשאנחנו לוחצים על מקש יש קוצים או נוצר רעש עם אנשי קשר למתג, ובשל כך מתג מרובה לחץ קורה מה שלא צפוי. לכן, ראשית נזהה את לחיצת המתג, נחכה לכמה אלפיות שניות, נבדוק שוב האם המתג עדיין לחוץ או לא ואם המתג עדיין נלחץ אנו נקבל את לחיצת המתג לבסוף אחרת לא. זה נקרא כקפיצה של המתגים.
אנו מיישמים את כל זה בקוד שלנו, ונבצע את החיבור על קרש הלחם.
בדוק גם כיצד לממשק לוח מקשים 4x4 עם בקרי מיקרו אחרים:
- ממשק מקשים עם Arduino Uno
- ממשק לוח מקשים מטריקס 4x4 עם מיקרו-בקר 8051
- ממשק לוח מקשים 4x4 עם מיקרומקר ATmega32
- נעילת קוד דיגיטלי על פטל
חומר נדרש:
- קרש לחם
- Pic-kit 3 וסביבת הפיתוח במחשב האישי שלך, כלומר MPLABX
- חוטים ומחברים
- אופי LCD 16x2
- 20Mhz קריסטל
- 2 יחידות מכסה דיסק קרמיקה 33pF.
- נגד 4.7k
- הגדרה קבועה מראש של 10k (נגד משתנה)
- לוח מקשים מטריקס 4x4
- מתאם 5 וולט
תרשים מעגל:
נחבר את הגבישים והנגד בסיכות המשויכות. כמו כן, נחבר את ה- LCD במצב 4 סיביות על פני PORTD. חיברנו את לוח המקשים המשושה או את לוח המקשים של המטריצה על פני יציאת RB4.
אם אתה חדש ב- PIC, התחל עם תחילת העבודה עם מיקרו-בקר PIC: מבוא ל- PIC ו- MPLABX
הסבר על תכנות:
הקוד השלם לממשק מקשי מטריקס עם מיקרו-בקר PIC ניתן בסוף. קוד קל ומובן מאליו. ספריית המקשים היא הדבר היחיד שיש להבין בקוד. כאן השתמשנו בספריה keypad.h ו- lcd.h כדי לממשק את לוח המקשים ו- LCD 16x2. אז בואו נראה מה קורה בתוך זה.
בתוך לוח המקשים.h נראה כי השתמשנו בכותרת xc.h שהיא ספריית הרישום המוגדרת כברירת מחדל, תדר הגביש מוגדר לשימוש לשימוש בעיכוב המשמש בקובץ kepad.c. הגדרנו את יציאות המקלדת ברישום PORTRB והגדרנו סיכות בודדות כשורה (X) ועמודות (Y).
השתמשנו גם בשתי פונקציות אחת עבור אתחול לוח המקשים אשר ינתב את היציאה כפלט וכקלט, וסריקת לחיצת מתג שתחזיר את מצב לחיצת המתג בעת קריאה.
#לִכלוֹל
בלוח המקשים.c נראה כי הפונקציה למטה תחזיר את לחיצת המקש כאשר פונקציית סורק המקשים לא תחזיר 'n'.
char switch_press_scan (void) // קבל מפתח ממשתמש { char key = 'n'; // נניח שאין לחיצת מקש בזמן (מקש == 'n') // המתן עד שמקש מקש לחוץ = מקש_סורק (); // סרוק את המקשים שוב ושוב מקש החזרה; // כשלוחצים על המקש ואז מחזירים את הערך }
להלן פונקציית קריאת לוח המקשים. בכל שלב נכין את השורה X1, X2, X3 ו- X4 כ- 0 וקריאת המצב Y1, Y2, Y3 ו- Y4. העיכוב משמש לאפקט ההפחתה, כאשר המתג עדיין נלחץ נחזיר את הערך המשויך אליו. כשלא לוחצים על מתג נחזור 'n'.
char keypad_scanner (בטל) { X_1 = 0; X_2 = 1; X_3 = 1; X_4 = 1; אם (Y_1 == 0) {__השהיית_מס (100); ואילו (Y_1 == 0); החזר '1'; } אם (Y_2 == 0) {__השהיית_מס (100); ואילו (Y_2 == 0); החזר '2'; } אם (Y_3 == 0) {__השהיית_מס (100); ואילו (Y_3 == 0); החזר '3'; } אם (Y_4 == 0) {__השהיית_מס (100); ואילו (Y_4 == 0); החזר 'A'; } X_1 = 1; X_2 = 0; X_3 = 1; X_4 = 1; אם (Y_1 == 0) {__השהיית_מס (100); ואילו (Y_1 == 0); החזר '4'; } אם (Y_2 == 0) {__השהיית_מס (100); ואילו (Y_2 == 0); החזר '5'; } אם (Y_3 == 0) {__השהיית_מס (100); ואילו (Y_3 == 0); החזר '6'; } אם (Y_4 == 0) {__השהיית_מס (100); ואילו (Y_4 == 0); החזר 'B'; } X_1 = 1; X_2 = 1; X_3 = 0; X_4 = 1; אם (Y_1 == 0) {__השהיית_מס (100); ואילו (Y_1 == 0); החזר '7'; } אם (Y_2 == 0) {__השהיית_מס (100); בעוד (Y_2 == 0); החזר '8'; } אם (Y_3 == 0) {__השהיית_מס (100); ואילו (Y_3 == 0); החזר '9'; } אם (Y_4 == 0) {__השהיית_מס (100); ואילו (Y_4 == 0); להחזיר 'C'; } X_1 = 1; X_2 = 1; X_3 = 1; X_4 = 0; אם (Y_1 == 0) {__השהיית_מס (100); ואילו (Y_1 == 0); החזר '*'; } אם (Y_2 == 0) {__השהיית_מס (100); ואילו (Y_2 == 0); החזר '0'; } אם (Y_3 == 0) {__השהיית_מס (100); ואילו (Y_3 == 0); החזר '#'; } אם (Y_4 == 0) {__השהיית_מס (100); ואילו (Y_4 == 0); להחזיר 'D'; } להחזיר 'n'; }
אנו גם נגדיר את המשיכה החלשה של ארבעת הביטים האחרונים, וגם נגדיר את כיוון היציאות כארבע הקלט האחרונות ו -4 הראשונות כפלט. ה- OPTION_REG & = 0x7F; משמש להגדרת מצב המשיכה החלש על הסיכות האחרונות.
בטל InitKeypad (בטל) { Keypad_PORT = 0x00; // הגדר ערכי סיכת יציאת לוח המקשים אפס Keypad_PORT_Direction = 0xF0; // קלט 4 פינים אחרונים, פלט 4 פינים ראשונים OPTION_REG & = 0x7F; }
בתוכנית ה- PIC הראשית (להלן) הגדרנו תחילה את סיביות התצורה וכללנו מעט ספריות נחוצות. ואז בפונקציות ריקות של מערכת_אנחנו מאותחלים את לוח המקשים ואת ה- LCD. ולבסוף ב ב ראשי הפונקציה שקראנו את לוח המקשים באמצעות פניית switch_press_scan () הפונקציה והחזרת ערך LCD.
הורד את הקוד השלם עם קבצי כותרת מכאן ובדוק את סרטון ההפגנה למטה.