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

📄 c51_menu.txt

📁 c51多级菜单源码*****************************************************************************
💻 TXT
📖 第 1 页 / 共 3 页
字号:
  }
 if(b_ReceiveOver)
  {
  //
  UartProcess();
  //
  b_ReceiveOver=0;
  RxStep=0;
  RxPos=0;
  REN=1;
  }
 //
 if(b_KeyInt)
  {
  switch(NowKey)
   {
   case KEY_OK://KEY_OK,  KEY_UP,  KEY_ESC,
     if(KeyTab[iMenuID].KeyTab_PressOk!=999)
      {
      iMenuID=KeyTab[iMenuID].KeyTab_PressOk;
      iMenuNextID=KeyTab[iMenuID].KeyTab_PressOk;
      JudgeHLight();
      }
     KeyFuncPtr=KeyTab[iMenuID].CurrentOperate;
        (*KeyFuncPtr)();    //执行当前按键的操作
     break;
   case KEY_UP:
     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_ESC:
     //
     if(KeyTab[iMenuID].KeyTab_PressEsc!=999)
      {
      iMenuID=KeyTab[iMenuID].KeyTab_PressEsc;
      iMenuNextID=KeyTab[iMenuID].KeyTab_PressOk;
      JudgeHLight();
      KeyFuncPtr=KeyTab[iMenuID].CurrentOperate;
         (*KeyFuncPtr)();    //执行当前按键的操作
      }
     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;

⌨️ 快捷键说明

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