久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 18162|回復: 17
打印 上一主題 下一主題
收起左側

單片機多級菜單編程的設計思路與理解

  [復制鏈接]
跳轉到指定樓層
樓主
ID:90762 發表于 2018-11-2 09:10 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
多級菜單編程的設計思路:

預先定義一個包含 6 個結元素的結構體5 個字符型和 1 個指針。 1 個字符量存放當前界面的索引號;
2 個字符量存放按下down(向下)鍵時需要跳轉到的索引號; 3 個字符量存放按下“up(向上)鍵時需要跳轉到的索引號;
4 個字符量存放按下enter(進入)鍵時需要跳轉的索引號; 5 個字符量存放按下esc(退出)鍵時需要跳轉的索引號;
6 個變量函數指針變量,存放當前索引號下需要執行的函數的入口地址。 將所有需要顯示的界面其所對應的執行函數和按鍵索引號以結構體的形式列表存儲。具體實現如下:
typedef struct
{
uchar index;              // 1 ,存放當前界面的索引號
uchar down_index; // 2 ,按下down(向下)鍵時需要跳轉到的索引號 uchar up_index;              // 3 ,按下“up(向上)鍵時需要跳轉到的索引號; uchar enter_index;                // 4 ,按下enter(進入)鍵時需要跳轉的索引號; uchar esc_index;              // 5 個當前索號下需要執行 的函數入口地址。 void (*operate)();                            //
6 個函數指針
}Key_index_struct;

單分 3 級, 10 ,則
Key_index_struct const Key_tab[10]=
//              |-----------> Index
//              |              |down(下)
//              |              |              | up上)
//              |              |              |              | Enter(確認)
//              |              |              |              |              |Esc (退出)--->功能函數
//              |              |              |              |              |
{ 0, 1, 2, 3, 4,(*DispMenuTop)},// 待機畫面


{ {0, 0, 0, 1, 0,(*main_menu)},
{1, 2, 3, 4, 0,(*sub_menu1)},
{2, 3, 1, 5, 0,(*sub_menu2)},
{3, 1, 2, 7, 0,(*sub_menu3)},
{4, 4, 4, 4, 1,(*sub_menu1_1)},
{5, 6, 6, 5, 2, (*sub_menu2_1)},
{6, 5, 5, 5, 2,(*sub_menu2_2)},
{7, 8, 9, 7, 3,(*sub_menu3_1)},
{8, 9, 7, 8, 3,(*sub_menu3_2)},
{9, 7, 8, 9, 3,(*sub_menu3_3)}, };



