Sistem menu LCD teks standar

10

Apakah ada pola di luar sana untuk sistem menu sederhana dalam C untuk LCD teks. Saya menemukan diri saya menulis ulang kode banyak untuk menangani menu LCD teks sederhana.

Saya menemukan sebagian besar sistem memiliki menu utama dan beberapa sub-menu yang ketika dipilih memungkinkan Anda untuk mengatur parameter dengan beberapa nilai minimum dan maksimum.

Idealnya sistem menu ini dapat dinavigasi dengan 4 tombol sederhana seperti memasukkan, membatalkan, naik, dan turun.

Dalam aplikasi saya, saya menggunakan LCD teks 2 baris x 16 karakter meskipun solusi yang ideal harus dapat diterapkan ke layar NxM.

mjh2007
sumber
Tidak ada hubungannya dengan desain elektronik! Pertanyaan akan ditutup.
Leon Heller
5
Saya berada di bawah pertanyaan pemrograman tayangan jika mereka diterapkan ke sistem embedded dapat ditanyakan di sini juga. Mungkin saya salah ...
mjh2007
Saya juga mendapat kesan serupa. Apakah ada catatan resmi tentang itu?
AndrejaKo
Hanya hal-hal yang sangat rendah, menurut FAQ. Pertanyaan ini tentang antarmuka pengguna.
Leon Heller
3
+1 Saya akan tertarik juga ... Saya selalu membuatnya sendiri. Apakah Anda menggunakan output konsol atau tampilan karakter NxM .... bukan berarti saya punya jawaban untuk keduanya :) Pada beberapa sistem tampilan 2xN yang disematkan, saya telah mengimplementasikan dua antarmuka tombol dengan menggabungkan Enter / Cancel dan memiliki Next yang merupakan dering penyangga dan menghilangkan kebutuhan untuk naik / turun & turun / mundur.
kenny

Jawaban:

5

Pola yang saya gunakan untuk sistem menu di C adalah sesuatu seperti ini:

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

Saya kemudian mendeklarasikan array menumasing-masing berisi menuitems dan pointer ke childsubmenu. Naik dan turun bergerak melalui array menuitems yang saat ini dipilih . Kembali bergerak ke parentmenu dan teruskan / pilih pindah ke childsubmenu atau panggil a handlerFuncuntuk simpul daun.

Rendering menu hanya melibatkan iterasi melalui item-itemnya.

Keuntungan dari skema ini adalah sepenuhnya data didorong, struktur menu dapat secara statis dideklarasikan dalam ROM independen dari fungsi penyaji dan penangan.

Toby Jaffey
sumber
2

Jawaban Toby adalah titik awal yang sangat baik. Struktur yang disebutkan berasumsi bahwa menu itu statis dan Anda hanya menavigasi saja.

Jika Anda ingin menu dymanic (misalnya menampilkan nilai-nilai tertentu, seperti suhu, waktu, dll), maka Anda harus dapat menghasilkan itu.

Salah satu caranya adalah dengan mendaftarkan fungsi untuk membuat string Anda.

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)
};
BrendanSimon
sumber