📄 液晶多级菜单实现方法_rar cxlcdnew_c.htm
字号:
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 + -