यह हमारी PIC ट्यूटोरियल सीरीज़ में हमारा छठा ट्यूटोरियल है, इस ट्यूटोरियल में हमने PICx माइक्रोकंट्रोलर के साथ 16x2 एलसीडी की इंटरफेसिंग सीखी । हमारे पिछले ट्यूटोरियल में हमने कुछ एलईडी ब्लिंकिंग प्रोग्राम्स का उपयोग करके PIC की मूल बातें सीखी हैं और यह भी सीखा है कि PIC Microcontroller में टाइमर का उपयोग कैसे करें। आप MPLABX और XC8 कंपाइलर का उपयोग करके Learning PIC Microcontrollers के सभी ट्यूटोरियल यहाँ देख सकते हैं।
यह ट्यूटोरियल एक दिलचस्प होगा क्योंकि हम सीखेंगे कि PIC16F877A के साथ 16 × 2 एलसीडी को कैसे इंटरफ़ेस करें, इस ट्यूटोरियल के अंत में विस्तृत वीडियो देखें। वे पुराने दिन हैं जहां हमने उपयोगकर्ता संकेतों के लिए एलईडी का उपयोग किया था। आइए देखें कि एलसीडी डिस्प्ले का उपयोग करके हम कैसे अपनी परियोजनाओं को अधिक शांत और उपयोगी बना सकते हैं। इसके अलावा 8051 के साथ इंटरसेप्सिंग एलसीडी पर हमारे पिछले लेखों की जाँच करें, Arduino के साथ, रास्पबेरी पाई के साथ, AVR के साथ।
PIC माइक्रोकंट्रोलर के साथ इंटरफेसिंग एलसीडी के लिए कार्य:
चीजों को आसान बनाने के लिए हमने एक छोटा पुस्तकालय बनाया है जो हमारे PIC16F877A के साथ इस एलसीडी का उपयोग करते समय चीजों को आसान बना सकता है । हेडर फ़ाइल "MyLCD.h" डाउनलोड के लिए यहां दी गई है, जिसमें PIC MCU का उपयोग करके एलसीडी को चलाने के लिए सभी आवश्यक फ़ंक्शन शामिल हैं। लाइब्रेरी कोड को टिप्पणी लाइनों द्वारा अच्छी तरह से समझाया गया है लेकिन अगर आपको अभी भी संदेह है तो टिप्पणी अनुभाग के माध्यम से हम तक पहुंचें। बेसिक एलसीडी काम करने वाले और उसके पिनआउट के लिए भी इस लेख को देखें।
नोट: यह जानने की हमेशा अनुशंसा की जाती है कि वास्तव में आपकी हेडर फ़ाइल के अंदर क्या हो रहा है क्योंकि यह आपको डिबगिंग में या MCU को बदलते समय मदद करेगा।
अब, इस कोड को अपने प्रोग्राम में जोड़ने के दो तरीके हैं। आप या तो MyLCD.h में कोड की सभी उपरोक्त पंक्तियों को कॉपी कर सकते हैं और उन्हें void main () से पहले पेस्ट कर सकते हैं। या आप लिंक का उपयोग करके हेडर फ़ाइल डाउनलोड कर सकते हैं और उन्हें अपनी परियोजना की हेडर फ़ाइल में जोड़ सकते हैं ( #include "MyL..h "; )। यह हेडर फ़ाइल पर राइट क्लिक करके और मौजूदा आइटम जोड़ें और इस हेडर फ़ाइल में ब्राउज़ करके चयन किया जा सकता है ।
यहाँ मैंने अपने मुख्य C फ़ाइल में हेडर फ़ाइल कोड को कॉपी और पेस्ट किया है। इसलिए यदि आप हमारे कोड का उपयोग कर रहे हैं, तो आपको अपने प्रोग्राम में हेडर फ़ाइल को डाउनलोड करने और जोड़ने की आवश्यकता नहीं है, बस इस ट्यूटोरियल के अंत में दिए गए पूर्ण कोड का उपयोग करें । यह भी ध्यान दें कि यह पुस्तकालय केवल PIC16F श्रृंखला PIC माइक्रोकंट्रोलर का समर्थन करेगा।
यहाँ मैं नीचे हमारे हेडर फ़ाइल के अंदर प्रत्येक फ़ंक्शन की व्याख्या कर रहा हूं:
शून्य Lcd_Start (): यह फ़ंक्शन पहला फ़ंक्शन होना चाहिए जिसे हमारे एलसीडी के साथ काम करना शुरू करने के लिए बुलाया जाना है। कार्यक्रम में पिछड़ने से बचने के लिए हमें इस फ़ंक्शन को केवल एक बार कॉल करना चाहिए।
शून्य Lcd_Start () {Lcd_SetBit (0x00); for (int i = 1065244; मैं <= 0; i--) NOP (); Lcd_Cmd (0x03); __delay_ms (5); Lcd_Cmd (0x03); __delay_ms (11); Lcd_Cmd (0x03); Lcd_Cmd (0x02); // 02H का उपयोग रिटर्न होम के लिए किया जाता है -> RAM को क्लियर करता है और LCD Lcd_Cmd (0x02) को इनिशियलाइज़ करता है; // 02H का उपयोग रिटर्न होम के लिए किया जाता है -> RAM को क्लियर करता है और LCD Lcd_Cmd (0x08) को इनिशियलाइज़ करता है; // पंक्ति 1 Lcd_Cmd (0x00) का चयन करें; // स्पष्ट पंक्ति 1 प्रदर्शन Lcd_Cmd (0x0C); // पंक्ति 2 Lcd_Cmd (0x00) का चयन करें; // स्पष्ट पंक्ति 2 प्रदर्शन Lcd_Cmd (0x06); }
Lcd_Clear (): यह फ़ंक्शन एलसीडी स्क्रीन को साफ़ करता है और पिछले डेटा की उपस्थिति को साफ़ करने के लिए छोरों के अंदर इस्तेमाल किया जा सकता है।
Lcd_Clear () {Lcd_Cmd (0); // LCD Lcd_Cmd (1) साफ़ करें; // कर्सर को पहले स्थान पर ले जाएँ}
शून्य Lcd_Set_Cursor (x स्थिति, y स्थिति): एक बार शुरू होने के बाद, हमारी एलसीडी कमांड लेने के लिए तैयार है, हम इस फ़ंक्शन का उपयोग करके एलसीडी को आपके पसंदीदा स्थान में अपना कर्सर सेट करने का निर्देश दे सकते हैं। मान लीजिए अगर, हमें पहली पंक्ति के 5 वें चरित्र पर कर्सर चाहिए। तब समारोह शून्य Lcd_Set_Cursor (1, 5) होगा
शून्य Lcd_Set_Cursor (char a, char b) {char temp, z, y; if (a == 1) {temp = 0x80 + b - 1; // 80H का प्रयोग कर्सर z = अस्थायी = 4 को स्थानांतरित करने के लिए किया जाता है; // निचला 8-बिट्स y = अस्थायी और 0x0F; // ऊपरी 8-बिट्स Lcd_Cmd (z); // सेट पंक्ति Lcd_Cmd (y); // सेट कॉलम} और यदि (a == 2) {temp = 0xC0 + b - 1; z = अस्थायी = 4; // निचला 8-बिट्स y = अस्थायी और 0x0F; // ऊपरी 8-बिट्स Lcd_Cmd (z); // सेट पंक्ति Lcd_Cmd (y); // कॉलम सेट करें}}
शून्य Lcd_Print_Char (चार डेटा): एक बार कर्सर सेट होने पर हम इस फ़ंक्शन को सरल कॉल करके अपनी स्थिति में एक चरित्र लिख सकते हैं।
शून्य Lcd_Print_Char (चार डेटा) // 4-बिट मोड के माध्यम से 8-बिट्स भेजें {char Lower_Nibble, Upper_Nibble; Lower_Nibble = डेटा और 0x0F; ऊपरी_Nibble = डेटा और 0xF0; आरएस = 1; // => RS = 1 Lcd_SetBit (Upper_Nibble >> 4); // 4 एन = 1 द्वारा स्थानांतरण करके ऊपरी आधा भेजें; for (int i = 2130483; मैं <= 0; i--) NOP (); एन = 0; Lcd_SetBit (Lower_Nibble); // लोअर हाफ ईएन = 1 भेजें; for (int i = 2130483; मैं <= 0; i--) NOP (); एन = 0; }
void Lcd_Print_String (char * a): यदि वर्णों के समूह को प्रदर्शित करना है, तो स्ट्रिंग फ़ंक्शन का उपयोग किया जा सकता है।
शून्य Lcd_Print_String (char * a) {int i; for (i = 0; a (! = '\ 0'; i ++) Lcd_Print_Char (a); // स्ट्रिंग को पॉइंटर्स का उपयोग करके विभाजित करें और चार फ़ंक्शन को कॉल करें}
हर बार Lcd_Print_Char (char data) को कहा जाता है, इसके संबंधित वर्ण मान LCD की डेटा-लाइनों को भेजे जाते हैं। ये पात्र बिट्स के रूप में HD44780U तक पहुंचते हैं। अब यह IC नीचे दी गई सारणी के अनुसार अपनी ROM मेमोरी का उपयोग करके प्रदर्शित होने वाले बिट्स से संबंधित है। आप HD44780U LCD नियंत्रक की डेटशीट में सभी वर्णों के लिए बिट्स पा सकते हैं ।
अब, चूंकि हम अपनी हेडर फ़ाइल से संतुष्ट हैं, इसलिए सर्किट का निर्माण करें और प्रोग्राम का परीक्षण करें। ऊपर दिए गए लिंक में दिए गए पूर्ण हेडर फ़ाइल को भी देखें।
सर्किट आरेख और परीक्षण:
नीचे PIC Microcontroller के साथ 16x2 एलसीडी Interfacing के लिए सर्किट आरेख है।
मैंने उपरोक्त सर्किट में पावर सप्लाई या ICSP कनेक्शन नहीं दिखाया है, क्योंकि हम उसी बोर्ड का उपयोग कर रहे हैं जिसका उपयोग हमने पिछले ट्यूटोरियल में किया है, यहाँ देखें।
कार्यक्रम में ध्यान देने वाली एक महत्वपूर्ण बात एलसीडी की पिन परिभाषाएं हैं:
#define RS RD2 #define EN RD3 #define D4 RD4 #define D5 RD5 #define D6 RD6 #define D7 RD7
प्रोग्रामर हार्डवेयर सेटअप के अनुसार इन पिन परिभाषाओं को बदला जा सकता है। यदि आप यहां बदलते हैं, तो मुख्य फ़ंक्शन में सम्मानित पोर्ट कॉन्फ़िगरेशन को बदलना याद रखें।
इस परियोजना के लिए हार्डवेयर बहुत सरल है। हम उसी पीआईसी मॉड्यूल का पुन: उपयोग करने जा रहे हैं जिसका उपयोग हमने पिछली बार किया था और एलसीडी मॉड्यूल को जम्पर तारों का उपयोग करके हमारे पीआईसी से कनेक्ट किया था।
कनेक्शन को निम्न तालिका द्वारा समझा जा सकता है:
एलसीडी पिन नं। |
एलसीडी पिन नाम |
MCU पिन नाम |
MCU पिन नं। |
1 |
भूमि |
भूमि |
१२ |
२ |
वीसीसी |
+ 5 वी |
1 1 |
३ |
वी |
भूमि |
१२ |
४ |
रजिस्टर का चयन करें |
RD2 |
२१ |
५ |
पढ़ना लिखना |
भूमि |
१२ |
६ |
सक्षम |
RD3 |
२२ |
। |
डेटा बिट 0 |
एनसी |
- |
। |
डेटा बिट 1 |
एनसी |
- |
९ |
डेटा बिट 2 |
एनसी |
- |
१० |
डेटा बिट 3 |
एनसी |
- |
1 1 |
डेटा बिट 4 |
RD4 |
२। |
१२ |
डेटा बिट 5 |
RD5 |
२। |
१३ |
डेटा बिट 6 |
RD6 |
२ ९ |
१४ |
डेटा बिट 7 |
RD7 |
३० |
१५ |
एलईडी सकारात्मक |
+ 5 वी |
1 1 |
१६ |
एलईडी नकारात्मक |
भूमि |
१२ |
अब हम बस कनेक्शन बनाते हैं, हमारे MCU को कोड डंप करते हैं और आउटपुट को सत्यापित करते हैं।
यदि आपको कोई परेशानी या संदेह है, तो कृपया टिप्पणी अनुभाग का उपयोग करें। यह भी जांच डेमो वीडियो नीचे दी गई।