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

📄 液晶多级菜单实现方法_rar cxlcdnew_c.htm

📁 液晶多级菜单的实现方法: 使用C语言编程 简单实用易懂 接口方便 初学者最好的学习菜单的资料
💻 HTM
📖 第 1 页 / 共 5 页
字号:
						} 
					break; 
					// 
			case	KEY_LEFT://KEY_LEFT,	KEY_DOWN,	KEY_RIGHT, 
					if((KeyTab[iMenuID].KeyTab_PressUp!=999)&&(iMenuNextID!=999)) 
						{ 
						KeyTab[iMenuID].KeyTab_PressOk=KeyTab[iMenuNextID].KeyTab_PressUp; 
						iMenuNextID=KeyTab[iMenuNextID].KeyTab_PressUp; 
						JudgeHLight(); 
						} 
					break; 
			case	KEY_DOWN: 
					if((KeyTab[iMenuID].KeyTab_PressDown!=999)&&(iMenuNextID!=999)) 
						{ 
						KeyTab[iMenuID].KeyTab_PressOk=KeyTab[iMenuNextID].KeyTab_PressDown; 
						iMenuNextID=KeyTab[iMenuNextID].KeyTab_PressDown; 
						JudgeHLight(); 
						} 
					break; 
			case	KEY_RIGHT: 
					if((KeyTab[iMenuID].KeyTab_PressDown!=999)&&(iMenuNextID!=999)) 
						{ 
						KeyTab[iMenuID].KeyTab_PressOk=KeyTab[iMenuNextID].KeyTab_PressDown; 
						iMenuNextID=KeyTab[iMenuNextID].KeyTab_PressDown; 
						JudgeHLight(); 
						} 
					break; 
					// 
			case	KEY_1://KEY_1,		KEY_2,		KEY_3, 
					break; 
			case	KEY_2: 
					break; 
			case	KEY_3: 
					break; 
			case	KEY_4://KEY_4,		KEY_5,		KEY_6, 
					break; 
			case	KEY_5: 
					break; 
			case	KEY_6: 
					break; 
			case	KEY_7://KEY_7,		KEY_8,		KEY_9, 
					break; 
			case	KEY_8: 
					break; 
			case	KEY_9: 
					break; 
			case	KEY_XING://KEY_XING,	KEY_0,		KEY_JING, 
					break; 
			case	KEY_0: 
					break; 
			case	KEY_JING: 
					break; 
			case	KEY_POWER://KEY_POWER,	KEY_NULL 
					break; 
			case	KEY_NULL: 
					MakeBox(3,3,5,12); 
					break; 
					// 
			default: 
					break; 
			} 
		b_KeyInt=0; 
		} 
	if((b_Arrive1S==1)&&(iMenuID==MENU_FACE)) 
		{ 
		ReadTime(); 
		// 
		ShowDesktopTime(); 
		// 
		b_Arrive1S=0; 
		} 
	} 
} 
void isr_ex0(void)  interrupt 0 using 1 
{ 
	b_KeyInt=1; 
	// 
	cTemp_ex0=0xff; 
	// 
	DelayMs(20); 
	ReadyForKey(); 
	cTemp_ex0=XBYTE[Addr_Key]; 
	// 
    cTemp_ex0=cTemp_ex0&0x3f; 
    switch(cTemp_ex0) 
	    { 
	    case        0x3e://第一行 
	        NowKey=0x10; 
	        break; 
	    case        0x3d://第二行 
	        NowKey=0x20; 
	        break; 
	    case        0x3b://第三行 
	        NowKey=0x30; 
	        break; 
	    case        0x37://第四行 
	        NowKey=0x40; 
	        break; 
	    case        0x2f://第五行 
	        NowKey=0x50; 
	        break; 
	    case        0x1f://第六行 
	        NowKey=0x60; 
	        break; 
	    default: 
			NowKey=0x00; 
	        break; 
	    } 
	// 
	KEYROW1=0; 
	KEYROW2=1; 
	KEYROW3=1; 
	cTemp_ex0=XBYTE[Addr_Key]; 
    // 
	cTemp_ex0&=0x3f; 
	if(cTemp_ex0!=0x3f) 
		{ 
		NowKey=NowKey|0x01; 
		} 
	else 
		{ 
		KEYROW1=1; 
		KEYROW2=0; 
		KEYROW3=1; 
		cTemp_ex0=XBYTE[Addr_Key]; 
	    // 
			cTemp_ex0&=0x3f; 
			if(cTemp_ex0!=0x3f) 
				{ 
				NowKey=NowKey|0x02; 
				} 
			else 
				{ 
				KEYROW1=1; 
				KEYROW2=1; 
				KEYROW3=0; 
				cTemp_ex0=XBYTE[Addr_Key]; 
	    		cTemp_ex0&=0x3f; 
				if(cTemp_ex0!=0x3f) 
					{ 
					NowKey=NowKey|0x03; 
					} 
				else 
					{ 
					BitValue=XBYTE[Addr_Key]; 
					if(!bPowerOff) 
						{ 
						NowKey=0x71; 
						} 
					else 
						{ 
						NowKey=0x00; 
						} 
					} 
				} 
		} 
	// 
	do 
        { 
		DelayMs(100); 
        }while(!KEYINT); 
	// 
		IE0=0;//清外中断0请求 
} 
// 
void isr_t0(void)   interrupt 1 using 2 
{ 
	TL0=TL0data; 
	TH0=TH0data; 
	iT0_1S+=20;//因为定时器的定时为20Ms一次 
	if(iT0_1S>=1000) 
		{ 
		iT0_1S=0; 
		b_Arrive1S=1; 
		} 
} 
// 
void isr_ex1(void)  interrupt 2 using 1 
{ 
    _nop_(); 
} 
// 
void isr_t1(void)   interrupt 3 using 2 
{ 
    _nop_(); 
} 
// 
void isr_ser(void)  interrupt 4 using 3 
{ 
if(TI) 
	{ 
	if((TxNum--)>0) 
		{ 
		SBUF=Send232Buffer[TxPos++]; 
		} 
	else 
		{ 
		TxNum=0; 
		TxPos=0; 
		} 
	// 
	TI=0; 
	} 
else 
	{ 
	RI=0; 
	RxNow=SBUF; 
	Rev232Buffer[RxPos++]=RxNow; 
	if(RxPos>=255) 
		{ 
		RxPos=0; 
		} 
	// 
	if(!b_ReceiveOver) 
		{ 
		switch(RxStep) 
			{ 
			case	0://帧头:55 55 
				if(RxNow==0x55) 
					{ 
					if(RxPrev==0x55) 
						{ 
						RxStep=1; 
						} 
					else 
						{ 
						RxPrev=RxNow; 
						RxPos=0; 
						Rev232Buffer[RxPos++]=RxNow; 
						RxStep=0; 
						} 
					} 
				else 
					{ 
					RxStep=0; 
					RxPos=0; 
					REN=1; 
					} 
				break; 
			case	1://命令帧和数据帧的判断 
				if((RxNow&0x80)==0) 
					{ 
					RxStep=3; 
					} 
				else 
					{ 
					RxPrev=RxNow; 
					RxStep=2; 
					} 
				break; 
			case	2://命令帧,第二个命令字(和第一个命令字相同) 
				if(RxNow==RxPrev) 
					{ 
					RxStep=7; 
					} 
				else 
					{ 
					RxStep=0; 
					RxPos=0; 
					REN=1; 
					} 
				break; 
			case	3://数据帧,帧长度 
				RxDataLenght=RxNow; 
				RxStep=4; 
				break; 
			case	4://数据帧,数据段 
				RxDataLenght--; 
				if(RxDataLenght==0) 
					{ 
					RxStep=5; 
					} 
				break; 
			case	5://数据帧,累加和 
				RxStep=6; 
				break; 
			case	6://数据帧,异或和 
				RxStep=8; 
				break; 
			case	7://命令帧,累加和 
				RxStep=8; 
				break; 
			case	8://帧尾:aa aa 
				if(RxNow==0xaa) 
					{ 
					if(RxPrev==0xaa) 
						{ 
						b_ReceiveOver=1; 
						REN=0; 
						} 
					else 
						{ 
						RxPrev=RxNow; 
						} 
					} 
				else 
					{ 
					RxStep=0; 
					RxPos=0; 
					REN=1; 
					} 
				break; 
			default: 
				RxStep=0; 
				RxPos=0; 
				REN=1; 
				break; 
			} 
		} 
	} 
} 
// 
void UartProcess() 
{ 
// 
cUartTemp1=0; 
cUartTemp2=0; 
cUartTemp3=0; 
cUartFunSn=0xff; 
// 
cUartTemp1=Rev232Buffer[0]; 
cUartTemp2=Rev232Buffer[1]; 
if((cUartTemp1==0x55)&(cUartTemp2==0x55)) 
	{ 
	cUartTemp1=Rev232Buffer[2]; 
	cUartTemp1&=0x80; 
	if(cUartTemp1!=0) 
		{//命令帧 
		cUartTemp1=Rev232Buffer[2]; 
		cUartTemp2=Rev232Buffer[3]; 
		if(cUartTemp1==cUartTemp2) 
			{ 
			cUartTemp3=cUartTemp1+cUartTemp2; 
			cUartTemp1=Rev232Buffer[4]; 
			if(cUartTemp1==cUartTemp3) 
				{ 
				cUartTemp1=Rev232Buffer[5]; 
				cUartTemp2=Rev232Buffer[6]; 
				if((cUartTemp1==0xaa)&&(cUartTemp2=0xaa)) 
					{ 
					cUartFunSn=Rev232Buffer[2]; 
					} 
				} 
			} 
		} 
	else 
		{//数据帧 
		cUartAddSum=Rev232Buffer[2]+Rev232Buffer[3]; 
		cUartXorSum=Rev232Buffer[2]^Rev232Buffer[3]; 
		cUartDataLenght=Rev232Buffer[3]; 
		for(i_uart=4;i_uart<(cUartDataLenght+4);i_uart++) 
			{ 
			cUartTemp1=Rev232Buffer[i_uart]; 
			cUartAddSum+=cUartTemp1; 
			cUartXorSum^=cUartTemp1; 
			} 
		cUartTemp1=Rev232Buffer[cUartDataLenght+4]; 
		cUartDataLenght++; 
		cUartTemp2=Rev232Buffer[cUartDataLenght+4]; 
		cUartDataLenght++; 
		if((cUartTemp1==cUartAddSum)&&(cUartTemp2==cUartXorSum)) 
			{ 
			cUartTemp1=Rev232Buffer[cUartDataLenght+4]; 
			cUartDataLenght++; 
			cUartTemp2=Rev232Buffer[cUartDataLenght+4]; 
			cUartDataLenght++; 
			if((cUartTemp1==0xaa)&&(cUartTemp2==0xaa)) 
				{ 
				cUartFunSn=Rev232Buffer[6]; 
				} 
			} 
		} 
	} 
switch(cUartFunSn) 
	{ 
	case	0xa5: 
	case	0xa6://我要伪装成座机0xa7 
		IAmZj(); 
		break; 
	case	0xac: 
	case	0xad: 
	case	0xae: 
		IAmOk(); 
		break; 
	case	5: 
		iFlashAddrH=Rev232Buffer[7]; 
		iFlashAddrM=Rev232Buffer[8]; 
		iFlashAddrL=Rev232Buffer[9]; 
		iFlashRdWrNum=Rev232Buffer[10]; 
		// 
		i_uart=iFlashAddrM; 
		i_uart=(i_uart<<8)&0xff00; 
		FlashSectorRd(i_uart,Addr_FlashReadBuffer1); 
		// 
		i_uart=iFlashAddrM+1; 
		i_uart=(i_uart<<8)&0xff00; 
		FlashSectorRd(i_uart,Addr_FlashReadBuffer2); 
		// 
		Make05Answer(); 
		// 
		break; 
	case	6: 
		iFlashAddrH=Rev232Buffer[7]; 
		iFlashAddrM=Rev232Buffer[8]; 
		iFlashAddrL=Rev232Buffer[9]; 
		iFlashRdWrNum=Rev232Buffer[10]; 
		// 
		i_uart=iFlashAddrM; 
		i_uart=(i_uart<<8)&0xff00; 
		FlashSectorRd(i_uart,Addr_FlashWriteBuffer1); 
		// 
		i_uart=iFlashAddrM+1; 
		i_uart=(i_uart<<8)&0xff00; 
		FlashSectorRd(i_uart,Addr_FlashWriteBuffer2); 
		// 
		cUartTemp1=iFlashRdWrNum; 
		iUartTemp1=iFlashAddrL; 
		cUartTemp2=0; 
		while(cUartTemp1>0) 
			{ 
			XBYTE[Addr_FlashWriteBuffer1+iUartTemp1]=Rev232Buffer[11+cUartTemp2]; 
			cUartTemp1--; 
			iUartTemp1++; 
			cUartTemp2++; 
			} 
		// 
		i_uart=iFlashAddrM; 
		i_uart=(i_uart<<8)&0xff00; 
		FlashSectorWr(Addr_FlashWriteBuffer1,i_uart); 
		// 
		i_uart=iFlashAddrM+1; 
		i_uart=(i_uart<<8)&0xff00; 
		FlashSectorWr(Addr_FlashWriteBuffer2,i_uart); 
		// 
		Make06Answer(); 
		break; 
	case	7: 
		ReadTime(); 
		Make07Answer(); 
		break; 
	case	8: 
		//               5     7  8  9  10 11 12 
		//55 55 03 09 00 CF 08 03 11 11 19 39 15 6F FB AA AA 
		clock[0]=0xa2;//I2C address 
		clock[1]=0x02;//address 
		clock[8]=Rev232Buffer[7];//year 
		clock[7]=Rev232Buffer[8];//month 
		clock[5]=Rev232Buffer[9];//date 
		clock[4]=Rev232Buffer[10];//hours 
		clock[3]=Rev232Buffer[11];//minutes 
		clock[2]=Rev232Buffer[12];//seconds 
		set_time(); 
        Make08Answer(); 
		break; 
	default: 
		IAmUnKnow(); 
		RxStep=0; 
		RxPos=0; 
		break; 
	} 
} 
// 
void IAmZj() 
{ 
	Send232Buffer[0]=0x55; 
	Send232Buffer[1]=0x55; 
	Send232Buffer[2]=0xa7; 
	Send232Buffer[3]=0xa7; 
	Send232Buffer[4]=0x4e; 
	Send232Buffer[5]=0xaa; 
	Send232Buffer[6]=0xaa; 
	TxPos=0; 
	TxNum=7; 
	TI=1; 
} 
void IAmOk() 
{ 
	Send232Buffer[0]=0x55; 
	Send232Buffer[1]=0x55; 
	Send232Buffer[2]=0x80; 
	Send232Buffer[3]=0x80; 
	Send232Buffer[4]=0x00; 
	Send232Buffer[5]=0xaa; 
	Send232Buffer[6]=0xaa; 
	TxPos=0; 
	TxNum=7; 
	TI=1; 
} 
void IAmUnKnow() 
{ 
	Send232Buffer[0]=0x55; 
	Send232Buffer[1]=0x55; 
	Send232Buffer[2]=0x84; 
	Send232Buffer[3]=0x84; 
	Send232Buffer[4]=0x08; 
	Send232Buffer[5]=0xaa; 
	Send232Buffer[6]=0xaa; 
	TxPos=0; 
	TxNum=7; 
	TI=1; 
} 
// 
void FlashSectorWr(unsigned int SourceXRamAddr,unsigned int TargetFlashAddr) 
{ 
// 

⌨️ 快捷键说明

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