📄 menu.c
字号:
/*--------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------*/
#include "includes.h"
/*-------------------------------------------------------------------------------------------------------------
变量
-------------------------------------------------------------------------------------------------------------*/
MENU *MenuCur;
const char PointCur[]={0x10,0x20};
const char PointPre[]={0x18,0x20};
const char PointNxt[]={0x19,0x20};
const char PointNull[14]={0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20};
const char Symbol[]="- ";
/*-------------------------------------------------------------------------------------------------------------
功能:显示当前选项以及其上下的各一个选项
入口:
出口:
-------------------------------------------------------------------------------------------------------------*/
void MenuDisp()
{
FYDPutWord(0x88,(char *)PointCur);
FYDPutWords(0x89,6,MenuCur->name);
if(MenuCur->pre==NULL) FYDPutWords(0x91,7,(char *)PointNull);
else
{
FYDPutWords(0x91,6,((MENU *)(MenuCur->pre))->name);
if(((MENU *)(((MENU *)(MenuCur->pre))->pre))==NULL) FYDPutWord(0x97,(char *)PointNull);
else FYDPutWord(0x97,(char *)PointPre);
}
if(MenuCur->nxt==NULL) FYDPutWords(0x99,7,(char *)PointNull);
else
{
FYDPutWords(0x99,6,((MENU *)(MenuCur->nxt))->name);
if(((MENU *)(((MENU *)(MenuCur->nxt))->nxt))==NULL) FYDPutWord(0x9F,(char *)PointNull);
else FYDPutWord(0x9F,(char *)PointNxt);
}
}
/*-------------------------------------------------------------------------------------------------------------
功能:进入下级菜单或调用并调用函数
-------------------------------------------------------------------------------------------------------------*/
void MenuSub()
{
if(MenuCur->sub!=NULL)
{
MenuCur=MenuCur->sub;
MenuDisp();
if(MenuCur->fun!=NULL) (MenuCur->fun)();
}
}
/*-------------------------------------------------------------------------------------------------------------
功能:进入下级菜单或调用并调用函数
-------------------------------------------------------------------------------------------------------------*/
void MenuFar()
{
if(MenuCur->far!=NULL)
{
MenuCur=MenuCur->far;
MenuDisp();
}
}
/*-------------------------------------------------------------------------------------------------------------
功能:进入下级菜单或调用并调用函数
-------------------------------------------------------------------------------------------------------------*/
void MenuNxt()
{
if(MenuCur->nxt!=NULL)
{
MenuCur=MenuCur->nxt;
MenuDisp();
}
}
/*-------------------------------------------------------------------------------------------------------------
功能:进入下级菜单或调用并调用函数
-------------------------------------------------------------------------------------------------------------*/
void MenuPre()
{
if(MenuCur->pre!=NULL)
{
MenuCur=MenuCur->pre;
MenuDisp();
}
}
/*-------------------------------------------------------------------------------------------------------------
功能:通过键盘按十进制位输入一个有符32位数
入口:numinit显示的初始值。输入数据时在液晶上显示首地址为0x90,显示需要占6x2个中文字符的位置
出口:与显示结果对应的有符32位数
-------------------------------------------------------------------------------------------------------------*/
signed long int MenuGetLon(signed long int numinit)
{
signed long int exp=1000000000;
char num32s[11];
char key,temp[2],n;
char point=9;
char place;
place=0x90;
if(numinit<0) //判断符号
{
FYDPutWord(place,(char *)Symbol);
num32s[10]=1;
}
else
{
FYDPutWord(place++,(char *)&Symbol[1]);
num32s[10]=0;
}
num32s[9]=numinit/exp; //显示数字位
temp[0]=num32s[9]+0x30;
num32s[8]=numinit%exp/(exp/10);
temp[1]=num32s[8]+0x30;
exp/=10;
FYDPutWord(place++,temp);
for(n=3;n<4;n--)
{
num32s[n*2+1]=numinit%exp/(exp/10);
temp[0]=num32s[n*2+1]+0x30;
exp/=10;
num32s[n*2]=numinit%exp/(exp/10);
temp[1]=num32s[n*2]+0x30;
exp/=10;
FYDPutWord(place++,temp);
}
place=0x89; //显示当前编辑的位
for(n=4;n<5;n--)
{
if(n*2==point) temp[1]=0x18;
else temp[1]=0x20;
if(n*2+1==point) temp[0]=0x18;
else temp[0]=0x20;
FYDPutWord(place++,temp);
}
while(1)
{
while(!KeyBuf);
key=KeyBuf;
KeyBuf=0;
if(key==253) //左
{
if(point==9) point=0;
else point++;
place=0x89; //显示当前编辑的位
for(n=4;n<5;n--)
{
if(n*2==point) temp[1]=0x18;
else temp[1]=0x20;
if(n*2+1==point) temp[0]=0x18;
else temp[0]=0x20;
FYDPutWord(place++,temp);
}
}
else if(key==237) //右
{
if(point==0) point=9;
else point--;
place=0x89; //显示当前编辑的位
for(n=4;n<5;n--)
{
if(n*2==point) temp[1]=0x18;
else temp[1]=0x20;
if(n*2+1==point) temp[0]=0x18;
else temp[0]=0x20;
FYDPutWord(place++,temp);
}
}
else if(key==168) //-
{
num32s[10]=!num32s[10];
if(num32s[10]) FYDPutWord(0x90,(char *)Symbol);
else FYDPutWord(0x90,(char *)&Symbol[1]);
}
else if(key==157) //OK
{
break;
}
else
{
if(key==173) //上
{
if(num32s[point]==9) num32s[point]=0;
else num32s[point]++;
}
else if(key==189) //下
{
if(num32s[point]==0) num32s[point]=9;
else num32s[point]--;
}
else if(key==192) //1
{
num32s[point]=1;
}
else if(key==160) //2
{
num32s[point]=2;
}
else if(key==224) //3
{
num32s[point]=3;
}
else if(key==144) //4
{
num32s[point]=4;
}
else if(key==208) //5
{
num32s[point]=5;
}
else if(key==176) //6
{
num32s[point]=6;
}
else if(key==240) //7
{
num32s[point]=7;
}
else if(key==136) //8
{
num32s[point]=8;
}
else if(key==200) //9
{
num32s[point]=9;
}
else if(key==128) //0
{
num32s[point]=0;
}
if(point%2)
{
temp[0]=num32s[point]+0x30;
temp[1]=num32s[point-1]+0x30;
}
else
{
temp[0]=num32s[point+1]+0x30;
temp[1]=num32s[point]+0x30;
}
FYDPutWord(0x95-point/2,temp);
}
}
exp=1;
numinit=0;
for(n=0;n<10;n++)
{
numinit+=num32s[n]*exp;
exp*=10;
}
if(num32s[10]) numinit=0-numinit;
place=0x89;
for(n=4;n<5;n--)
{
temp[1]=0x20;
temp[0]=0x20;
FYDPutWord(place++,temp);
}
return(numinit);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -