欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
單片機(jī)實(shí)現(xiàn)多級(jí)菜單
[打印本頁(yè)]
作者:
cheng734398377
時(shí)間:
2015-6-14 09:57
標(biāo)題:
單片機(jī)實(shí)現(xiàn)多級(jí)菜單
看到網(wǎng)上有個(gè)視頻,用的是12864做的菜單,很花哨,自己也心癢癢想做一個(gè),收集了 很多關(guān)于這方面的東西,但是都是五花八門,沒(méi)有一個(gè)完整的可以共大家參考的程序,所以決定寫偏文章供大家參考,希望讀者下去自己優(yōu)化,改進(jìn)。有什么不足之處還請(qǐng)多多包涵。好了,廢話不多說(shuō),直接進(jìn)入正題吧。
1、首先定義一個(gè)機(jī)構(gòu)體如下
typedef struct
{
uchar current;
uchar up;//上鍵
uchar down;//下鍵
uchar enter;//確認(rèn)鍵
void (*current_operation)();
} key_table;
結(jié)構(gòu)體包含5個(gè)變量,分別是函數(shù)的索引號(hào)即用戶想要執(zhí)行哪個(gè)函數(shù)的代號(hào),然后有三個(gè)鍵,用戶可以自己定義別的按鍵,最后一個(gè)是函數(shù)指針,即索引號(hào)對(duì)應(yīng)的函數(shù)。然后在定義一個(gè)結(jié)構(gòu)體數(shù)組,如下
key_table code table[n]=
{
{0,2,1,3,(*fun1)},
{1,0,2,4,(*fun2)},
{2,1,0,5,(*fun3)},
{3,0,6,3,(*fun4)},
{4,1,6,4,(*fun5)},
{5,2,6,5,(*fun6)},
{6,0,0,0,(*fun7)},
............
};
其中n為函數(shù)數(shù)組大小。下面詳細(xì)介紹key_table code table[n]里面的值是怎么確定的。
首先可以先這樣定義該數(shù)組
key_table code table[n]=
{
{0,x,y,z,(*fun1)},
{1,x,y,z,(*fun2)},
{2,x,y,z,(*fun3)},
{3,x,y,z,(*fun4)},
{4,x,y,z,(*fun5)},
{5,x,y,z,(*fun6)},
{6,x,y,z,(*fun7)},
............
};
其中,x,y,z是未知數(shù),先不確定,他們對(duì)應(yīng)的是三個(gè)鍵按下要指示的索引值,如果四個(gè)鍵,就有四個(gè)未知數(shù),在確定他們之前,必須要了解自己函數(shù)執(zhí)行什么命令。加入開始時(shí)時(shí)執(zhí)行數(shù)組里面的第一個(gè)即table[0],而想在此按上鍵執(zhí)行函數(shù)fun6,那么table[0]里面需要這樣設(shè)置
{0,5,y,z,(*fun1)},同樣,如果希望按下鍵執(zhí)行fun7則需要設(shè)置為
{0,x,6,z,(*fun1)},如果希望按確認(rèn)鍵執(zhí)行fun3則需要設(shè)置為
{0,x,y,2,(*fun1)};如果上面三種情況都想要就設(shè)置為
{0,5,6,2,(*fun1)}.其它數(shù)組元素一次類推。這一步做完了看主程序里面(主要是while(1)里面)。
/*******************find index****************************/
switch(key)
{
case 0x44: func_index=table[func_index].up; //向上翻 break;
case 0x24: func_index=table[func_index].enter;//回車
break;
case 0x14: func_index=table[func_index].down;//向下翻
break;
default:break;
} current_operation_index=table[func_index].current_operation;
(*current_operation_index)();//執(zhí)行當(dāng)前操作函數(shù)
其中,key是返回的按鍵值,這個(gè)用戶視情況而定,
下面是詳細(xì)的例子,
主要是以結(jié)構(gòu)體為基礎(chǔ)設(shè)計(jì)的,以12864顯示函數(shù)代替了用戶需要的函數(shù)功能,只需要修改相應(yīng)的函數(shù)和索引號(hào),就可以達(dá)到任意界面切換了是小弟研究了還久才搞定的,雖然網(wǎng)上也有這些,但是都不夠系統(tǒng),只有基本的東西,這篇例子希望能夠給讀者一些有用的東西,僅供參考哦!
:
#include <reg52.h>
#include "fun.h"
#include "lcd12864.h"
#include "delay.h"
#define uchar unsigned char
sbit keydown=P0^0;
sbit keyenter=P0^1;
sbit keyup=P0^2;
uchar func_index=0;
void (*current_operation_index)();
typedef struct
{
uchar current;
uchar up;//向上翻索引號(hào)
uchar down;//向下翻索引號(hào)
uchar enter;//確認(rèn)索引號(hào)
void (*current_operation)();
} key_table;
key_table code table[30]=
{
{0,3,1,4,(*fun1)},//第一層,顯示【清華大學(xué)】、北京大學(xué)、重慶三峽學(xué)院、返回
{1,0,2,8,(*fun2)},//第一層,顯示清華大學(xué)、【北京大學(xué)】、重慶三峽學(xué)院、返回
{2,1,3,12,(*fun3)},//第一層,顯示清華大學(xué)、北京大學(xué)、【重慶三峽學(xué)院】、返回
{3,2,0,25,(*fun4)},//第一層,顯示清華大學(xué)、北京大學(xué)、重慶三峽學(xué)院、【返回】
{4,7,5,16,(*fun5)},//第二層,清華大學(xué)層下顯示【地點(diǎn)】、創(chuàng)建時(shí)間、簡(jiǎn)介、返回
{5,4,6,17,(*fun6)},//第二層,清華大學(xué)層下顯示地點(diǎn)、【創(chuàng)建時(shí)間】、簡(jiǎn)介、返回
{6,5,7,18,(*fun7)}, //第二層,清華大學(xué)層下顯示地點(diǎn)、創(chuàng)建時(shí)間、【簡(jiǎn)介】、返回
{7,6,4,0,(*fun8)},//第二層,清華大學(xué)層下顯示地點(diǎn)、創(chuàng)建時(shí)間、簡(jiǎn)介、【返回】
{8,11,9,19,(*fun9)},//第二層,北京大學(xué)層下顯示【歷史】、政治、簡(jiǎn)介、返回
{9,8,10,20,(*fun10)},//第二層,北京大學(xué)層下顯示歷史、【政治】、簡(jiǎn)介、返回
{10,9,11,21,(*fun11)}, //第二層,北京大學(xué)層下顯示歷史、政治、【簡(jiǎn)介】、返回
{11,10,8,1,(*fun12)},//第二層,北京大學(xué)層下顯示歷史、政治、簡(jiǎn)介、【返回】
{12,15,13,22,(*fun13)},//第二層,重慶三峽學(xué)院層下顯示【簡(jiǎn)介】、最佳院系、最佳實(shí)驗(yàn)室、返回
{13,12,14,23,(*fun14)}, //第二層,重慶三峽學(xué)院層下顯示簡(jiǎn)介、【最佳院系】、最佳實(shí)驗(yàn)室、返回
{14,13,15,24,(*fun15)}, //第二層,重慶三峽學(xué)院層下顯示簡(jiǎn)介、最佳院系、【最佳實(shí)驗(yàn)室】、返回
{15,14,12,2,(*fun16)}, //第二層,重慶三峽學(xué)院層下顯示簡(jiǎn)介、最佳院系、最佳實(shí)驗(yàn)室、【返回】
{16,16,16,4,(*fun17)}, //第三層,清華大學(xué)地點(diǎn)層
{17,17,17,5,(*fun18)}, //第三層,清華大學(xué)創(chuàng)時(shí)間層
{18,18,18,6,(*fun19)}, //第三層,清華大學(xué)簡(jiǎn)介層
{19,19,19,8,(*fun20)}, //第三層,北京大學(xué)歷史層
{20,20,20,9,(*fun21)}, //第三層,北京大學(xué)政治層
{21,21,21,10,(*fun22)}, //第三層,北京大學(xué)簡(jiǎn)介層
{22,22,22,12,(*fun23)}, //第三層,重慶三峽學(xué)院簡(jiǎn)介層
{23,23,23,13,(*fun24)}, //第三層,重慶三峽學(xué)院最佳院系層
{24,24,24,14,(*fun25)}, //第三層,重慶三峽學(xué)院最佳實(shí)驗(yàn)室層
{25,25,25,0,(*fun26)}, //第0層
};
void main()
{
init_lcd(); //初始化LCD模塊
while(1)
{
/*******************find index****************************/
if((keyup==0)||(keydown==0)||(keyenter==0))
{
delay(10);//消抖
if(keyup==0)
{
func_index=table[func_index].up; //向上翻
while(!keyup);//松手檢測(cè)
}
if(keydown==0)
{
func_index=table[func_index].down; //向下翻
while(!keydown);
}
if(keyenter==0)
{
func_index=table[func_index].enter; //確認(rèn)
while(!keyenter);
}
init_lcd();
}
current_operation_index=table[func_index].current_operation;
(*current_operation_index)();//執(zhí)行當(dāng)前操作函數(shù)
}
}
完整程序包如下
作者:
admin
時(shí)間:
2015-6-14 10:33
謝謝分享完整程序包好像沒(méi)有上傳上來(lái)哦
作者:
景云之應(yīng)
時(shí)間:
2015-6-16 10:58
我也想做,先學(xué)習(xí)了
作者:
hefeng898961
時(shí)間:
2016-3-1 08:39
樓主辛苦了 ,感謝分享!
作者:
luoluoluo136
時(shí)間:
2016-3-22 10:50
東西呢???
作者:
念如
時(shí)間:
2016-5-14 08:09
怎么沒(méi)看到完整程序呢
作者:
lizhun1
時(shí)間:
2016-5-26 12:52
樓主,求完整程序
作者:
lyxxzrb
時(shí)間:
2016-5-27 17:44
感謝費(fèi)心分享,有用!
作者:
我諾你一世不棄
時(shí)間:
2016-5-30 13:39
感謝樓主分享
作者:
lllllly
時(shí)間:
2016-7-26 13:57
樓主,程序包呢?
作者:
曹世鵬
時(shí)間:
2016-9-21 15:12
沒(méi)有附件可供下載。
作者:
liwenjiefa98
時(shí)間:
2016-11-12 21:11
用C語(yǔ)言寫的多級(jí)菜單源程序
作者:
chukuanglxs
時(shí)間:
2017-1-12 09:15
謝謝,看看資料源碼
作者:
luohui_88
時(shí)間:
2017-1-22 11:45
怎么沒(méi)有完整源碼呢?
作者:
zgmzgm
時(shí)間:
2017-3-1 12:04
樓主,完整程序包呢?
作者:
zgmzgm
時(shí)間:
2017-3-1 12:05
樓主,求完整程序
作者:
YQS
時(shí)間:
2017-3-1 16:07
感謝樓主分享
作者:
YQS
時(shí)間:
2017-3-1 16:28
謝謝樓主分享經(jīng)驗(yàn),怎么沒(méi)有完整源碼呢?
作者:
qwqwqwq
時(shí)間:
2017-5-21 15:07
厲害,學(xué)習(xí)了
作者:
lujiantu0926
時(shí)間:
2017-7-20 11:31
怎么看不到!
作者:
fengy_2006
時(shí)間:
2017-8-15 03:37
下來(lái)看看不錯(cuò),不錯(cuò)
作者:
zcl711109
時(shí)間:
2017-8-15 20:57
你好我想看
作者:
一束光的旅程
時(shí)間:
2017-9-30 08:55
學(xué)習(xí)學(xué)習(xí),謝謝樓主
作者:
shaodongsxj
時(shí)間:
2017-11-7 14:21
好東西值得收藏
作者:
liu100m
時(shí)間:
2017-12-2 16:17
{0,3,1,4,(*fun1) ,x,y,z是未知數(shù),先不確定,他們對(duì)應(yīng)的是三個(gè)鍵按下要指示的索引值,如果四個(gè)鍵,就有四個(gè)未知數(shù)。x,y,z是未知數(shù)是各鍵按的次數(shù)嗎?
作者:
binyv
時(shí)間:
2017-12-22 22:06
好像看懂了一點(diǎn)思路
作者:
且聽風(fēng)濤
時(shí)間:
2018-3-24 16:46
謝謝!!!!!!
作者:
且聽風(fēng)濤
時(shí)間:
2018-3-24 16:49
66666666666666
作者:
yigehaorens
時(shí)間:
2018-4-14 19:50
路過(guò)學(xué)習(xí)。。。
作者:
lvdianguang
時(shí)間:
2019-1-19 22:37
謝謝分享
作者:
王秋冬
時(shí)間:
2019-1-21 10:14
謝謝分享
作者:
zhut290948199
時(shí)間:
2019-2-7 09:27
謝謝分享完整程序包好像沒(méi)有上傳上來(lái)哦
作者:
yoxi
時(shí)間:
2019-2-11 13:13
己經(jīng)很好了,LCD那些真不用別人傳了
作者:
站著說(shuō)話不腰疼
時(shí)間:
2019-2-11 16:19
這里有很好的案例,你們卻還在這兒糾結(jié)
http://m.raoushi.com/bbs/dpj-150435-1.html
作者:
chenwg
時(shí)間:
2019-5-31 20:57
謝謝分享
作者:
chenwg
時(shí)間:
2019-5-31 20:58
辛苦了 ,感謝分享!
作者:
unknown379
時(shí)間:
2019-6-1 10:25
這個(gè)非常有啟發(fā)。正在考慮多級(jí)菜單應(yīng)該怎么組織比較清爽呢。
作者:
pwj010
時(shí)間:
2019-6-1 13:52
用數(shù)組實(shí)現(xiàn)的話會(huì)不會(huì)太大了啊。。
作者:
yf158288464
時(shí)間:
2019-6-6 07:51
學(xué)習(xí)下啦
作者:
hilam
時(shí)間:
2019-8-7 15:11
這個(gè)帖子沒(méi)了,誰(shuí)幫忙上傳一下,謝謝!
34樓說(shuō)的這里有很好的案例,你們卻還在這兒糾結(jié)
http://m.raoushi.com/bbs/dpj-150435-1.html
作者:
shuiquan3
時(shí)間:
2019-8-17 18:17
下載,學(xué)習(xí)
作者:
shuiquan3
時(shí)間:
2019-8-17 18:18
謝謝分享完整程序
作者:
chulailiuda
時(shí)間:
2019-10-2 17:52
樓主辛苦了 ,感謝分享!
作者:
ygflsa
時(shí)間:
2019-11-13 19:02
當(dāng)前索引號(hào)怎么調(diào)用真是搞不懂.望大神指點(diǎn).謝了!
作者:
ygflsa
時(shí)間:
2019-11-26 16:21
終于搞懂了.
作者:
nicejack
時(shí)間:
2020-1-28 16:17
有完整代碼
作者:
xinbibo
時(shí)間:
2020-2-2 15:24
特別期待啊
作者:
univers
時(shí)間:
2020-2-3 20:59
看不懂
作者:
zhouhai521
時(shí)間:
2020-10-24 10:43
謝謝樓主分享經(jīng)驗(yàn)
作者:
0711zhao
時(shí)間:
2020-11-17 14:12
沒(méi)有源碼啊
作者:
timeabcd
時(shí)間:
2020-11-23 09:37
太復(fù)雜,搞懂需要點(diǎn)時(shí)間了!
作者:
jovew
時(shí)間:
2020-11-23 11:29
程序包沒(méi)有上傳,請(qǐng)上傳上來(lái)啊!!!
作者:
ttianmei
時(shí)間:
2021-6-14 18:26
這個(gè)貌似不好實(shí)現(xiàn)參數(shù)修改啊,菜單不能只做演示吧,
作者:
ttianmei
時(shí)間:
2021-6-15 16:53
稍作調(diào)整也是可以進(jìn)行修改參數(shù)的,進(jìn)入最后一級(jí)菜單后按up或down鍵讓頁(yè)面跳轉(zhuǎn)本頁(yè)面,然后通過(guò)索引值去修改指定的參數(shù)值,刷新顯示就可以
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1