⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menu.c

📁 一个基于AD9954的430单片机编程
💻 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 + -