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

📄 main.c

📁 6029lcd驱动显示程序,直接可以运用的
💻 C
📖 第 1 页 / 共 2 页
字号:
//***************************************//
//模块名称:菜单模块
//显示器件:LM6029
//***************************************//
#include "menu.h"
uchar dprintf(uchar x, uchar y, uchar att,bit fb, char *fmt, ...) ;
uint timer1,timer2;
#define LcmRdataPort LcmCmdPort
#define LcmStatusPort LcmWdataPort
#define SystemSet    0x40               // 时序要求:/WR=0;/RD=1
uchar code ParaSysTable8[]= {
        0x30,0x87,0x07,0x27,0x42,0xf0,0x28,0x00          
        // P1-P8参数
        };
#define Scroll       0x44               // 时序要求:/WR=0;/RD=1
#define BasePart1    0x00
#define BasePart2    0x40
#define BasePart3    0x80
#define BasePart4    0x00
Uchar code ParaScrTableA[]= {
    
    0x00,BasePart1,0xF0,0x00,BasePart2,0xF0,0x00,BasePart3,0x00,BasePart4
};
#define SleepIn        0x53
#define DispOn         0x59
#define DispOff        0x58
#define Ovlay          0x5b
#define HdotScr        0x5a
#define CsrForm        0x5d
#define CgramAdr       0x5c
#define CsrDirR        0x4c
#define CsrDirL        0x4d
#define CsrDirU        0x4e
#define CsrDirD        0x4f
#define    CsrW        0x46
#define    CsrR        0x47
#define    mWrite      0x42
#define    mRead       0x43
bit        wAttrib;                   // 字符的写入方式:1为初次写入;0为接续写入
#define Busy        0x40              // 忙状态标志位0b0100 0000
#define    paraP9        0x28         // 相对于320 X 240
#define BS            0x08
#define CR            0x0D
#define LF            0x0A
#define ASC_CHR_WIDTH         8
#define ASC_CHR_HEIGHT        16

// 下面是建立自定义字库CGRAM子程序,调用前先设置数据量(字节数)COUNT1
typedef struct typFNT_GB16                // 汉字字模数据
结构
{
    signed  Index[2];
    char Msk[32];
};
struct typFNT_GB16 code Cdotlib[]={
/*测   CB2E2 */
"测",
0x40,0x02,0x27,0xC2,0x24,0x42,0x84,0x52,
0x45,0x52,0x55,0x52,0x15,0x52,0x25,0x52,
0x25,0x52,0x25,0x52,0xC5,0x52,0x41,0x02,
0x42,0x82,0x42,0x42,0x44,0x4A,0x48,0x04,
/*菜   CB2CB */
"菜",
0x04,0x40,0xFF,0xFE,0x04,0x40,0x04,0x40,
0x3F,0xF8,0x22,0x08,0x11,0x10,0x08,0x20,
0x01,0x00,0x7F,0xFE,0x03,0x80,0x05,0x40,
0x09,0x30,0x11,0x1C,0x61,0x08,0x01,0x00,
/*单   CB5A5 */
"单",
0x08,0x20,0x06,0x30,0x04,0x40,0x3F,0xF8,
0x21,0x08,0x3F,0xF8,0x21,0x08,0x21,0x08,
0x3F,0xF8,0x21,0x08,0x01,0x00,0xFF,0xFE,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
/*数   CCAFD */
"数",
0x08,0x20,0x49,0x30,0x2A,0x20,0x1C,0x20,
0xFF,0x7E,0x1C,0x44,0x2B,0x44,0x48,0xC4,
0x08,0x28,0xFF,0x28,0x12,0x10,0x34,0x10,
0x0C,0x28,0x32,0x4E,0xC0,0x84,0x00,0x00,
};
uchar code  Cdot24lib[]={
/*--  宽度x高度=24x24  --*/
 /*--  文字:  定  --*/
/*--  新宋体18;  此字体下对应的点阵为:宽x高=24x24   --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,
0x00,0x00,0x18,0x00,0x00,0x08,0x00,0x08,
0x00,0x08,0x0F,0xFF,0xFC,0x18,0x00,0x10,
0x30,0x00,0x20,0x00,0x00,0x30,0x1F,0xFF,
0xF8,0x00,0x18,0x00,0x00,0x18,0x00,0x03,
0x18,0x00,0x02,0x18,0x20,0x02,0x1F,0xF0,
0x06,0x18,0x00,0x06,0x18,0x00,0x05,0x18,
0x00,0x0C,0xD8,0x00,0x08,0x78,0x00,0x10,
0x1F,0xFC,0x20,0x01,0xF8,0x00,0x00,0x00,
/*--  宽度x高度=24x24  --*/

};
char tmpBuf[64];                // LCD显示数据缓冲区

char code ASC_MSK[96*16] = {
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,    /*--      --*/
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x18,0x3C,0x3C,0x3C,0x18,    /*--   !  --*/
    0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x66,0x66,0x66,0x00,0x00,    /*--   "  --*/
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x36,0x36,0x7F,0x36,0x36,    /*--   #  --*/
    0x36,0x7F,0x36,0x36,0x00,0x00,0x00,0x00,
    0x00,0x18,0x18,0x3C,0x66,0x60,0x30,0x18,    /*--   $  --*/
    0x0C,0x06,0x66,0x3C,0x18,0x18,0x00,0x00,
    0x00,0x00,0x70,0xD8,0xDA,0x76,0x0C,0x18,    /*--   %  --*/
    0x30,0x6E,0x5B,0x1B,0x0E,0x00,0x00,0x00,
    };
typedef void  (*ACTION)(void);
typedef struct command COMMAND;
struct command
{
    ACTION                   action;
    unsigned  char code *    name;
    unsigned  char code *    ID;
    struct      command code *    parent;
    struct      command code *    down;
    struct      command code *    up;
};
#define NO_MAIN_COMMANDS    5
#define MAIN_SET            0
#define MAIN_METHOD         1
#define MAIN_FUNCTION       2
#define MAIN_PPL            3
#define MAIN_HELP           4
COMMAND code main_menu[NO_MAIN_COMMANDS] =
{
    {
       &set,
       "  菜单1 ",
       0,
       (COMMAND*)0,
       &main_menu[MAIN_METHOD],
       &main_menu[MAIN_HELP]
    },
    {
       &method,
       "  菜单2 ",
       1,
       (COMMAND*)0,
       &main_menu[MAIN_FUNCTION],
       &main_menu[MAIN_SET]
    },
    {
       &function,
       "  菜单3 ",
       2,
       (COMMAND*)0,
       &main_menu[MAIN_PPL],
       &main_menu[MAIN_METHOD]
    },
    {
       &pll,
       "  菜单4 ",
       3,
       (COMMAND*)0,
       &main_menu[MAIN_HELP],
       &main_menu[MAIN_FUNCTION]
    },
    {
       &help,
       "  菜单5 ",
       4,
       (COMMAND*)0,
       &main_menu[MAIN_SET],
       &main_menu[MAIN_PPL]
    }
};
#define NO_SET_COMMANDS      6
#define SET_DDJ              0
#define SET_BRJ              1
#define SET_BIAOYANG         2
#define SET_FANGFA           3
#define SET_SET              4
#define SET_CLOCK            5


COMMAND code set_menu[NO_SET_COMMANDS]=
{
    {
       &ddj,
       "子菜单1 ",
       0,
       (COMMAND*)&main_menu[MAIN_SET],
       &set_menu[SET_BRJ],
       &set_menu[SET_CLOCK]
    },
    {
       &brj,
       "子菜单2 ",
       1,
       (COMMAND*)&main_menu[MAIN_SET],
       &set_menu[SET_BIAOYANG],
       &set_menu[SET_DDJ]
    },
    {
       &biaoyang,
       "子菜单3 ",
       2,
       (COMMAND*)&main_menu[MAIN_SET],
       &set_menu[SET_FANGFA],
       &set_menu[SET_BRJ]
    },
    {
       &mainfangfa,
       "子菜单4 ",
       3,
       (COMMAND*)&main_menu[MAIN_SET],
       &set_menu[SET_SET],
       &set_menu[SET_BIAOYANG]
    },
    {
       &shezi,
       "子菜单5 ",
       4,
       (COMMAND*)&main_menu[MAIN_SET],
       &set_menu[SET_CLOCK],
       &set_menu[SET_FANGFA]
    },
    {
       &clockset,
       "子菜单6 ",
       5,
       (COMMAND*)&main_menu[MAIN_SET],
       &set_menu[SET_DDJ],
       &set_menu[SET_SET]
    }
};
#define NO_FANGFA_COMMANDS   5
#define FANGFA_FANGFA1       0
#define FANGFA_FANGFA2       1
#define FANGFA_FANGFA3       2
#define FANGFA_FANGFA4       3
#define FANGFA_FANGFA5       4
COMMAND code fangfa_menu[NO_FANGFA_COMMANDS]=
{
    {
       &fang1,
       "子菜单1 ",
       0,
       (COMMAND*)&main_menu[MAIN_METHOD],
       &fangfa_menu[FANGFA_FANGFA2],
       &fangfa_menu[FANGFA_FANGFA5]
    },
    {
       &fang2,
       "子菜单3 ",
       1,
       (COMMAND*)&main_menu[MAIN_METHOD],
       &fangfa_menu[FANGFA_FANGFA3],
       &fangfa_menu[FANGFA_FANGFA1]
    },
    {
       &fang3,
       "子菜单2 ",
       2,
       (COMMAND*)&main_menu[MAIN_METHOD],
       &fangfa_menu[FANGFA_FANGFA4],
       &fangfa_menu[FANGFA_FANGFA2]
    },
    {
       &fang4,
       "子菜单4 ",
       3,
       (COMMAND*)&main_menu[MAIN_METHOD],
       &fangfa_menu[FANGFA_FANGFA5],
       &fangfa_menu[FANGFA_FANGFA3]
    },
    {
       &fang5,
       "子菜单5 ",
       4,
       (COMMAND*)&main_menu[MAIN_METHOD],
       &fangfa_menu[FANGFA_FANGFA1],
       &fangfa_menu[FANGFA_FANGFA4]
    }
};

