?? main.c
字號(hào):
//***************************************//
//模塊名稱:菜單模塊
//顯示器件: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 // 時(shí)序要求:/WR=0;/RD=1
uchar code ParaSysTable8[]= {
0x30,0x87,0x07,0x27,0x42,0xf0,0x28,0x00
// P1-P8參數(shù)
};
#define Scroll 0x44 // 時(shí)序要求:/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為接續(xù)寫入
#define Busy 0x40 // 忙狀態(tài)標(biāo)志位0b0100 0000
#define paraP9 0x28 // 相對(duì)于320 X 240
#define BS 0x08
#define CR 0x0D
#define LF 0x0A
#define ASC_CHR_WIDTH 8
#define ASC_CHR_HEIGHT 16
// 下面是建立自定義字庫(kù)CGRAM子程序,調(diào)用前先設(shè)置數(shù)據(jù)量(字節(jié)數(shù))COUNT1
typedef struct typFNT_GB16 // 漢字字模數(shù)據(jù)
結(jié)構(gòu)
{
signed Index[2];
char Msk[32];
};
struct typFNT_GB16 code Cdotlib[]={
/*測(cè) CB2E2 */
"測(cè)",
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,
/*數(shù) CCAFD */
"數(shù)",
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; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬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顯示數(shù)據(jù)緩沖區(qū)
char code ASC_MSK[96*16] = {
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,
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;
{
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代碼,后續(xù)參數(shù):
WriteData( 0x54 ); // 00 00 01 00顯示1區(qū)開顯示,其余層關(guān)閉
}
if ( current_command->parent == (COMMAND*)&main_menu[MAIN_SET])
{
WriteCommand( 0x59 ); // 寫入指令DISP ON/OFF代碼,后續(xù)參數(shù):
WriteData( 0x44 ); // 00 00 01 00顯示1區(qū)開顯示,其余層關(guān)閉
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代碼,后續(xù)參數(shù):
WriteData( 0x44 ); // 00 00 01 00顯示1區(qū)開顯示,其余層關(guān)閉
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);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -