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

📄 lzkfunc.lst

📁 基于MST-G240128点阵液晶的 状态机机制 人机界面四级滚屏菜单 源代码 ,带时间片机制模拟操作系统
💻 LST
📖 第 1 页 / 共 5 页
字号:
 577          
 578                /*****************************************************************
 579                *** 失步检测
 580                *****************************************************************/
 581                /*
 582                #define IFCO_LowLevlTimMAX  5           // 2秒内允许IFCO最多出现低电平次数为5次
 583          
 584                uint8  xdata IFCO_LowLevlTimCNT = 0;    // IFCO出现低电平次数 
 585                uint16 xdata IFCO_2SecTimCNT = 0;       // 3200 * 0.625uS = 2S
 586                uint16 xdata IFCO_07SecTimCNT = 0;      // 1120 * 0.625uS = 0.7S
 587          
 588                IFCO_LastVal
 589                IFCO_CurrVal
 590                          IFCO_2SecTimCntEN          // 
 591                          IFCO_07SecTimCntEN         // 
 592                          IFCO_OutOfSyncEVT          // 
 593                          IFCO_FallEdgeEVT           // 单次检测的首个IFCO下降沿“1”to“0”
 594                */
 595                          if( OutOfSyncMoniEN == 1 )              // 失步检测功能是否使能
 596                          {
 597                        IFCO_LowLevlTimCNT++;                // Increase 1 Every 625uS.
 598          
 599                   IFCO_LastVal = IFCO_CurrVal;         // IFCO为过零比较.   
 600                   IFCO_CurrVal = ~IFCO;                // 比较器倒相!!!硬件设计错误.   
 601                   if( IFCO_CurrVal != IFCO_LastVal )  
 602                        {
 603                      if( IFCO_CurrVal == 0 )           // IFCO下降沿.
 604                                          {
 605                         if( IFCO_FallEdgeEVT == 0 )    //
 606                                                  {
 607                                 IFCO_2SecTimCntEN = 1;      // 在IFCO下降沿使能2秒计时器
C51 COMPILER V7.20   LZKFUNC                                                               09/04/2006 16:29:05 PAGE 11  

 608                                                     IFCO_FallEdgeEVT = 1;       // 置位IFCO下降沿事件标记
 609                            IFCO_LowLevlTimCNT = 1;     // IFCO下降沿计数加“1”
 610                                                  }
 611                         else
 612                                                  {
 613                            IFCO_LowLevlTimCNT++;
 614                                                          if( IFCO_LowLevlTimCNT >= IFCO_LowLevlTimMAX )
 615                                                          {
 616                                         IFCO_LowLevlTimCNT = 0; // 2秒内IFCO没有出现5个过“零”点波形.  
 617                                         IFCO_2SecTimCntEN = 0;  // 本次2秒超时计时任务结束.
 618                               IFCO_07SecTimCNT = 0;   // 复位0.7秒IFCO“负”波形检测计时
 619                               IFCO_07SecTimCntEN = 0; // 本次0.7秒IFCO“负”波形检测计时任务结束.
 620                                                             IFCO_FallEdgeEVT = 0;   // 复位首个IFCO下降沿标记 
 621          
 622                               IFCO_OutOfSyncEVT = 1;  // IFCO在2秒内出现5个“负”波形.  
 623                                                          }
 624                                                  }
 625                         IFCO_07SecTimCntEN = 1; // 在IFCO下降沿使能0.7秒计时器
 626          
 627                                          }
 628                                     else                       // IFCO上升沿复位0.7秒IFCO“负”波形检测计时.
 629                                     {
 630                         IFCO_07SecTimCNT = 0;   // 复位0.7秒IFCO“负”波形检测计时
 631                         IFCO_07SecTimCntEN = 0; // 本次0.7秒IFCO“负”波形检测计时任务结束.
 632                                     }
 633                     }           
 634          
 635                                  if( IFCO_2SecTimCntEN )           // 2秒计时超时计时
 636                             {
 637                      IFCO_2SecTimCNT++;
 638                                if( IFCO_2SecTimCNT >= 3200 )  // 2秒计时超时;3200 * 0.625uS = 2S
 639                                     {
 640                         IFCO_07SecTimCNT = 0;       //
 641                         IFCO_07SecTimCntEN = 0;     // 本次0.7秒超时计时任务结束.
 642                                             IFCO_FallEdgeEVT = 0;       // 复位首个IFCO下降沿标记 
 643                         IFCO_LowLevlTimCNT = 0;     // 复位IFCO过“零”点计数器.  
 644                         IFCO_2SecTimCntEN = 0;      // 本次2秒计时任务结束.
 645                                     }
 646                             }    
 647                                  if( IFCO_07SecTimCntEN )          // 0.7秒计时超时计时
 648                             {
 649                      IFCO_07SecTimCNT++;
 650                                if( IFCO_07SecTimCNT >= 1120 ) // 0.7秒计时超时;1120 * 0.625uS = 0.7S
 651                                     {
 652                         IFCO_07SecTimCNT = 0;       //
 653                         IFCO_07SecTimCntEN = 0;     // 本次0.7秒超时计时任务结束.
 654                         IFCO_OutOfSyncEVT = 1;      // IFCO出现超过0.7秒的“负”波形.  
 655                                     }
 656                             }    
 657                          } // End of 失步检测功能.
 658             }
 659          
 660          
 661             /*****************************************************************
 662             *** TIMER 0 SLOT 1 
 663             *** (1)ModBUS(串口0)通讯数据收发;
 664             *** (2)功率因数电流环测量;
 665             *****************************************************************/
 666             if( TimSlotCNT == 1 )    // ModBUS(串口0)通讯数据收发.
 667             {
 668                SFRPAGE = UART0_PAGE;
 669                if( TI0 )                                  // TX Over. 
C51 COMPILER V7.20   LZKFUNC                                                               09/04/2006 16:29:05 PAGE 12  

 670                     {
 671                       TI0 = 0;                                // Clear the UART0 Interrupt Flag.
 672                   if( UART0_TX_CNT < UART0_TX_NUM )       // Current Frame Send OVER ?
 673                       {
 674                          SBUF0 = *( TxDATA + UART0_TX_CNT );
 675                      UART0_TX_CNT++;
 676                   }
 677                           else
 678                           {
 679                              RS485_FramIntvlCNT++;
 680                                  if( RS485_FramIntvlCNT >= 10 )
 681                                    RS485_FramIntvlCNT = 10; 
 682                           }
 683                }   
 684                    if( RI0 )
 685                    {
 686                       
 687                    }
 688          
 689             /*****************************************************************
 690             *** (1)键盘扫描;
 691                  *** (2)CanBUS数据收发;
 692             *****************************************************************/
 693             if( TimSlotCNT == 2 )    
 694             {     
 695                /*****************************************************************
 696                ***  键盘扫描程序,记录键的按下、释放和按下的时间长度.
 697                *****************************************************************/
 698                KeyScanIntvlCNT++;
 699                if( KeyScanIntvlCNT >= KeyScanPeriod )       // Key Scan Interval: 0.625 * 20 = 12.5mS.
 700                {  
 701                   /***KEY0******************************************************/
 702                   if( KEY0 == 0 )                           // Begin of Menu Key.   
 703                   {                                         // KEY0: Menu Key.
 704                      MenuKeyPresCNT++; 
 705                           if( MenuKeyPresCNT >= KeyPresEvtTime ) // 20 times Key Press, 250mS.
 706                                     {               
 707                         if( MenuKeyPresEVT == 0 )
 708                         {
 709                                                MenuKeyPresCNT = MenuKeyPresCNT - KeyPresEvtTime;   
 710                            MenuKeyPresEVT = 1;        
 711                         }
 712                                }
 713                   }
 714                   else
 715                             {
 716                           if( MenuKeyPresCNT >= KeyPresEvtTime ) // 20 times Key Press, 250mS.
 717                        MenuKeyPresEVT = 1;  
 718                           if( MenuKeyPresCNT >= KeyRelsEvtTime ) // 2  times Key Press, 25mS.   
 719                                       MenuKeyRelsEVT = 1;                   
 720          
 721                      MenuKeyPresCNT = 0;                    // . 
 722                             }  /* End of Menu Key */
 723          
 724                   /***KEY1******************************************************/
 725                   if( KEY1 == 0 )                           // Begin of Up Key.   
 726                   {                                         // KEY1: Up Key.
 727                      UpKeyPresCNT++; 
 728                           if( UpKeyPresCNT >= KeyPresEvtTime )   // 20 times Key Press, 250mS.
 729                                     {               
 730                         if( UpKeyPresEVT == 0 )
 731                         {
C51 COMPILER V7.20   LZKFUNC                                                               09/04/2006 16:29:05 PAGE 13  

 732                                                UpKeyPresCNT = UpKeyPresCNT - KeyPresEvtTime;  
 733                            UpKeyPresEVT = 1;        
 734                         }
 735                                     }
 736                   }
 737                   else
 738                             {
 739                           if( UpKeyPresCNT >= KeyPresEvtTime )   // 20 times Key Press, 250mS.
 740                        UpKeyPresEVT = 1;            
 741                           if( UpKeyPresCNT >= KeyRelsEvtTime )  // 2  times Key Press, 25mS.   
 742                                       UpKeyRelsEVT = 1;                   
 743          
 744                      UpKeyPresCNT = 0;                      // . 
 745                             }  /* End of Up Key */
 746          
 747                   /***KEY2******************************************************/
 748                   if( KEY2 == 0 )                       // Begin of Down Key.   
 749                   {                                     // KEY2: Down Key.
 750                      DownKeyPresCNT++; 
 751                           if( DownKeyPresCNT >= KeyPresEvtTime ) // 20 times Key Press, 250mS.
 752                                     {               
 753                         if( DownKeyPresEVT == 0 )
 754                         {
 755                            DownKeyPresCNT = DownKeyPresCNT - KeyPresEvtTime;   
 756                            DownKeyPresEVT = 1;            
 757                         }
 758                                     }
 759                   }
 760                   else
 761                             {
 762                           if( DownKeyPresCNT >= KeyPresEvtTime )  // 20 times Key Press, 250mS.
 763                        DownKeyPresEVT = 1;            
 764                           if( DownKeyPresCNT >= KeyRelsEvtTime )  // 2  times Key Press, 25mS.   
 765                                       DownKeyRelsEVT = 1;                   
 766          
 767                      DownKeyPresCNT = 0;                     // . 
 768                             }  /* End of Down Key */
 769          
 770                   /***KEY3******************************************************/
 771                   if( KEY3 == 0 )                       // Begin of Enter Key.   
 772                   {                                     // KEY3: Enter Key.
 773                      EnterKeyPresCNT++; 

⌨️ 快捷键说明

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