Standart metin LCD menü sistemi


10

Metin LCD için C basit bir menü sistemi için orada bir desen var mı. Basit metin LCD menülerini işlemek için kodu yeniden yazarken kendimi buluyorum.

Çoğu sistemin bir ana menüye ve seçildiğinde bazı minimum ve maksimum değerlere sahip bir parametre ayarlamanıza izin veren bazı alt menülere sahip olduğunu görüyorum.

İdeal olarak bu menü sistemi enter, iptal, yukarı ve aşağı gibi 4 basit tuşla gezilebilir.

Uygulamamda 2 satır x 16 karakterli metin LCD kullanıyorum, ancak herhangi bir NxM ekrana ideal bir çözüm uygulanabilmelidir.


Elektronik tasarım ile ilgisi yok! Soru kapatılacak.
Leon Heller

5
Gömülü sistemlere uygulanıp uygulanmadığını burada da sorabilirsiniz izlenim programlama soruları altındaydım. Belki yanılmışım ...
mjh2007

Ben de benzer bir izlenim içindeydim. Bununla ilgili resmi bir not var mı?
AndrejaKo

SSS'ye göre sadece çok düşük seviyeli şeyler. Bu soru kullanıcı arayüzü ile ilgilidir.
Leon Heller

3
+1 Ben de ilgilenirim ... Onları her zaman elle pişirdim. Bir konsol çıkışı veya bir NxM karakter ekranı mı kullanıyorsunuz .... her ikisi için de bir cevabım yok :) Birkaç katıştırılmış 2xN ekran sisteminde, Enter / Cancel'ı birleştiren iki düğme arabirimi uyguladım ve Next olan bir halka tampon ve yukarı / sonraki ve aşağı / geri ihtiyacını ortadan kaldırır.
Kenny

Yanıtlar:


5

C menü sistemleri için kullandığım desen şöyle:

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
};

Daha sonra alt menülere s ve işaretçiler menuiçeren bir dizi s bildiririm. Yukarı ve aşağı seçili durumdaki s dizisi boyunca hareket eder . Geri menüye gider ve ileri / seç alt menüye gider veya yaprak düğümü için a çağırır .menuitemchildmenuitemparentchildhandlerFunc

Bir menünün oluşturulması yalnızca öğeleri arasında yineleme yapılmasını içerir.

Bu şemanın avantajı, tamamen veri odaklı olması, menü yapılarının ROM'da oluşturucu ve işleyici işlevlerinden bağımsız olarak statik olarak bildirilebilmesidir.


2

Toby'nin yanıtı çok iyi bir başlangıç ​​noktasıdır. Sözü edilen yapılar, menülerin durağan olduğunu ve bunlarda gezindiğinizi varsayar.

Dymanic menüler istiyorsanız (örn. Sıcaklık, zaman, vb. Gibi belirli değerleri görüntüleme), bunu oluşturabilmeniz gerekir.

Bunun bir yolu, dizenizi oluşturmak için bir işlevi kaydettirmek olabilir.

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)
};
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.