Hệ thống menu văn bản LCD tiêu chuẩn


10

Có một mô hình ngoài kia cho một hệ thống menu đơn giản trong C cho màn hình LCD văn bản. Tôi thấy mình viết lại mã rất nhiều để xử lý các menu LCD văn bản đơn giản.

Tôi thấy hầu hết các hệ thống đều có menu chính và một số menu phụ mà khi được chọn cho phép bạn đặt tham số với một số giá trị tối thiểu và tối đa.

Lý tưởng nhất là hệ thống menu này có thể được điều hướng với 4 phím đơn giản như nhập, hủy, lên và xuống.

Trong ứng dụng của tôi, tôi đang sử dụng màn hình LCD văn bản 2 dòng x 16 ký tự mặc dù một giải pháp lý tưởng có thể được áp dụng cho bất kỳ màn hình NxM nào.


Không có gì để làm với thiết kế điện tử! Câu hỏi sẽ được đóng lại.
Leon Heller

5
Tôi đã ở dưới các câu hỏi lập trình ấn tượng nếu chúng được áp dụng cho các hệ thống nhúng cũng có thể được hỏi ở đây. Có lẽ tôi đã sai ...
mjh2007

Tôi cũng có ấn tượng tương tự. Có một lưu ý chính thức về điều đó?
AndrejaKo

Chỉ những thứ rất thấp, theo FAQ. Câu hỏi này là về giao diện người dùng.
Leon Heller

3
+1 Tôi cũng sẽ thích thú ... Tôi luôn pha chúng. Bạn đang sử dụng đầu ra giao diện điều khiển hay hiển thị ký tự NxM .... không phải tôi có câu trả lời cho cả :) Trên một số hệ thống hiển thị 2xN được nhúng, tôi đã triển khai hai giao diện nút với kết hợp Enter / Hủy và có Tiếp theo là đệm vòng và loại bỏ sự cần thiết phải lên / xuống & xuống / quay lại.
kenny

Câu trả lời:


5

Mẫu tôi sử dụng cho các hệ thống menu trong C là như thế này:

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

Sau đó tôi khai báo một mảng của menumỗi menuitems chứa s và con trỏ tới các childmenu con. Lên và xuống di chuyển qua mảng menuitems hiện đang được chọn . Quay lại di chuyển đến parentmenu và chuyển tiếp / chọn hoặc di chuyển đến childmenu con hoặc gọi một handlerFuncnút lá.

Hiển thị một menu chỉ liên quan đến việc lặp qua các mục của nó.

Ưu điểm của sơ đồ này là nó được điều khiển hoàn toàn bằng dữ liệu, các cấu trúc menu có thể được khai báo tĩnh trong ROM độc lập với các hàm kết xuất và xử lý.


2

Câu trả lời của Toby là một điểm khởi đầu rất tốt. Các cấu trúc được đề cập giả định rằng các menu là tĩnh và bạn chỉ cần điều hướng qua chúng.

Nếu bạn muốn các menu dymanic (ví dụ: hiển thị các giá trị nhất định, chẳng hạn như nhiệt độ, thời gian, v.v.), thì bạn cần có khả năng tạo ra các giá trị đó.

Một cách có thể là đăng ký một hàm để xây dựng chuỗi của bạn.

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)
};
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.