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

📄 menudrv.c

📁 刚做完的lcd12864 全中文多级菜单驱动程序.自认为通用性很好.在wave下编译通过.
💻 C
字号:
#include "menudrv.h"
extern void functest();
const menu code menu_table[] = {
     {"",null,0,0,0,0},//定义一个不存在的菜单
     {"文件",null,0,2,0,7},//1
     {"编辑",null,1,3,0,0},//2
     {"搜索",null,2,4,0,0},//3
     {"项目",null,3,5,0,0},//4
     {"执行",null,4,6,0,0},//5
     {"窗口",null,5,0,0,0},//6
     {"打开",null,0,8,1,0},//7
     {"关闭",functest,7,0,1,0},//8
};

unsigned char curr_pos;//光标位置行号
unsigned char curr_menu_id;//当前菜单下标

void menu_esc()//上一级 ,退出
{
 if(menu_table[curr_menu_id].up != 0){
     cls();
     view_menu(menu_table[curr_menu_id].up);
 }//退出菜单的处理
}
void menu_ok()//确定
{//有下一级菜单
 if(menu_table[curr_menu_id].down != 0){
     cls();
     view_menu(menu_table[curr_menu_id].down);
     return;
 }
 //有操作函数
 if(menu_table[curr_menu_id].oper != null){
     menu_table[curr_menu_id].oper();
     return;
 }
}
void view_menu(unsigned char i)//显示菜单
{
  menu *p;

  curr_pos = 0;
  curr_menu_id = i;
  p = &menu_table[i];
  for(i = 0;i < 4;i++){
      location(0,i);
      print(p->str);
      if(p->next == 0) break;
      p = &menu_table[p->next];
  }
  inv_line(curr_pos,0xff);
}
void menu_up()//上一条
{
 unsigned char p;
 unsigned char i;

 p = curr_menu_id;
 if(menu_table[p].prv == 0) return;//没上一条的情况

 if(curr_pos != 0){//当前光标不在最上
      inv_line(curr_pos,0x00);
      curr_pos--;
      inv_line(curr_pos,0xff);
      curr_menu_id = menu_table[p].prv;
 }else{
       //当前光标在最上,再写菜单项
       curr_menu_id = menu_table[p].prv;
       p = curr_menu_id;
       for(i = 0;i < 4;i++){
             location(0,i);
             print(menu_table[p].str);
             if(menu_table[p].next == 0) break;
             p = menu_table[p].next;
       }
 }
}
void menu_down()//下一条
{
 unsigned char p;
 unsigned char i;

 p = curr_menu_id;
 if(menu_table[p].next == 0) return;//没下一条的情况

 if(curr_pos != 3){//当前光标不在最下
      inv_line(curr_pos,0x00);
      curr_pos++;
      inv_line(curr_pos,0xff);
      curr_menu_id = menu_table[p].next;
 }else{
       //当前光标在最下,再写菜单项
       curr_menu_id = menu_table[p].next;
       p = menu_table[p].prv;
       p = menu_table[p].prv;
       for(i = 0;i < 4;i++){
             location(0,i);
             print(menu_table[p].str);
             if(menu_table[p].next == 0) break;
             p = menu_table[p].next;
       }
 }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -