在 pic16f877a 中,我正在尝试使用单个按钮制作用于软件去抖动的代码,但是每当我单击该按钮时,它就会继续并且永远不会再次关闭,这是代码:
#include "config.h"
unsigned int ledToggle(void);
void main(){
TRISCbits.TRISC0 = 1;
TRISDbits.TRISD0 = 0;
PORTDbits.RD0 = 0;
while(1){
if(PORTCbits.RC0 == 1){
if(ledToggle()%2 == 0){
PORTDbits.RD0 = 1;
}else{
PORTDbits.RD0 = 0;
}
}
}
}
unsigned int ledToggle(){
static int i = 2;
i++;
return i;
}
编辑
我还制作了这个有问题的新代码,它有时工作有时不在这里:
#include "config.h"
static char flag = 0;
static int counter = 0;
unsigned int ledToggle(void);
void main(){
TRISCbits.TRISC0 = 1;
TRISDbits.TRISD0 = 0;
PORTDbits.RD0 = 0;
while(1){
if(ledToggle()%2 == 0){
PORTDbits.RD0 = 1;
}else{
PORTDbits.RD0 = 0;
}
}
}
unsigned int ledToggle(){
if(PORTCbits.RC0 == 1 && flag == 0){
counter++;
flag = 1;
}else{
counter += 0;
flag = 0;
}
if(PORTCbits.RC0 == 0){
flag = 0;
}
return counter;
}
顺便说一句,我忘了提到 config.h 是我为配置位和晶体频率(_XTAL_FREQUENCY)而制作的头文件