📄 menu.c
字号:
0x0D,0x0D,0xFD,0xFD,0x01,0xFD,0x05,0x0D,
0x0D,0x0D,0x0D,0x0D,0x0D,0xFD,0xFD,0xFF
};
const unsigned char code pic4[] =
{
0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x7F,0x40,0x5F,0x5F,0x5F,0x5F,
0x5F,0x5F,0x5F,0x5F,0x5F,0x5F,0x5F,0x5F,
0x5F,0x5F,0x5F,0x40,0x7E,0x8A,0x8F,0xEF,
0xFF,0x10,0x17,0x14,0x14,0x14,0x14,0x14,
0x14,0x14,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x00,0xFD,0x01,0xFF,0xFF,
0xFF,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0xF8,0x08,0xE8,0xE8,0xE8,0xE8,
0xEF,0xE8,0xEE,0xE8,0xEF,0xEF,0xE8,0xE8,
0xE8,0xE8,0xE8,0x08,0xF8,0x40,0xEE,0xEE,
0xFE,0x02,0xFA,0x0A,0x0A,0x0A,0x0A,0x0A,
0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,
0xFA,0x02,0xFE,0xA0,0xFD,0xED,0x0D,0x01,
0x0D,0x0D,0x0D,0x01,0x0D,0x01,0xB9,0xBB
};
const unsigned char code pic5[] =
{
0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x8F,0x88,0x8B,
0x8B,0x8B,0x8B,0x8B,0x8B,0x8B,0x8B,0x8B,
0x8B,0x8B,0x8B,0x88,0x8F,0x80,0x80,0xFF,
0xFF,0x00,0x1E,0x11,0x10,0x08,0x08,0x08,
0x08,0x04,0x04,0x04,0x04,0xFC,0x02,0xFE,
0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x00,0xFF,0x00,0x00,0xFF,
0xFF,0x00,0x00,0xF0,0x0C,0x03,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x60,0xD0,0xD0,0xD0,0xE0,0xE1,0xE1,0xC2,
0xC2,0xC4,0x98,0xE0,0xC0,0x00,0x00,0xFF,
0xFF,0x01,0x01,0x01,0x01,0x01,0x81,0x61,
0x19,0x05,0x09,0x11,0x11,0x21,0x41,0x41,
0x41,0x41,0x81,0x81,0x81,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF
};
const unsigned char code pic6[] =
{
0xFF,0x80,0x80,0x80,0x80,0x81,0x83,0x83,
0x87,0x87,0x83,0x81,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xFF,
0xFF,0x00,0x1F,0x7F,0xFC,0xF0,0xC0,0x80,
0xC0,0xE0,0xE0,0xC0,0x00,0x00,0x00,0x00,
0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x03,
0x00,0x07,0x0F,0x1F,0x1F,0x0F,0x07,0xFF,
0xFF,0x00,0xF8,0xFC,0x7E,0x1F,0x07,0x03,
0x03,0x03,0x03,0x03,0x07,0x1F,0x3F,0xFF,
0xFC,0xE0,0x80,0x80,0x80,0x80,0x80,0x00,
0x00,0x80,0xC0,0xE0,0xE0,0xC0,0x80,0xFF,
0xFF,0x01,0x01,0x01,0x01,0x01,0x81,0xC1,
0xE1,0xE1,0xE1,0xE1,0xC1,0x81,0x81,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF
};
const unsigned char code num0[] = {"0"};
const unsigned char code num1[] = {"1"};
const unsigned char code num2[] = {"2"};
const unsigned char code num3[] = {"3"};
const unsigned char code num4[] = {"4"};
const unsigned char code num5[] = {"5"};
const unsigned char code num6[] = {"6"};
const unsigned char code num7[] = {"7"};
//分隔线
static void compartline(void)
{
lcd_line(117,15,117,95+16,1);
lcd_line(121,15,121,95+16,1);
}
//菜单按键识别
void GetKeyInput(void)
{
void (*KeyFuncPtr)(); //按键功能指针
unsigned char KeyValue;
typedef struct
{
unsigned char state; //当前索引号
unsigned char keydn; //同一级菜单下移索引号
unsigned char keyon; //同一级菜单上移索引号
unsigned char keynext; //下一级菜单索引号
unsigned char keyback; //上一级菜单索引号
void (*pFun)();
}_Fun_Test;
_Fun_Test code KeyTab [23]=
{
{0,1,5,6,0,lcdm},{1,2,0,10,1,lcdm2},{2,3,1,11,2,lcdm3},{3,4,2,12,3,lcdm4},{4,5,3,13,4,lcdm5},{5,0,4,14,5,lcdm6},
{6,7,20,21,0,lcdse1},{7,15,6,22,0,lcdse2},
{8,8,8,8,6,lcdth1},{9,9,9,9,6,lcdth2},
{10,10,10,10,1,lcdsetemp},
{11,11,11,11,2,lcdsetemp},
{12,12,12,12,3,lcdsetemp},
{13,13,13,13,4,lcdsetemp},
{14,14,14,14,5,lcdsetemp},
{15,16,7,8,0,lcdse3},
{16,17,15,9,0,lcdse4},
{17,18,16,17,0,lcdse5},
{18,19,17,18,0,lcdse6},
{19,20,18,19,0,lcdse7},
{20,6,19,20,0,lcdse8},
{21,21,21,21,6,simulation},
{22,22,22,22,7,onoff}
};
//LEDRUN = 0;
KeyValue = P2 & 0XFF; //
DelayMs(20*3);
lightflashon(); //工作标志灯
switch(KeyValue)
{
case LCDKEY1: //回车键,找出新的菜单状态编号
{
KeyFuncIndex=KeyTab[KeyFuncIndex].keynext;
sound = 1;
DelayMs(5*3);
sound = 0;
delchar(); //del all char
delzipic(); //del haizi and picture
break;
}
case LCDKEY2: //向上键,找出新的菜单状态编号
{
KeyFuncIndex=KeyTab[KeyFuncIndex].keyon;
sound = 1;
DelayMs(5*3);
sound = 0;
break;
}
case LCDKEY3: //向下键,找出新的菜单状态编号
{
KeyFuncIndex=KeyTab[KeyFuncIndex].keydn;
sound = 1;
DelayMs(5*3);
sound = 0;
break;
}
case LCDKEY4: //返回键,找出新的菜单状态编号
{
KeyFuncIndex=KeyTab[KeyFuncIndex].keyback;
sound = 1;
DelayMs(5*3);
sound = 0;
delchar(); //del all char
delzipic(); //del haizi and picture
break;
}
default: //按键错误的处理
break;
}
KeyFuncPtr=KeyTab[KeyFuncIndex].pFun;
(*KeyFuncPtr)(); //执行当前按键的操作
lightflashoff(); //工作标志灯
//LEDRUN = 1;
}
//一级菜单1
void lcdm()
{
//workstate();
hanzipic(11,2,hanzi24,16,16,1);
hanzipic(13,2,hanzi25,16,16,1);
hanzipic(15,2,hanzi26,16,16,1);
hanzipic(17,2,hanzi27,16,16,1);
hanzipic(2,30-5,pic1,32,32,0);
hanzipic(13,30-5,pic2,32,32,1);
hanzipic(24,30-5,pic3,32,32,1);
hanzipic(2,80-8,pic4,32,32,1);
hanzipic(13,80-8,pic5,32,32,1);
hanzipic(24,80-8,pic6,32,32,1);
}
void lcdm2()
{
//workstate();
hanzipic(11,2,hanzi22,16,16,1);
hanzipic(13,2,hanzi23,16,16,1);
hanzipic(15,2,hanzi26,16,16,1);
hanzipic(17,2,hanzi27,16,16,1);
hanzipic(2,30-5,pic1,32,32,1);
hanzipic(13,30-5,pic2,32,32,0);
hanzipic(24,30-5,pic3,32,32,1);
hanzipic(2,80-8,pic4,32,32,1);
hanzipic(13,80-8,pic5,32,32,1);
hanzipic(24,80-8,pic6,32,32,1);
}
void lcdm3()
{
//workstate();
hanzipic(11,2,hanzi28,16,16,1);
hanzipic(13,2,hanzi29,16,16,1);
hanzipic(15,2,hanzi30,16,16,1);
hanzipic(17,2,hanzi31,16,16,1);
hanzipic(2,30-5,pic1,32,32,1);
hanzipic(13,30-5,pic2,32,32,1);
hanzipic(24,30-5,pic3,32,32,0);
hanzipic(2,80-8,pic4,32,32,1);
hanzipic(13,80-8,pic5,32,32,1);
hanzipic(24,80-8,pic6,32,32,1);
}
void lcdm4()
{
//workstate();
hanzipic(11,2,hanzi28,16,16,1);
hanzipic(13,2,hanzi29,16,16,1);
hanzipic(15,2,hanzi30,16,16,1);
hanzipic(17,2,hanzi31,16,16,1);
hanzipic(2,30-5,pic1,32,32,1);
hanzipic(13,30-5,pic2,32,32,1);
hanzipic(24,30-5,pic3,32,32,1);
hanzipic(2,80-8,pic4,32,32,0);
hanzipic(13,80-8,pic5,32,32,1);
hanzipic(24,80-8,pic6,32,32,1);
}
void lcdm5()
{
//workstate();
hanzipic(11,2,hanzi28,16,16,1);
hanzipic(13,2,hanzi29,16,16,1);
hanzipic(15,2,hanzi30,16,16,1);
hanzipic(17,2,hanzi31,16,16,1);
hanzipic(2,30-5,pic1,32,32,1);
hanzipic(13,30-5,pic2,32,32,1);
hanzipic(24,30-5,pic3,32,32,1);
hanzipic(2,80-8,pic4,32,32,1);
hanzipic(13,80-8,pic5,32,32,0);
hanzipic(24,80-8,pic6,32,32,1);
}
void lcdm6()
{
//workstate();
hanzipic(11,2,hanzi28,16,16,1);
hanzipic(13,2,hanzi29,16,16,1);
hanzipic(15,2,hanzi30,16,16,1);
hanzipic(17,2,hanzi31,16,16,1);
hanzipic(2,30-5,pic1,32,32,1);
hanzipic(13,30-5,pic2,32,32,1);
hanzipic(24,30-5,pic3,32,32,1);
hanzipic(2,80-8,pic4,32,32,1);
hanzipic(13,80-8,pic5,32,32,1);
hanzipic(24,80-8,pic6,32,32,0);
}
////////////////////////////////////
//二级菜单
/////二级菜单暂无下级菜单
void lcdsetemp()
{
hanzipic(9,50,hanzi32,12,16,1);
hanzipic(11,50,hanzi33,12,16,1);
hanzipic(13,50,hanzi34,12,16,1);
hanzipic(15,50,hanzi35,12,16,1);
hanzipic(17,50,hanzi36,12,16,1);
hanzipic(19,50,hanzi37,12,16,1);
}
/////
static void lcdseall()
{
hanzipic(20,10,hanzi28,16,16,1);
hanzipic(22,10,hanzi29,16,16,1);
hanzipic(24,10,hanzi30,16,16,1);
hanzipic(26,10,hanzi31,16,16,1);
hanzipic(20,40,hanzi28,16,16,1);
hanzipic(22,40,hanzi29,16,16,1);
hanzipic(24,40,hanzi30,16,16,1);
hanzipic(26,40,hanzi31,16,16,1);
hanzipic(20,70,hanzi28,16,16,1);
hanzipic(22,70,hanzi29,16,16,1);
hanzipic(24,70,hanzi30,16,16,1);
hanzipic(26,70,hanzi31,16,16,1);
hanzipic(20,100,hanzi28,16,16,1);
hanzipic(22,100,hanzi29,16,16,1);
hanzipic(24,100,hanzi30,16,16,1);
hanzipic(26,100,hanzi31,16,16,1);
hanzipic(2,10,hanzi38,16,16,1);
hanzipic(4,10,hanzi39,16,16,1);
hanzipic(6,10,hanzi40,16,16,1);
hanzipic(8,10,hanzi55,16,16,1);
hanzipic(2,40,hanzi41,16,16,1);
hanzipic(4,40,hanzi42,16,16,1);
hanzipic(6,40,hanzi40,16,16,1);
hanzipic(8,40,hanzi55,16,16,1);
hanzipic(2,70,hanzi16,16,16,1);
hanzipic(4,70,hanzi17,16,16,1);
hanzipic(6,70,hanzi54,16,16,1);
hanzipic(8,70,hanzi18,16,16,1);
hanzipic(2,100,hanzi19,16,16,1);
hanzipic(4,100,hanzi20,16,16,1);
hanzipic(6,100,hanzi48,16,16,1);
hanzipic(8,100,hanzi21,16,16,1);
DelayMs(80); //delay time
}
void lcdse8()
{
compartline();
lcdseall();
hanzipic(20,100,hanzi28,16,16,0);
hanzipic(22,100,hanzi29,16,16,0);
hanzipic(24,100,hanzi30,16,16,0);
hanzipic(26,100,hanzi31,16,16,0);
}
void lcdse7()
{
compartline();
lcdseall();
hanzipic(20,70,hanzi28,16,16,0);
hanzipic(22,70,hanzi29,16,16,0);
hanzipic(24,70,hanzi30,16,16,0);
hanzipic(26,70,hanzi31,16,16,0);
}
void lcdse6()
{
compartline();
lcdseall();
hanzipic(20,40,hanzi28,16,16,0);
hanzipic(22,40,hanzi29,16,16,0);
hanzipic(24,40,hanzi30,16,16,0);
hanzipic(26,40,hanzi31,16,16,0);
}
void lcdse5()
{
compartline();
lcdseall();
hanzipic(20,10,hanzi28,16,16,0);
hanzipic(22,10,hanzi29,16,16,0);
hanzipic(24,10,hanzi30,16,16,0);
hanzipic(26,10,hanzi31,16,16,0);
}
void lcdse4()
{
compartline();
lcdseall();
hanzipic(2,100,hanzi19,16,16,0);
hanzipic(4,100,hanzi20,16,16,0);
hanzipic(6,100,hanzi48,16,16,0);
hanzipic(8,100,hanzi21,16,16,0);
}
void lcdse3()
{
compartline();
lcdseall();
hanzipic(2,70,hanzi16,16,16,0);
hanzipic(4,70,hanzi17,16,16,0);
hanzipic(6,70,hanzi54,16,16,0);
hanzipic(8,70,hanzi18,16,16,0);
}
void lcdse2()
{
compartline();
lcdseall();
hanzipic(2,40,hanzi41,16,16,0);
hanzipic(4,40,hanzi42,16,16,0);
hanzipic(6,40,hanzi40,16,16,0);
hanzipic(8,40,hanzi55,16,16,0);
}
void lcdse1()
{
compartline();
lcdseall();
hanzipic(2,10,hanzi38,16,16,0);
hanzipic(4,10,hanzi39,16,16,0);
hanzipic(6,10,hanzi40,16,16,0);
hanzipic(8,10,hanzi55,16,16,0);
}
/////////////////////////////////////
//三级波动线
void lcdth1()
{
lcd_box(10,5,15,10,1);
//lcd_box(30,0,40,10,1);
//坐标系
lcd_line(25,18,25,117,1); //X轴
lcd_line(25,117,227,117,1); //Y轴
wrchar(3,15,num0); //X轴刻度
wrchar(6,15,num1);
wrchar(9,15,num2);
wrchar(12,15,num3);
wrchar(15,15,num4);
wrchar(18,15,num5);
wrchar(21,15,num6);
wrchar(24,15,num7);
wrchar(2,13,num1); //Y轴刻度
wrchar(2,11,num2);
wrchar(2,9,num3);
wrchar(2,7,num4);
wrchar(2,5,num5);
lcd_line(25,18,21,22,1);
lcd_line(25,18,29,22,1);
lcd_line(223,113,227,117,1);
lcd_line(223,121,227,117,1);
lcd_line(40,100,64,70,1);
lcd_line(64,70,88,90,1);
lcd_line(88,90,112,50,1);
lcd_line(112,50,136,100,1);
lcd_line(136,100,160,20,1);
lcd_line(160,20,184,70,1);
lcd_line(184,70,208,30,1);
}
//三级奥运5环
void lcdth2()
{
lcd_circle(50+20+20,85-20,9,1);
lcd_circle(70+20+20,85-20,9,1);
lcd_circle(90+20+20,85-20,9,1);
lcd_circle(50+9+20+20,85+9-20,9,1);
lcd_circle(70+9+20+20,85+9-20,9,1);
}
//模拟量表格绘制
static void simtable()
{
lcd_line(6,20,230,20,1);
lcd_line(6,40,230,40,1);
lcd_line(6,60,230,60,1);
lcd_line(6,80,230,80,1);
lcd_line(6,100,230,100,1);
lcd_line(6,118,230,118,1);
lcd_line(6,20,6,118,1);
lcd_line(76,20,76,118,1);
lcd_line(116,20,116,118,1);
lcd_line(186,20,186,118,1);
lcd_line(230,20,230,118,1);
}
//模拟量显示
void simulation()
{
hanzipic(10,2,hanzi38,16,16,1);
hanzipic(12,2,hanzi39,16,16,1);
hanzipic(14,2,hanzi40,16,16,1);
hanzipic(16,2,hanzi26,16,16,1);
hanzipic(18,2,hanzi27,16,16,1);
simtable();
hanzipic(1,22,hanzi38,16,16,1);
hanzipic(3,22,hanzi39,16,16,1);
hanzipic(5,22,hanzi40,16,16,1);
hanzipic(7,22,hanzi44,16,16,1);
hanzipic(1,42,hanzi38,16,16,1);
hanzipic(3,42,hanzi39,16,16,1);
hanzipic(5,42,hanzi40,16,16,1);
hanzipic(7,42,hanzi45,16,16,1);
hanzipic(1,62,hanzi38,16,16,1);
hanzipic(3,62,hanzi39,16,16,1);
hanzipic(5,62,hanzi40,16,16,1);
hanzipic(7,62,hanzi46,16,16,1);
hanzipic(1,82,hanzi38,16,16,1);
hanzipic(3,82,hanzi39,16,16,1);
hanzipic(5,82,hanzi40,16,16,1);
hanzipic(7,82,hanzi47,16,16,1);
hanzipic(1,102,hanzi38,16,16,1);
hanzipic(3,102,hanzi39,16,16,1);
hanzipic(5,102,hanzi40,16,16,1);
hanzipic(7,102,hanzi48,16,16,1);
hanzipic(14+1,22,hanzi38,16,16,1);
hanzipic(16+1,22,hanzi39,16,16,1);
hanzipic(18+1,22,hanzi40,16,16,1);
hanzipic(20+1,22,hanzi49,16,16,1);
hanzipic(14+1,42,hanzi38,16,16,1);
hanzipic(16+1,42,hanzi39,16,16,1);
hanzipic(18+1,42,hanzi40,16,16,1);
hanzipic(20+1,42,hanzi50,16,16,1);
hanzipic(14+1,62,hanzi38,16,16,1);
hanzipic(16+1,62,hanzi39,16,16,1);
hanzipic(18+1,62,hanzi40,16,16,1);
hanzipic(20+1,62,hanzi51,16,16,1);
hanzipic(14+1,82,hanzi38,16,16,1);
hanzipic(16+1,82,hanzi39,16,16,1);
hanzipic(18+1,82,hanzi40,16,16,1);
hanzipic(20+1,82,hanzi52,16,16,1);
hanzipic(14+1,102,hanzi38,16,16,1);
hanzipic(16+1,102,hanzi39,16,16,1);
hanzipic(18+1,102,hanzi40,16,16,1);
hanzipic(20+1,102,hanzi53,16,16,1);
}
//开关量显示
void onoff()
{
hanzipic(10,2,hanzi41,16,16,1);
hanzipic(12,2,hanzi42,16,16,1);
hanzipic(14,2,hanzi40,16,16,1);
hanzipic(16,2,hanzi26,16,16,1);
hanzipic(18,2,hanzi27,16,16,1);
lcd_line(20,33,220,33,1);
lcd_line(20,35,220,35,1);
wrchar(3,3,s1);
wrchar(7,3,s2);
wrchar(11,3,s3);
wrchar(15,3,s4);
hanzipic(3,37,swon,16,8,1);
hanzipic(7,37,swoff,16,8,1);
hanzipic(11,37,swon,16,8,1);
hanzipic(15,37,swoff,16,8,1);
}
//工作状态栏
void workstate()
{
//lcd_line(0,110,239,110,1);
wrchar(18-2-2-1,15,run);
wrchar(22-2-1,15,rxd);
wrchar(26-2+1,15,txd);
}
void lightflashon()
{
workstate();
hanzipic(19-1-1,120,lighton,8,8,1);
hanzipic(19+4,120,lighton,8,8,1);
hanzipic(19+8+1+1,120,lighton,8,8,1);
LEDRUN = 0; //run led off
}
void lightflashoff()
{
offnum++;
if (offnum == 2)
{
offnum = 0;
workstate();
hanzipic(19-1-1,120,lightoff,8,8,1);
hanzipic(19+4,120,lightoff,8,8,1);
hanzipic(19+8+1+1,120,lightoff,8,8,1);
LEDRUN = 1; //run led on
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -