?? lcd_menu.c
字號:
///////////菜單顯示,鍵盤輸入例程////////////////
///////////lcd_menu.c////////////////////////////
#include "lcd.h"
#include "stdio.h"
#define SUB_MENU_NUM 3
#define MAIN_MENU_NUM 5
code uchar mainmenu[MAIN_MENU_NUM][16] ={"target1","sub_menu_demo","get int from key","get float key","show key data"};
code uchar submenu0[SUB_MENU_NUM][16]={"submenu1","submenu2","submenu3"};
extern bit isline0;
xdata int intnumber;
xdata float floatnumber;
void get_int_number();
void showkeydata();
void target1();
void sub_target1();
void sub_target1();
void sub_target3();
void sub_menu_demo();
void config (void) ;
void get_int_number(){//從鍵盤獲取int型數據,并將之存入intnumber全局變量中
showline("entry",0);//利用筆者自定義函數實現顯示
while(scankey()==2);
intnumber=getint();//獲取int型數據
showline("number has saved",0);
while(scankey()==2);
}
void get_float_number(){//從鍵盤獲取float型數據,并將之存入floatnumber全局變量中
showline("entry",0);
while(scankey()==2);
floatnumber=getfloat();//獲取float型數據
showline("number has saved",0);
while(scankey()==2);
}
void showkeydata(){//顯示intnumber數據
showline("entry",0);
while(scankey()==2);
isline0=1;//將顯示行控制到第一行
printf("\nkey_int=%d",intnumber);//顯示于第一行,利用庫函數實現顯示
printf("\nfloat=%.4f",floatnumber);//顯示于第二行
delay1ms(3000);
}
void target1(){//任務1,顯示浮點數,事實上是顯示長整型數,并將小數點移位
showline("entry",0);
while(scankey()==2);
showpage("show float",0);
showf(intnumber,3,1);//小數點左移3位,即顯示數據帶3位小數
delay1ms(3000);
}
void sub_target1(){//子任務1,調用showpage函數一次性顯示兩行內容
showpage("sub_target1 start...","^_^");
delay1ms(2000);
}
void sub_target2(){//子任務2,調用showline函數單行顯示
showline("sub_target2 start...",0);//在第一行顯示內容
showline("hello world",1);//在第二行顯示內容
delay1ms(2000);
}
void sub_target3(){//子任務3
int t=-346;
showline("sub_target3 start...",0);//第一行顯示字符串
showint(t,1);//第二行顯示int型數據(負數)
delay1ms(2000);
}
void sub_menu_demo(){//二級菜單
xdata uchar submenu;
showline("entry",0);
while(scankey()==2);
while(1){
submenu=menu_sec("SUB_MENU ",submenu0,SUB_MENU_NUM);
if(submenu==0){
showline("entry_M1",0);
while(scankey()==2);
sub_target1();
goto sub_end;
}
if(submenu==1){
showline("entry_M2",0);
while(scankey()==2);
sub_target2();
goto sub_end;
}
if(submenu==2){
showline("entry_M3",0);
while(scankey()==2);
sub_target3();
goto sub_end;
}
}
sub_end:;
}
void config (void) {
//看門狗禁止
WDTCN = 0x07;
WDTCN = 0xDE;
WDTCN = 0xAD;
SFRPAGE = 0x0F;
XBR0 = 0x00;
XBR1 = 0x00;
XBR2 = 0x40; //交叉開關使能,使得P0-P3口能輸出
XBR3 = 0x00;
SFRPAGE = 0x0F;
P0MDOUT = 0x00; //端口配置,P0-P3,P6-P7口為開漏輸出
P1MDOUT = 0x00;
P2MDOUT = 0x00;
P3MDOUT = 0x00;
P4MDOUT = 0x00; //P4口為開漏,也可推挽
P5MDOUT = 0x07;
P6MDOUT = 0x00;
P7MDOUT = 0x00;
P1MDIN = 0xFF; //所有端口為數字輸入,沒有模擬輸入端口
P2MDIN = 0xFF;
P3MDIN = 0xFF;
SFRPAGE = 0x0F;
CLKSEL = 0x00;
OSCXCN = 0x00;
OSCICN = 0x84;
//采用內部晶振,為24.5MHZ8分頻
}
main(){
xdata uchar menuval;
config();
dispini();
for(;;){//按左右翻頁鍵選擇菜單,按確認鍵進入菜單調用相應函數
menuval=menu_sec("MAIN_MENU ",mainmenu,MAIN_MENU_NUM);//主菜單
if(menuval==0){
target1();
}
if(menuval==1){
sub_menu_demo();//進入二級菜單
}
if(menuval==2){
get_int_number();//從鍵盤輸入數據
}
if(menuval==3){
get_float_number();//從鍵盤輸入數據
}
if(menuval==4){
showkeydata();//顯示鍵盤所輸入的數據
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -