📄 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 + -