📄 menu.c
字号:
#include<reg52.h>
#include"12864-pin.h"
void menu8();
void menu_operate(void);
bit compare(uchar *key);
extern bit VOI; // 声音开关
//////////////////////////////////////////////////////////////////////
void menu8_2_1(void)
{
clrddram();
send_i(0x0c); //关光标;
gotoxy(1,1);
LCD_puts("输入密码错误",12);
}
void menu8_2_2(void)
{
clrddram();
send_i(0x0c); //关光标;
gotoxy(1,1);
LCD_puts("两次密码不同",12);
}
void menu8_2_3(void)
{
clrddram();
send_i(0x0c); //关光标;
gotoxy(1,1);
LCD_puts("密码修改成功",12);
}
////////////////////////////////////////////////////////////////////
void menu8_2_4()
{
clrddram();
send_i(0x0c); //关光标;
gotoxy(1,0);
LCD_puts("密码修改失败",12);
gotoxy(1,1);
LCD_puts("请使用万能开机",15);
gotoxy(1,2);
LCD_puts("方式恢复密码!",14);
}
//////////////////////////////////////////////////////////////////////////
/* 背光设置 *////////*/
void menu8_1(void)
{
uchar i=0;
clrddram();
send_i(0x0c); //关光标;
gotoxy(0,0);
LCD_puts("背光开",6);
gotoxy(0,1);
LCD_puts("背光关",6);
while(1)
{
fill_GD(0,0+i,4,16,0xff); // 反白;
delay(200);
while(P1==0xff);
if(p17==0)
{
if(VOI==1) voice(); // 按键声音
break; // 按P17跳到前一菜单
}
if(p14==0)
{
if(VOI==1) voice(); // 按键声音
if(i==0) p26=0;
else p26=1;
}
if(p15==0)
{
if(VOI==1) voice(); // 按键声音
fill_GD(0,0+i,4,16,0x00); // 清除反白;
if(i==0)i=16; // 反白下调
else i=0;
}
if(p16==0)
{
if(VOI==1) voice(); // 按键声音
fill_GD(0,0+i,4,16,0x00); // 清除反白;
if(i==0) i=16;
else i=0;
}
}
}
////////////////////////////////////////////////////////////////////////
//* 密码设置 */
void menu8_2(void)
{
uchar i,key1[6],key2[6],key3[6];
uchar j; // 写入出错次数累计变量
loop1:
clrgdram();
clrddram();
gotoxy(0,0);
LCD_puts("输入密码",9);
gotoxy(0,1);
LCD_puts("输新密码",9);
gotoxy(0,2);
LCD_puts("再输一遍",9);
send_i(0x0e); //开光标;
send_i(0x84); // 设置DDRAM 光标位置;
LCD_puts(" ",1);
for(i=0;i<6;) // 输入密码
{
key1[i]=gotkey();
if(VOI==1) voice(); // 按键声音
if(key1[i]>11) goto loop; //按P17反回上一菜单
{
LCD_puts("*",1);
i++;
}
}
if(compare(key1)==0)
{
menu8_2_1(); // 密码错误
delay(800);
goto loop1;
}
else // 输入正确则继续输入
{
send_i(0x94); // 设置DDRAM 光标位置;
LCD_puts(" ",1);
for(i=0;i<6;) // 输新密码
{
key2[i]=gotkey();
if(VOI==1) voice(); // 按键声音
if(key2[i]>11) goto loop; //按P17反回上一菜单
{
LCD_puts("*",1);
i++;
}
}
send_i(0x8c); // 设置DDRAM 光标位置;
LCD_puts(" ",1);
for(i=0;i<6;) // 再输一遍
{
key3[i]=gotkey();
if(VOI==1) voice(); // 按键声音
if(key3[i]>11) goto loop; //按P17反回上一菜单
{
LCD_puts("*",1);
i++;
}
}
///////////////////////////////
for(i=0;i<6;i++) // 比较两次输入的密码
{
if(key2[i]!=key3[i])
{
i=10;
break;
}
}
if(i==10) // 两次输入密码不一样
{
menu8_2_2();
delay(800);
goto loop1;
}
else
{
j=0;
do{
for(i=0;i<6;i++) write_appoint(i,key2[i]); // 修改成功,保存到24C02
j++;
if(j==5)
{
for(i=0;i<6;i++) key1[i]=read_appoint(i); // 如果连续四次写入出错刚读出24C02数据到key1[]
menu8_2_4();
while(p17==1); // 按P17跳出画面
goto loop;
}
}while(compare(key2)==0); // 当密码写入出错时重复写入直到正确
menu8_2_3();
delay(800);
}
}
loop: send_i(0x0c); //关光标;
}
/////////////////////////////////////////////////////////////////////////////
void menu8_3()
{
uchar i=0;
clrgdram();
clrddram();
send_i(0x0c); //关光标;
gotoxy(0,0);
LCD_puts("声音开",6);
gotoxy(0,1);
LCD_puts("声音关",6);
while(1)
{
fill_GD(0,0+i,4,16,0xff); // 反白;
delay(200);
while(P1==0xff);
if(p17==0)
{
if(VOI==1) voice(); // 按键声音
break; // 按P17跳到前一菜单
}
if(p14==0)
{
if(VOI==1) voice(); // 按键声音
if(i==0) VOI=1;
else VOI=0;
}
if(p15==0)
{
if(VOI==1) voice(); // 按键声音
fill_GD(0,0+i,4,16,0x00); // 清除反白;
if(i==0)i=16; // 反白下调
else i=0;
}
if(p16==0)
{
if(VOI==1) voice(); // 按键声音
fill_GD(0,0+i,4,16,0x00); // 清除反白;
if(i==0) i=16;
else i=0;
}
}
}
/////////////////////////////////////////////////////////////////////////////////
void menu1(void)
{
fill_GD(0,0,4,32,0); // 清除反白
clrddram(); // 文本模式缓冲区清除
LCD_puts("系统设计中!",11);
delay(800);
while(p17==1);
if(VOI==1) voice(); // 按键声音
}
void menu2(void)
{
fill_GD(0,16,4,16,0x00); // 清除反白;
clrddram(); // 文本模式缓冲区清除
LCD_puts("系统设计中!",11);
delay(800);
while(p17==1);
if(VOI==1) voice(); // 按键声音
}
void menu3(void)
{
fill_GD(0,32,4,16,0x00); // 清除反白;
clrddram(); // 文本模式缓冲区清除
LCD_puts("系统设计中!",11);
delay(800);
while(p17==1);
if(VOI==1) voice(); // 按键声音
}
void menu4(void)
{
fill_GD(0,48,4,16,0x00); // 清除反白;
clrddram(); // 文本模式缓冲区清除
LCD_puts("系统设计中!",11);
delay(800);
while(p17==1);
if(VOI==1) voice(); // 按键声音
}
void menu5(void)
{
fill_GD(4,0,4,16,0x00); // 清除反白;
clrddram(); // 文本模式缓冲区清除
LCD_puts("系统设计中!",11);
delay(800);
while(p17==1);
if(VOI==1) voice(); // 按键声音
}
void menu6(void)
{
fill_GD(4,16,4,16,0x00); // 清除反白;
clrddram(); // 文本模式缓冲区清除
LCD_puts("系统设计中!",11);
delay(800);
while(p17==1);
if(VOI==1) voice(); // 按键声音
}
void menu7(void)
{
fill_GD(4,32,4,16,0x00); // 清除反白;
clrddram(); // 文本模式缓冲区清除
LCD_puts("系统设计中!",11);
delay(800);
while(p17==1);
if(VOI==1) voice(); // 按键声音
}
void menu8(void)
{
uchar i=0;
// fill_GD(4,48,4,16,0x00); // 清除反白;
while(1)
{
clrgdram();
clrddram(); // 文本模式缓冲区清除
gotoxy(0,0);
LCD_puts("背光设置",8);
gotoxy(0,1);
LCD_puts("密码设置",8);
gotoxy(0,2);
LCD_puts("按键声音",8);
fill_GD(0,0+i,4,16,0xff); // 反白;
delay(200);
while(P1==0xff);
if(p17==0)
{
if(VOI==1) voice(); // 按键声音
break; // 按P17跳到主菜单
}
if(p14==0)
{
if(VOI==1) voice(); // 按键声音
switch(i)
{
case 0: menu8_1(); break;
case 16: menu8_2(); break;
case 32: menu8_3(); break;
default : break;
}
delay(100); // 防止连续返回菜单
}
if(p15==0)
{
if(VOI==1) voice(); // 按键声音
fill_GD(0,0+i,4,16,0x00); // 清除反白;
i+=16; // 反白下调
if(i==48)i=0;
}
if(p16==0)
{
if(VOI==1) voice(); // 按键声音
fill_GD(0,0+i,4,16,0x00); // 清除反白;
if(i==0) i=32;
else i-=16; // 反白上调
}
}
}
/////////////////////////////////////////////////////////////////////
void menu_main(void) // 主菜单;
{
clrgdram(); // 液晶图形缓冲区清除
clrddram(); // 文本模式缓冲区清除
send_i(0x0c); //关光标;
gotoxy(0,0); //设置文本输入位置;
LCD_puts("万年历",6);
gotoxy(0,1);
LCD_puts("秒表",4);
gotoxy(0,2);
LCD_puts("记事本",6);
gotoxy(0,3);
LCD_puts("计算器",6);
gotoxy(4,0);
LCD_puts("电话本",6);
gotoxy(4,1);
LCD_puts("音乐",4);
gotoxy(4,2);
LCD_puts("游戏",4);
gotoxy(4,3);
LCD_puts("设置",4);
}
/*////////////////////////////////////////////////////////////////
//////操作菜单////////////////////////////////////*////////*/////*/
void menu_operate(void)
{
uchar j=0; //菜单左右变量;
uchar menu_updown=0; //菜单上下按键;
while(1)
{
menu_main(); //主菜单显示
fill_GD(0+j,0+menu_updown,4,16,0XFF); // 反白;
delay(100); // 防止连续按键闪动过快
while(P1==0xff);
if(p14==0) // 选中菜单
{
if(VOI==1) voice(); // 按键声音
switch(menu_updown)
{
case 0: if(j==0) menu1(); else menu5(); break;
case 16: if(j==0) menu2(); else menu6(); break;
case 32: if(j==0) menu3(); else menu7(); break;
case 48: if(j==0) menu4(); else menu8(); break;
default : break;
}
}
if(p15==0) // 菜单下调
{
if(VOI==1) voice(); // 按键声音
fill_GD(0+j,0+menu_updown,4,16,0x00); // 清除反白;
menu_updown+=16;
}
if(p16==0) // 菜单上调
{
if(VOI==1) voice(); // 按键声音
fill_GD(0+j,0+menu_updown,4,16,0x00);
if(menu_updown==0)
{
if(j==0)j=4;
else j=0;
menu_updown=48;
}
else menu_updown-=16;
}
if(menu_updown==64)
{
menu_updown=0;
if(j!=4)j=4;
else j=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -