单片机,九齐单片机,NY8A051D

51单片机,九齐单片机>NY8A051D。
在此代码内,如何使用(F_KeySacnPro)内代码编译出一个按键控制LED按一下常亮,再按一下熄灭。

请大“神”评论解答谢谢。

#include 
#include "ny8_constant.h"
#define UPDATE_REG(x)  __asm__("MOVR _" #x ",F")
#define u8      unsigned char
#define TimerSum        171
u8 R_KeyCount;
u8 R_WorkMode;
void F_KeySacnPro(void);

typedef union  
{
    unsigned char byte;
    struct 
    {
        u8 bit0 : 1;
        u8 bit1 : 1;
        u8 bit2 : 1;
        u8 bit3 : 1;
        u8 bit4 : 1;
        u8 bit5 : 1;
        u8 bit6 : 1;
        u8 bit7 : 1;
    } bits;
}Flag;

volatile Flag Flag1;
#define B_100Us         Flag1.bits.bit0
#define B_10MS         Flag1.bits.bit1
#define B_1MS         Flag1.bits.bit2
#define B_1S         Flag1.bits.bit3
#define B_KeyFlag         Flag1.bits.bit4
#define B_Power         Flag1.bits.bit5
#define B_OnceKeyFlag         Flag1.bits.bit6
#define B_LongKeyFlag         Flag1.bits.bit7
#define KEY_ONOFF   PORTBbits.PB5

void F_KeySacnPro(void)
{
    if ( !KEY_ONOFF )
    {
        R_KeyCount++;
        if ( R_KeyCount >= 5 )
        {
            if ( !B_KeyFlag )
            {
                B_KeyFlag = 1;
                if ( !B_Power )
                {
                    B_Power = 1;
                    if ( R_WorkMode == 0 )
                    {
                        R_WorkMode = 1;
                    }
                }
            }
            else if ( R_KeyCount >= 100)
            {
                if ( !B_LongKeyFlag )
                {
                    B_LongKeyFlag = 1;
                    if ( B_Power )
                    {
                        B_Power = 0;
                    }
                }
            }
        }
    }
    else
    {
        if ( !B_OnceKeyFlag && B_KeyFlag && !B_LongKeyFlag )
        {
            R_WorkMode++;
            if ( R_WorkMode >=7 )
            {
                R_WorkMode = 0;
                B_Power = 0;
            }
        }
        R_KeyCount = 0;
        B_KeyFlag = 0;
        B_LongKeyFlag = 0;        
    }
}


void main(void)
{
}