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

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

📁 液晶多级菜单的实现方法: 使用C语言编程 简单实用易懂 接口方便 初学者最好的学习菜单的资料
💻 HTM
📖 第 1 页 / 共 5 页
字号:
cPageAddr=(unsigned char)((TargetFlashAddr>>14)&0x0003); 
iSectorAddr=(TargetFlashAddr&0x3f00)|0x8000; 
iRamToFlashAddr=SourceXRamAddr&0xff00; 
//解锁 
XBYTE[Addr_XFlashSector]=0x01; 
XBYTE[0x9555]=0xaa; 
XBYTE[Addr_XFlashSector]=0x00; 
XBYTE[0xaaaa]=0x55; 
XBYTE[Addr_XFlashSector]=0x01; 
XBYTE[0x9555]=0xa0; 
// 
XBYTE[Addr_XFlashSector]=cPageAddr; 
for(i_FlashWr=iSectorAddr;i_FlashWr<=(iSectorAddr+0xff);i_FlashWr++) 
	{ 
	c1_FlashWr=XBYTE[iRamToFlashAddr++]; 
	XBYTE[i_FlashWr]=c1_FlashWr; 
	} 
DelayMs(10); 
} 
void FlashSectorRd(unsigned int SourceFlashAddr,unsigned int TargetXRamAddr) 
{ 
// 
cPageAddr=(unsigned char)((SourceFlashAddr>>14)&0x0003); 
iSectorAddr=(SourceFlashAddr&0x3f00)|0x8000; 
iFlashToRamAddr=TargetXRamAddr&0xff00; 
// 
XBYTE[Addr_XFlashSector]=cPageAddr; 
for(i_FlashRd=iSectorAddr;i_FlashRd<=(iSectorAddr+0xff);i_FlashRd++) 
	{ 
	c1_FlashRd=XBYTE[i_FlashRd]; 
	XBYTE[iFlashToRamAddr++]=c1_FlashRd; 
	} 
}// 
// 
void Make05Answer() 
{ 
	i_Make05Answer=iFlashAddrL; 
	cUartTemp2=0; 
	Send232Buffer[cUartTemp2++]=0x55; 
	Send232Buffer[cUartTemp2++]=0x55; 
	Send232Buffer[cUartTemp2++]=0x03; 
	Send232Buffer[cUartTemp2++]=4+iFlashRdWrNum; 
	Send232Buffer[cUartTemp2++]=0x00; 
	Send232Buffer[cUartTemp2++]=Rev232Buffer[5];//********* 
	Send232Buffer[cUartTemp2++]=0x05; 
	Send232Buffer[cUartTemp2++]=iFlashRdWrNum; 
	cUartTemp1=iFlashRdWrNum; 
	while((cUartTemp1--)!=0) 
		{ 
		Send232Buffer[cUartTemp2++]=XBYTE[Addr_FlashReadBuffer1+i_Make05Answer]; 
		i_Make05Answer++; 
		} 
	cAdd_Make05Answer=Send232Buffer[2]; 
	cXor_Make05Answer=Send232Buffer[2]; 
	for(i_Make05Answer=3;i_Make05Answer<cUartTemp2;i_Make05Answer++) 
		{ 
		cAdd_Make05Answer=cAdd_Make05Answer+Send232Buffer[i_Make05Answer]; 
		cXor_Make05Answer=cXor_Make05Answer^Send232Buffer[i_Make05Answer]; 
		} 
	Send232Buffer[cUartTemp2++]=cAdd_Make05Answer; 
	Send232Buffer[cUartTemp2++]=cXor_Make05Answer; 
	Send232Buffer[cUartTemp2++]=0xaa; 
	Send232Buffer[cUartTemp2++]=0xaa; 
	TxPos=0; 
	TxNum=cUartTemp2; 
	TI=1; 
} 
void Make06Answer() 
{//55 55 03 04 00 CE 06 00 DB CF AA AA 
	cUartTemp2=0; 
	Send232Buffer[cUartTemp2++]=0x55; 
	Send232Buffer[cUartTemp2++]=0x55; 
	Send232Buffer[cUartTemp2++]=0x03; 
	Send232Buffer[cUartTemp2++]=0x04; 
	Send232Buffer[cUartTemp2++]=0x00; 
	Send232Buffer[cUartTemp2++]=Rev232Buffer[5];//********* 
	Send232Buffer[cUartTemp2++]=0x06; 
	Send232Buffer[cUartTemp2++]=0x00; 
	cAdd_Make05Answer=Send232Buffer[2]; 
	cXor_Make05Answer=Send232Buffer[2]; 
	for(i_Make05Answer=3;i_Make05Answer<=7;i_Make05Answer++) 
		{ 
		cAdd_Make05Answer=cAdd_Make05Answer+Send232Buffer[i_Make05Answer]; 
		cXor_Make05Answer=cXor_Make05Answer^Send232Buffer[i_Make05Answer]; 
		} 
	Send232Buffer[cUartTemp2++]=cAdd_Make05Answer; 
	Send232Buffer[cUartTemp2++]=cXor_Make05Answer; 
	Send232Buffer[cUartTemp2++]=0xaa; 
	Send232Buffer[cUartTemp2++]=0xaa; 
	TxPos=0; 
	TxNum=cUartTemp2; 
	TI=1; 
} 
// 
unsigned char ReadTime() 
{ 
	for(i_RdTime=0;i_RdTime<9;i_RdTime++) 
		clock[i_RdTime]=0; 
	I2Cstart(); 
	I2Csend(0xA2); 
	if(I2Csuback()==0)return 0; 
	I2Csend(0x02); 
	if(I2Csuback()==0)return 0; 
	I2Cstart(); 
	I2Csend(0xA3); 
	if(I2Csuback()==0)return 0; 
	clock[0]=I2Cread()&0x7f;//seconds 
	I2Cmastack(); 
	clock[1]=I2Cread()&0x7f;//min 
	I2Cmastack(); 
	clock[2]=I2Cread()&0x3f;//hours 
	I2Cmastack(); 
	clock[3]=I2Cread()&0x3f;//day 
	I2Cmastack(); 
	clock[7]=I2Cread()&0x07;//week 
	I2Cmastack(); 
	clock[4]=I2Cread()&0x1f;//mouth 
	I2Cmastack(); 
	clock[5]=I2Cread()&0x7f;//year 
	I2Cnoack(); 
	I2Cstop(); 
	clock[6]=0x20; 
	cClock_Year=clock[5]; 
	cClock_Month=clock[4]; 
	cClock_Day=clock[3]; 
	cClock_Hour=clock[2]; 
	cClock_Minute=clock[1]; 
	cClock_Second=clock[0]; 
	return 1; 
   // 
 
}// 
// 
void I2Cstart(void) 
{ 
   I2C_SCK=0;_nop_();_nop_(); 
   I2C_SDA=1;_nop_();_nop_(); 
   I2C_SCK=1;_nop_();_nop_(); 
   I2C_SDA=0;_nop_();_nop_(); 
   I2C_SCK=0;_nop_();_nop_(); 
   I2C_SDA=1;_nop_();_nop_(); 
   I2C_SCK=1; 
} 
// 
void I2Csend(unsigned char d) 
{ 
   unsigned char i; 
   BitValue1=d; 
   for(i=0;i<8;i++){ 
      I2C_SDA=bBit7; 
      BitValue1<<=1;_nop_();_nop_(); 
      I2C_SCK=1;_nop_();_nop_(); 
      I2C_SCK=0; 
   } 
} 
// 
void I2Cmastack(void) 
{ 
   I2C_SDA=0; 
   I2C_SCK=1;_nop_();_nop_();_nop_(); 
   I2C_SCK=0; 
   I2C_SDA=1; 
} 
// 
unsigned char I2Csuback(void) 
{ 
   unsigned char i; 
   I2C_SDA=1;//_nop_();_nop_(); 
   I2C_SCK=1;_nop_();_nop_(); 
   for(i=0;i<255;i++){ 
      _nop_();_nop_(); 
      if(I2C_SDA==0){ 
         I2C_SCK=0; 
         return 1; 
      } 
   } 
   I2C_SCK=0; 
   return 0; 
} 
// 
unsigned char I2Cread(void) 
{ 
   unsigned char i; 
   BitValue1=0; 
   for(i=0;i<8;i++){ 
      BitValue1<<=1; 
      I2C_SDA=1; 
      I2C_SCK=1;_nop_();_nop_();_nop_(); 
      bBit0=I2C_SDA; 
      I2C_SCK=0; 
   } 
   return BitValue1; 
} 
// 
void I2Cnoack(void) 
{ 
   I2C_SDA=1; 
   I2C_SCK=1;_nop_();_nop_();_nop_(); 
   I2C_SCK=0; 
} 
// 
void I2Cstop(void) 
{ 
   I2C_SCK=0;_nop_();_nop_(); 
   I2C_SDA=0;_nop_();_nop_(); 
   I2C_SCK=1;_nop_();_nop_(); 
   I2C_SDA=1; 
} 
// 
void Make07Answer() 
{//55 55 03 09 00 CF 07 04 11 11 16 09 08 2F D1 AA AA 
	cUartTemp2=0; 
	Send232Buffer[cUartTemp2++]=0x55; 
	Send232Buffer[cUartTemp2++]=0x55; 
	Send232Buffer[cUartTemp2++]=0x03; 
	Send232Buffer[cUartTemp2++]=0x09; 
	Send232Buffer[cUartTemp2++]=0x00; 
	Send232Buffer[cUartTemp2++]=Rev232Buffer[5];//********* 
	Send232Buffer[cUartTemp2++]=0x07; 
	Send232Buffer[cUartTemp2++]=clock[5];//Year 
	Send232Buffer[cUartTemp2++]=clock[4];//Month 
	Send232Buffer[cUartTemp2++]=clock[3];//Day 
	Send232Buffer[cUartTemp2++]=clock[2];//Hour 
	Send232Buffer[cUartTemp2++]=clock[1];//Minute 
	Send232Buffer[cUartTemp2++]=clock[0];//Second 
	cAdd_Make05Answer=Send232Buffer[2]; 
	cXor_Make05Answer=Send232Buffer[2]; 
	for(i_Make05Answer=3;i_Make05Answer<cUartTemp2;i_Make05Answer++) 
		{ 
		cAdd_Make05Answer=cAdd_Make05Answer+Send232Buffer[i_Make05Answer]; 
		cXor_Make05Answer=cXor_Make05Answer^Send232Buffer[i_Make05Answer]; 
		} 
	Send232Buffer[cUartTemp2++]=cAdd_Make05Answer; 
	Send232Buffer[cUartTemp2++]=cXor_Make05Answer; 
	Send232Buffer[cUartTemp2++]=0xaa; 
	Send232Buffer[cUartTemp2++]=0xaa; 
	TxPos=0; 
	TxNum=cUartTemp2; 
	TI=1; 
}// 
// 
unsigned char set_time(void) 
{ 
   I2Cstart(); 
   for(i_RdTime=0;i_RdTime<11;i_RdTime++){ 
      I2Csend(clock[i_RdTime]); 
      if(I2Csuback()==0)return 0; 
   } 
   I2Cstop(); 
   return 1; 
} 
// 
void Make08Answer() 
{//55 55 03 04 00 CF 08 00 DE C0 AA AA 
	cUartTemp2=0; 
	Send232Buffer[cUartTemp2++]=0x55; 
	Send232Buffer[cUartTemp2++]=0x55; 
	Send232Buffer[cUartTemp2++]=0x03; 
	Send232Buffer[cUartTemp2++]=0x04; 
	Send232Buffer[cUartTemp2++]=0x00; 
	Send232Buffer[cUartTemp2++]=Rev232Buffer[5];//********* 
	Send232Buffer[cUartTemp2++]=0x08; 
	Send232Buffer[cUartTemp2++]=0x00; 
	cAdd_Make05Answer=Send232Buffer[2]; 
	cXor_Make05Answer=Send232Buffer[2]; 
	for(i_Make05Answer=3;i_Make05Answer<=7;i_Make05Answer++) 
		{ 
		cAdd_Make05Answer=cAdd_Make05Answer+Send232Buffer[i_Make05Answer]; 
		cXor_Make05Answer=cXor_Make05Answer^Send232Buffer[i_Make05Answer]; 
		} 
	Send232Buffer[cUartTemp2++]=cAdd_Make05Answer; 
	Send232Buffer[cUartTemp2++]=cXor_Make05Answer; 
	Send232Buffer[cUartTemp2++]=0xaa; 
	Send232Buffer[cUartTemp2++]=0xaa; 
	TxPos=0; 
	TxNum=cUartTemp2; 
	TI=1; 
} 
// 
void DispTextLine(unsigned char Row,unsigned char code *MenuText,unsigned char DispAttrib) 
{ 
// 
p_DispTextLine=MenuText; 
col_DispTextLine=1; 
do 
	{ 
	if((Row==1)&&(col_DispTextLine==1))//第一行 
		{ 
		cTextLineTemp1=DispAttrib|S_ZS; 
		} 
	else 
	if((Row==1)&&(col_DispTextLine==14)) 
		{ 
		cTextLineTemp1=DispAttrib|S_YS; 
		} 
	else 
	if((Row==1)&&(col_DispTextLine!=1)&&(col_DispTextLine!=14)) 
		{ 
		cTextLineTemp1=DispAttrib|S_S; 
		} 
	else 
	if((Row==7)&&(col_DispTextLine==1))//第7行 
		{ 
		cTextLineTemp1=DispAttrib|S_ZX; 
		} 
	else 
	if((Row==7)&&(col_DispTextLine==14)) 
		{ 
		cTextLineTemp1=DispAttrib|S_YX; 
		} 
	else 
	if((Row==7)&&(col_DispTextLine!=1)&&(col_DispTextLine!=14)) 
		{ 
		cTextLineTemp1=DispAttrib|S_X; 
		} 
	else 
	if((Row!=1)&&(Row!=7)&&(col_DispTextLine==1))//中间行的左右两边 
		{ 
		cTextLineTemp1=DispAttrib|S_Z; 
		} 
	else 
	if((Row!=1)&&(Row!=7)&&(col_DispTextLine==14)) 
		{ 
		cTextLineTemp1=DispAttrib|S_Y; 
		} 
	else//中间行的剩下的字符 
		{ 
		cTextLineTemp1=DispAttrib; 
		} 
		// 
	DispOneBoxTextChar(Row,col_DispTextLine,*p_DispTextLine,cTextLineTemp1); 
	col_DispTextLine++; 
	p_DispTextLine++; 
	}while(*p_DispTextLine!=0x00); 
} 
// 
void DispMenu_Root() 
{ 
for(cMenuTemp1=0;cMenuTemp1<7;cMenuTemp1++) 
	{ 
	if(cMenuTemp1<4) 
		{ 
		if(iMenuNextID==Menu_RootID[cMenuTemp1]) 
			{ 
			DispTextLine(cMenuTemp1+1,&Menu_Root[cMenuTemp1][0],0); 
			} 
		else 
			{ 
			DispTextLine(cMenuTemp1+1,&Menu_Root[cMenuTemp1][0],1); 
			} 
		} 
	else 
		{ 
		DispTextLine(cMenuTemp1+1,&MenuNULL[0],1); 
		} 
	} 
} 
// 
void DispMenu_View() 
{ 
for(cMenuTemp1=0;cMenuTemp1<7;cMenuTemp1++) 
	{ 
	if(cMenuTemp1<2) 
		{ 
		if(iMenuNextID==Menu_ViewID[cMenuTemp1]) 
			{ 
			DispTextLine(cMenuTemp1+1,&Menu_View[cMenuTemp1][0],0); 
			} 
		else 
			{ 
			DispTextLine(cMenuTemp1+1,&Menu_View[cMenuTemp1][0],1); 
			} 
		} 
	else 
		{ 
		DispTextLine(cMenuTemp1+1,&MenuNULL[0],1); 
		} 
	} 
 
} 
void DispMenu_Operation() 
{ 
for(cMenuTemp1=0;cMenuTemp1<7;cMenuTemp1++) 
	{ 
	if(cMenuTemp1<5) 
		{ 
		if(iMenuNextID==Menu_OperationID[cMenuTemp1]) 
			{ 
			DispTextLine(cMenuTemp1+1,&Menu_Operation[cMenuTemp1][0],0); 
			} 
		else 
			{ 
			DispTextLine(cMenuTemp1+1,&Menu_Operation[cMenuTemp1][0],1); 
			} 
		} 
	else 
		{ 
		DispTextLine(cMenuTemp1+1,&MenuNULL[0],1); 
		} 
	} 
 
 
} 
void DispMenu_Test() 
{ 
for(cMenuTemp1=0;cMenuTemp1<7;cMenuTemp1++) 
	{ 
	if(cMenuTemp1<2) 
		{ 
		if(iMenuNextID==Menu_TestID[cMenuTemp1]) 
			{ 
			DispTextLine(cMenuTemp1+1,&Menu_Test[cMenuTemp1][0],0); 
			} 
		else 
			{ 
			DispTextLine(cMenuTemp1+1,&Menu_Test[cMenuTemp1][0],1); 
			} 
		} 
	else 
		{ 
		DispTextLine(cMenuTemp1+1,&MenuNULL[0],1); 
		} 
	} 
 
} 
void DispMenu_SystemSet() 
{ 
for(cMenuTemp1=0;cMenuTemp1<7;cMenuTemp1++) 
	{ 
	if(cMenuTemp1<2) 
		{ 
		if(iMenuNextID==Menu_SystemSetID[cMenuTemp1]) 
			{ 
			DispTextLine(cMenuTemp1+1,&Menu_SystemSet[cMenuTemp1][0],0); 
			} 
		else 
			{ 
			DispTextLine(cMenuTemp1+1,&Menu_SystemSet[cMenuTemp1][0],1); 
			} 
		} 
	else 
		{ 
		DispTextLine(cMenuTemp1+1,&MenuNULL[0],1); 
		} 
	} 
 
} 
void DispMenu_Debug() 
{ 
for(cMenuTemp1=0;cMenuTemp1<7;cMenuTemp1++) 
	{ 
	if(cMenuTemp1<2) 
		{ 
		if(iMenuNextID==Menu_DebugID[cMenuTemp1]) 
			{ 
			DispTextLine(cMenuTemp1+1,&Menu_Debug[cMenuTemp1][0],0); 
			} 
		else 
			{ 
			DispTextLine(cMenuTemp1+1,&Menu_Debug[cMenuTemp1][0],1); 
			} 
		} 
	else 
		{ 
		DispTextLine(cMenuTemp1+1,&MenuNULL[0],1); 
		} 
	} 
 
} 
// 
void MakeBox(unsigned char row1,unsigned char col1,unsigned char row2,unsigned char col2) 
{ 
for(cLineTemp1=row1;cLineTemp1<=row2;cLineTemp1++) 
	{ 
	for(cLineTemp2=col1;cLineTemp2<=col2;cLineTemp2++) 
		{ 
		cGraphByte[0]=0x00; 
		cGraphByte[1]=0x00; 
		cGraphByte[2]=0x00; 
		cGraphByte[3]=0x00; 
		cGraphByte[4]=0x00; 
		cGraphByte[5]=0x00; 
		cGraphByte[6]=0x00; 
		cGraphByte[7]=0x00; 
		// 
		if((cLineTemp1==row1)&&(cLineTemp2==col1))//左上角 
			{ 
			cGraphByte[0]=0xff; 
			cGraphByte[1]=0x01; 
			cGraphByte[2]=0x01; 
			cGraphByte[3]=0x01; 
			cGraphByte[4]=0x01; 
			cGraphByte[5]=0x01; 
			cGraphByte[6]=0x01; 
			cGraphByte[7]=0x01; 
			} 
		else if((cLineTemp1==row1)&&(cLineTemp2==col2))//右上角 
			{ 
			cGraphByte[0]=0x01; 
			cGraphByte[1]=0x01; 
			cGraphByte[2]=0x01; 
			cGraphByte[3]=0x01; 
			cGraphByte[4]=0x01; 
			cGraphByte[5]=0x01; 
			cGraphByte[6]=0x01; 

⌨️ 快捷键说明

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