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)
{
}