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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1803|回復: 0
收起左側

LCD12864多級菜單設計

[復制鏈接]
ID:521630 發表于 2020-10-2 19:13 | 顯示全部樓層 |閱讀模式
#include "menu1.h"
#include "stm32f10x.h"
#include "12864.h"
#include "systick.h"
#include <stdio.h>
#include <stdlib.h>
#include "key4x4.h"
#include "public.h"


/*菜單結構體*/
typedef struct menu
{
u8 range_from,range_to; //當前選擇的項開始及結束符號
u8 itemCount;//項目總數
u8 selected;//當前選擇項
u8 *menuItems[17];//菜單項目
struct menu **subMenus;//子菜單
struct menu *parent;//上級菜單,若是主菜單則為null
void (**func)();//選擇相應按鍵后執行的函數


}Menu;




Menu MainMenu1 = {
0,3,4,0,                                                //默認顯示0-3項,總共4項,當前選擇0項,
  {
  "dis1           \x10",//"\x10"表示一個小箭頭
  "dis2           \x10",
  "dis3           \x10",
  "dis4           \x10",
  }
};


Menu dis1Menu = {
0,3,4,0,                                                //默認顯示0-3項,總共4項,當前選擇0項,
  {
  "secondline1    \x10",//"\x10"表示一個小箭頭
  "secondline2    \x10",
  "secondline3        ",
  "secondline4    \x10",
  }
};
Menu dis2Menu = {
0,3,4,0,                                                //默認顯示0-3項,總共4項,當前選擇0項,
  {
  "secondline1    \x10",//"\x10"表示一個小箭頭
  "secondline2    \x10",
  "secondline3        ",
  "secondline4    \x10",
  }
};




Menu *currentMenu;//當前菜單
/*用于顯示菜單*/
void displaymenu(u8 line)
{
        int i;
        line = 3-(currentMenu->range_to-line);
        /*4次循環打印菜單*/
        for(i = 0;i<4;i++)
                Display_LCD_String(i,currentMenu->menuItems[i+currentMenu->range_from],5);
        con_disp(line,1);
       
}
void func(void)
{
       
}


void initmenu(void)
{
        currentMenu = &MainMenu1;
       
        MainMenu1.subMenus = malloc(sizeof(&MainMenu1)*4);
        MainMenu1.subMenus[0] = &dis1Menu;
        MainMenu1.subMenus[1] = &dis2Menu;
        MainMenu1.subMenus[2] = NULL;
        MainMenu1.subMenus[3] = NULL;
       
        MainMenu1.func = malloc(sizeof(&func)*4);
        MainMenu1.func[0] = NULL;
        MainMenu1.func[1] = NULL;
        MainMenu1.func[2] = NULL;
        MainMenu1.func[3] = NULL;
       
        MainMenu1.parent = NULL;//mainmenu is top menu
       
        dis1Menu.subMenus = malloc(sizeof(&dis1Menu)*4);
        dis1Menu.subMenus[0] = NULL;
        dis1Menu.subMenus[1] = NULL;
        dis1Menu.subMenus[2] = NULL;
        dis1Menu.subMenus[3] = NULL;
       
        dis1Menu.func = malloc(sizeof(&func)*4);
        dis1Menu.func[0] = NULL;
        dis1Menu.func[1] = NULL;
        dis1Menu.func[2] = NULL;
        dis1Menu.func[3] = NULL;
       
        dis1Menu.parent = &MainMenu1;//dis1menu parent menu is mainmenu1
       
       
        dis2Menu.subMenus =  malloc(sizeof(&dis1Menu)*4);
        dis2Menu.subMenus[0] = NULL;
        dis2Menu.subMenus[1] = NULL;
        dis2Menu.subMenus[2] = NULL;
        dis2Menu.subMenus[3] = NULL;
       
        dis2Menu.func = malloc(sizeof(&func)*4);
        dis2Menu.func[0] = NULL;
        dis2Menu.func[1] = NULL;
        dis2Menu.func[2] = NULL;
        dis2Menu.func[3] = NULL;
       
        dis2Menu.parent = &MainMenu1;//dis2menu parent menu is mainmenu1
       
}


void menutest(void)
{
        initmenu();
        displaymenu(currentMenu->selected);
       
        while(1)
        {
                if(key_pressed_flag)
                {
                        ReadValue=Key_scan();
                        if(ReadValue!=0)
                        {
                                delay_ms(100);
                                if(ReadValue == Key_scan())
                                {
                                        switch(ReadValue)
                                        {
                                                case key_sure://按鍵A(確認按鍵)
                                                {
                                                if(currentMenu->subMenus[currentMenu->selected] !=NULL)
                                                        {
                                                                currentMenu = currentMenu->subMenus[currentMenu->selected];
                                                                displaymenu(0);
                                                        }
                                                        break;
                                                }
                                                case key_up://按鍵B(上一行菜單)
                                                {
                                                        if(currentMenu->selected == 0)
                                                                break;
                                                        else
                                                        {
                                                                currentMenu->selected--;
                                                                if(currentMenu->selected < currentMenu->range_from)
                                                                {
                                                                        currentMenu->range_from = currentMenu->selected;
                                                                        currentMenu->range_to = currentMenu->range_from+3;
                                                                }
                                                                displaymenu(currentMenu->selected);
                                                               
                                                        }       
                                                        break;
                                                }
                                                case key_down://按鍵C(下一行菜單 )
                                                {
                                                        if(currentMenu->selected == currentMenu->itemCount-1)
                                                                break;
                                                        else
                                                        {
                                                                currentMenu->selected++;
                                                                if(currentMenu->selected>currentMenu->range_to)
                                                                {
                                                                        currentMenu->range_to = currentMenu->selected;
                                                                        currentMenu->range_from = currentMenu->range_to-3;
                                                                }
                                                                displaymenu(currentMenu->selected);
                                                               
                                                        }
                                                        break;
                                                }       
                                                case key_back://按鍵D(返回)
                                                {
                                                        if(currentMenu->parent!=NULL)
                                                        {
                                                                currentMenu = currentMenu->parent;
                                                                displaymenu(currentMenu->selected);
                                                        }
                                                        break;
                                                }
                                                default:
                                                        break;
                                        }
                                }
                        }
                }
        }
}


回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲乱码一区二区三区在线观看 | 一区影院 | 欧美视频一区二区三区 | 91视视频在线观看入口直接观看 | 五月天国产视频 | 国产黄色免费网站 | 国产精品国产馆在线真实露脸 | 久久精品亚洲一区 | 欧美另类视频 | 91手机精品视频 | 伊人久久综合影院 | 日韩精品一区二区三区在线 | 99爱国产 | 亚洲大片一区 | 午夜视频免费网站 | 黄网站在线观看 | 久久久精品一区 | 久久99精品久久久久蜜桃tv | 一区二区三区精品视频 | 国产精品欧美一区二区三区不卡 | 另类 综合 日韩 欧美 亚洲 | 亚洲日本欧美日韩高观看 | 可以免费观看的av | 黄色网址免费在线观看 | 欧美a区 | 日韩av福利在线观看 | 91在线一区 | 婷婷综合色 | 中文字幕 在线观看 | 婷婷毛片| 国产日韩电影 | 国产亚洲精品久久久优势 | 精久久 | 亚洲精品在线观看视频 | 日韩久久久一区二区 | 91av视频在线播放 | 自拍偷拍一区二区三区 | 亚洲精品888| 国产高清一区二区三区 | 久久久精彩视频 | 成人午夜免费网站 |