標題:
單片機多級菜單及按鍵參數(shù)設(shè)置的架構(gòu) 求分享
[打印本頁]
作者:
pengyongnet
時間:
2018-6-22 08:32
標題:
單片機多級菜單及按鍵參數(shù)設(shè)置的架構(gòu) 求分享
單片機多級菜單及按鍵參數(shù)設(shè)置的架構(gòu),希望分享下
作者:
liujp327
時間:
2019-10-16 23:36
同樣在找
作者:
那個誰和誰
時間:
2019-10-17 09:41
我前段時候剛做了個菜單,用OLED屏顯示,挺好用的。
//按鍵處理函數(shù)
//返回按鍵值
//mode:0,不支持連續(xù)按;1,支持連續(xù)按;
//0,沒有任何按鍵按下
u8 KEY_Scan(u8 mode)
{
static u8 key_up=1;//按鍵標志
if(mode)key_up=1; //支持連按
//檢測按鍵是否按下
if(key_up&&(Upper_KEY==0||Left_KEY==0||Right_KEY==0||Lower_KEY==0||Determine_KEY==0||Return_KEY==0))
{
delay_ms(20);//去抖動
if(key_up&&(Upper_KEY==0||Left_KEY==0||Right_KEY==0||Lower_KEY==0||Determine_KEY==0||Return_KEY==0))
{
key_up=0;
if(Upper_KEY == 0) return Upper;
else if(Left_KEY == 0) return Left;
else if(Right_KEY == 0) return Right;
else if(Lower_KEY == 0) return Lower;
else if(Determine_KEY == 0) return Determine;
else if(Return_KEY == 0) return Return;
}
}
//檢測按鍵是否松開
else if(Upper_KEY==1 && Left_KEY==1 && Right_KEY==1 && Lower_KEY==1 && Determine_KEY==1 && Return_KEY==1)
key_up=1; return 0;//無按鍵按下
}
// IIC協(xié)議 OLED屏 人機界面
void lnterface(void) //人機界面
{
switch(Page_Sgin)
{
case 0:
Main_Menu(); break;
case 2:
Menu_2(); break;
case 3:
Menu_3();break;
default : break;
}
}
//主菜單
void Main_Menu(void)
{
OLED_P16x16Ch(0*16,6,11); //顯示 //菜
OLED_P16x16Ch(1*16,6,12); //顯示 //單
OLED_P16x16Ch(6*16,6,13); //顯示 //退
OLED_P16x16Ch(7*16,6,14); //顯示 //出
if(KEY_Scan(Key_Selection)==Determine)//判斷是否按下確定按鍵
{
Page_Sgin=2; //頁面選擇置2
OLED_Clear();
}
}
void Menu_2(void)
{
if(Choice==2||Choice==4||Choice==6)
{
OLED_P16x16Ch(0*16,Choice,44); //選擇
Display(0,0,0);
switch(KEY_Scan(Key_Selection))
{
case Superior_Choice: //上翻
OLED_P16x16Ch(0*16,Choice,37);
Choice-=2;
break;
case Subordinate_Choice: //下翻
OLED_P16x16Ch(0*16,Choice,37);
Choice+=2;
break;
case Determine_Choice: //確定
Page_Sgin=3;Choice=2;
OLED_Clear();
break;
case Return_Choice: //返回
Page_Sgin=0;
break;
default :
break;
}
}
else if(Choice>6)Choice=2;
else if(Choice<2)Choice=6;
}
void Menu_3(void)
{
if(Choice==2||Choice==4||Choice==6)
{
OLED_P16x16Ch(0*16,Choice,44); //選擇
Display(0,0,0);
switch(KEY_Scan(Key_Selection))
{
case Superior_Choice: //上翻
OLED_P16x16Ch(0*16,Choice,37);
Choice-=2;
break;
case Subordinate_Choice: //下翻
OLED_P16x16Ch(0*16,Choice,37);
Choice+=2;
break;
case Determine_Choice: //確定
Page_Sgin=3;Choice=2;
break;
case Return_Choice: //返回
Page_Sgin=2;Choice=2;
break;
default :
break;
}
}
else if(Choice>6)Choice=2;
else if(Choice<2)Choice=6;
}
int main(void)
{
delay_init();
uart_init(9600);
LED_Init();
KEY_Init();
while(1)
{
lnterface();
}
}
就是這么個意思,在主函數(shù)里掃描switch(Page_Sgin),按確定鍵時跳轉(zhuǎn)到想進的下一級菜單,比如該例子,首先剛開始程序位于主菜單,按確定鍵,Page_Sgin=2;進入2級菜單。再2級菜單里比如Page_Sgin=4;進入2級菜單的子菜單,按返回鍵返回想要到的上一級菜單。這個程序很好用,我也是找了很久才發(fā)現(xiàn)的,這個理解起來最簡單。
作者:
pengyongnet
時間:
2019-11-9 21:11
謝謝哥們分享不錯
作者:
csmyldl
時間:
2019-11-9 21:46
用狀態(tài)設(shè)置各級菜單,完成一個顯示后通過某種邏輯改變至另是種狀態(tài)就實現(xiàn)了
作者:
dhbt2021
時間:
2022-2-3 20:49
怎么完成參數(shù)加減?
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1