#define NO_GONGNENG_COMMANDS     5
#define GONGNENG_analyse         0
#define GONGNENG_GONGNENG2       1
#define GONGNENG_GONGNENG3       2
#define GONGNENG_GONGNENG4       3
#define GONGNENG_GONGNENG5       4
COMMAND code gongneng_menu[NO_GONGNENG_COMMANDS]=
{
    {
       &analyse,
       "子菜单1 ",
       0,
       (COMMAND*)&main_menu[MAIN_FUNCTION],
       &gongneng_menu[GONGNENG_GONGNENG2],
       &gongneng_menu[GONGNENG_GONGNENG5]
    },
    {
       &gongneng2,
       "子菜单2 ",
       1,
       (COMMAND*)&main_menu[MAIN_FUNCTION],
       &gongneng_menu[GONGNENG_GONGNENG3],
       &gongneng_menu[GONGNENG_analyse]
    },
    {
       &gongneng3,
       "子菜单3 ",
       2,
       (COMMAND*)&main_menu[MAIN_FUNCTION],
       &gongneng_menu[GONGNENG_GONGNENG4],
       &gongneng_menu[GONGNENG_GONGNENG2]
    },
    {
       &gongneng4,
       "子菜单5 ",
       3,
       (COMMAND*)&main_menu[MAIN_FUNCTION],
       &gongneng_menu[GONGNENG_GONGNENG5],
       &gongneng_menu[GONGNENG_GONGNENG3]
    },
    {
       &gongneng5,
       "子菜单4 ",
       4,
       (COMMAND*)&main_menu[MAIN_FUNCTION],
       &gongneng_menu[GONGNENG_analyse],
       &gongneng_menu[GONGNENG_GONGNENG4]
    }
};
#define NO_PLL_COMMANDS     3
#define PLL_PLL1       0
#define PLL_PLL2       1
#define PLL_PLL3       2
COMMAND code pll_menu[NO_PLL_COMMANDS]=
{
    {
       &pll1,
       "子菜单1 ",
       0,
       (COMMAND*)&main_menu[MAIN_PPL],
       &pll_menu[PLL_PLL2],
       &pll_menu[PLL_PLL3]
    },
    {
       &pll2,
       "子菜单2 ",
       1,
       (COMMAND*)&main_menu[MAIN_PPL],
       &pll_menu[PLL_PLL3],
       &pll_menu[PLL_PLL1]
    },
    {
       &pll3,
       "子菜单5 ",
       2,
       (COMMAND*)&main_menu[MAIN_PPL],
       &pll_menu[PLL_PLL1],
       &pll_menu[PLL_PLL2]
    }
};
#define NO_HELP_COMMANDS     2
#define HELP_HELP1           0
#define HELP_HELP2           1
COMMAND code help_menu[NO_HELP_COMMANDS]=
{
    {
       &help1,
       "子菜单3 ",
       0,
       (COMMAND*)&main_menu[MAIN_HELP],
       &help_menu[HELP_HELP2],
       &help_menu[HELP_HELP1]
    },
    {
       &help2,
       "子菜单5 ",
       1,
       (COMMAND*)&main_menu[MAIN_HELP],
       &help_menu[HELP_HELP1],
       &help_menu[HELP_HELP2]
    }
};
COMMAND* current_command = &main_menu[MAIN_SET];
void move(unsigned char dir)
{
     switch (dir)
     {
       case KEY_UP:
       key=0x00;
          if (  current_command->parent != (COMMAND*)0)
          {
              current_command = current_command->up;
          }
          break;
       case KEY_DOWN:
       key=0x00;
          if (  current_command->parent != (COMMAND*)0)
          {
               current_command = current_command->down;
          }
          break;
       case KEY_RIGHT:
       key=0x00;
          if (  current_command->parent == (COMMAND*)0)
          {
               current_command = current_command->down;
          }
          break;
       case KEY_LEFT:
       key=0x00;
          if (  current_command->parent == (COMMAND*)0)
          {
               current_command = current_command->up;
          }
          break;
       case KEY_ENTER:
       key=0x00;
             (current_command->action)();
          break;
       case KEY_ESC:
       key=0x00;
         if (  current_command->parent != (COMMAND*)0)
          {
             current_command = current_command->parent;
             //BlockClr(0,50,40,170);
          }
         break;
         case KEY_STU:  
         key=0x00;

         break;
         case KEY_STD:  
         key=0x00;

         break;
       default:
       key=0x00;
          break;
     }
     MenuDisplay();
}
void MenuDisplay(void)
{
    unsigned char i;
    bit fb;
    if (  current_command->parent == (COMMAND*)0)
    {
        
         for(i=0;i<NO_MAIN_COMMANDS;i++)
        {
            if(current_command->ID==i)
            {
                fb=1;
            }
            else
            {
                fb=0;
            }
            dprintf(i*8,32,0,fb,main_menu[i].name);
        }
        WriteCommand( 0x59 );             // 写入指令DISP ON/OFF代码,后续参数:
        WriteData( 0x54 );                // 00 00 01 00显示1区开显示,其余层关闭
    }
    if (  current_command->parent == (COMMAND*)&main_menu[MAIN_SET])
    {
        WriteCommand( 0x59 );             // 写入指令DISP ON/OFF代码,后续参数:
        WriteData( 0x44 );                // 00 00 01 00显示1区开显示,其余层关闭
         for(i=0;i<NO_SET_COMMANDS;i++)
        {
            if(current_command->ID==i)
            {
                fb=1;
            }
            else
            {
                fb=0;
            }
            dprintf(MAIN_SET*8,51+16*i,0,fb,set_menu[i].name);
        }
        Linexy( MAIN_SET*64,49,MAIN_SET*64+63,49,0,1);
        Linexy( MAIN_SET*64,49,MAIN_SET*64,51+NO_SET_COMMANDS*16,0,1);
        Linexy( MAIN_SET*64+63,49,MAIN_SET*64+63,51+NO_SET_COMMANDS*16,0,1);
        Linexy( MAIN_SET*64,51+NO_SET_COMMANDS*16,MAIN_SET*64+63,51+NO_SET_COMMANDS*16,0,1);
      }
    if (  current_command->parent == (COMMAND*)&main_menu[MAIN_METHOD])
    {
        WriteCommand( 0x59 );             // 写入指令DISP ON/OFF代码,后续参数:
        WriteData( 0x44 );                // 00 00 01 00显示1区开显示,其余层关闭
         for(i=0;i<NO_FANGFA_COMMANDS;i++)
        {
            if(current_command->ID==i)
            {
                fb=1;
            }
            else
            {
                fb=0;
            }
            dprintf(MAIN_METHOD*8,51+16*i,0,fb,fangfa_menu[i].name);

⌨️ 快捷键说明

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