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

📄 menu.lst

📁 一个以前开发的实际应用的交通灯控制器程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
 270   3                              {
 271   4                                      PswLock=1;//密码不正确
*** ERROR C202 IN LINE 271 OF IIC[ULTRAL]\MENU.C: 'PswLock': undefined identifier
 272   4                                      DeskTopFlag=1;
 273   4                                      ShowDesk();
 274   4                              }
 275   3                      }       
 276   2              }
 277   1      }
 278          
 279          void SwitchMenuEntry()
 280          {
 281   1      //输入:MenuID
 282   1              //平时设置,节日设置
 283   1              unsigned char xdata k;
 284   1              if(MenuID&0x000f<=0x0002)
 285   1              {//1
 286   2                      if((MenuID&0x00f0)<=0x00c0)
 287   2                      {//2:时段
 288   3                              if((MenuID&0x0f00)<=0x0800)
 289   3                              {//3:
C51 COMPILER V7.50   MENU                                                                  04/03/2007 10:38:50 PAGE 6   

 290   4                                      switch(MenuID&0xf000)
 291   4                                      {
 292   5                                              case 0x1000:
 293   5                                                      ClrPhase();//k
 294   5                                                      return;
 295   5                                              case 0x2000:
 296   5                                                      SetCheDao();//k
 297   5                                                      return;
 298   5                                              case 0x3000:
 299   5                                                      SetAttribTime();//k
 300   5                                                      return;
 301   5                                              default:
 302   5                                                      ;
 303   5                                      }
 304   4                              }
 305   3                              else if((MenuID&0x0f00)==0x0900)//复制时段
 306   3                              {
 307   4                                      CopyPhaseGroup();//k
 308   4                                      return;
 309   4                              }
 310   3                      }
 311   2              }
 312   1              
 313   1              //其他设置
 314   1              if((MenuID&0x000f)==0x0003)
 315   1              {//系统设置
 316   2                      switch(MenuID)
 317   2                      {
 318   3                              case 0x0013://日期设置
 319   3                                      SetSysDate();
 320   3                                      break;
 321   3                              case 0x0023://时间设置
 322   3                                      SetSytTime();
 323   3                                      break;
 324   3                              case 0x0033://允许节日
 325   3                                      k=EPR_Read(ADDR_HOLIDAY_PERMIT);
 326   3                                      k=GetBoolKey(ChosenPos,5,k);
 327   3                                      EPR_Page_0();
 328   3                                      EPR_Write(ADDR_HOLIDAY_PERMIT,k);
 329   3                                      EPR_Page_1();
 330   3                                      break;
 331   3                              case 0x0043://修改节日
 332   3                                      ModifyHoliday();
 333   3                                      break;
 334   3                              case 0x0053://恢复默认
 335   3                                      EPR_Reset();
 336   3                                      break;
 337   3                              case 0x0053://立即上锁
 338   3                                      //EPR_Reset();
 339   3                                      break;
 340   3                              case 0x0063://修改密码
 341   3                                      break;
 342   3                              default;
 343   3                                      ;//MenuID=0;
 344   3                      }
 345   2              }
 346   1              else if((MenuID&0x00f0)==0x0040)
 347   1              {//手动设置
 348   2                      switch(MenuID)
 349   2                      {
 350   3                              case 0x0014://单步运行
 351   3                                      StepSwitch();
C51 COMPILER V7.50   MENU                                                                  04/03/2007 10:38:50 PAGE 7   

 352   3                                      break;
 353   3                              case 0x0024://退出手动
 354   3                                      MeterSta=MSTA_AUTO;
 355   3                                      break;
 356   3                              default:
 357   3                                      ;//     
 358   3                      }
 359   2                      Oncancel();
 360   2              }
 361   1              else if((MenuID&0x00f0)==0x0050)
 362   1              {//绿色通道
 363   2                      GreenWayCtrl();         
 364   2              }
 365   1              Oncancel();
 366   1      }
 367          ///////////////////////////////////////////////////////
 368          //具体的按键处理
 369          void ClrPhase()
 370          {//清除相位
 371   1      //输入:MenuID
 372   1              unsigned int xdata t,t1;
 373   1              if((MenuID&0x000f)==0x0001)
 374   1                      t1=ADDR_GENARAL_SCH;
 375   1              else if((MenuID&0x000f)==0x0002)
 376   1                      t1=ADDR_HOLIDAY_SCH;
 377   1              else
 378   1                      return;
 379   1              t=MenuID&0x00f0;
 380   1              t>>=4;
 381   1              t-=1;
 382   1              t1=t1+t*PHASE_GROUP_LEN;
 383   1              
 384   1              t=MenuID&0x0f00;
 385   1              t>>=8;
 386   1              t-=1;
 387   1              t1=t1+t*PHASE_LEN;
 388   1              
 389   1              for(t=t1;t<t1+PHASE_LEN;t++)
 390   1              {
 391   2                      EPR_Write(t,0xff);
 392   2              }
 393   1      }
 394          
 395          void SetCheDao()
 396          {
 397   1      //输入:MenuID,返回:无
 398   1      //显示当前
 399   1              unsigned char xdata kv,lie,hang;
 400   1              unsigned int xdata t,t1,t2,t3;
 401   1              LcdInit();
 402   1              if((MenuID&0x000f)==0x0001)
 403   1                      t1=ADDR_GENARAL_SCH;
 404   1              else if((MenuID&0x000f)==0x0002)
 405   1                      t1=ADDR_HOLIDAY_SCH;
 406   1              else
 407   1                      return;
 408   1              t=MenuID&0x00f0;
 409   1              t>>=4;
 410   1              t-=1;
 411   1              t1=t1+t*PHASE_GROUP_LEN;
 412   1              
 413   1              t=MenuID&0x0f00;
C51 COMPILER V7.50   MENU                                                                  04/03/2007 10:38:50 PAGE 8   

 414   1              t>>=8;
 415   1              t-=1;
 416   1              t=t1+t*PHASE_LEN;//t指向当前相位
 417   1              
 418   1              AppBuf[2]=EPR_Read(t1+0);
 419   1              AppBuf[1]=EPR_Read(t1+1);
 420   1              AppBuf[0]=EPR_Read(t1+2);
 421   1              
 422   1              //调换一下
 423   1              lie=0;
 424   1              hang=0;
 425   1      //输入
 426   1              kv=KEY_NOTKEY;//不是任何的按键,仅为了处理方便
 427   1              while(1)
 428   1              {
 429   2                      while(kv==KEY_NOKEY)
 430   2                      {
 431   3                              kv=GetKey();
 432   3                              if(SecondFlag)
 433   3                              {
 434   4                                      SecondCheck();//不允许以防止输出错误参数
 435   4                                      AutoLockCnt--;
 436   4                                      SecondFlag=0;
 437   4                                      if(AutoLockCnt<SYS_AUTO_LOCK_TIME)
 438   4                                      {
 439   5                                              DeskTopFlag=1;
 440   5                                              PswLock=1;
 441   5                                              return;
 442   5                                      }
 443   4                              }
 444   3                      }
 445   2                      AutoLockCnt=SYS_LCD_OFF_TIME;
 446   2                      switch(kv)
 447   2                      {
 448   3                              case KEY_UP:
 449   3                                      if(hang)
 450   3                                              hang-=1;
 451   3                                      break;
 452   3                              case KEY_DOWN:
 453   3                                      if(hang<3)
 454   3                                              hang++;
 455   3                                      break;
 456   3                              case KEY_LEFT:
 457   3                                      if(lie)
 458   3                                              lie--;
 459   3                                      break;
 460   3                              case KEY_RIGHT:
 461   3                                      if(lie<4)
 462   3                                              lie++;
 463   3                                      break;
 464   3                              case KEY_NUM5://5健也控制
 465   3                              case KEY_LOGIC:
 466   3                                      t1=hang*5+lie;
 467   3                                      if(t1<8)
 468   3                                      {//
 469   4                                              t3=0x01;
 470   4                                              for(t1=0;t1<t2;t1++)
 471   4                                                      t3<<=1; 
 472   4                                              AppBuf[0]^=t3;                                          
 473   4                                      }
 474   3                                      else if(t1<16)
 475   3                                      {
C51 COMPILER V7.50   MENU                                                                  04/03/2007 10:38:50 PAGE 9   

 476   4                                              t3=0x01;
 477   4                                              for(t1=8;t1<t2;t1++)
 478   4                                                      t3<<=1; 
 479   4                                              AppBuf[1]^=t3;
 480   4                                      }
 481   3                                      else if(t1<20)
 482   3                                      {
 483   4                                              t3=0x01;
 484   4                                              for(t1=16;t1<t2;t1++)
 485   4                                                      t3<<=1; 
 486   4                                              AppBuf[2]^=t3;
 487   4                                      }
 488   3                                      break;
 489   3                              case KEY_ENTER:
 490   3                                      EPR_Page_0();//Page1为正常,Page0为缓冲
 491   3                                      EPR_Write(t+0,AppBuf[2]);
 492   3                                      EPR_Write(t+1,AppBuf[1]);
 493   3                                      EPR_Write(t+2,AppBuf[0]);
 494   3                                      EPR_Page_1();
 495   3                                      //LcdCurOff();
 496   3                                      return;
 497   3                              case KEY_MENU:
 498   3                                      DeskTopFlag=1;
 499   3                                      MenuID=0x0000;
 500   3                                      //这里不能加break
 501   3                              case KEY_CANCEL:
 502   3                                      //LcdCurOff();//OnCancel()中会关闭光标
 503   3                                      return;
 504   3                              default:
 505   3                                      ;
 506   3                      }
 507   2                      if(kv!=KEY_NOTKEY)//不是第一次
 508   2                              LcdCur(hang,lie);
 509   2                      //显示
 510   2                      LcdCnString(0,0,"东");LcdCnString(1,0,"北");
 511   2                      LcdCnString(2,0,"西");LcdCnString(3,0,"南");
 512   2                      t2=0;t3=2;
 513   2                      for(t1=0x01;t1<=0x80;t1=t1<<1)
 514   2                      {//0
 515   3                              LcdChar(t2,t3,CHOOSE_H);
 516   3                              if(AppBuf[0] & t1)//选中
 517   3                                      LcdAddChar(NOTCHOSEN_L);
 518   3                              else
 519   3                                      LcdAddChar(CHOSEN_L);
 520   3                              t3++;
 521   3                              if(t3==7))
 522   3                              {
 523   4                                      t2+=1;
 524   4                                      t3=2;
 525   4                              }
 526   3                      }
 527   2                      for(t1=0x01;t1<=0x80;t1=t1<<1)
 528   2                      {//1
 529   3                              LcdChar(t2,t3,CHOOSE_H);
 530   3                              if(AppBuf[1] & t1)//选中
 531   3                                      LcdAddChar(NOTCHOSEN_L);
 532   3                              else
 533   3                                      LcdAddChar(CHOSEN_L);
 534   3                              t3++;
 535   3                              if(t3==7))
 536   3                              {
 537   4                                      t2+=1;
C51 COMPILER V7.50   MENU                                                                  04/03/2007 10:38:50 PAGE 10  

 538   4                                      t3=2;
 539   4                              }
 540   3                      }
 541   2                      for(t1=0x01;t1<=0x08;t1=t1<<1)
 542   2                      {//2
 543   3                              LcdChar(t2,t3,CHOOSE_H);
 544   3                              if(AppBuf[2] & t1)//选中
 545   3                                      LcdAddChar(NOTCHOSEN_L);
 546   3                              else
 547   3                                      LcdAddChar(CHOSEN_L);
 548   3                              t3++;
 549   3                              if(t3==7))
 550   3                              {
 551   4                                      t2+=1;
 552   4                                      t3=2;
 553   4                              }
 554   3                      }
 555   2                      kv=KEY_NOKEY;
 556   2              }
 557   1      }

⌨️ 快捷键说明

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