- हमें 4x4 कीपैड की आवश्यकता क्यों है:
- 4x4 मैट्रिक्स कीपैड कैसे काम करता है:
- आवश्यक सामग्री:
- सर्किट आरेख:
- प्रोग्रामिंग स्पष्टीकरण:
कीपैड व्यापक रूप से विभिन्न इलेक्ट्रॉनिक्स और एम्बेडेड परियोजनाओं में उपयोग किए जा रहे इनपुट डिवाइस हैं। उनका उपयोग संख्या और अक्षर के रूप में इनपुट लेने के लिए किया जाता है, और आगे की प्रक्रिया के लिए सिस्टम में एक ही फ़ीड किया जाता है। इस ट्यूटोरियल में हम PIC16F877A के साथ 4x4 मैट्रिक्स कीपैड को इंटरफेस करने जा रहे हैं ।
विस्तार तर्क में जाने और कीपैड का उपयोग करने का तरीका जानने से पहले, हमें कुछ बातों को जानना होगा।
हमें 4x4 कीपैड की आवश्यकता क्यों है:
आमतौर पर हम स्विच सिग्नल की तरह, डिजिटल सिग्नल को पढ़ने के लिए एक माइक्रोकंट्रोलर यूनिट के सिंगल I / O पिन का उपयोग करते हैं। कुछ अनुप्रयोगों में जहां इनपुट उद्देश्यों के लिए 9, 12, 16 कुंजी की आवश्यकता होती है, अगर हम प्रत्येक कुंजी को एक माइक्रोकंट्रोलर पोर्ट में जोड़ते हैं, तो हम 16 I / O पोर्ट का उपयोग करके समाप्त हो जाएंगे। यह 16 I / O पोर्ट केवल I / O सिग्नल पढ़ने के लिए नहीं हैं, बल्कि इन्हें परिधीय कनेक्शन के रूप में भी उपयोग किया जा सकता है, जैसे ADC सपोर्ट, I2C, SPI कनेक्शन भी I / O पिन द्वारा समर्थित हैं। जैसे-जैसे वे पिन स्विच / कीज़ से जुड़े होते हैं, हम उनका उपयोग नहीं कर सकते, लेकिन केवल I / O पोर्ट के रूप में। यह कोई मतलब नहीं है। तो, पिन काउंट कैसे कम करें? इसका जवाब है, हेक्स कीपैड या मैट्रिक्स कीपैड का उपयोग करना; हम पिन काउंट को कम कर सकते हैं, जो 4x4 मैट्रिक्स कुंजियों को संबद्ध करता है। यह 8 पिन का उपयोग करेगा, जिसमें से 4 पंक्तियों में जुड़ा हुआ है और 4 स्तंभों में जुड़ा हुआ है, इसलिए माइक्रोकंट्रोलर के 8 पिन को बचा रहा है।
4x4 मैट्रिक्स कीपैड कैसे काम करता है:
ऊपरी छवि में एक मैट्रिक्स कीपैड मॉड्यूल बाईं ओर दिखाया गया है। दाईं ओर आंतरिक कनेक्शन के साथ-साथ पोर्ट कनेक्शन भी दिखाया गया है। अगर हम बंदरगाह देख वहाँ 8 पिन, पहले 4 बाएं से दाएं हैं x1, x2, X3, और X4 रहे पंक्तियों रहे हैं, और पिछले 4 बाएं से दाएं Y1, Y2, Y3, Y4 रहे चार स्तंभों । यदि हम आउटपुट के रूप में 4 पंक्तियाँ या एक्स साइड बनाते हैं और उन्हें लॉजिक कम या 0 बनाते हैं, और इनपुट के रूप में 4 कॉलम बनाते हैं और कुंजियों को पढ़ते हैं तो हम स्विच प्रेस को पढ़ेंगे जब संवाददाता Y को 0 मिलेगा ।
वही बात nxn मैट्रिक्स में होगी जहां n संख्या है। वह 3x3, 6x6 आदि हो सकता है।
अब जरा सोचिए कि 1 दबाया जाए । फिर 1 X1 पंक्ति और Y1 कॉलम पर स्थित है। यदि X1 0 है, तो Y1 0. होगा। उसी तरह हम X1 पंक्ति में प्रत्येक कुंजी को स्तंभ Y1, Y2, Y3 और Y4 को समझ सकते हैं। यह बात हर स्विच के लिए होती है और हम मैट्रिक्स में स्विच की स्थिति को पढ़ेंगे।
प्रत्येक हरे रंग के घेरे स्विच होते हैं और वे दोनों एक ही तरह से जुड़े होते हैं।
इस ट्यूटोरियल में हम निम्नलिखित विशिष्टताओं के साथ की बोर्ड को इंटरफेस करेंगे-
- हम आंतरिक पुल अप का उपयोग करेंगे
- हम कुंजी डी-बाउंस विकल्प जोड़ेंगे
लेकिन जब स्विच को दबाया नहीं जाता है तो हमें Y1, Y2, Y3 और Y4 को उच्च या 1 बनाने की आवश्यकता होती है । अन्यथा स्विच को दबाए जाने पर हम तर्क परिवर्तनों का पता नहीं लगा सकते हैं। लेकिन हम इसे कोड या प्रोग्राम के द्वारा नहीं बना सकते हैं क्योंकि उन पिनों को इनपुट के रूप में उपयोग किया जाता है, आउटपुट नहीं। इसलिए, हम माइक्रोकंट्रोलर में एक आंतरिक ऑपरेशन रजिस्टर का उपयोग करेंगे और उन पिनों को संचालित करेंगे जो कमजोर पुल अप सक्षम मोड के रूप में हैं। इसका उपयोग करने पर, डिफ़ॉल्ट स्थिति में तर्क उच्च सक्षम मोड होगा जब यह डिफ़ॉल्ट स्थिति में होगा।
इसके अलावा, जब हम कुंजी दबाते हैं तो स्पाइक्स या शोर स्विच संपर्कों के साथ उत्पन्न होते हैं, और इसके कारण कई स्विच प्रेस होते हैं जो अपेक्षित नहीं है। इसलिए, हम पहले स्विच प्रेस का पता लगाएंगे, कुछ मिली सेकेंड के लिए प्रतीक्षा करेंगे, फिर से जाँचेंगे कि स्विच अभी भी दबाया गया है या नहीं और अगर स्विच अभी भी दबाया गया है तो हम स्विच प्रेस को स्वीकार करेंगे अन्यथा नहीं। इसे स्विच का डी-बाउंसिंग कहा जाता है ।
हम अपने कोड में इसे लागू करेंगे, और ब्रेडबोर्ड पर कनेक्शन बनाएंगे।
अन्य माइक्रोकंट्रोलर के साथ 4x4 कीपैड की इंटरफ़ेस कैसे करें, इसकी भी जाँच करें:
- Arduino Uno के साथ कीपैड इंटरफेसिंग
- 8051 माइक्रोकंट्रोलर के साथ 4x4 मैट्रिक्स कीपैड इंटरफेसिंग
- ATmega32 माइक्रोकंट्रोलर के साथ 4x4 कीपैड इंटरफेसिंग
- ब्रेडबोर्ड पर रास्पबेरी पाई डिजिटल कोड लॉक
आवश्यक सामग्री:
- ब्रेड बोर्ड
- आपके पीसी में Pic-kit 3 और विकास का वातावरण, यानी MPLABX
- तारों और कनेक्टर्स
- चरित्र एलसीडी 16x2
- 20 मेगाहर्ट्ज क्रिस्टल
- 2 पीसी 33 पीएफ सिरेमिक डिस्क कैप।
- 4.7k रोकनेवाला
- 10k प्रीसेट (वेरिएबल रेसिस्टर)
- 4x4 मैट्रिक्स कीपैड
- एक 5 वी एडाप्टर
सर्किट आरेख:
हम संबंधित पिंस में क्रिस्टल और अवरोधक को जोड़ेंगे। इसके अलावा, हम PORTD के पार 4 बिट मोड में एलसीडी कनेक्ट करेंगे । हमने पोर्ट RB4 में हेक्स कीपैड या मैट्रिक्स कीपैड को कनेक्ट किया है ।
यदि आप PIC के लिए नए हैं, तो PIC माइक्रोकंट्रोलर से शुरू करना शुरू करें: PIC और MPLABX का परिचय
प्रोग्रामिंग स्पष्टीकरण:
PIC Microcontroller के साथ मैट्रिक्स कीपैड को इंटरफेस करने के लिए पूरा कोड अंत में दिया गया है। कोड आसान और स्व-व्याख्यात्मक है। कीपैड लाइब्रेरी केवल कोड में समझी जाने वाली चीज़ है। यहां हमने कीपैड और 16x2 एलसीडी को इंटरफेस करने के लिए कीपैड। H और lcd.h लाइब्रेरी का उपयोग किया है। तो चलो देखते हैं कि अंदर क्या हो रहा है।
कीपैड के अंदर। हम देखेंगे कि हमने xc.h हैडर का उपयोग किया है जो डिफ़ॉल्ट रजिस्टर लाइब्रेरी है, क्रिस्टल आवृत्ति kepad.c फ़ाइल में प्रयुक्त देरी के उपयोग के लिए परिभाषित की गई है। हमने PORTRB रजिस्टर में कीपैड पोर्ट्स को परिभाषित किया और पंक्ति (X) और कॉलम (Y) के रूप में व्यक्तिगत पिन को परिभाषित किया ।
हमने कीपैड इनिशियलाइज़ेशन के लिए दो फंक्शन्स में से एक का उपयोग किया है जो पोर्ट को आउटपुट और इनपुट के रूप में रीडायरेक्ट करेगा, और एक स्विच प्रेस स्कैन जो कि कॉल प्रेस की स्थिति को लौटाएगा जब कॉल किया जाएगा।
#शामिल
में keypad.c हम समारोह नीचे है कि कुंजी दबाएँ वापस आ जाएगी जब कीपैड स्कैनर समारोह 'एन' वापस नहीं देखेंगे।
char switch_press_scan (शून्य) // उपयोगकर्ता से कुंजी प्राप्त करें { char key = 'n'; // मान लें कि कोई कुंजी दबाया नहीं गया है (कुंजी == 'एन') // प्रतीक्षा करें एक कुंजी दबाए रखें कुंजी = कीपैड_स्कैनर (); // कुंजी को फिर से स्कैन करें और फिर से कुंजी वापस करें; // जब कुंजी दबाया जाता है तब उसका मान लौटाएं }
नीचे कीपैड पढ़ने का कार्य है। प्रत्येक चरण में हम पंक्ति X1, X2, X3 और X4 को 0 बना देंगे और Y1, Y2, Y3 और Y4 स्थिति को पढ़ेंगे। विलंब प्रभाव के लिए देरी का उपयोग किया जाता है, जब स्विच को अभी भी दबाया जाता है हम इसके साथ जुड़े मूल्य को वापस कर देंगे। जब कोई स्विच दबाया नहीं जाता है तो हम 'एन' लौटा देंगे ।
char कीपैड_स्कैनर (शून्य) { X_1 = 0; X_2 = 1; X_3 = 1; X_4 = 1; if (Y_1 == 0) {__delay_ms (100); जबकि (Y_1 == 0); वापसी '1'; } अगर (Y_2 == 0) {__delay_ms (100); जबकि (Y_2 == 0); वापसी '2'; } अगर (Y_3 == 0) {__delay_ms (100); जबकि (Y_3 == 0); वापसी '3'; } अगर (Y_4 == 0) {__delay_ms (100); जबकि (Y_4 == 0); वापसी 'ए'; } X_1 = 1; X_2 = 0; X_3 = 1; X_4 = 1; if (Y_1 == 0) {__delay_ms (100); जबकि (Y_1 == 0); वापसी '4'; } अगर (Y_2 == 0) {__delay_ms (100); जबकि (Y_2 == 0); वापसी '5'; } अगर (Y_3 == 0) {__delay_ms (100); जबकि (Y_3 == 0); वापसी '6'; } अगर (Y_4 == 0) {__delay_ms (100); जबकि (Y_4 == 0); वापसी 'बी'; } X_1 = 1; X_2 = 1; X_3 = 0; X_4 = 1; if (Y_1 == 0) {__delay_ms (100); जबकि (Y_1 == 0); वापसी '7'; } अगर (Y_2 == 0) {__delay_ms (100); जबकि (Y_2 == 0); वापसी '8'; } अगर (Y_3 == 0) {__delay_ms (100); जबकि (Y_3 == 0); वापसी '9'; } अगर (Y_4 == 0) {__delay_ms (100); जबकि (Y_4 == 0); वापसी 'सी'; } X_1 = 1; X_2 = 1; X_3 = 1; X_4 = 0; if (Y_1 == 0) {__delay_ms (100); जबकि (Y_1 == 0); वापसी '*'; } अगर (Y_2 == 0) {__delay_ms (100); जबकि (Y_2 == 0); वापसी '0'; } अगर (Y_3 == 0) {__delay_ms (100); जबकि (Y_3 == 0); वापसी '#'; } अगर (Y_4 == 0) {__delay_ms (100); जबकि (Y_4 == 0); वापसी 'डी'; } वापसी 'एन'; }
हम अंतिम चार बिट्स पर कमजोर पुल को भी सेट करेंगे, और अंतिम 4 इनपुट के रूप में पोर्ट की दिशा और पहले 4 को आउटपुट के रूप में भी सेट करेंगे। OPTION_REG & = 0x7F; अंतिम पिन पर कमजोर पुल अप मोड सेट करने के लिए उपयोग किया जाता है।
शून्य InitKeypad (शून्य) { Keypad_PORT = 0x00; // सेट कीपैड पोर्ट पिन मान शून्य कीपैड_पोर्ट_डायरेक्शन = 0xF0; // अंतिम 4 पिन इनपुट, पहला 4 पिन आउटपुट OPTION_REG & = 0x7F; }
में मुख्य पीआईसी कार्यक्रम (नीचे दिए गए) हम पहले विन्यास बिट्स सेट और कुछ आवश्यक पुस्तकालयों शामिल थे। फिर void system_init फ़ंक्शन में हम कीपैड और एलसीडी को इनिशियलाइज़ करते हैं। और अंत में में में मुख्य समारोह हम फोन करके कीपैड पढ़ा है switch_press_scan () समारोह और एलसीडी के लिए मूल्य लौटने।
यहां से हेडर फ़ाइलों के साथ पूरा कोड डाउनलोड करें और नीचे प्रदर्शन वीडियो देखें।