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

📄 c51_menu.txt

📁 c51多级菜单源码*****************************************************************************
💻 TXT
📖 第 1 页 / 共 3 页
字号:
  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)
{
//
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++)

⌨️ 快捷键说明

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