ระบบเมนูข้อความ LCD มาตรฐาน


10

มีรูปแบบสำหรับระบบเมนูอย่างง่ายใน C สำหรับจอแอลซีดีข้อความหรือไม่ ฉันพบว่าตัวเองกำลังเขียนรหัสใหม่มากสำหรับการจัดการเมนูข้อความ LCD แบบง่าย

ฉันพบว่าระบบส่วนใหญ่มีเมนูหลักและเมนูย่อยบางรายการที่เมื่อเลือกไว้ให้คุณตั้งค่าพารามิเตอร์ด้วยค่าต่ำสุดและค่าสูงสุด

โดยหลักการแล้วระบบเมนูนี้สามารถใช้งานด้วยปุ่มง่าย ๆ 4 ปุ่มเช่นป้อน, ยกเลิก, ขึ้นและลง

ในแอปพลิเคชันของฉันฉันกำลังใช้จอ LCD ขนาด 2 บรรทัด x 16 ตัวอักษรแม้ว่าทางออกที่ดีควรจะสามารถนำไปใช้กับจอแสดงผล NxM ใด ๆ


ไม่มีอะไรเกี่ยวข้องกับการออกแบบอิเล็กทรอนิกส์! คำถามจะถูกปิด
Leon Heller

5
ฉันอยู่ภายใต้คำถามการเขียนโปรแกรมการแสดงผลหากพวกเขาสามารถนำไปใช้กับระบบฝังตัวได้ที่นี่ด้วย บางทีฉันผิด ...
mjh2007

ฉันอยู่ภายใต้การแสดงผลที่คล้ายกันเช่นกัน มีบันทึกอย่างเป็นทางการเกี่ยวกับเรื่องนี้หรือไม่?
AndrejaKo

เฉพาะเนื้อหาระดับต่ำมากตามคำถามที่พบบ่อย คำถามนี้เกี่ยวกับส่วนติดต่อผู้ใช้
Leon Heller

3
+1 ฉันก็สนใจเช่นกัน ... ฉันมักจะทำมันเอง คุณกำลังใช้เอาต์พุตคอนโซลหรือการแสดงอักขระ NxM .... ไม่ใช่ว่าฉันมีคำตอบสำหรับ :) ในหลาย ๆ ระบบแสดงผล 2xN แบบฝังตัวฉันได้ติดตั้งปุ่มอินเตอร์เฟสสองปุ่มด้วยการรวม Enter / Cancel และมี Next ซึ่งเป็น วงแหวนบัฟเฟอร์และกำจัดความต้องการสำหรับขึ้น / ถัดไป & ลง / กลับ
kenny

คำตอบ:


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แต่ละรายการที่มีmenuitems และพอยน์เตอร์ไปยังchildเมนูย่อย ขึ้นและลงการเคลื่อนไหวผ่านอาร์เรย์ที่เลือกในปัจจุบันของmenuitems ย้ายกลับไปที่parentเมนูและไปข้างหน้า / เลือกย้ายไปที่childเมนูย่อยหรือเรียกใช้handlerFuncโหนดปลายสุด

การแสดงเมนูเกี่ยวข้องกับการวนซ้ำรายการต่างๆ

ข้อได้เปรียบของโครงร่างนี้คือการขับเคลื่อนข้อมูลทั้งหมดโครงสร้างเมนูสามารถประกาศแบบคงที่ใน ROM อิสระจากฟังก์ชั่น renderer และ handler


2

คำตอบของ Toby เป็นจุดเริ่มต้นที่ดีมาก โครงสร้างที่กล่าวถึงถือว่าเมนูนั้นเป็นแบบสแตติกและคุณเพียงเลื่อนดู

หากคุณต้องการเมนู dymanic (เช่นการแสดงค่าบางอย่างเช่นอุณหภูมิเวลา ฯลฯ ) คุณต้องสร้างมันขึ้นมา

วิธีหนึ่งอาจจะมีการลงทะเบียนฟังก์ชั่นเพื่อสร้างสตริงของคุณ

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)
};
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.