Lcd菜单处理编程

Menu.h

#ifndef        __MENU_h__ 
#define        __MENU_h__ 
#include "Functions.h" 
/*    目录结构体定义   * /

struct MenuItem         

    short MenuCount; 
    char *DisplayString; 
    void (*Subs)(); 
    struct MenuItem *ChildrenMenus; 
    struct MenuItem *ParentMenus; 
}Null;

void NullSubs(void) 

}

/**************************************************** 
*   使用说明:                                      * 
*      要定义一个菜单,需要做以下几步工作           * 
*      1、定义一个结构体数组                        * 
*      2、如果这个菜单是子菜单,那么把上级菜单的    * 
*         *ChildrenMenus指针指向该数组的首地址,     * 
*         并且设置ParentMenus为上层目录的地址       * 
*      3、如果这个菜单是跟菜单,那么直接将MenuPoint * 
*         指针指向该数组的首地址                    * 
*      4、通过写一个函数为该数组的每一个元素初始化  * 
*      5、如果菜单项是最终选项,那么将*ChildrenMenus* 
*         置为NULL,将函数指针*Subs指向实现功能的   * 
*         函数。                                    * 
****************************************************/

struct MenuItem MainMenu[3]; 
struct MenuItem TimeMenu[4]; 
struct MenuItem VoiceMenu[5]; 
struct MenuItem RobotMenu[5]; 
struct MenuItem FlashMenu[5];

/*********************** 
*     函 数 声 明 区   * 
***********************/ 
void MainMenuInit(void); 
void TimeMenuInit(void); 
void VoiceMenuInit(void); 
void RobotMenuInit(void); 
void FlashMenuInit(void);

/************************************************************** 
*  函数说明:Flash处理目录初始化函数                          * 
**************************************************************/ 
void FlashMenuInit(void) 

    FlashMenu[0].MenuCount = 5; 
    FlashMenu[0].DisplayString = "  Flash Record  "; 
    FlashMenu[0].Subs = FlashRecord; 
    FlashMenu[0].ChildrenMenus = &Null; 
    FlashMenu[0].ParentMenus = MainMenu; 
     
    FlashMenu[1].MenuCount = 5; 
    FlashMenu[1].DisplayString = "      Play      "; 
    FlashMenu[1].Subs = FlashPlay; 
    FlashMenu[1].ChildrenMenus = &Null; 
    FlashMenu[1].ParentMenus = MainMenu; 
     
    FlashMenu[2].MenuCount = 5; 
    FlashMenu[2].DisplayString = "      Pause     "; 
    FlashMenu[2].Subs = FlashPause; 
    FlashMenu[2].ChildrenMenus = &Null; 
    FlashMenu[2].ParentMenus = MainMenu; 
     
    FlashMenu[3].MenuCount = 5; 
    FlashMenu[3].DisplayString = "  Flash Delete  "; 
    FlashMenu[3].Subs = FlashDelete; 
    FlashMenu[3].ChildrenMenus = &Null; 
    FlashMenu[3].ParentMenus = MainMenu; 
     
    FlashMenu[4].MenuCount = 5; 
    FlashMenu[4].DisplayString = "      Back      "; 
    FlashMenu[4].Subs = NullSubs; 
    FlashMenu[4].ChildrenMenus = MainMenu; 
    FlashMenu[4].ParentMenus = MainMenu; 
}

/************************************************************** 
*  函数说明:机器人控制目录初始化函数                         * 
**************************************************************/ 
void RobotMenuInit(void) 

    RobotMenu[0].MenuCount = 5; 
    RobotMenu[0].DisplayString = "   Turn  Left   "; 
    RobotMenu[0].Subs = RobotTurnLeft; 
    RobotMenu[0].ChildrenMenus = &Null; 
    RobotMenu[0].ParentMenus = MainMenu; 
     
    RobotMenu[1].MenuCount = 5; 
    RobotMenu[1].DisplayString = "   Turn Right   "; 
    RobotMenu[1].Subs = RobotTurnRight; 
    RobotMenu[1].ChildrenMenus = &Null; 
    RobotMenu[1].ParentMenus = MainMenu; 
     
    RobotMenu[2].MenuCount = 5; 
    RobotMenu[2].DisplayString = "    Go  Ahead   "; 
    RobotMenu[2].Subs = RobotGoAhead; 
    RobotMenu[2].ChildrenMenus = &Null; 
    RobotMenu[2].ParentMenus = MainMenu; 
     
    RobotMenu[3].MenuCount = 5; 
    RobotMenu[3].DisplayString = "     Go Back    "; 
    RobotMenu[3].Subs = RobotGoBack; 
    RobotMenu[3].ChildrenMenus = &Null; 
    RobotMenu[3].ParentMenus = MainMenu; 
     
    RobotMenu[4].MenuCount = 5; 
    RobotMenu[4].DisplayString = "      Back      "; 
    RobotMenu[4].Subs = NullSubs; 
    RobotMenu[4].ChildrenMenus = MainMenu; 
    RobotMenu[4].ParentMenus = MainMenu; 
     
}

/************************************************************** 
*  函数说明:声音处理目录初始化函数                           * 
**************************************************************/ 
void VoiceMenuInit(void) 

    VoiceMenu[0].MenuCount = 5; 
    VoiceMenu[0].DisplayString = "  Voice Record  "; 
    VoiceMenu[0].Subs = VoiceRecord; 
    VoiceMenu[0].ChildrenMenus = &Null; 
    VoiceMenu[0].ParentMenus = MainMenu; 
     
    VoiceMenu[1].MenuCount = 5; 
    VoiceMenu[1].DisplayString = "      Play      "; 
    VoiceMenu[1].Subs = Play; 
    VoiceMenu[1].ChildrenMenus = &Null; 
    VoiceMenu[1].ParentMenus = MainMenu; 
     
    VoiceMenu[2].MenuCount = 5; 
    VoiceMenu[2].DisplayString = "      Pause     "; 
    VoiceMenu[2].Subs = Pause; 
    VoiceMenu[2].ChildrenMenus = &Null; 
    VoiceMenu[2].ParentMenus = MainMenu; 
     
    VoiceMenu[3].MenuCount = 5; 
    VoiceMenu[3].DisplayString = "  Voice Delete  "; 
    VoiceMenu[3].Subs = VoiceDelete; 
    VoiceMenu[3].ChildrenMenus = &Null; 
    VoiceMenu[3].ParentMenus = MainMenu; 
     
    VoiceMenu[4].MenuCount = 5; 
    VoiceMenu[4].DisplayString = "      Back      "; 
    VoiceMenu[4].Subs = NullSubs; 
    VoiceMenu[4].ChildrenMenus = MainMenu; 
    VoiceMenu[4].ParentMenus = MainMenu; 
}

/************************************************************** 
*  函数说明:时间设定子目录初始化                             * 
**************************************************************/ 
void TimeMenuInit(void) 

    TimeMenu[0].MenuCount = 4; 
    TimeMenu[0].DisplayString = "    Time Set    "; 
    TimeMenu[0].Subs = TimeSet; 
    TimeMenu[0].ChildrenMenus = &Null; 
    TimeMenu[0].ParentMenus = MainMenu; 
     
    TimeMenu[1].MenuCount = 4; 
    TimeMenu[1].DisplayString = "    Date Set    "; 
    TimeMenu[1].Subs = DateSet; 
    TimeMenu[1].ChildrenMenus = &Null; 
    TimeMenu[1].ParentMenus = MainMenu; 
     
    TimeMenu[2].MenuCount = 4; 
    TimeMenu[2].DisplayString = "    AlertSet    "; 
    TimeMenu[2].Subs = AlertSet; 
    TimeMenu[2].ChildrenMenus = &Null; 
    TimeMenu[2].ParentMenus = MainMenu; 
     
    TimeMenu[3].MenuCount = 4; 
    TimeMenu[3].DisplayString = "      Back      "; 
    TimeMenu[3].Subs = NullSubs; 
    TimeMenu[3].ChildrenMenus = MainMenu; 
    TimeMenu[3].ParentMenus = MainMenu; 
     
}

/************************************************************** 
*  函数说明:根目录初始化                                     * 
**************************************************************/ 
void MainMenuInit(void) 

     MainMenu[0].MenuCount = 3; 
     MainMenu[0].DisplayString = "    Time Set    "; 
     MainMenu[0].Subs = NullSubs; 
     MainMenu[0].ChildrenMenus = TimeMenu; 
     MainMenu[0].ParentMenus = &Null;

MainMenu[1].MenuCount = 3; 
     MainMenu[1].DisplayString = "  Voice Center  "; 
     MainMenu[1].Subs = NullSubs; 
     MainMenu[1].ChildrenMenus = VoiceMenu; 
     MainMenu[1].ParentMenus = &Null; 
/* 
     MainMenu[2].MenuCount = 3; 
     MainMenu[2].DisplayString = "  Robot Control "; 
     MainMenu[2].Subs = NullSubs; 
     MainMenu[2].ChildrenMenus = RobotMenu;   
     MainMenu[2].ParentMenus = &Null; 
*/      
     MainMenu[2].MenuCount = 3; 
     MainMenu[2].DisplayString = "  Flash Option  "; 
     MainMenu[2].Subs = NullSubs; 
     MainMenu[2].ChildrenMenus = FlashMenu;      
     MainMenu[2].ParentMenus = &Null;

}

#endif

Function.h 
------------------------------

#ifndef        __FUNCTIONS_h__ 
#define        __FUNCTIONS_h__

//支持库说明:系统菜单功能文件宏                   
    #include "VoiceCenter.h" 
    #include "RobotControl.h" 
    #include "FlashOption.h"

/*-------------------------------- 
   上面包含的头文件里面包含了菜单 
   功能选项所要调用的函数。 
--------------------------------*/ 
#endif

main.c 
-----------------------------

#include "GRAPH_Command.h" 
#include "Functions.h" 
#include "Menu.h"

/*********************** 
*   按键功能键宏定义   * 
***********************/ 
# define UP        0 
# define Down      4 
# define Enter     5 
# define Esc       1 
# define Reset     2

/*********************** 
*     全局变量声明区   * 
***********************/

struct MenuItem (*MenuPoint) = MainMenu; 
    short DisplayStart = 0; 
    short UserChoose = 0; 
    short DisplayPoint = 0; 
    short MaxItems;

/***************************** 
* Struct MenuItem:           * 
*    short MenuCount;        * 
*    char *DisplayString;    * 
*    void (*Subs)();         * 
*    MenuItem *ChildrenMenus;* 
*    MenuItem *ParentMenus;  * 
*****************************/

/*********************** 
*     函 数 声 明 区   * 
***********************/ 
extern void ClearWatchDog(); 
void MenuInitialation(void); 
void SystemInitialation(void); 
void ShowMenu(void); 
short GetKeyNum(void);

/************************************************************** 
*  函数说明:系统初始化函数                                   * 
**************************************************************/ 
void SystemInitialation(void) 

        Init_sys();           
        Enable_LCD();                          //初始化字库      函数定义在 
        MenuInitialation();               //初始化菜单 
        GRAPH                             //图形初始化 
}

/************************************************************** 
*  函数说明:目录初始化函数                                   * 
**************************************************************/ 
void MenuInitialation(void) 

    MainMenuInit(); 
    TimeMenuInit(); 
    VoiceMenuInit(); 
    RobotMenuInit(); 
    FlashMenuInit(); 
}

/************************************************************** 
*  函数说明:目录显示函数                                     * 
**************************************************************/ 
void ShowMenu(void) 

    short n = 0;

MaxItems = MenuPoint[0].MenuCount; 
    DisplayPoint = DisplayStart; 
        if (MaxItems >= 4) 
        { 
             for (n = 0;n<4;n++) 
             { 
                          
                 LOCATE(n+1,1); 
                 PRINT(MenuPoint[DisplayPoint].DisplayString); 
                  
                 if ((DisplayPoint) == UserChoose) 
                     { 
                         BOX(1,n*16+1,126,(n+1)*16-2,1,1); 
                     } 
                  
                     DisplayPoint +=1; 
                     if ((DisplayPoint) == (MaxItems)) 
                     { 
                         DisplayPoint = 0; 
                     } 
             } 
         } 
         else 
         { 
             for (n = 0;n<MaxItems;n++) 
             { 
                          
                 LOCATE(n+1,1); 
                 PRINT(MenuPoint[DisplayPoint].DisplayString); 
                  
                 if ((DisplayPoint) == UserChoose) 
                     { 
                         BOX(1,n*16+1,126,(n+1)*16-2,1,1); 
                     } 
                  
                     DisplayPoint +=1; 
                     if ((DisplayPoint) == (MaxItems)) 
                     { 
                         DisplayPoint = 0; 
                     } 
                  
             } 
         } 
        //BOX(0,0,127,63,2,2); 
}

