久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2242|回復: 0
打印 上一主題 下一主題
收起左側

msp430 三級菜單程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:109048 發表于 2016-3-15 17:16 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
uchar welcome_tab1[] = {"系統初始化中"};
uchar welcome_tab2[] = {"請稍等..."};
uchar tab3[] = {"處理中..."};

struct menu{
  unsigned char menucount;   //當前層節點數
  unsigned char *str; //菜單標題
  unsigned char pos;
  unsigned char length;
  void (*subs)();     //節點函數
  struct menu *childrenmenu; //子節點
  struct menu *parentmenu;   //父節點
};

struct menu1{
  unsigned char *str1;
  unsigned char pos1;
  unsigned char length1;
};

//************************************空函數************************************
//函數名稱:    nullsubs
//函數說明:    無
//入口參數:    無
//出口參數:    無
//******************************************************************************
void nullsubs(void)
{
}
//******************************************************************************


//***********************************待處理函數*********************************
//函數名稱:    aa
//函數說明:    實際中要替換為具體函數原型,這里只是舉例說明
//入口參數:    無
//出口參數:    無
//******************************************************************************
void aa(void)
{
  clrram();
  wch_disp(tab3,0x91,5);
  long_delay(10000);
}
//******************************************************************************

//******************************菜單顯示內容************************************
//說明:    結構體中放的是菜單的顯示內容等參數,完成菜單功能變換,菜單返回
//          菜單指針函數、可以指向下一級菜單,也可以指向某一項選項的功能
//          實際中可以根據具體內容變換。是程序的關鍵之一。
//******************************************************************************
struct menu1 menu2[5][4] = {
  {
  {"系┃",0x80,2},
  {"統┃",0x90,2},
  {"設┃",0x88,2},
  {"置┃",0x98,2}
  },

  {
  {"時┃",0x80,2},
  {"間┃",0x90,2},
  {"設┃",0x88,2},
  {"置┃",0x98,2}
  },

  {
  {"日┃",0x80,2},
  {"期┃",0x90,2},
  {"設┃",0x88,2},
  {"置┃",0x98,2}
  },

  {
  {"背┃",0x80,2},
  {"光┃",0x90,2},
  {"設┃",0x88,2},
  {"置┃",0x98,2}
  },

  {
  {"其┃",0x80,2},
  {"它┃",0x90,2},
  {"設┃",0x88,2},
  {"置┃",0x98,2}
  }
};

struct menu main_menu[5];
struct menu time_menu[4];
struct menu date_menu[5];
struct menu backlight_menu[3];
struct menu other_menu[3];

struct menu main_menu[5] = {
  {5,"1.時間設置",0x82,5,nullsubs,time_menu,Null},
  {5,"2.日期設置",0x92,5,nullsubs,date_menu,Null},
  {5,"3.背光設置",0x8a,5,nullsubs,backlight_menu,Null},
  {5,"4.其它設置",0x9a,5,nullsubs,other_menu,Null},
  {5,"5.返回",0x82,3,nullsubs,main_menu,main_menu}
};

struct menu time_menu[4] = {
  {4,"1.時區設置",0x82,5,aa,Null,main_menu},
  {4,"2.小時設置",0x92,5,aa,Null,main_menu},
  {4,"3.分鐘設置",0x8a,5,aa,Null,main_menu},
  {4,"4.返回",0x9a,3,nullsubs,main_menu,main_menu}
};

struct menu date_menu[5] = {
  {5,"1.年份設置",0x82,5,aa,Null,main_menu},
  {5,"2.月份設置",0x92,5,aa,Null,main_menu},
  {5,"3.日期設置",0x8a,5,aa,Null,main_menu},
  {5,"4.星期設置",0x9a,5,aa,Null,main_menu},
  {5,"5.返回",0x82,3,nullsubs,main_menu,main_menu}
};

struct menu backlight_menu[3] = {
  {3,"1.背光變亮",0x82,5,aa,Null,main_menu},
  {3,"2.背光變暗",0x92,5,aa,Null,main_menu},
  {3,"3.返回",0x8a,3,nullsubs,main_menu,main_menu}
};

struct menu other_menu[3] = {
  {3,"1.通信設置",0x82,5,aa,Null,main_menu},
  {3,"2.PC通信",0x92,4,aa,Null,main_menu},
  {3,"3.返回",0x8a,3,nullsubs,main_menu,main_menu}
};
//******************************************************************************

//************************************全局變量**********************************
struct menu (*menupoint) = main_menu;  //結構體指針,指向結構體后由內部函數指針指向功能函數
unsigned char displaystart = 0; //顯示時的第一個菜單項
unsigned char userchoose = 0;   //用戶所選菜單項
unsigned char displaypoint = 0; //顯示指針
unsigned char maxitems;         //同級最大菜單數
unsigned char key;
//******************************************************************************

void init_clk(void)
{
  uchar i;
  BCSCTL1 &= ~XT2OFF;                   // XT2 = HF XTAL

  do
  {
  IFG1 &= ~OFIFG;                       // Clear OSCFault flag
  for (i = 0xFF; i > 0; i--);           // Time for flag to set
  }
  while ((IFG1 & OFIFG) != 0);          // OSCFault flag still set?               

  BCSCTL2 |= SELM1;                     // MCLK = XT2 (safe)
}

