一个菜单,我感觉就是利用按键选择不同功能 每一个操作 代表一个界面 你想有10个操作 就弄出10个界面
首先一个结构体
struct caidan { uint8 current;//当前 uint16 up;//上 uint16 down;//下 uint16 enter;//确认 uint16 back; } ope[20]={ {0,5,1,9,0},//界面1,第一页‘TEL’ game mes uc {1,0,2,6,1},//界面1 TEL ‘game’ MES UC {2,1,3,12,2},//界面1 TEL game 'mes' uc {3,2,4,8,3},//界面1 TEL game mes ‘uc’ {4,3,5,4,4},//界面1 第二页 ‘QQ’ WX {5,4,0,5,5},//界面1 QQ 'WX' {6,4,7,11,1},//界面2 游戏界面 'TCS' TET {7,6,6,10,1},//界面2 TCS 'TET' {8,8,8,8,3},//时钟 {9,9,9,11,0},//电话号 {10,10,10,10,7},//21点小游戏 {11,11,11,11,6},//贪吃蛇游戏 {12,12,12,12,2}//温度 };
uint8 function=0;
function代表当前选择的界面所对应的函数序号
假如你选择了0界面,用case0对应fun(0)
keyup=gpio_get(A6); keydown=gpio_get(A7); enter=gpio_get(A12); back=gpio_get(A13); if( (keyup==0) || (keydown==0) ||(enter==0)||(back==0)) { DelayMs(2);//消抖 if(gpio_get(A6)==0) //up { function=ope[function].up; while( !(gpio_get(A6)) );//松手 } if(gpio_get(A7)==0) //down { function=ope[function].down; while( !(gpio_get(A7)) ); } if(gpio_get(A12)==0) //确认 { function=ope[function].enter; while(!(gpio_get(A12))); } if(gpio_get(A13)==0 ) //back { function=ope[function].back; while(!(gpio_get(A13))); } }
之后的case语句
switch(function) { case(0): fun1(); break; case(1): fun2(); break; case(2): fun3(); break; case(3): fun4(); break; case(4): fun5(); break; case(5): fun6(); break; case(6): fun7(); break; case(7): fun8(); break; case(8): fun9(); break; case(9): fun10();break; case(10):fun112();break; case(11):fun111();break; case(12):fun333();break; default : fun1(); break; }
这句很重要 防止界面刷新 只有你按下下一个按键才会刷新
while( (gpio_get(A6)) && (gpio_get(A7)) &&(gpio_get(A12)) &&(gpio_get(A13)) );
来源:https://www.cnblogs.com/jizhaoyang/p/11156063.html