/****************************************************
索引號在結構圖中,讀者可以標上




/********************************************************


void Lcd_display(void)
{
switch(Key_status)
{
case enter: Key_fun=Key_tab[Key_fun].enter_index;
break;
case down: Key_fun=Key_tab[Key_fun].down_index;
break;
case up: Key_fun=Key_tab[Key_fun].up_index;
break;
case esc: Key_fun=Key_tab[Key_fun].esc_index;
break;
default: return;
break;
} Key_fun_Pt=Key_tab[Key_fun].operate;
(*Key_fun_Pt)();//執行當按鍵的操作
}
當微處理掃描鍵盤測到有按按下時,據按鍵按的類型,回在當前 所對應的跳轉索引號,并執行相應的函數。

這段程序隱含一狀態機-----通過不同的鍵改變狀態。



結構圖與這一段代碼可理解為狀態機。{1,
2, 3, 4, 0,(*sub_menu1)},這些字代表 不同階段不同狀態的索引號。 表示態之。可理機,按鍵的鍵,
跳轉的下一狀態。
系統啟動初始化是顯示 Main_menu 界面,當按鍵檢測有返回值(即有按鍵按下)時,根據按下的按 鍵所代表的操作跳轉到指定的狀態。

例如:按下 Up 或者是 down 時,只是在 Main_menu 界面高亮顯示不同區域; 按下 Enter ,則要根據原來按下的 Up down 鍵來選需要跳轉的方向。

假設在按下 Enter 之前僅按下一次 down , key_v 的值為 2key_v 值默認為 1,默認選中子菜 單的第一項,就跳轉為 Sub_menu2 界面。

注:也可以自己任定。key_v 的值,第一級(0-10,第二級 100-150,三級 1000-1100
方便寫程序。

按下 Esc 鍵時,為從子菜單返回到上一級菜單,如果已經是主菜單了則返回的還是主菜單。 狀態機只有發生一次有效的按鍵,狀態才會發生一次跳轉而且,僅當 Enter Esc 鍵按下時,
切換界面。

。, 最終根據鍵盤返回的鍵值選擇下一狀態。

結語 多級菜單的實現方式具有很強的實用性。程序的本質是數組,與函數指針的組合應用。
在芯片中只有二進制碼,沒有什么結構圖,指針,狀態圖。 同一程序可畫結構圖來理解, 同一程序可畫狀態圖來理解。



以上的Word格式文檔51黑下載地址:
單片機多級菜單編程的理解.zip (504.08 KB, 下載次數: 565)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏28 分享淘帖 頂2 踩
回復

使用道具 舉報

沙發
ID:138032 發表于 2018-11-13 20:25 | 只看該作者
謝謝分享
回復

使用道具 舉報

板凳
ID:449279 發表于 2018-12-18 20:28 | 只看該作者
很不錯。
回復

使用道具 舉報

地板
ID:449279 發表于 2018-12-18 20:30 | 只看該作者
可以下載嗎!
回復

使用道具 舉報

5#
ID:338959 發表于 2019-5-29 10:13 | 只看該作者
感謝分享
回復

使用道具 舉報

6#
ID:568315 發表于 2019-6-23 21:24 | 只看該作者
感謝樓主分享,但是附件是此篇文章PDF版本,讓我有點失望啊
回復

使用道具 舉報

7#
ID:96552 發表于 2019-10-4 10:24 | 只看該作者
資料不錯,但假如我的子菜單名稱是不固定的呢,例如一級菜單第二項是設置,第二級菜單是電機PID參數,要求在菜單中實時顯示PID變化 參數,這個框架應該怎樣修改?
回復

使用道具 舉報

8#
ID:392914 發表于 2019-11-23 15:58 | 只看該作者
看不懂這個怎么執行的
{ 0, 1, 2, 3, 4,(*DispMenuTop)},// 待機畫面
回復

使用道具 舉報

9#
ID:392914 發表于 2019-12-1 13:07 | 只看該作者
下載什么是沒有.還口我10黑幣
回復

使用道具 舉報

10#
ID:412814 發表于 2020-1-15 09:46 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

11#
ID:412814 發表于 2020-5-4 19:36 | 只看該作者
謝謝分享
回復

使用道具 舉報

12#
ID:292460 發表于 2020-9-7 15:24 | 只看該作者
感謝樓主的解答
回復

使用道具 舉報

13#
ID:156220 發表于 2020-12-12 10:56 | 只看該作者
謝謝樓主的分享,最近正在學習多級菜單的編寫
回復

使用道具 舉報

14#
ID:87000 發表于 2021-10-22 15:09 | 只看該作者
謝謝樓主的分享,最近正在學習多級菜單的編寫
回復

使用道具 舉報

15#
ID:610005 發表于 2021-12-6 16:04 | 只看該作者
謝謝樓主的分享,最近正在學習多級菜單的編寫
回復

使用道具 舉報

16#
ID:246744 發表于 2022-3-15 10:25 | 只看該作者
感謝分享,共同進步
回復

使用道具 舉報

17#
ID:1048017 發表于 2022-10-17 15:40 | 只看該作者
感謝分享,共同進步
回復

使用道具 舉報

18#
ID:1088987 發表于 2023-7-19 16:21 | 只看該作者
很好的思路
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产在线观看一区二区 | 91热在线 | 亚洲国产精品成人综合久久久 | 欧洲视频一区二区 | 国产免费拔擦拔擦8x高清 | 色综合久久天天综合网 | 天天色天天| 一二三四在线视频观看社区 | 国产羞羞视频在线观看 | 久久狠狠 | 嫩草国产 | 久久av一区二区三区 | 国产日屁| 一区二区三区精品视频 | 中文字幕精品一区二区三区精品 | 视频一区二区在线观看 | 精品欧美色视频网站在线观看 | 91在线视频播放 | 国产黄色在线观看 | 成人蜜桃av| 日本精品一区 | 久久久精品一区二区三区 | 欧美一级片在线观看 | 欧美电影免费网站 | 久久在视频 | 亚洲精品日韩在线 | 国产97色 | 午夜视频免费在线观看 | 国产成人精品一区二区三区四区 | 青青草一区二区三区 | 日韩av免费在线观看 | 国产精品久久久久久久久久久久 | 天天玩天天干天天操 | 国产免费一区二区 | 黄网站在线播放 | 免费在线观看毛片 | 91久久久精品国产一区二区蜜臀 | 久久久久久久av麻豆果冻 | 久久久精| 免费三级av | 一级黄色裸片 |