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

📄 menu.c

📁 单片机51环境下的字库代码122*32点阵的液晶显示
💻 C
字号:
#include "lcd.h"
#include "stdio.h"
#include "keyscan.h"
#include "menu.h"
#include "DVDCTRL.h"
unsigned char code MenuSize[]={2,4,6};
char code *menu0[]={"SIGNAL","OUTPUT"};
char code *menu1[]={"HDTV1","HDTV2","STEP","GRID"};
char code *menu2[]={"480p/60","480p/50","720p/60","720p/50","1080/60","1080/50"};
code void (*Menu1Func[])()={NULL,NULL,NULL,NULL};
code void (*Menu2Func[])()={NULL,NULL,NULL,NULL};
DisMenu(unsigned char CurMenuId,unsigned char CurMenuItem)
{
	char code **pmenu;
	unsigned char msize;
	unsigned char pg,v,i;

	switch(CurMenuId)
	{
	case 0: 
		pmenu=menu0;
		msize=MenuSize[0];
		break;
	case 1: 
		pmenu=menu1;
		msize=MenuSize[1];
		break;
	case 2:
		pmenu=menu2;
		msize=MenuSize[2];
		break;
	default: 
		pmenu=menu0;
		msize=MenuSize[0];
		break;	
	}

	pg=CurMenuItem/8;
	v=CurMenuItem%8;
	LCDClear();
	for(i=0;i<8;i++)
	{
		if(pg*8+i>=msize)break;
		if(v==i)LCDDrawText8(pmenu[pg*8+i],61*(i%2),8*(i/2),DrawType_NotNormal);
		else LCDDrawText8(pmenu[pg*8+i],61*(i%2),8*(i/2),DrawType_Normal);
	}
}
void Proc()
{
    unsigned long code DelayTime=400000;//7s=400000
	unsigned char CurMenuId=0,CurMenuItem=0;
	unsigned long count=DelayTime;

	
	DisMenu(CurMenuId,CurMenuItem);
	while(count--)
	{
		unsigned char KeyVal;
	
		KeyVal=KeyUpScan();
		switch(KeyVal)
		{
		case 0x1:											//<<
			count=DelayTime;
			if(CurMenuItem>0)CurMenuItem--;
			else if(CurMenuItem==0)CurMenuItem=MenuSize[CurMenuId]-1;
			KeyVal=0;
			DisMenu(CurMenuId,CurMenuItem);
			break;
		case 0x2:											//==
			count=DelayTime;
			if(CurMenuItem/2<MenuSize[CurMenuId]/2-1)CurMenuItem+=2;
			else if(CurMenuItem/2>=MenuSize[CurMenuId]/2-1)CurMenuItem=CurMenuItem%2;
			DisMenu(CurMenuId,CurMenuItem);
			break;	
		case 0x4:											//>>
			count=DelayTime;
			if(CurMenuItem<MenuSize[CurMenuId]-1)CurMenuItem++;
			else if(CurMenuItem==MenuSize[CurMenuId]-1)CurMenuItem=0;
			DisMenu(CurMenuId,CurMenuItem);
			break;										
		case 0x8:											//set
		
		count=DelayTime;
			break;
		case 0x10:											//ok									
			count=DelayTime;
			if(CurMenuId==0)CurMenuId=CurMenuItem+1;
			else if(CurMenuId==1){ChgCtrlSignal(CurMenuItem);return ;}
			else if(CurMenuId==2){SetCtrlMode(CurMenuItem,0);SetCtrlSignal(CurMenuItem,0);return ;}
		/*	else 
			{
				void (**pMenuFunc)();
				if(CurMenuId==1)pMenuFunc=Menu1Func;
				else if(CurMenuId==2)pMenuFunc=Menu2Func;
				if(pMenuFunc[CurMenuItem]!=NULL)
					pMenuFunc[CurMenuItem]();
						
				return ;
			}*/
			DisMenu(CurMenuId,CurMenuItem);
			break;
		case 0x20:											//A
			count=DelayTime;
			if(CurMenuItem>1)CurMenuItem-=2;
			else if(CurMenuItem<=1)CurMenuItem=(MenuSize[CurMenuId]/2-1)*2+CurMenuItem;
			DisMenu(CurMenuId,CurMenuItem);
			break;
		case 0x40:        								//cancel	
			count=DelayTime;
			if(CurMenuId==0)return;
			else CurMenuId=0;
			DisMenu(CurMenuId,CurMenuItem);
			break;		
		default:
			count--;
		break;
		}
	}

}

⌨️ 快捷键说明

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