/************************************************************** 
*  函数说明:获得键值函数                                     * 
**************************************************************/ 
short GetKeyNum(void) 

    short TempKeyNum = 0; 
        TempKeyNum = F_Key_Scan();       //获取按键值 
        *P_IOA_Dir = 0x01ff; 
        *P_IOA_Attrib = 0x01ff;        
        *P_IOA_Data = 0x01ff; 
             
        return TempKeyNum;

}

/************************************************************** 
*  函数说明:主函数                                           * 
**************************************************************/ 
int main() 
{                       
    short KeyNum = 0xff; 
     
    SystemInitialation();            //系统初始化 
     
    ShowMenu(); 
        while(1) 
        { 
            ClearWatchDog();             //喂狗 
            KeyNum = GetKeyNum();        //获取按键值

/*******************目录操作*********************/ 
             
            /*************************************** 
            *   [按键说明]                         * 
            *  ----------------------------------- * 
            *   [K1]            UP(向上)           * 
            *   [K5]            Down(向下)         * 
            *   [K2]            Esc(后退)          * 
            *   [K6]            Enter(确定)        * 
            *   [K3]            返回根目录         * 
            ***************************************/ 
            if (KeyNum != 0xff) 
            { 
             ShowMenu(); 
                 switch(KeyNum) 
                 { 
                     case UP: 
                         UserChoose --; 
                         if (UserChoose < 0) 
                         { 
                             UserChoose = MaxItems-1; 
                         } 
                         break; 
                     case Esc: 
                         if (MenuPoint[0].ParentMenus != &Null) 
                         { 
                             MenuPoint = MenuPoint[0].ParentMenus; 
                             UserChoose = 0; 
                             DisplayStart = 0; 
                         } 
                         break; 
                     case Down: 
                         UserChoose ++; 
                         if (UserChoose == MaxItems) 
                         { 
                             UserChoose = 0; 
                         } 
                          
                         break; 
                     case Enter: 
                         if (MenuPoint[UserChoose].Subs != NullSubs) 
                         { 
                             (*MenuPoint[UserChoose].Subs)(); 
                         } 
                         else if (MenuPoint[UserChoose].ChildrenMenus != &Null) 
                         { 
                             MenuPoint = MenuPoint[UserChoose].ChildrenMenus; 
                             UserChoose = 0; 
                             DisplayStart = 0; 
                         } 
                         break; 
                     case Reset: 
                         MenuPoint = MainMenu; 
                         UserChoose = 0; 
                         DisplayStart = 0; 
                         break; 
                 } 
                  
                 if ((UserChoose < DisplayStart) || (UserChoose > (DisplayStart+3))) 
                 { 
                    DisplayStart = UserChoose; 
                 } 
                  
                 CLS 
                 ShowMenu(); 
                  
            } 
            /*******************目录操作*********************/ 
        }

}

补充一个关于作图的库函数

GRAPH_Command.h 
----------------------------

#ifndef        __GRAPH_COMMAND_h__ 
#define        __GRAPH_COMMAND_h__ 
#include "lab_parameter.h" 
/********************************************************** 
*  函数库说明:图形函数扩展库                             * 
*  说明:      在现有系统图形函数基础上,扩展若干使用     * 
*              方便的图形函数                             *   
**********************************************************/

/************************** 
*     系 统 宏 定 义      * 
**************************/ 
# define GRAPH          FG_InitGraphic(); 
# define CLS        FG_ClearScreen(DG_CLS_ERASE);

/************************** 
*    全 局 变 量 定 义    * 
**************************/ 
short  Now_Str_X = 1; 
short  Now_Str_Y = 1;

/************************** 
*     函  数  声  明      * 
**************************/ 
void BOX(short LT_X,short LT_Y,short RB_X,short RB_Y,short IfEraser,short FillColor); 
void LOCATE(short Str_x,short Str_y); 
void Print(char *Strings);

/*********************************************************** 
*  函数说明:画矩形框工具                                  * 
*      输入:矩框坐标  DrawModel FillColor                 * 
*      [DrawModel]           [说明]                        * 
*         0                   擦除                         * 
*         1                   画线                         * 
*         2                   填充                         * 
*      [FillColor]           [说明]                        * 
*         0                   白                           * 
*         1                   黑                           * 
*         2                   反色(XOR)                  * 
***********************************************************/ 
void BOX(short LT_X,short LT_Y,short RB_X,short RB_Y,short DrawModel,short FillColor) 

    if (LT_X < 0)        LT_X = 0; 
    if (LT_Y < 0)        LT_Y = 0; 
    if (RB_X > 127)      RB_X = 127; 
    if (RB_Y > 63)       RB_Y = 63; 
     
    LT_X = 127 - LT_X; 
    LT_Y = 64 - LT_Y; 
     
    RB_X = 127 - RB_X; 
    RB_Y = 64 - RB_Y; 
         
    switch (DrawModel) 
    { 
        case 0: 
            if(FillColor == 1) 
            { 
                FG_SetRectStyle(DG_RECT_ERASE); 
            } 
            else 
            { 
                FG_SetRectStyle(DG_RECT_COVER); 
            } 
            FG_Rectangle(RB_X,RB_Y,LT_X,LT_Y); 
            break; 
        case 1: 
            if (FillColor == 1) 
            { 
                FG_SetRectStyle(DG_RECT_HOLLOW); 
            } 
            else if(FillColor == 0) 
            { 
                FG_SetRectStyle(DG_RECT_HOLLOW_ERASE); 
            } 
            else if(FillColor == 2) 
            { 
                FG_SetRectStyle(DG_RECT_SOLID_XOR); 
            } 
            FG_Rectangle(RB_X,RB_Y,LT_X,LT_Y); 
            break; 
        case 2: 
            if (FillColor == 1) 
            { 
                FG_SetRectStyle(DG_RECT_COVER); 
                FG_Rectangle(RB_X,RB_Y,LT_X,LT_Y); 
            } 
            else if (FillColor == 0) 
            { 
                FG_ClearRect(RB_X,RB_Y,LT_X,LT_Y,DG_CLS_ERASE); 
            } 
            else if (FillColor == 2) 
            { 
                FG_SetRectStyle(DG_RECT_SOLID_XOR); 
                FG_Rectangle(RB_X,RB_Y,LT_X,LT_Y); 
            } 
             
            break; 
    }

}

/*********************************************************** 
*  函数说明:字符串定位函数                                * 
*      输入:字符串文本坐标(1:4  1:16)                   * 
***********************************************************/ 
void LOCATE(short Str_y,short Str_x) 

    if (Str_x >= 1 && Str_x <=17) 
    { 
        Now_Str_X = Str_x; 
    } 
    if (Str_y >= 1 && Str_y <=4) 
    { 
        Now_Str_Y = Str_y; 
    } 
}

/*********************************************************** 
*  函数说明:字符串显示函数                                * 
*      输入:要显示的字符串                                * 
***********************************************************/ 
void PRINT(char *Strings) 

    short Temp_X =(Now_Str_X-1)<<3; 
    short Temp_Y =(Now_Str_Y-1)<<4; 
    if (Temp_X < 0)        Temp_X = 0; 
    if (Temp_Y < 1)        Temp_Y = 1; 
     
    Temp_X = 127 - Temp_X; 
     
    Temp_Y = 63 - Temp_Y; 
     
    FG_PutStr(Strings,3,Temp_X,Temp_Y); 
}

#endif

Lcd菜单处理编程,布布扣,bubuko.com

时间: 2024-10-06 09:55:59

Lcd菜单处理编程的相关文章

linux 2440 LCD 应用程序编程

一.Linux的帧缓冲设备 帧缓冲(framebuffer)是 Linux 为显示设备提供的一个接口,把显存抽象后的一种设备,他允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作.这种操作是抽象的,统一的.用户不必关心物理显存的位置.换页机制等等具体细节.这些都是由Framebuffer 设备驱动来完成的.帧缓冲驱动的应用广泛,在 linux 的桌面系统中,Xwindow 服务器就是利用帧缓冲进行窗口的绘制.尤其是通过帧缓冲可显示汉字点阵,成为 Linux汉化的唯一可行方案. 帧缓冲设备对

S5PV210(TQ210)裸机编程

本文很多其它的是教会大家怎样学习. 4.1    汇编学习 4.1.1 基础知识 4.1.2 ARM模拟器 4.2    S5PV210启动流程 4.3    点亮一个LED 4.4    串口 4.5    实现printf函数 4.6    时钟配置 4.7    重定位(BL1载入BL2到SRAM) 4.8    DDR 4.9    NAND FLASH读写 4.10 NAND读写之8位硬件ECC 4.11 NAND读写之8位硬件ECC(续) 4.12 LCD操作 裸机编程仅仅是我写的<

c/c++界面编程

本帖计划从四个大的方面来讲 这四个方面是 窗口类.文件操作类.网络类.数据库类. 都是时下流行的编程必备技术 也是软件开发者 必须掌握的技术.中间以实例讲解 逐步学习 相信大家看完后 会有很大的提高的. 第一章 窗口类程序的编写 这一章就先来讲解下窗口类程序的编写.因为现在程序没有界面 就像人没有脸面一样 而且好的界面更能吸引人. 从基本的界面开始 相信能给大家指明出一条路的 使大家很容易地掌握窗口序的编写.其实界面设计利用VC 6.0 的 MFC 很容易地制作出来.这里从底层开始写代码来写界面

PHP课程总结20161130

今天的课程,我们主要进行了选项卡和下拉菜单的制作并且复习了九九乘法表和轮播的编程过程.    一.总结    1.制作特效前,首先要明确目标,然后将制作思路在纸上写一写,用最普通的方法将它实现,最后再思考简便的方法. 2.js书写规则:名称中带有"-",应将它去掉,并将后面的那个字母大写.如"border-top",应写成"borderTop". 二.选项卡的编程过程 三.下拉菜单的编程过程

Win7 系统所有应用颜色调整

不知道按到哪个快捷键了,发现windows7系统桌面,浏览器,PDF阅读器和Eclipse的北京和菜单都编程淡黄色,下面是解决的过程. 方法一:在win7桌面右击 -> 个性化 -> 窗口颜色 -> 高级外观设置 -> 项目,在项目中选择要更改的项.发现这种方法失效,之后重启电脑,依然不行. 方法二:在win7桌面右击 -> 个性化 -> 显示 -> 校准颜色,一直点击下一步,最后成功了.

Java(SE)内容回顾

也是大学的时候写的,现在回头看看,那时候的想法还是有点小小的幼稚,文章内容也...哈哈...欢迎拍砖 学Java一段时间了,小小的回顾下,理一下结构.另外,提一下,哥哥是做C/C++的,不做Java,Java仅仅是学习一下. Java基本语法 一 Java基础部分 1 数据类型 2 控制流程 3 函数 二 Java面向对象部分 1 类定义 2 封装 3 继承 4 多态 5 抽象类 6 接口 7 异常处理 8 根类Object 9 包 Java多线程 1 线程创建方法1:继承Thread,重写Ru

在 Debian 上安装 Oracle JDK 和 Eclipse

测试系统:Debian 3.16.7-ckt11-1 (2015-05-24) x86_64 GNU/Linux 一.Oracle JDK 的安装 1.下载 Oracle JDK(或者应该叫 Java SE 吧), 下载页面:_ http://www.oracle.com/technetwork/cn/java/javase/downloads/index.html JDK-8-update-20-x64:_ http://download.oracle.com/otn-pub/java/jdk

CentOS6.5 安装codeblocks-13.12

安装环境CentOS6.5 启动命令行 1.先安装gcc和gcc++,这个可以直接安装 # yum install gcc # yum install gcc-c++ 2.再安装gtk2,也是直接安装 # yum install gtk2* 3.再安装wxGTK,一样的方法 # yum install wxGTK 4.本来要安装xterm的,最后我用的时候发现,显示中文有些显示的是方框,开始以为是codeblocks的事情,最后找到原因了,是这个xterm的问题,输出改成gnome的终端就行了,

linux -- ubuntu桌面版安装xampp

首先,请从www.xampp.org下载最新版XAMPP. 安装 如果是xampp压缩文件 将xampp压缩文件复制到/opt下并解压.如果你计算机没有/opt目录,用 “sudo mkdir/opt” 命令来创建目录. 如果计算机没有sudo命令请用su命令并输入超级用户密码来切换到超级用户. 使用以下命令将文件复制到/opt:$sudo cp /doc/xampp-linux-x.x.tar.gz /opt    // “/doc/” 表示当前xampp文件的路径 使用以下命令进入opt/目