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.


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.


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)
};
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.