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

📄 menu.c

📁 这是一个我以前用AT89S52单片机做的128-64液晶屏的驱动显示程序
💻 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 + -