יחידות תצוגה הן מכשירי הפלט החשובים ביותר בפרויקטים משובצים ובמוצרי אלקטרוניקה. LCD 16x2 הוא אחד מיחידות התצוגה הנפוצות ביותר. LCD 16x2 פירושו שיש שתי שורות בהן ניתן להציג 16 תווים בכל שורה, וכל תו לוקח שטח מטריצה 5X7 על LCD. במדריך זה אנו הולכים לחבר מודול LCD 16X2 למיקרו-בקר 8051 (AT89S52). ממשק LCD עם מיקרו-בקר 8051 עשוי להיראות מורכב למדי עבור מתחילים, אך לאחר הבנת המושג זה ייראה פשוט וקל מאוד. למרות שזה עשוי לקחת זמן כי אתה צריך להבין ולחבר 16 פינים של LCD למיקרו-בקר. אז קודם בואו נבין את 16 הפינים של מודול ה- LCD.
אנו יכולים לחלק אותו בחמש קטגוריות, סיכות כוח, סיכת ניגודיות, סיכות בקרה, סיכות נתונים וסיכות תאורה אחורית.
קטגוריה |
הצמד לא. |
שם סיכה |
פוּנקצִיָה |
סיכות חשמל |
1 |
VSS |
סיכת קרקע, מחוברת לקרקע |
2 |
VDD או Vcc |
פין מתח + 5 וולט |
|
סיכת ניגודיות |
3 |
V0 או VEE |
הגדרת ניגודיות, מחובר ל- Vcc ביסודיות נגד משתנה. |
סיכות בקרה |
4 |
RS |
בחר הרשמה בחר סיכה, RS = 0 מצב פיקוד, RS = 1 מצב נתונים |
5 |
RW |
סיכת קריאה / כתיבה, RW = 0 מצב כתיבה, RW = מצב קריאה |
|
6 |
ה |
אפשר, דופק גבוה עד נמוך צריך לאפשר את ה- LCD |
|
סיכות נתונים |
7-14 |
D0-D7 |
נתונים סיכות, מאחסן את הנתונים שיוצגו על גבי LCD או את הוראות הפקודה |
סיכות תאורה אחורית |
15 |
LED + או A. |
להפעלת התאורה האחורית + 5 וולט |
16 |
נורית LED או K |
קרקע תאורה אחורית |
כל הפינים מובנים בבירור בשמם ובפונקציות שלהם, למעט סיכות הבקרה, ולכן הם מוסברים להלן:
RS: RS הוא הסיכה לבחירת הרישום. עלינו להגדיר אותו ל -1 אם אנו שולחים נתונים שיוצגו על גבי LCD. ואנחנו נגדיר אותו ל- 0 אם אנו שולחים הוראות הפקודה כמו לנקות את המסך (קוד hex 01).
RW: זהו סיכת קריאה / כתיבה, נגדיר אותה ל -0, אם נכתוב נתונים על LCD. והגדר אותו ל -1 אם אנו קוראים ממודול LCD. בדרך כלל זה מוגדר ל- 0, מכיוון שאין לנו צורך לקרוא נתונים מ- LCD. רק הוראה אחת "קבל מצב LCD", צריכה להיקרא כמה פעמים.
E: סיכה זו משמשת כדי לאפשר את המודול כאשר ניתן לו דופק גבוה עד נמוך. יש לתת דופק של 450 ns. המעבר הזה מ- HIGH ל- LOW הופך את המודול לאפשר.
ישנן כמה הוראות פקודה מוגדרות מראש ב- LCD, השתמשנו בהן בתוכנית שלנו להלן כדי להכין את ה- LCD (בפונקציה lcd_init ()). להלן כמה הוראות פקודה חשובות:
קוד הקס |
פקודה לרישום הוראות LCD |
0F |
LCD מופעל, סמן מופעל |
01 |
נקה מסך תצוגה |
02 |
לחזור הביתה |
04 |
סמן ירידה (העבר את הסמן שמאלה) |
06 |
סמן תוספת (העבר את הסמן ימינה) |
05 |
הסט את התצוגה ימינה |
07 |
תצוגת משמרת שמאלה |
0E |
תצוגה מופעלת, הסמן מהבהב |
80 |
כפה על הסמן לתחילת השורה הראשונה |
C0 |
כפה על הסמן לתחילת השורה השנייה |
38 |
2 שורות ומטריקס 5 × 7 |
83 |
מיקום קו 1 של הסמן 3 |
3 ג |
הפעל את השורה השנייה |
08 |
הצג OFF, הסמן OFF |
C1 |
קפיצה לשורה שנייה, מיקום 1 |
OC |
תצוגה מופעלת, סמן כבוי |
C1 |
קפיצה לשורה שנייה, מיקום 1 |
C2 |
קפיצה לשורה שנייה, מיקום 2 |
תרשים מעגל והסבר
תרשים מעגלים לממשק LCD עם מיקרו-בקר 8051 מוצג באיור לעיל. אם יש לך הבנה בסיסית של 8051, עליך לדעת על EA (PIN 31), XTAL1 & XTAL2, PIN RST (PIN 9), Vcc ו- Pin PIN של מיקרו-בקר 8051. השתמשתי בסיכות האלה במעגל לעיל. אם אין לך מושג על כך, אני ממליץ לך לקרוא את המאמר הזה ממשק LED עם מיקרו-בקר 8051 לפני שתעבור לממשק LCD.
אז מלבד הפינים האלו לעיל חיברנו את סיכות הנתונים (D0-D7) של LCD למיקרו-בקר Port 2 (P2_0 - P2_7). ולשלוט על סיכות RS, RW ו- E לסיכה 12,13,14 (סיכה 2,3,4 מיציאה 3) של המיקרו-בקר בהתאמה.
PIN 2 (VDD) ו- PIN 15 (אספקת תאורה אחורית) של LCD מחוברים למתח (5v), ו- PIN 1 (VSS) ו- PIN 16 (קרקע תאורה אחורית) מחוברים לקרקע.
סיכה 3 (V0) מחוברת למתח (Vcc) באמצעות נגד משתנה של 10k כדי להתאים את הניגודיות של LCD. הרגל האמצעית של הנגד המשתנה מחוברת ל- PIN 3 ושתי רגליים אחרות מחוברות לאספקת המתח ולאדמה.
הסבר קוד
ניסיתי להסביר את הקוד באמצעות הערות (בקוד עצמו).
כפי שהסברתי קודם על מצב הפקודה ומצב הנתונים, אתה יכול לראות שבזמן שליחת הפקודה (פונקציה lcd_cmd) הגדרנו RS = 0, RW = 0 ודופק HIGH ל- LOW ניתן ל- E על ידי הפיכתו ל- 1 ואז ל- 0 כמו כן בעת שליחת נתונים (פונקציה lcd_data) ל- LCD הגדרנו RS = 1, RW = 0 ודופק HIGH ל- LOW ניתן ל- E על ידי הפיכתו ל -1 ל- 0. פונקציית msdelay () נוצרה כדי ליצור עיכוב באלפיות השנייה. ונקרא לעתים קרובות בתכנית, הוא נקרא כך שלמודול ה- LCD יהיה מספיק זמן לביצוע הפעולה הפנימית והפקודות.
נוצר לולאת זמן להדפסת המחרוזת, הקוראת לפונקציה lcd_data בכל פעם להדפסת תו עד התו האחרון (null terminator- '\ 0').
השתמשנו בפונקציה lcd_init () כדי להכין את ה- LCD באמצעות הוראות הפקודה הקבועות מראש (מוסבר לעיל).