मानक पाठ एलसीडी मेनू प्रणाली


10

वहाँ एक पाठ एलसीडी के लिए सी में एक सरल मेनू प्रणाली के लिए एक पैटर्न है। मैं अपने आप को सरल पाठ एलसीडी मेनू को संभालने के लिए कोड को फिर से लिख रहा हूं।

मुझे लगता है कि अधिकांश प्रणालियों में एक मुख्य मेनू और कुछ उप-मेनू हैं जो चयनित होने पर आपको कुछ न्यूनतम और अधिकतम मूल्य के साथ एक पैरामीटर सेट करने की अनुमति देते हैं।

आदर्श रूप से इस मेनू सिस्टम को 4 सरल कुंजियों जैसे प्रवेश, रद्द, ऊपर और नीचे के साथ नेविगेट किया जा सकता है।

अपने आवेदन में मैं एक 2 लाइन x 16 अक्षर टेक्स्ट एलसीडी का उपयोग कर रहा हूं, हालांकि एक आदर्श समाधान किसी भी NxM डिस्प्ले पर लागू किया जा सकता है।


इलेक्ट्रॉनिक डिजाइन से कोई लेना देना नहीं! प्रश्न बंद हो जाएगा।
लियोन हेलर

5
यदि वे एम्बेडेड सिस्टम पर लागू होते हैं, तो मैं इंप्रेशन प्रोग्रामिंग प्रश्नों के अधीन था, यहां भी पूछा जा सकता है। शायद मैं गलत था ...
mjh2007

मैं भी इसी तरह के प्रभाव में था। क्या इस बारे में कोई आधिकारिक टिप्पणी है?
आंद्रेजाको

एफएक्यू के अनुसार केवल बहुत ही निम्न-स्तरीय सामान। यह सवाल यूजर इंटरफेस के बारे में है।
लियोन हेलर

3
+1 मुझे भी दिलचस्पी होगी ... मैंने उन्हें हमेशा हाथ से शराब पिलाई है। क्या आप कंसोल आउटपुट या NxM वर्ण प्रदर्शन का उपयोग कर रहे हैं .... ऐसा नहीं है कि मेरे पास या तो एक उत्तर है :) कई एम्बेडेड 2xN डिस्प्ले सिस्टम पर, मैंने Enter / रद्द करने के संयोजन के साथ दो बटन इंटरफेस लागू किए हैं और अगला है जो एक है रिंग बफर और ऊपर / अगले और नीचे / वापस की आवश्यकता को समाप्त करता है।
केनी

जवाबों:


5

C में मेनू सिस्टम के लिए मैं जिस पैटर्न का उपयोग करता हूं वह कुछ इस प्रकार है:

struct menuitem
{
  const char *name; // name to be rendered
  functionPointer handlerFunc; // handler for this leaf node (optionally NULL)
  struct menu *child; // pointer to child submenu (optionally NULL)
};

struct menu
{
  struct menu *parent; // pointer to parent menu
  struct **menuitem; // array of menu items, NULL terminated
};

मैं तब सबमेन और सबमेनस menuयुक्त menuitemपॉइंटर्स की एक सरणी घोषित करता हूं child। वर्तमान में चयनित सरणी के माध्यम से ऊपर और नीचे चलता रहता है menuitem। वापस parentमेनू पर जाता है और आगे / चयन या तो एक childसबमेनू में जाता है या handlerFuncएक पत्ती नोड के लिए कहता है ।

मेनू को रेंडर करना बस इसके आइटम के माध्यम से पुनरावृत्त करना है।

इस योजना का लाभ यह है कि यह पूरी तरह से संचालित है, मेनू संरचनाओं को रेंडरर और हैंडलर कार्यों से स्वतंत्र रूप से ROM में घोषित किया जा सकता है।


2

टोबी का जवाब एक बहुत अच्छा प्रारंभिक बिंदु है। उल्लिखित संरचनाएं मानती हैं कि मेनू स्थिर हैं और आप केवल उनके माध्यम से नेविगेट करते हैं।

यदि आप डायनामिक मेनू चाहते हैं (जैसे कुछ मानों को प्रदर्शित करना, जैसे कि तापमान, समय, आदि), तो आपको इसे उत्पन्न करने में सक्षम होने की आवश्यकता है।

एक तरीका यह हो सकता है कि आप अपनी स्ट्रिंग बनाने के लिए एक फंक्शन रजिस्टर करें।

struct menuitem
{
  const char *name; // name to be rendered
  const char * (*builderFunc)( const char *name );  // callback to generate string, if not null.
  functionPointer handlerFunc; // handler for this leaf node (optionally NULL)
  struct menu *child; // pointer to child submenu (optionally NULL)
};
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.