想按下按鍵1時io口翻轉,但功能實現不了
#include <ny8.h>
#include "ny8_constant.h"
#include "main.h"
//--------------- Global Definition ----------------------------------------
//--------------------------------------------------------------------------
unsigned char key_num;
void delay(int);
void DriverInit();
void key_tick();
unsigned char key_getnum();
unsigned char key_getstate();
//--------------------------------------------------------------------------
void main(void)
{
DriverInit();
key_num = key_getnum();
while(1)
{
if(key_num == 1)
{
PB0 = !PB0;
PB1 = !PB1;
PB2 = !PB2;
PB3 = !PB3;
}
}
}
void DriverInit()
{
DISI();
//;Initial GPIO
IOSTA = C_PA0_Input | C_PA1_Input;
PORTA = 0xFF;
APHCON = 0b11111100;
IOSTB = C_PB_Output;
PORTB = 0x00;
//;Initial Timer0
PCON1 = C_TMR0_Dis; // Disable Timer0
TMR0 = 0x7C; // 初始值125
T0MD = C_PS0_TMR0 | C_PS0_Div32 ;
INTE = C_INT_TMR0;
T0IF = 0;//中斷標志位
//;Enable Timer0 & Global interrupt bit
PCON1 = C_TMR0_En; // Enable Timer0
ENI(); // Enable all unmasked interrupts
}
unsigned char key_getnum()
{
uchar temp;
if(key_num)
{
temp = key_num;
key_num= 0;
return temp;
}
return 0;
}
unsigned char key_getstate()
{
if(KEY1 == 0)
{
return 1;
}
if(KEY2 == 0)
{
return 2;
}
return 0;
}
void key_tick()
{
static uchar count;
static uchar now,last;
count++;
if(count % 5 ==0)
{
last = now;
now = key_getstate();
if(last == 0 && now != 0)
{
key_num = now;
}
}
}
//--------------------------------------------------------------------------
void isr(void) __interrupt(0)
{
if(INTFbits.T0IF)
{
key_tick();
INTF= (unsigned char)~(C_INT_TMR0); // Clear T0IF flag bit
}
}
//--------------------------------------------------------------------------
void delay(int count)
{
int i;
for(i=1;i<=count;i++)
;
} |