- 16x2 एलसीडी डिस्प्ले का कार्य
- सर्किट आरेख STM8 माइक्रोकंट्रोलर के साथ इंटरफ़ेस एलसीडी के लिए
- STM8 LCD लाइब्रेरी - STM8S103F3P6 के लिए हैडर फ़ाइल
- STM8S माइक्रोकंट्रोलर के लिए एलसीडी प्रोग्राम
- एलसीडी के साथ STM8 - कार्य करना
16x2 अल्फ़ान्यूमेरिक एलसीडी डिस्प्ले, शौक और उत्साही लोगों के बीच सबसे अधिक इस्तेमाल किया जाने वाला डिस्प्ले है। जब आप उपयोगकर्ता को बुनियादी जानकारी दिखाना चाहते हैं तो डिस्प्ले बहुत उपयोगी होता है और यह हमारे कोड के परीक्षण या डिबगिंग में भी मदद कर सकता है। यह विशेष रूप से 16x2 एलसीडी मॉड्यूल आसानी से उपलब्ध है और लंबे समय से लोकप्रिय है। आप लिंक किए गए लेख में 16x2 एलसीडी मॉड्यूल की मूल बातें जान सकते हैं।
STM8 माइक्रोकंट्रोलर ट्यूटोरियल की हमारी श्रृंखला को जारी रखने के लिए, इस ट्यूटोरियल में, हम सीखेंगे कि STM8 माइक्रोकंट्रोलर के साथ एक एलसीडी को कैसे इंटरफ़ेस करें । हमने पहले भी कई अन्य माइक्रोकंट्रोलर के साथ 16x2 एलसीडी को इंटरफेज किया है, ट्यूटोरियल नीचे सूचीबद्ध हैं और यदि आप रुचि रखते हैं, तो आप उन्हें जांच सकते हैं।
यदि आप STM8 के लिए नए हैं, तो कंट्रोलर बोर्ड और प्रोग्रामिंग वातावरण की मूल बातें समझने के लिए STM8 माइक्रोकंट्रोलर लेख के साथ शुरुआत करें। हम इस ट्यूटोरियल में मूल बातें शामिल नहीं करेंगे।
16x2 एलसीडी डिस्प्ले का कार्य
जैसा कि नाम से पता चलता है, 16x2 एलसीडी में 16 कॉलम और 2 पंक्तियाँ होंगी। तो कुल मिलाकर, हम इस प्रदर्शन पर 32 अक्षर प्रदर्शित कर पाएंगे और ये अक्षर अक्षर या संख्या या फिर प्रतीक भी हो सकते हैं। एक सरल 16x2 एलसीडी पिनआउट जिसे हम इस ट्यूटोरियल में उपयोग करते हैं, नीचे दिखाया गया है-
जैसा कि आप देख सकते हैं, डिस्प्ले में 16 पिन हैं और हम इसे पांच श्रेणियों में विभाजित कर सकते हैं, पावर पिन, कंट्रास्ट पिन, कंट्रोल पिन, डेटा पिन और बैकलाइट पिन जैसा कि नीचे दी गई तालिका में दिखाया गया है। जब हम इस ट्यूटोरियल के सर्किट आरेख पर चर्चा करते हैं, तो हम प्रत्येक पिन के विवरण में मिल जाएंगे।
वर्ग | पिन नं। | पिन नाम | समारोह |
पावर पिंस | 1 | वीएसएस | ग्राउंड पिन, ग्राउंड से जुड़ा |
२ | VDD या Vcc | वोल्टेज पिन + 5 वी | |
कंट्रास्ट पिन | ३ | V0 या VEE | कंट्रास्ट सेटिंग, एक वैरिएबल रेसिस्टर के माध्यम से Vcc से जुड़ी। |
पिंस पर नियंत्रण रखें | ४ | रुपये | रजिस्टर का चयन करें पिन, आरएस = 0 कमांड मोड, आरएस = 1 डेटा मोड |
५ | आरडब्ल्यू | पढ़ें / लिखें पिन, आरडब्ल्यू = 0 लिखें मोड, आरडब्ल्यू = 1 रीड मोड | |
६ | इ | सक्षम करें, एलसीडी को सक्षम करने के लिए एक उच्च से निम्न पल्स की आवश्यकता होती है | |
डेटा पिन | 7-14 | D0-D7 | डेटा पिन, स्टोर डेटा को एलसीडी या कमांड निर्देशों पर प्रदर्शित किया जाएगा |
बैकलाइट पिंस | १५ | एलईडी + या ए | बैकलाइट + 5 वी को पावर करने के लिए |
१६ | एलईडी- या के | बैकलाइट ग्राउंड |
एलसीडी के पीछे, जैसा कि नीचे दी गई छवि में दिखाया गया है, आपको दो काले डॉट्स मिलेंगे, जिसके अंदर हमारे पास HD44780 एलसीडी ड्राइवर आईसी (लाल रंग में घेरे) है। हमारे माइक्रोकंट्रोलर को इस आईसी के साथ संवाद करना चाहिए जो कि एलसीडी पर प्रदर्शित होने वाले नियंत्रण को नियंत्रित करेगा। यदि आप यह जानने के लिए उत्सुक हैं कि यह सब कैसे काम करता है तो आपको 16x2 एलसीडी डिस्प्ले के कामकाज की जांच करनी चाहिए जहां हमने पहले ही चर्चा की है कि एलसीडी कैसे काम करता है।
इस ट्यूटोरियल में, हम साधारण एलसीडी_प्रिंट _char और LCD_print_string कमांड का उपयोग करके 16x2 एलसीडी डिस्प्ले पर अल्फ़ामेरिकल कैरेक्टर (अल्फाबेट्स और नंबर) प्रदर्शित करने के लिए सर्किट आरेख और कोड पर चर्चा करेंगे । ये कमांड सीधे हमारी हेडर फाइल को शामिल करने के बाद प्रोग्राम में उपयोग की जा सकती हैं। हेडर फ़ाइल आपके लिए सभी सामानों से संबंधित है, इसलिए यह जानना अनिवार्य नहीं है कि डिस्प्ले या HD44780 ड्राइवर आईसी कैसे काम करता है।
सर्किट आरेख STM8 माइक्रोकंट्रोलर के साथ इंटरफ़ेस एलसीडी के लिए
पूर्ण STM8 एलसीडी सर्किट नीचे की छवि में पाया जा सकता है। जैसा कि आप देख सकते हैं कि एलसीडी के साथ STM8S103F3P6 नियंत्रक के लिए कनेक्शन बहुत सरल है, हमारे पास एलसीडी डिस्प्ले सीधे हमारे बोर्ड से जुड़ा है और एसटी-लिंक भी बोर्ड को प्रोग्राम करने के लिए जुड़ा हुआ है।
पावर पिन Vss और Vcc STM8S बोर्ड में 5V पिन से जुड़े हैं, ध्यान दें कि एलसीडी का ऑपरेटिंग वोल्टेज 5V है और 3.3V पर काम करने के लिए जुड़ा हुआ है। भले ही STM8S103F3P6 माइक्रोकंट्रोलर 3.3V पर संचालित हो, एलसीडी के लिए 5V की आपूर्ति होना अनिवार्य है, आप एक चार्ज कंट्रोलर आईसी का उपयोग करके इससे बच सकते हैं लेकिन हम इस ट्यूटोरियल में चर्चा नहीं करेंगे।
अगला, हमारे पास कंट्रास्ट पिन है जो एलसीडी के विपरीत सेट करने के लिए उपयोग किया जाता है, हमने इसे पोटेंशियोमीटर से जोड़ा है ताकि हम कंट्रास्ट को नियंत्रित कर सकें। हमने 10k पॉट का उपयोग किया है, लेकिन आप आस-पास के अन्य मानों का भी उपयोग कर सकते हैं, पॉट एक संभावित विभक्त के रूप में कंट्रास्ट पिन को 0-5 V प्रदान करने के लिए कार्य करता है, आमतौर पर आप उचित कंट्रास्ट के लिए लगभग 2.2V प्रदान करने के लिए सीधे अवरोधक का भी उपयोग कर सकते हैं मान। फिर हमारे पास रीसेट (RS), रीड / राइट (RW), और Enable (E) पिन हैं। पठन-लेखन पिन को आधार बनाया गया है क्योंकि हम एलसीडी से कुछ भी नहीं पढ़ रहे हैं हम केवल लेखन कार्य करेंगे। अन्य दो नियंत्रण पिन रु और E क्रमशः PA1 और PA2 पिन से जुड़े हैं।
फिर हमारे पास DB0 से DB7 तक डेटा पिन है। 16x2 एलसीडी दो मोड में काम कर सकता है, एक 8-बिट ऑपरेशन मोड है जहां हमें एलसीडी पर सभी 8 डेटा पिन (DB0-DB7) का उपयोग करना होगा और दूसरा 4-बिट ऑपरेशन मोड है जहां हमें केवल 4 की आवश्यकता है डेटा पिन (DB4-DB7)। 4-बिट मोड का आमतौर पर उपयोग किया जाता है क्योंकि इसमें कंट्रोलर से कम GPIO पिन की आवश्यकता होती है, इसलिए हमने इस ट्यूटोरियल में 4-बिट मोड का भी उपयोग किया है और इसमें केवल PD4, PD2, PD3, PD3, PD3 से पिन तक DB4, DB5 और DB7 को जोड़ा है।, और पीडी 4 क्रमशः।
आंतरिक बैकलाइट एलईडी को बिजली देने के लिए पिछले दो पिन बीएलए और बीएलके का उपयोग किया जाता है, हमने 560-ओम अवरोधक को वर्तमान सीमित अवरोधक के रूप में उपयोग किया है। ST- लिंक प्रोग्रामर हमेशा की तरह हमारे पिछले ट्यूटोरियल में जुड़ा हुआ है। मैंने ब्रेडबोर्ड पर पूरा कनेक्शन बना लिया है और मेरा सेट-अप नीचे की छवि में दिखाया गया है।
STM8 LCD लाइब्रेरी - STM8S103F3P6 के लिए हैडर फ़ाइल
सर्किट आरेख में आगे बढ़ने से पहले, हम निम्न लिंक का उपयोग करके GitHub से STM8 एलसीडी हेडर फ़ाइल प्राप्त करें।
STM8S 16x2 एलसीडी हेडर फ़ाइल
आप या तो पूरा रेपो डाउनलोड कर सकते हैं और उपरोक्त लिंक से stm8s103_LCD_16x2.h फ़ाइल या सरल कोड प्राप्त कर सकते हैं। प्रोजेक्ट सेट करते समय, सुनिश्चित करें कि आप इस हेडर फ़ाइल के साथ inc डायरेक्टरी की सभी आवश्यक हेडर फ़ाइलों को शामिल करें।
यदि आप सुनिश्चित नहीं हैं कि शीर्ष लेख फ़ाइलों को कैसे जोड़ें और कार्यक्रम को संकलित करें, तो इस पृष्ठ के नीचे वीडियो का पालन करें। और अगर आप इस बारे में उत्सुक हैं कि हेडर फ़ाइल के अंदर का कोड कैसे काम करता है, तो आप LCD ट्यूटोरियल के साथ PIC की जांच कर सकते हैं। इस परियोजना में उपयोग की गई हेडर फ़ाइल वहाँ बताए गए के समान है, इसलिए हम उसके विवरण में नहीं आएंगे।
STM8S माइक्रोकंट्रोलर के लिए एलसीडी प्रोग्राम
प्रदर्शन के लिए, हम "सर्किट डाइजेस्ट" जैसे एक साधारण स्ट्रिंग को प्रदर्शित करने के लिए अपने एसटीएम 8 एस नियंत्रक का कार्यक्रम करेंगे और फिर हम दूसरी पंक्ति में हर एक सेकंड के लिए "टेस्ट" मान बढ़ाएंगे। पूरा कार्यक्रम इस पृष्ठ के नीचे पाया जा सकता है। स्पष्टीकरण इस प्रकार है।
हम पिन को परिभाषित करके और हमेशा की तरह आवश्यक हेडर फ़ाइलों को जोड़कर अपना कार्यक्रम शुरू करते हैं। हमारे ऊपर चर्चा की गई सर्किट आरेख में, हमने LCD_RS को PA1 से जोड़ा है इसलिए हमने इसे LCD_RS GPIOA, GPIO_PIN_1 के रूप में परिभाषित किया है । इसी तरह, हमने अन्य पिनों के लिए भी ऐसा ही किया है। यदि वे एक अलग सर्किट का पालन कर रहे हैं, तो सुनिश्चित करें कि आप इन मूल्यों को तदनुसार बदलते हैं।
#define LCD_RS GPIOA, GPIO_PIN_1 #define LCD_EN GPIOA, GPIO_PIN_2, #define LCD_DB4 GPIOD, GPIO_PIN_1 #define LCD_DB5 GPIOD, GPIO_PIN_1 GPD_8 GPOD, GPIO_PIN_1, GPIO_PIN_1
हमारे मुख्य कार्यक्रम के अंदर, हमने इस नमूना कोड के लिए आवश्यक चर घोषित किए हैं। हमारे पास test_var नामक एक परीक्षण चर है जिसे शून्य से प्रारंभ किया गया है, हम चर को बढ़ाएंगे और इसे एलसीडी पर प्रदर्शित करेंगे। D1 से d4 तक के अक्षर टेस्ट वेरिएबल के 4 अंकों का प्रतिनिधित्व करते हैं क्योंकि हमारे एलसीडी सीधे इंट्यू नहीं दिखा सकते हैं, हमें उन्हें अक्षरों में बदलना होगा।
// परिवर्तनीय घोषणाएं int test_var = 0; चार डी 4, डी 3, डी 2, डी 1;
LCD_Begin () समारोह एलसीडी प्रारंभ करने में प्रयोग किया जाता है। यह फ़ंक्शन सभी आवश्यक GPIO पिन को इनिशियलाइज़ करेगा और LCD को 16x2 LCD मोड में सेट करेगा। फिर हमारे पास LCD_Clear () फ़ंक्शन है जिसका उपयोग LCD पर सभी मानों को साफ़ करने के लिए किया जाता है, यह LCD पर सब कुछ मिटा देगा ताकि नए मान लिखने के लिए साफ हो। फिर हमारे पास LCD_Set_Cursor (x, y) फ़ंक्शन है जहां x और y ऐसे पद हैं जिन पर हमें अपना नया चरित्र लिखने की आवश्यकता है। उदाहरण के लिए, (1,1) का अर्थ है पहली पंक्ति और पहला कोलम, इसी तरह (2,12) का अर्थ है दूसरी पंक्ति 12 कॉलम, इसी तरह। ध्यान दें कि हमारे यहाँ 2 पंक्तियाँ और 16 कॉलम हैं जैसा कि हमने पहले चर्चा की थी।
Lcd_Begin (); Lcd_Clear (); Lcd_Set_Cursor (1,1);
अब, एलसीडी सेट, क्लियर हो गया है, और कर्सर जगह पर है। अगली बात स्क्रीन पर कुछ प्रिंट करना है। हम LCD के लिए एक वर्ण मान छापने के लिए LCD और LCD_Print_Char (a) को एक स्ट्रिंग प्रिंट करने के लिए LCD_Print_String ("नमूना स्ट्रिंग") का उपयोग कर सकते हैं । यहाँ हमारे कार्यक्रम में हमने "STM8S103F3P3 LCD" प्रिंट किया है और नीचे दिए गए कोड का उपयोग करके 5 सेकंड की देरी पैदा की है।
Lcd_Print_String ("STM8S103F3P3 LCD"); delay_ms (5000);
5 सेकंड की देरी के बाद, हम एलसीडी को फिर से साफ करते हैं और पहली पंक्ति में "सर्किट डाइजेस्ट" और "टेस्ट:" मैं दूसरी पंक्ति प्रदर्शित करते हैं।
Lcd_Clear (); Lcd_Set_Cursor (1,1); Lcd_Print_String ("सर्किट डाइजेस्ट"); Lcd_Set_Cursor (2,1); Lcd_Print_String ("टेस्ट:");
अंदर है, जबकि पाश, हम पूर्णांक चर पर मूल्य बंट जाएगा test_var अलग-अलग पात्रों में इतना है कि यह एलसीडी सरल विभाजन और मापांक ऑपरेटर्स का उपयोग पर प्रदर्शित किया जा सकता है। हमने ASCII मान को वर्ण में बदलने के लिए '0' भी जोड़ा है।
d4 = test_var% 10 + '0'; d3 = (test_var / 10)% 10 + '0'; d2 = (test_var / 100)% 10 + '0'; d1 = (test_var / 1000) + '0';
फिर हमने कर्सर को (2,6) पर सेट किया है क्योंकि हम पहले ही दूसरी पंक्ति में "टेस्ट:" लिख चुके हैं जो कि 6 अक्षर है। यदि हम ओवरराइट करते हैं, तो मौजूदा चरित्र को एलसीडी पर एक नए चरित्र के साथ बदल दिया जाएगा। हमने 1 सेकंड की देरी भी जोड़ी है और चर को बढ़ाते हैं।
Lcd_Set_Cursor (2,6); Lcd_Print_Char (d1); Lcd_Print_Char (d2); Lcd_Print_Char (d3); Lcd_Print_Char (d4); delay_ms (1000); test_var ++;
एलसीडी के साथ STM8 - कार्य करना
हमारे कार्यक्रम का परीक्षण करने के लिए, बस हमारे नियंत्रक को कोड अपलोड करें और इसे माइक्रो-यूएसबी पोर्ट के साथ पावर करें। ध्यान दें कि एलसीडी को काम करने के लिए 5 वी की आवश्यकता होती है इसलिए यूएसबी पोर्ट से बोर्ड को पावर देना अनिवार्य है। हमने पहले इसे सीधे एसटी-लिंक से संचालित किया है क्योंकि हमें 5 वी की आपूर्ति की आवश्यकता नहीं थी।
जैसा कि आप देख सकते हैं कि एलसीडी लगभग हर दूसरे के लिए परीक्षण चर मूल्य में वृद्धि के साथ अपेक्षित रूप से काम कर रहा है। इसके अलावा, ध्यान दें कि हमने टाइमर का उपयोग नहीं किया है और इस देरी को बनाने के लिए केवल देरी फ़ंक्शन का उपयोग किया है, इसलिए देरी की अवधि के सटीक होने की उम्मीद नहीं है, हम उस उद्देश्य के लिए एक और ट्यूटोरियल में बाद में टाइमर का उपयोग करेंगे।
परियोजना का पूरा काम नीचे दिए गए वीडियो में पाया जा सकता है। आशा है कि आपने ट्यूटोरियल का आनंद लिया और कुछ उपयोगी सीखा। यदि आपके कोई प्रश्न हैं, तो उन्हें टिप्पणी अनुभाग में छोड़ दें या अन्य तकनीकी प्रश्नों के लिए हमारे मंचों का उपयोग करें।