תצוגה היא החלק הדרוש במכונה בין אם מדובר במכשיר ביתי או במכונות תעשייתיות. התצוגה לא רק מציגה את אפשרויות הבקרה להפעלת המכונה אלא גם מציגה את מצב ופלט המשימה שבוצעה על ידי אותה מכונה. ישנם סוגים רבים של תצוגות המשמשות באלקטרוניקה כמו תצוגת 7 מגזרים, תצוגת LCD, תצוגת מסך מגע TFT, תצוגת LED וכו '. תצוגת LCD 16x2 היא התצוגה הבסיסית ביותר וגם בשימוש בכמה ציוד אלקטרוניקה קטן. פרויקטים המשתמשים ב- LCD 16x2 כולל ממשק בסיסי עם מיקרו-בקרים אחרים:
- ממשק LCD עם מיקרו-בקר 8051
- ממשק LCD עם מיקרו-בקר ATmega32
- ממשק LCD עם מיקרו-בקר PIC
- ממשק 16x2 LCD עם Arduino
- ממשק LCD 16x2 עם פטל פי באמצעות פיתון
במדריך זה נראה כיצד להתממשק LCD 16x2 עם מיקרו-בקר ARM7-LPC2148 ולהציג הודעת קבלת פנים פשוטה. אם אתה חדש ב- ARM7, התחל עם היסודות של ARM7 LPC2148 ולמד כיצד ניתן לתכנת אותו באמצעות Keil uVision
חומרים נדרשים
חוּמרָה
- לוח מיקרו-בקר ARM7-LPC2148
- LCD (16X2)
- פוטנציומטר
- ויסות מתח 5V IC
- קרש לחם
- חוטי חיבור
- סוללה 9V
- כבל מיקרו USB
תוֹכנָה
- Keil uVision 5
- כלי פלאש קסם
לפני שנכנס לפרויקט עלינו לדעת כמה דברים על מצבי הפעולה של ה- LCD ועל קודי ה- Hex LCD.
מודול תצוגת LCD 16X2
LCD 16X2 אומר שיש לו 16 עמודות ו -2 שורות. LCD זה כולל 16 פינים. בתמונה ובטבלה להלן מוצגים שמות הסיכות של תצוגת LCD ותפקידיה.
שֵׁם |
פוּנקצִיָה |
VSS |
סיכת קרקע |
VDD |
+ 5V פין קלט |
VEE |
סיכה כוונון ניגודיות |
RS |
בחר הרשמה |
R / W |
קרא / כתוב סיכה |
ה |
אפשר סיכה |
D0-D7 |
סיכות נתונים (8 סיכות) |
נורית A. |
פין אנודה (+ 5 וולט) |
נורית K |
פין קתודה (GND) |
ה- LCD יכול לעבוד בשני מצבים שונים, כלומר במצב 4 סיביות ובמצב 8 סיביות. במצב 4 סיביות אנו שולחים את נגיסת הנתונים על ידי נשנוש, תחילה נשנוש עליון ואז נשנוש תחתון. לאלו מכם שלא יודעים מה זה נגיסה: כישוש הוא קבוצה של ארבע סיביות, כך שארבע הסיביות התחתונות (D0-D3) של בתים יוצרות את הכריש התחתון ואילו ארבע הסיביות העליונות (D4-D7) של צורת בתים את הנשנוש הגבוה יותר. זה מאפשר לנו לשלוח נתונים של 8 סיביות.
בעוד שבמצב 8 סיביות אנו יכולים לשלוח את נתוני 8 הסיביות ישירות במכה אחת מכיוון שאנו משתמשים בכל 8 קווי הנתונים.
כאן בפרויקט זה נשתמש במצב הנפוץ ביותר שהוא מצב 4 סיביות. במצב ארבעה סיביות אנו יכולים לחסוך 4 פינים של מיקרו-בקר וגם להפחית את תקורות החיווט.
16x2 משתמש גם בקוד HEX כדי לקחת כל פקודה, ישנן פקודות hex רבות עבור LCD כמו להזיז את הסמן, לבחור את המצב, להעביר את הפקד לשורה שנייה וכו '. למידע נוסף אודות מודול תצוגת LCD 16X2 ופקודות hex, עקוב אחר הקישור.
תרשים מעגלים וחיבורים
הטבלה שלהלן מציגה את חיבורי המעגל בין LCD ו- ARM7-LPC2148.
ARM7-LPC2148 |
LCD (16x2) |
P0.4 |
RS (בחר הרשמה) |
P0.6 |
E (אפשר) |
P0.12 |
D4 (סיכת נתונים 4) |
P0.13 |
D5 (סיכת נתונים 5) |
P0.14 |
D6 (סיכת נתונים 6) |
P0.15 |
D7 (סיכת נתונים 7) |
חיבורי וסת מתח עם LCD & ARM7 מקל
הטבלה שלהלן מציגה את החיבורים בין ARM7 ל- LCD עם ויסות המתח.
ויסות מתח IC |
פונקציית סיכה |
LCD & ARM-7 LPC2148 |
1. סיכה שמאלית |
+ Ve מהסוללה 9V קלט |
NC |
2. מרכז סיכה |
- Ve מהסוללה |
VSS, R / W, K של LCD GND של ARM7 |
3. סיכה ימנית |
פלט מוסדר + 5 וולט |
VDD, A של LCD + 5V של ARM7 |
פוטנציומטר עם LCD
פוטנציומטר משמש לשינוי הניגודיות של תצוגת LCD. לסיר שלושה פינים, סיכה שמאלית (1) מחוברת ל + 5 V ומרכז (2) ל- VEE או V0 של מודול LCD וסיכה ימנית (3) מחוברת ל- GND. אנו יכולים להתאים את הניגודיות על ידי סיבוב הכפתור.
הגדרות מגשר
סיכת מגשר קיימת ב- ARM7-Stick כדי שנוכל להפעיל ולהעלות קוד באמצעות USB או באמצעות כניסת 5V DC לחשמל בלבד. אתה יכול לראות את התמונות שלמטה.
בתמונה למטה נראה כי המגשר נמצא במצב DC. זה אומר שעלינו להפעיל את הלוח מאספקת 5V חיצונית.
והתמונה הזו מראה שהגשר מחובר במצב USB. כאן העוצמה והקוד מסופקים דרך יציאת USB מסוג מיקרו.
הערה: כאן במדריך זה העלנו קוד באמצעות USB על ידי הגדרת מגשר ל- USB ואז שינינו את המגשר למצב DC להפעלת LPC2148 מכניסת 5V של הרגולטור. תוכלו לבדוק זאת בסרטון שניתן בסוף.
המעגל הסופי לממשק 16x2 LCD עם מיקרו-בקר ARM7 ייראה כך:
תכנות ARM7-LPC2148
כדי לתכנת ARM7-LPC2148 אנו זקוקים לכלי uVision & Flash Magic. אנו משתמשים בכבל USB לתכנות ARM7 Stick באמצעות יציאת מיקרו USB. אנו כותבים קוד באמצעות Keil ויוצרים קובץ hex ואז קובץ HEX מהבהב למקל ARM7 באמצעות Flash Magic. למידע נוסף אודות התקנת keil uVision ו- Flash Magic וכיצד להשתמש בהן עקבו אחר הקישור תחילת העבודה עם ARM7 LPC2148 Microcontroller ותכנתו באמצעות Keil uVision.
הקוד השלם לממשק LCD עם ARM 7 ניתן בסוף מדריך זה, כאן אנו מסבירים כמה חלקים ממנו.
קודם כל עלינו לכלול את קבצי הכותרת הנדרשים
#לִכלוֹל
אתחול מודול ה- LCD הוא צעד חשוב מאוד. כאן אנו משתמשים בקודי HEX מסוימים, שהם למעשה פקודות, כדי לספר ל- LCD על אופן הפעולה (4 סיביות), סוג ה- LCD (16x2), קו התחלה וכו '.
בטל LCD_INITILIZE (בטל) // פונקציה להכנת LCD { IO0DIR = 0x0000FFF0; // מגדיר סיכה P0.4, P0.6, P0.12, P0.13, P0.14, P0.15as OUTPUT עיכוב_מס (20); LCD_SEND (0x02); // אתחל את lcd במצב פעולה של 4 סיביות LCD_SEND (0x28); // 2 שורות ( 16X2 ) LCD_SEND (0x0C); // הצג על הסמן כבוי LCD_SEND (0x06); // סמן תוספת אוטומטי LCD_SEND (0x01); // הצג LCD_SEND ברור (0x80); // מיקום ראשון בשורה הראשונה }
במצב 4 סיביות יש לנו סוג אחר של פונקציית כתיבה עבור הסיכות, כלומר באמצעות כריש עליון ותחתון. בואו נראה, איך זה נעשה
בטל LCD_SEND (פקודת char) // פונקציה לשליחת פקודות hex על ידי nibble { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((command & 0xF0) << 8)); // שלח את הנשנוש העליון של הפקודה IO0SET = 0x00000040; // הפעלת Enable HIGH IO0CLR = 0x00000030; // ביצוע RS & RW LOW עיכוב_מס (5); IO0CLR = 0x00000040; // הפעלת אפשרות LOW עיכוב_מס (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((פקודה & 0x0F) << 12)); // שלח את הכישלון התחתון של הפקודה IO0SET = 0x00000040; // הפעל IO0CLR גבוה = 0x00000030; // RS & RW LOW עיכוב_מס (5); IO0CLR = 0x00000040; // אפשר LOW עיכוב_מס (5); }
היגיון בשליחת נשנוש
IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((פקודה & 0x0F) << 12)); // שלח את הכריעה התחתונה של הפקודה IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((הפקודה & 0xF0) << 8)); // שלח את נשנוש הפיקוד העליון
למעלה משתי הצהרות ממלאות תפקיד חשוב בתוכנית זו. הפקודה הראשונה שולחת את הכריש התחתון והשנייה שולחת את הכריש העליון. זאת מבלי להשפיע על הסיכות האחרות שאנו עושים. בואו נראה איך זה קורה לפני שנכיר את ההיגיון הזה תחילה
ORing- (A-0 = A), (A-1 = 1) ANDing- (A & 0 = 0), (A & 1 = A)
לכן אנו משתמשים בתפיסת מיסוך ובפעולת משמרת לוגית מבלי להשפיע על הסיכות האחרות. פירושו שרק הפינים (P0.12-P0.15) משמשים ואף סיכות אחרות כגון P0.4, P0.6 אינן מושפעות. זה ייעשה על ידי העברת הנתונים בארבעה ביטים והפיכת הנשנוש העליון במקום הנשנוש התחתון ומסכת הנשנוש העליון. ואז אנו הופכים את הסיביות התחתונות לאפסיות (0XF0) ו- ORed עם נתוני הכישוש כדי לקבל את נתוני הכריש העליונים בפלט.
נעשה שימוש בתהליך דומה לנתוני נשנוש נמוכים יותר, אך כאן איננו צריכים להזיז את הנתונים.
בזמן כתיבת נתונים לפלט, כלומר במצב פקודה RS צריך להיות נמוך וכדי להפעיל צריך להיות גבוה, ובמצב נתונים RS צריך להיות גבוה וכדי לבצע הפעלה צריך להיות גבוה.
כעת למשלוח נתוני המחרוזת שאותם יש להדפיס בפלט, משתמשים באותו עיקרון בכישלון. שלב חשוב כאן הוא בחירת REGISTER (RS) חייבת להיות גבוהה עבור מצב נתונים.
בטל LCD_DISPLAY (char * msg) // פונקציה להדפסת התווים שנשלחו בזה אחר זה { uint8_t i = 0; בעוד (msg! = 0) { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0xF0) << 8)); // שולח את הנשנוש העליון IO0SET = 0x00000050; // RS HIGH & ENABLE HIGH להדפסת נתונים IO0CLR = 0x00000020; // RW LOW עיכוב במצב כתיבה ms (2); IO0CLR = 0x00000040; // EN = 0, RS ו- RW ללא שינוי (כלומר RS = 1, RW = 0) עיכוב ms (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0x0F) << 12)); // שולח כריש תחתון IO0SET = 0x00000050; // RS & EN HIGH IO0CLR = 0x00000020; עיכוב ms (2); IO0CLR = 0x00000040; עיכוב ms (5); i ++; }
סרטון קידוד והדגמה מלא ניתן להלן.