一个菜单,我感觉就是利用按键选择不同功能 每一个操作 代表一个界面 你想有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