//************************************菜單顯示**********************************
//函數名稱:    void menu_disp(uchar n)
//函數說明:    顯示主菜單
//入口參數:    uint n,要顯示的菜單級數號碼
//出口參數:    無
//******************************************************************************
void menu_disp(void)
{
  uchar i;
  clrram();
  maxitems = menupoint[0].menucount;
  if(userchoose < 4 && maxitems < 5)
  {
    for(i = 0 ;i < maxitems;i++)
    {
      wch_disp(menupoint[i].str,menupoint[i].pos,menupoint[i].length);
    }
  }
  else if(userchoose < 4 && maxitems >= 5)
  {
    for(i = 0;i < 4;i++)
    {
      wch_disp(menupoint[i].str,menupoint[i].pos,menupoint[i].length);
    }
  }
  else if(userchoose >= 4)
  {
    clrram();
    clrram();
    for(i = 0; i < maxitems - 4;i ++)
    {
      wch_disp(menupoint[i + 4].str,menupoint[i + 4].pos,menupoint[i + 4].length);
    }
  }
  if(menupoint == main_menu)
  {
    for(i = 0; i < 4;i ++)
    {
      wch_disp(menu2[0][i].str1,menu2[0][i].pos1,menu2[0][i].length1);
    }
  }
  else if(menupoint == time_menu)
  {
    for(i = 0; i < 4;i ++)
    {
      wch_disp(menu2[1][i].str1,menu2[1][i].pos1,menu2[1][i].length1);
    }
  }
  else if(menupoint == date_menu)
  {
    for(i = 0; i < 4;i ++)
    {
      wch_disp(menu2[2][i].str1,menu2[2][i].pos1,menu2[2][i].length1);
    }
  }
  else if(menupoint == backlight_menu)
  {
    for(i = 0; i < 4;i ++)
    {
      wch_disp(menu2[3][i].str1,menu2[3][i].pos1,menu2[3][i].length1);
    }
  }
  else if(menupoint == other_menu)
  {
    for(i = 0; i < 4;i ++)
    {
      wch_disp(menu2[4][i].str1,menu2[4][i].pos1,menu2[4][i].length1);
    }
  }
  con_wch_disp(menupoint[userchoose].pos,menupoint[userchoose].length);
}
//******************************************************************************

//************************************鍵盤處理**********************************
//函數名稱:    key_process
//函數說明:    鍵盤處理
//入口參數:    無
//出口參數:    無
//******************************************************************************
void key_process(void)
{
  switch(P1IN & 0x0f)
  {
  case 0x01 :
    key = DOWN;
    break;
  case 0x02 :
    key = UP;
    break;
  case 0x04 :
    key = ENTER;
    break;
  case 0x08 :
    key = ESC;
    break;
  default :
    break;
  }
  while(P1IN & 0x0f);
  P1IFG &= 0x00;
}
//******************************************************************************

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;
  P1IE = 0X0f;
  _EINT();
  init_clk();
  init_lcdport();
  init_lcd();
  img_disp(tab32);
  long_delay(20000);
  clrram();
  wch_disp(welcome_tab1,0x91,6);
  wch_disp(welcome_tab2,0x8a,5);
  long_delay(20000);
  clrram();
  menu_disp();
  while(1);
}

//***********************************中斷處理函數*******************************
//函數名稱:    p1
//函數說明:    完成鍵盤鍵值處理,菜單變換,屏幕刷新等功能,是程序的關鍵之一
//入口參數:    無
//出口參數:    無
//******************************************************************************
#pragma vector = PORT1_VECTOR
__interrupt void p1(void)
{
  key_process();
  if(key)
  {
    switch(key)
    {
    case DOWN :
      userchoose++;
      if(userchoose == maxitems)
      {
        userchoose = 0;
      }
      break;
    case UP :
      userchoose--;
      if(userchoose == 255)
      {
        userchoose = maxitems - 1;
      }
      break;
    case ENTER :
      if(menupoint[userchoose].subs != nullsubs)
      {
        (*menupoint[userchoose].subs)();
      }
      else if(menupoint[userchoose].childrenmenu != Null)
      {
        menupoint = menupoint[userchoose].childrenmenu;
        userchoose = 0;
        displaystart = 0;
      }
      break;
    case ESC :
      if(menupoint[userchoose].parentmenu != Null)
      {
        menupoint = menupoint[userchoose].parentmenu;
        userchoose = 0;
        displaystart = 0;
      }
      break;
    }
    menu_disp();
  }
}

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 做a网站 | 琪琪午夜伦伦电影福利片 | 一区二区三区精品 | 九九热热九九 | 国产精品亚洲成在人线 | 日韩一区二区三区在线视频 | 国产精品成人一区二区三区 | 伊人在线 | 国产三级国产精品 | 国产中文字幕在线观看 | 久久久久久网站 | 日日人人| 天天艹逼网 | 日韩欧美精品一区 | 国产一区久久 | 久久久精品网 | 精品99在线 | 91久久精品日日躁夜夜躁欧美 | 337p日韩| 在线观看国产精品一区二区 | 免费在线性爱视频 | 91国在线高清视频 | 91一区二区在线观看 | 亚洲在线| 久久精品视频在线观看 | 久久久久久女 | 国产午夜精品一区二区三区嫩草 | 逼逼网| 欧美日批 | 亚洲精品成人在线 | 国产精品国产精品国产专区不卡 | 在线国产视频观看 | 一区二区精品视频 | 亚洲狠狠丁香婷婷综合久久久 | www国产成人免费观看视频,深夜成人网 | 三级视频在线观看 | 欧美精品乱码久久久久久按摩 | 欧美一区成人 | 色精品 | 成人精品一区二区三区 | 国产偷自视频区视频 |